Berkutman
@Berkutman

Почему GeoCoder Yandex MAPS API не правильно обнаруживает координаты адреса по имени объекта?

Всем привет, использую GeoCoder для обнаружения координат по имени учебного заведения. Проблема заключается в том что, GeoCoder обнаруживает крайне не правильные координаты объекта на карте.

Пример имя учебной организации КГБ ПОУ СИЭК , нахожу координаты через geocoder получаю 47.141453 29.23.241

Если ввести в те же самые яндекс карты имя учебного заведения , то мы с легкостью его находим , а если введем координаты то получим вообще пустырь в молдовии. Да и координаты не перепутаны , если проверить наоборот то мы попадем уже к арабам

29.23.241 47.141453

Так же я пробовал указать Город+Имя учебного заведения, аналогично. Т.е пример

Спасск-Дальний КГБ ПОУ СИЭК

С чем это связано? Как лечить это? Код через который я запрашиваю прилагаю.

<?php
$mysqli = new mysqli("localhost", "USER", "PASSWORD", "NAMEDB");
if ($mysqli->connect_errno) {
    echo "Не удалось подключиться к MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

    // Выборка данных из таблицы
    $addresses = $mysqli->query("SELECT DISTINCT sid, name, value FROM webform_submission_data WHERE name = 'form_name_org'");

    // Общее количество адресов и количество адресов, в обработке которых произошла ошибка
    $countGeocode = $countGeocodeFault = 0;
    // Обработка адресов
    $result = '<table style="width:600px">';
	

    while ($row = $addresses->fetch_assoc()) {

        $countGeocode++;

        // Обращение к http-геокодеру

        $xml = simplexml_load_file('https://geocode-maps.yandex.ru/1.x/?apikey=API-KEY&geocode='.urlencode($row["value"]).'&results=1');
        // Если геокодировать удалось, то записываем в БД

        $found = $xml->GeoObjectCollection->metaDataProperty->GeocoderResponseMetaData->found;

        if ($found > 0) {

            $coords = explode(' ', $xml->GeoObjectCollection->featureMember->GeoObject->Point->pos);
			
            $result .= '<tr><td>'.$row['value'].'</td><td>'.$coords.'</td></tr>';

            $mysqli->query("UPDATE webform_submission_data SET lon = '".$mysqli->real_escape_string($coords[1])."', lat =  '".$mysqli->real_escape_string($coords[0])."' WHERE sid = {$row['sid']} AND name = 'form_name_org'");

        } 
		else {

            $result .= '<tr style="color:red"><td>'.$row['value'].'</td><td>ошибка</td></tr>';

            $countGeocodeFault++;

        }

    };

    $result .= '</table>';

    // Вывод результата

    echo $result;

    // Закрытие соеденинения с сервером

	mysqli_close($mysqli);

    // Вывод общего количество прогеокодированных результатов

    if ($countGeocode) {

        echo '<div style="margin-top:1em">Всего обработано адресов: '.$countGeocode.'</div>';

        if ($countGeocodeFault) {

            echo '<div style="color:red">Не удалось прогеокодировать: '.$countGeocodeFault.'</div>';

        }

    } else {

        echo '<div>Таблица с адресами пуста.</div>';

    }

?>

5e58111972b4b091330150.png
5e58111f207e1718700449.png
  • Вопрос задан
  • 808 просмотров
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
потому что
КГБ ПОУ СИЭК

это не адрес

а в картах еще один сервис, из такой фигни подставляющий уже реальные адреса
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы