Широта и долгота можете найти почтовый индекс? - PullRequest
12 голосов
/ 20 июля 2011

Я использую геокодер Google для широты и долготы, и мой вопрос: есть ли способ узнать почтовый индекс с широтой и долготой?

Ответы [ 5 ]

8 голосов
/ 30 июля 2013

Приятно отметить, что Google Maps имеет новую версию, так как это решение было представлено.

Ссылка: https://developers.google.com/maps/documentation/geocoding/?csw=1#ReverseGeocoding

Вот обновленный пример для Google Maps v3. Он использует компоненты адреса, которые JIssak упоминает выше. Я должен отметить, что здесь нет отступления. Если он не может найти почтовый индекс, он ничего не делает. Это может или не может быть важным для вашего сценария.

var latlng = new google.maps.LatLng(p.coords.latitude, p.coords.longitude);
geocoder = new google.maps.Geocoder();

    geocoder.geocode({'latLng': latlng}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            if (results[0]) {
                for (j = 0; j < results[0].address_components.length; j++) {
                    if (results[0].address_components[j].types[0] == 'postal_code')
                        alert("Zip Code: " + results[0].address_components[j].short_name);
                }
            }
        } else {
            alert("Geocoder failed due to: " + status);
        }
    });
8 голосов
/ 18 января 2013

[Удалено нерабочее решение для Google - см. Решение @ hblackorby.]

Вот версия, которая использует openstreetmap.org, намного проще, чем api-coffeescript от Google, а затем javascript:

getZip = (cb) ->
  # try to populate zip from geolocation/google geocode api
  if document.location.protocol == 'http:' && navigator.geolocation?
    navigator.geolocation.getCurrentPosition (pos) ->
      coords = pos.coords
      url = "http://nominatim.openstreetmap.org/reverse?format=json&lat=#{ coords.latitude }&lon=#{ coords.longitude }&addressdetails=1"
      $.ajax({
        url: url,
        dataType: 'jsonp',
        jsonp: 'json_callback',
        cache: true,
      }).success (data) ->
        cb(data.address.postcode)

Вот скомпилированный javascript:

getZip = function(cb) {
  if (document.location.protocol === 'http:' && (navigator.geolocation != null)) {
    return navigator.geolocation.getCurrentPosition(function(pos) {
      var coords, url;
      coords = pos.coords;
      url = "http://nominatim.openstreetmap.org/reverse?format=json&lat=" + coords.latitude + "&lon=" + coords.longitude + "&addressdetails=1";
      return $.ajax({
        url: url,
        dataType: 'jsonp',
        jsonp: 'json_callback',
        cache: true
      }).success(function(data) {
        return cb(data.address.postcode);
      });
    });
  }
};

Используйте это так:

getZip(function(zipcode){ console.log("zip code found:" + zipcode); });
7 голосов
/ 20 июля 2011

Я думаю, что вы ищете address_components[] в массиве results. Может быть, что-то вроде этого сработает, просто напечатайте ниже, чтобы в нем могли быть ошибки, но я думаю, вы поймете идею.

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

function (request, response) {
  geocoder.geocode({ 'address': request.term, 'latLng': centLatLng, 'region': 'US' }, function (results, status) {
    response($.map(results, function (item) {
      return {
       item.address_components.postal_code;//This is what you want to look at
      }
}
1 голос
/ 20 июля 2011

Казалось бы так:

Источник: Служба API Карт Google

Геокодирование - это процесс преобразования адресов (например, «1600»). Амфитеатр Паркуэй, Маунтин-Вью, Калифорния ") в географические координаты (например, широта 37.423021 и долгота -122.083739), которые вы можете использовать разместить маркеры или позиционировать карту. Google Geocoding API обеспечивает прямой доступ к геокодеру через HTTP-запрос. Кроме того, сервис позволяет выполнять обратную операцию (превращение координат в адреса); этот процесс известен как «обратное геокодирование».

Вам также следует ознакомиться с этой документацией, в которой есть пример кода: Обратное геокодирование

1 голос
/ 20 июля 2011

API PlaceFinder от Yahoo предоставляет хорошую базу данных для поиска данных местоположения по широте / долготе:

http://developer.yahoo.com/geo/placefinder/

Вот пример URL, который они используют:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...