Предоставляет ли SimpleGeo почтовый индекс для отображения широты / долготы? - PullRequest
0 голосов
/ 30 мая 2011

Я работаю с SimpleGeo API , и мне нужно получить широту / долготу места по почтовому индексу или названию города . Я знаю, что в SO много вопросов о получении координат по почтовому индексу, и для этого есть много хороших баз данных. Но являются ли они чем-то, что тесно связано с данными SimpleGeo ? Я не хочу, имея точное название города / почтовый индекс, который существует в базе данных SimpleGeo, попасть в никуда только потому, что моя база данных отличается от базы данных SG.

В качестве альтернативы я могу полностью перейти на Foursquare API , если он предоставляет такие данные, но это менее предпочтительно.

Итак, мои вопросы:

  1. Могу ли я узнать широту / долготу по почтовому индексу или названию города через SimpleGeo (или хотя бы Foursquare)?
  2. Если нет, могу ли я использовать другие базы данных (например, MaxMind или Geonames ) для получения тех же результатов? Должен ли я заботиться о различиях между базами данных вообще?

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Да, вы можете использовать контекстные API SimpleGeo для этого.Вызовите конечную точку контекста SimpleGeo с именем города или почтовым индексом в качестве параметра адреса, например: http://api.simplegeo.com/1.0/context/address.json?address=98006

Ответ имеет широту и долготу, встроенные в возвращаемую часть «запроса» BLOB-объекта JSON:
{"query": {"latitude": 40.745717, "longitude": - 73.988121 ...}, ...}

Надеюсь, это поможет.

Спасибо,
-Нихилу

0 голосов
/ 08 июля 2011

Если это поможет ... Вот как вы можете использовать геокодер Google, чтобы получить лат / lng для почтового индекса.Скажем, у вас есть ввод HTML с идентификатором 'location' (используется виджет автозаполнения jqueryui):

// insert a div for autocomplete results
$("#location").after('<div id="location-results"></div>');

$("#location").autocomplete({
    appendTo:$("#location-results"),
    minLength: 3,
    open: acOpen,
    select: acSelect,
    close: acClose,
    source: acSource
});

function acOpen(event, ui){
// no op, but put code here to handle results list open if you need it
}

function acSelect(event, ui){
    // fired when user selects a result from the autocomplete list
    // assuming you are using the json2.js library for json parsing/decoding
    alert(JSON.stringify(ui.item));
    // the lat/lng is in ui.item.latLng.lat() and ui.item.latLng.lng()
    // ui.item.latLng is of type google.maps.LatLng (see v3 api)
}

function function acClose(event, ui){
// no op, but put code here to handle results list close if you need it
}

function acSource(request, response) {
    // implements the autocomplete source for the widget
    geocoder.geocode( {'address': request.term }, function(results, status) {
        if(undefined!==results){
            var postal_code='';
            var city = ''; 
            var state = '';
            var country = '';
            response($.map(results, function(item) {
              $.each(item.address_components, function(item_i, item_v){
                $.each(item_v.types, function(type_i, type_v){
                  switch(type_v){
                    case "locality": case "administrative_area_level_3":
                      city = item_v.long_name;
                    break;
                    case "administrative_area_level_2":
                    break;
                    case "street_number":
                    break;
                    case "route":
                    break;
                    case "administrative_area_level_1":
                  state = item_v.long_name;
                break;
                case "country":
                  country = item_v.long_name;
                break;
                case "postal_code":
                  postal_code = item_v.long_name;
                break;
              }
        });
          });
              // the object that gets returned and is ui.item on select event
          return {
            label   : item.formatted_address,
            value   : item.formatted_address,
            latLng  : item.geometry.location,
            country     : country, 
                state       : state, 
                city        : city,  
                postal_code : postal_code,
            source  : "google"
          };
        }));
        }
      }
    }
}

геокодер Google может геокодировать почтовые индексы, без проблем.

...