Как превратить ближайшие города города (геонамеды) в питон? - PullRequest
3 голосов
/ 01 февраля 2012

Учитывая радиус 100 км от базового города (геонамед), мне нужно найти близлежащие города.

Мой скрипт на python. Есть ли API, чтобы узнать это?

Спасибо

Ответы [ 3 ]

10 голосов
/ 01 февраля 2012

Если у вас есть база данных городов, посмотрите на этот пример , который показывает, как создавать запросы SQL для этой конкретной задачи.

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

Так что, если у вас есть свой собственныйбаза данных или города, или вы готовы создать базу данных, в которой есть местоположения и координаты определенных городов (может быть доступно где-то в Интернете), тогда это решение будет работать для вас.

В качестве альтернативы, если у вас нетбазы данных, и вы хотите использовать API, такие как Google Maps, взгляните на Google Geacoding API и, в частности, обратное геокодирование.Запрос типа:

http://maps.googleapis.com/maps/api/geocode/json?latlng=40.7,-73.9&sensor=false

предоставит вам возможные адреса для предоставленной вами широты и широты.

К сожалению, Google Places API (близлежащие места) работает только для ресторанов, магазинов, баров и т.д ..

4 голосов
/ 01 февраля 2012

Поскольку вы используете веб-сервис Geonames, похоже, что в него встроена функциональность для поиска названий мест поблизости:

из: http://www.geonames.org/export/web-services.html

Поиск населенных пунктов поблизостиместо / обратное геокодирование

Тип веб-службы: REST URL: api.geonames.org/findNearbyPlaceName?Параметры: lat, lng, lang: язык возвращаемого элемента 'name' (код псевдоязыка 'local' вернет его на местном языке), radius: радиус в км (необязательно), maxRows: максимальное количество строк (по умолчанию 10)Стиль: SHORT, MEDIUM, LONG, FULL (по умолчанию = MEDIUM), многословность возвращаемого XML-документа. Результат: возвращает ближайшее заполненное место для запроса lat / lng в виде XML-документа.Единицей элемента расстояния является «км».Пример: http://api.geonames.org/findNearbyPlaceName?lat=47.3&lng=9&username=demo

Эта услуга также доступна в формате JSON: http://api.geonames.org/findNearbyPlaceNameJSON?lat=47.3&lng=9&username=demo

0 голосов
/ 01 февраля 2012

Боюсь, что ни API геокодирования, ни API Places не помогут вам так, как вы хотите.

Обратное геокодирование даст вам город для данного значения, но не те, которые находятся вокруг него.Места API даже не это.Эти API-интерфейсы предназначены для различных целей, но, думаю, вас это сейчас не интересует.

Если вы не найдете API, который выполняет то, что вы хотите, вам нужно будет создать собственную базу данных и выполнить запросы, такие какодин МММ указывает.Для создания базы данных вы можете использовать набор данных Населенные пункты из Векторов культуры Земли в естественном виде 1:10 .Вам понадобится какое-то программное обеспечение ГИС для его обработки и извлечения из тех населенных пунктов, которые вы бы назвали городами .

...