Преобразование широты / долготы в название города?(обратная геолокация) - PullRequest
14 голосов
/ 03 августа 2010

Я работаю на доске объявлений в Codeigniter PHP + jQuery, где работодатели вводят свое местоположение, и мы используем API Карт Google для его построения. Хотя это дало потрясающие результаты в плане удобства использования, проблема заключается в том, что когда мы пытаемся показать эти места лицам, ищущим работу, они запутаны и плохо различимы (они читают так: «02905, 2 мили отсюда», «171 John St., 4 миль "," Провиденс, RI, 10 миль ".

Я хочу иметь возможность повернуть геолокацию с долготы / широты на заданный уровень (в идеале, название города), чтобы в результатах поиска можно было указывать местоположения следующим образом: «Провиденс, Р.И., на расстоянии 10 миль "," Провиденс, Р.И., 5 миль "," Крэнстон, Р.И., 16 миль ".

Есть ли способ изменить геокод в город? Я вижу много примеров способов обратного геокодирования до ближайшего адресуемого местоположения, но нет способа контролировать уровень.

Надеюсь, это понятно! Не стесняйтесь комментировать любые вопросы, которые вам нужны, чтобы уточнить.

Ответы [ 6 ]

37 голосов
/ 06 апреля 2011

БЕСПЛАТНЫЕ ИСТОЧНИКИ (например, Creative Commons)

Geonames

Если вы ищете бесплатные (в качестве свободы) источники, вы можетеиспользуйте Geonames API findNearbyPlaceName.

Например, следующие значения возвращают ближайшее название:

http://api.geonames.org/findNearbyPlaceName?lat=47.3&lng=9&username=demo

Более подробная информация доступна здесь

http://www.geonames.org/export/web-services.html#findNearbyPlaceName

Freebase

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

http://api.freebase.com/api/service/geosearch?location=[30.2,50.4,30.6,50.8]&location_type=/location/citytown&inside=true&indent=1

Geocoder.ca

Обратное геокодирование для адресов Северной Америки.

Информация: http://geocoder.ca/

Пример звонка: http://geocoder.ca/?latt=40.70771000786733&longt=-74.0109443664550&reverse=1&allna=1&geoit=xml&corner=1&jsonp=1&callback=test

API Map Quest

Использование службы номинальных карт Open Street Map:

http://open.mapquestapi.com/nominatim/v1/search?q=50.4,30.4&format=json

НЕ БЕСПЛАТНЫЕ ИСТОЧНИКИ

Yahoo PlaceFinder

Документация http://developer.yahoo.com/geo/placefinder/

Пример вызова:

http://where.yahooapis.com/geocode?q=38.898717,+-77.035974&gflags=R&appid=[yourappidhere]

API Карт Google

Документация:

http://code.google.com/apis/maps/documentation/geocoding/#ReverseGeocoding

12 голосов
/ 03 августа 2010

Геокодер Google, поддерживающий обратное геокодирование , возвращает address_components . Вам просто нужно извлечь компонент адреса, помеченный locality и political, если вы просто хотите название города. Если вы хотите, чтобы состояния также были помечены administrative_area_level_1

2 голосов
/ 03 августа 2010

Разве вы не можете просто сделать полный адрес, а затем сбросить улицу и номер?

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

РЕДАКТИРОВАТЬ: Если вы делаете это таким образом, по крайней мере, он должен быть возвращен в стандартной форме, которую вы затем можете легко вывести из данных.

0 голосов
/ 08 апреля 2016

Html5 геолокации требует разрешения пользователя. Если вам не нужно это поведение, вы можете обратиться к внешнему провайдеру, например https://geoip -db.com . Они предлагают бесплатный сервис геолокации на основе ip-адресов.

Попробуйте этот пример:

<!DOCTYPE html> 
<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no"/> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Geo City Locator</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
</head> 
<body > 
    <div>Country: <span id="country"></span></div>
    <div>State: <span id="state"></spa></div>
    <div>City: <span id="city"></span></div>
    <div>Latitude: <span id="latitude"></span></div>
    <div>Longitude: <span id="longitude"></span></div>
    <div>IP: <span id="ip"></span></div>    
    <script>
      $.getJSON('https://geoip-db.com/json/geoip.php?jsonp=?') 
         .done (function(location) {
            $('#country').html(location.country_name);
            $('#state').html(location.state);
            $('#city').html(location.city);
            $('#latitude').html(location.latitude);
            $('#longitude').html(location.longitude);
            $('#ip').html(location.IPv4);               
         });
    </script>
</body> 
</html> 
0 голосов
/ 11 июня 2015

Я искал API для конвертации широты / долготы в город.Похоже, что это был первоначальный вопрос в этой теме.

Я видел данные "http://download.geonames.org/export/dump/", переданные в другой поток stackoverflow Учитывая координаты широты / долготы, как мы можем узнатьгород / страна? , и реализовал мой собственный веб-сервис.

Вы можете видеть, что он работает по адресу http://scatter -otl.rhcloud.com / location? lat = 36 & long = -78.9 Просто измените широту и долготу для вашего местоположения.

Он развернут в OpenShift (платформа RedHat). Первый вызов после длительного простоя может занять некоторое время, но обычно производительность удовлетворительная. Не стесняйтесь использовать этосервис, как вам нравится ...

Кроме того, вы можете найти источник проекта на https://github.com/turgos/Location.

0 голосов
/ 08 мая 2012

Сервисы обратного геокодирования (такие как Google, Yahoo и GeoNames) будут хорошо работать для этой цели с несколькими оговорками:

  • Хотя я не могу точно сказать, как работают коммерческие сервисы, в прошлый раз, когда я проверял, GeoNames использует стратегию ближайшего интереса для определения города. Это может быть проблемой, если точка запроса находится рядом с границей между двумя городами, а ближайшая запись в базе данных GeoNames находится на другой стороне этой границы. По моему опыту, это происходит довольно часто, так что это не просто техническая часть.
  • Кроме того, если вас беспокоит взаимодействие с пользователем, любое веб-API-решение увеличивает задержку и снижает надежность.

Я управляю веб-сайтом, который предлагает ряд коммерческих географических веб-API, и продает библиотеки Java, которые мы создали для поддержки этих API. Один из них (который имеет покрытие только в США) использует правильную многоугольную карту городов и населенных пунктов в США, чтобы вернуть результат, содержащий вашу точку запроса. Он точный и быстрый, поэтому, если это критически важный компонент вашей системы, я советую взглянуть на наш веб-сайт:

http://askgeo.com

Страница, которая предназначена для поиска городов по широте / долготе:

http://askgeo.com/database/UsPlace2010

...