Я заметил большую информацию о том, как получить Вашу внешность геолокации Google использования местоположения, на основе IP-адреса. Но я задаюсь вопросом, если и как я мог использовать этот сервис, чтобы ввести местоположение (долгота и широта) и возвратить текущий адрес, или по крайней мере город, состояние.
Я хотел бы сделать это в C#, но я буду работать с любым языком.
Совет?
То, что вы описываете, называется обратным геокодированием . Google предоставляет API веб-службы геокодирования , который вы можете вызвать из своего серверного приложения (используя любой язык) для выполнения обратного геокодирования .
Например, следующий запрос:
http://maps.google.com/maps/api/geocode/xml?latlng=40.714224,-73.961452&sensor=false
... вернет ответ это выглядит следующим образом (усечено):
<GeocodeResponse>
<status>OK</status>
<result>
<type>street_address</type>
<formatted_address>277 Bedford Ave, Brooklyn, NY 11211, USA</formatted_address>
<address_component>
<long_name>277</long_name>
<short_name>277</short_name>
<type>street_number</type>
</address_component>
<address_component>
<long_name>Bedford Ave</long_name>
<short_name>Bedford Ave</short_name>
<type>route</type>
</address_component>
<address_component>
<long_name>Brooklyn</long_name>
<short_name>Brooklyn</short_name>
<type>sublocality</type>
<type>political</type>
</address_component>
<address_component>
<long_name>New York</long_name>
<short_name>New York</short_name>
<type>locality</type>
<type>political</type>
</address_component>
<address_component>
<long_name>Kings</long_name>
<short_name>Kings</short_name>
<type>administrative_area_level_2</type>
<type>political</type>
</address_component>
<address_component>
<long_name>New York</long_name>
<short_name>NY</short_name>
<type>administrative_area_level_1</type>
<type>political</type>
</address_component>
<address_component>
<long_name>United States</long_name>
<short_name>US</short_name>
<type>country</type>
<type>political</type>
</address_component>
<address_component>
<long_name>11211</long_name>
<short_name>11211</short_name>
<type>postal_code</type>
</address_component>
<geometry>
<location>
<lat>40.7142330</lat>
<lng>-73.9612910</lng>
</location>
<location_type>ROOFTOP</location_type>
<viewport>
<southwest>
<lat>40.7110854</lat>
<lng>-73.9644386</lng>
</southwest>
<northeast>
<lat>40.7173806</lat>
<lng>-73.9581434</lng>
</northeast>
</viewport>
</geometry>
</result>
</GeocodeResponse>
Однако имейте в виду, что Условия использования API Карт Google , похоже, запрещают хранение результатов , если только хранилище не действует как кеш для данных, которые будут использоваться в Google Maps. Вы можете связаться с Google и узнать о Google Maps API Premier , чтобы получить более гибкие условия использования в соответствии с вашими требованиями к геокодированию.
Вы пытаетесь выполнить обратное геокодирование (см. Ответ Дэниела).
Пример реализации на PHP:
/**
* reverse geocoding via google maps api
* convert lat/lon into a name
*/
function reverse_geocode($lat, $lon) {
$url = "http://maps.google.com/maps/api/geocode/json?latlng=$lat,$lon&sensor=false";
$data = json_decode(file_get_contents($url));
if (!isset($data->results[0]->formatted_address)){
return "unknown Place";
}
return $data->results[0]->formatted_address;
}
API Карт Google работают по протоколу http, поэтому отправка запроса с помощью get и последующий анализ запроса ... Это должно быть возможно на любом языке.
Например, в PHP:
$ret = file_get_contents("http://maps.google.com/maps/api/geocode/xml?address=" .
urlencode($address) .
"&sensor=false" .
"&key=" . $this->key
);
$xml = new SimpleXMLElement($ret);
$error = $xml->status;
То же самое работает для всех API.