Предоставляет ли SimpleGeo почтовый индекс для отображения широты / долготы?
Я работаю с SimpleGeo API и мне нужно узнать широту / долготу места по почтовому индексу или названию города. Я знаю, что в SO много вопросов о получении координат по почтовому индексу, и для этого есть много хороших баз данных. Но являются ли они чем-то, что тесно связано с данными SimpleGeo? Я не хочу, имея точное название города / почтовый индекс, который существует в базе данных SimpleGeo, попасть в никуда только потому, что моя база данных отличается от базы данных SG.
Кроме того, я могу полностью перейти на Foursquare API, если он предоставляет такие данные, но это менее предпочтительно.
Итак, мои вопросы:
- Могу ли я получить широту / долготу по почтовому индексу или названию города через SimpleGeo (или хотя бы Foursquare)?
- Если нет, могу ли я использовать другие базы данных (например, MaxMind или Geonames), чтобы получить те же результаты? Должен ли я заботиться о различиях между базами данных вообще?
2 ответа
Да, вы можете использовать контекстные API SimpleGeo для этого. Вызовите конечную точку контекста SimpleGeo с именем города или почтовым индексом в качестве параметра адреса, например: http://api.simplegeo.com/1.0/context/address.json?address=98006
Ответ имеет широту и долготу, вложенные в часть "запроса" возвращаемого большого двоичного объекта JSON:
{"query": {"latitude": 40.745717, "longitude": - 73.988121...},...}
Надеюсь это поможет.
Спасибо,
-Nikhil
В случае, если это поможет... Вот как вы можете использовать геокодер 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 может геокодировать почтовые индексы, нет проблем.