Где я могу найти данные о местоположении города / населенного пункта для поиска по местоположению? - PullRequest
4 голосов
/ 02 марта 2012

Мне нужно реализовать функцию поиска записей с функцией х миль города, поэтому у меня есть окно города с приложенным автозаполнением.В настоящее время я использую API геокодирования Google, чтобы получить данные для автоматически полученных результатов, но мы, очевидно, не можем настроить или изменить эти данные, и это не всегда дает разумные предложения (даже с подсказкой страны).Есть ли другие источники данных о городе / городе?Я пытался проверить, был ли, возможно, доступен экспорт из OpenStreetMap или чего-то еще, но я могу найти только фрагменты карты или данные векторной карты, а не данные POI для названий городов и населенных пунктов.

Любые предложения приветствуются.Спасибо.

Ответы [ 3 ]

5 голосов
/ 12 марта 2012

Geonames.org имеет загружаемый список городов и даже почтовые индексы для многих стран мира вместе с соответствующими точками широты и долготы.Он находится под лицензией Creative Commons Attribution 3.0, что означает, что вы можете использовать его в коммерческих целях, но среди прочего вы должны дать атрибуцию.

Хотя наличие загружаемого списка может означать больше работы с вашей стороны с точки зрения реализацииВсе аспекты алгоритма поиска, серебристая подкладка, заключаются в том, что вы не привязываете себя к работоспособности / доступности стороннего веб-сервиса.

Единственная другая часть, которая отсутствует, - это расчет расстоянияформула.Вы можете использовать формулу расстояния большего круга для вычисления расстояния.

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

Вероятно, я должен упомянуть, что я основатель SmartyStreets .Мы проводим проверку адреса по улице и не только можем сказать вам, является ли адрес хорошим или нет (что помогает во многих отношениях), но мы также можем дать вам координаты широты / долготы для данного адреса улицы, которые могутзатем подключитесь к вышеуказанному решению, чтобы определить близость к ближайшим местам.

2 голосов
/ 15 марта 2012

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

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

Перед первым запросом к API геокодирования Google, чтобы получить данные для автоматически полученных результатов, сначала определите страну, в которой находится город. Затем вы можете использовать строку страны в качестве суффикса для запроса геокодирования.

Что-то вроде:

  var country = 'UK'; // from initial query, reverse geocode, etc.
  geocoder.geocode({
          'address': address + ', ' + country
       }, 

См. Ответ в этом вопросе для примера. Геокодер Google возвращает неверную страну, игнорируя подсказку региона

Во-вторых, предпосылка о том, что вы «явно не можете настроить или изменить эти данные», ошибочна. Вы можете, конечно, отфильтровать результаты по стране. Что-то вроде следующего фрагмента показывает, как детализировать результаты.

   geocoder.geocode({
      'address': address
   }, 
   function(results, status) {
      if(status == google.maps.GeocoderStatus.OK) {
         for(var i = 0, l = results.length; i < l; i++)  {
          for (var j = 0, l2 = results[i].address_components.length; j < l2; j++) {
              for (var k = 0, l3 = results[i].address_components[j].types.length; k < l3; k++) {
                 if(results[i].address_components[j].types[k]=="country") {
                    var country = results[i].address_components[j].long_name;
                    // do stuff based on the country
                    // add the result to your auto-suggest, etc...
                 }
              }
         }
      }
    });
   }

Наконец, если вы внедрили обертку CGI для геокодирования, вы можете кэшировать результаты. Таким образом, ваше приложение автоматически создаст для вас базу данных. Это избавило бы от необходимости фактически выполнять геокодирование для известных результатов. Я думаю, что это почти то, на что вы намекаете в своем вопросе, и нет никаких причин, по которым вы не могли бы предварительно заполнить свой кэш известными результатами, если вы нашли надежный источник данных.

Взгляните на этот документ, в котором изложены различные стратегии геокодирования с использованием Maps Api - в нем обсуждаются такие вещи, как кеширование и т. Д. https://developers.google.com/maps/articles/geocodestrat

EDIT

Вы можете использовать что-то вроде geoPlugin

http://www.geoplugin.com/webservices/php#php_class

Посмотрите на близлежащие объекты, это именно то, что вы хотите.

http://www.geoplugin.com/webservices/extras

0 голосов
/ 19 марта 2012

Проверьте http://geohash.org/, этот сайт работает со многими API, которые вы можете использовать.Смотрите также статью об истории этого сайта

...