Преобразование широты / долготы в название города? (обратная геолокация)

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

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

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

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

Solutions Collecting From Web of "Преобразование широты / долготы в название города? (обратная геолокация)"

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

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

географические названия

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

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

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=%5B30.2,50.4,30.6,50.8%5D&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

Map Quest API

Использование номинальной услуги 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=%5Byourappidhere%5D

API Карт Google

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

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

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

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

EDIT: если вы это сделаете, по крайней мере, он должен быть возвращен в стандартной форме, после чего вы сможете легко повторно вывести данные, из которых вы хотите.

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

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

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

http://askgeo.com

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

http://askgeo.com/database/UsPlace2010

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

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

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

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

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

Для геолокации 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>