LINUX.ORG.RU
решено ФорумTalks

Перевести 12 тысяч адресов в координаты.

 , ,


1

2

Приветствую всех.

Стоит нетривиальная задача получить координаты 12 тысяч адресов по РФ.

Кто-нибудь может подсказать сервис или api, который отдаст мне нужное?

Знаю про yandex api.. сейчас вот изучаю на вопрос - можно ли запросить все 12000 и к ним тут же получить широту и долготу.

Желательно в формате, отличным от «мышкой клац-клац, педалькой паст-паст».

Спасибо.

★★★

Последнее исправление: fjfalcon (всего исправлений: 1)

Ответ на: комментарий от ii343hbka

тот же яндекс не против 25000 запросов в сутки.

Так что израсходую всего 50% ресурса ;)

fjfalcon ★★★
() автор топика

У 2gis есть api, в котором можно что-то такое сделать. Но это если оно поймёт твои адреса.

Olegymous ★★★
()

http://bit.ly/1kbPL4b

очевидно, что сгрузить базу себе на комп (и поставить nominatim) и запрашивать хоть по мульену труда не состваит

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от fjfalcon

А проблема-то в чём? Ну делай http://maps.googleapis.com/maps/api/geocode/json?address=Москва Ленинградское... плюс фильтрация components по городу и чего там ещё у тебя есть.

Если всё только в рамках Москвы или крупных городов, то будет более-менее нормально. Правда, какой-то скрипт для проверки результатов будет нужен — местами будут получаться совсем левые адреса.

aidan ★★★★
()

В любом API у тебя будет серьезное ограничение количества запросов

Могу тыкая пальцем в небо посоветовать поставить себе какой-то OpenStreetMap локально, загрузить туда OSM нужных регионов и потом делать к нему REST Query

Другой вариант - самому ковырять OSM

vertexua ★★★★★
()
Ответ на: комментарий от fjfalcon

2500 запросов в день =(

Разве? Вроде 25к в сутки и 100к при регистрации кредитки на аккаунт. Хотя, может это лимиты при использовании ключа из личного кабинета.

aidan ★★★★
()
Ответ на: комментарий от aidan

И я о том же. Ну да не суть. Попробуем сперва у яндекса все вытащить - не смогу - полезу по остальным.

fjfalcon ★★★
() автор топика
Ответ на: комментарий от userid2

все прозаичнее - обычное сравнение координат, где человек стоит и какая разница с тем, где он должен стоять.

Как то так ;)

fjfalcon ★★★
() автор топика
Ответ на: комментарий от fish_ka

зачем, когда столько андройдов вокруг ;)

fjfalcon ★★★
() автор топика

делал подобное через гугловый апи, писал на пхп.

abyz
()

Собственно как дело было:

Из системы выгрузил список адресов в формате ID точки, адрес.

Создал БД:

create table pos ( 
`id` INT NOT NULL, 
`address` VARCHAR(512) NOT NULL, 
`longitude` FLOAT NULL, 
`latitude` FLOAT NULL, 
PRIMARY KEY(`id`)
) 
ENGINE =InnoDB 
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;

Потом на php(потому что джаву слишком долго расчехлять, C++ тож не особо подходит,а акромя них лучше всего знаю php)

#!/usr/bin/php
<?php

        $mysqli=new mysqli('localhost','root','123','yandex');

        if(mysqli_connect_errno()){
        printf("Подключение к серверу MySQL невозможно. Код ошибки: %s\n",mysqli_connect_error());
        exit;
        }


        if($result=$mysqli->query('SELECT * from pos;')){

        while($row=$result->fetch_assoc()){
        $pos=askYandex($row["address"]);
        if(count($pos)>0)
        {
        $mysqli->query("update pos set longitude = ".$pos[0].", latitude = ".$pos[1]." where id = ".$row["id"].";");
        echo $row["id"];
        echo"\n";
        }
        }

    
        $result->close();
        }


        $mysqli->close();

        function askYandex($address)
        {
        $params=array(
        'geocode'=>$address, // адрес
        'format'=>'json',                          // формат ответа
        'results'=>1,                               // количество выводимых результатов
        );
        $response=json_decode(file_get_contents('http://geocode-maps.yandex.ru/1.x/?'.http_build_query($params,'','&')));
        if($response->response->GeoObjectCollection->metaDataProperty->GeocoderResponseMetaData->found>0)
        {
           $pos=explode(" ",$response->response->GeoObjectCollection->featureMember[0]->GeoObject->Point->pos);
            return $pos;
        }
        }


        ?>

Как не странно - абсолютно все адреса обрели свои координаты.

Всем спасибо за помощь. Особенно яндексу ;)

fjfalcon ★★★
() автор топика

Google GeoCoder.

https://developers.google.com/maps/documentation/geocoding/?hl=ru

https://code.google.com/p/geocoder-java/

Насчёт 12000 могут быть проблемы (например, ограниченнное число запросов в день). Если сроки не поджимают, и это нужно сделать один раз, можно разбить на порции и запросить по порции в день. Или по порции с разного IP-адреса.

BattleCoder ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.