예를 들어이 좌표 세트가 있다면
"latitude": 48.858844300000001,
"longitude": 2.2943506,
도시 / 국가를 어떻게 알 수 있습니까?
예를 들어이 좌표 세트가 있다면
"latitude": 48.858844300000001,
"longitude": 2.2943506,
도시 / 국가를 어떻게 알 수 있습니까?
답변:
무료 Google 지오 코딩 API 는 HTTP REST API를 통해이 서비스를 제공합니다. API는 사용량과 요금이 제한 되어 있지만 무제한 액세스 비용을 지불 할 수 있습니다.
출력의 예를 보려면이 링크를 시도하십시오 (이것은 json이고 출력은 XML로도 사용 가능합니다)
https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=true
다른 옵션 :
장점 :
단점 :
당신은 필요 geopy
pip install geopy
그리고:
from geopy.geocoders import Nominatim
geolocator = Nominatim()
location = geolocator.reverse("48.8588443, 2.2943506")
print(location.address)
자세한 정보를 얻으려면 :
print (location.raw)
{'place_id': '24066644', 'osm_id': '2387784956', 'lat': '41.442115', 'lon': '-8.2939909', 'boundingbox': ['41.442015', '41.442215', '-8.2940909', '-8.2938909'], 'address': {'country': 'Portugal', 'suburb': 'Oliveira do Castelo', 'house_number': '99', 'city_district': 'Oliveira do Castelo', 'country_code': 'pt', 'city': 'Oliveira, São Paio e São Sebastião', 'state': 'Norte', 'state_district': 'Ave', 'pedestrian': 'Rua Doutor Avelino Germano', 'postcode': '4800-443', 'county': 'Guimarães'}, 'osm_type': 'node', 'display_name': '99, Rua Doutor Avelino Germano, Oliveira do Castelo, Oliveira, São Paio e São Sebastião, Guimarães, Braga, Ave, Norte, 4800-443, Portugal', 'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright'}
오픈 소스 대안은 Open Street Map의 Nominatim입니다. URL에 변수를 설정하기 만하면 해당 위치의 도시 / 국가가 반환됩니다. 공식 문서는 다음 링크를 확인하십시오 : Nominatim
비슷한 기능을 찾고 있었고 이전 응답에서 공유 된 " http://download.geonames.org/export/dump/ " 데이터를 보았습니다 (공유해 주셔서 감사합니다. 훌륭한 소스입니다). 도시 1000.txt 데이터.
당신은 그것을 실행 볼 수 있습니다
http://scatter-otl.rhcloud.com/location?lat=36&long=-78.9 (깨진 링크)
위치의 위도와 경도를 변경하십시오.
OpenShift (RedHat 플랫폼)에 배포됩니다. 유휴 기간이 지난 후 첫 통화는 시간이 걸릴 수 있지만 일반적으로 성능은 만족 스럽습니다. 이 서비스를 원하는대로 사용하십시오 ...
또한 https://github.com/turgos/Location 에서 프로젝트 소스를 찾을 수 있습니다 .
Google, Geonames 및 OpenStreetMaps를 비롯한 여러 공급자를 지원하는 훌륭한 Python 라이브러리 인 Geocoder를 사용 하여 몇 가지 를 언급했습니다 . GeoPy 라이브러리를 사용해 보았는데 종종 시간 초과가 발생합니다. GeoNames에 대한 자신의 코드를 개발하는 것이 시간을 가장 잘 사용하지 않으므로 코드가 불안정해질 수 있습니다. 지오 코더 (Geocoder)는 내 경험에서 사용하기가 매우 간단하고 충분한 문서가 있습니다. 다음은 위도와 경도로 도시를 조회하거나 도시 이름으로 위도 / 경도를 찾기위한 샘플 코드입니다.
import geocoder
g = geocoder.osm([53.5343609, -113.5065084], method='reverse')
print g.json['city'] # Prints Edmonton
g = geocoder.osm('Edmonton, Canada')
print g.json['lat'], g.json['lng'] # Prints 53.5343609, -113.5065084
geocoder
, 나도 그것을 자신을 시도하고 싶습니다!
Javascript 에서이 작업을 수행하는 방법에 대한 코드 예제를 찾으려고 약 30 분을 보냈습니다. 게시 한 질문에 대한 명확한 답변을 찾을 수 없습니다. 그래서 ... 나는 내 자신을 만들었습니다. 잘만되면 사람들은 API를 읽거나 읽을 줄 모르는 코드를 보지 않고도 이것을 사용할 수 있기를 바랍니다. 하 아무것도 내 자신의 물건에 대 한이 게시물을 참조 할 수없는 경우 .. 좋은 포럼 토론 포럼에 감사드립니다!
이것은 구글 API를 활용하고 있습니다.
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=<YOURGOOGLEKEY>&sensor=false&v=3&libraries=geometry"></script>
.
//CHECK IF BROWSER HAS HTML5 GEO LOCATION
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function (position) {
//GET USER CURRENT LOCATION
var locCurrent = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
//CHECK IF THE USERS GEOLOCATION IS IN AUSTRALIA
var geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'latLng': locCurrent }, function (results, status) {
var locItemCount = results.length;
var locCountryNameCount = locItemCount - 1;
var locCountryName = results[locCountryNameCount].formatted_address;
if (locCountryName == "Australia") {
//SET COOKIE FOR GIVING
jQuery.cookie('locCountry', locCountryName, { expires: 30, path: '/' });
}
});
}
}
실제로 어떤 기술 제한이 있는지에 달려 있습니다.
한 가지 방법은 관심있는 국가 및 도시의 개요가있는 공간 데이터베이스를 갖는 것입니다. 개요 적으로 국가 및 도시는 공간 유형 다각형으로 저장됩니다. 좌표 세트를 공간 유형 점으로 변환하고 다각형에 대해 쿼리하여 점이있는 국가 / 도시 이름을 얻을 수 있습니다.
다음은 공간 유형을 지원하는 데이터베이스 중 일부입니다. SQL Server 2008 , MySQL , postGIS -postgreSQL 및 Oracle 의 확장입니다 .
자체 데이터베이스를 사용하는 대신 서비스를 사용하려면 Yahoo의 GeoPlanet을 사용할 수 있습니다 . 서비스 접근 방식의 경우 gis.stackexchange.com 에서이 답변 을 확인 하여 문제 해결을위한 서비스의 가용성을 다룰 수 있습니다.
Google 지오 코딩 API를 사용할 수 있습니다
Bellow는 Adress, City, State 및 Country를 반환하는 PHP 함수입니다.
public function get_location($latitude='', $longitude='')
{
$geolocation = $latitude.','.$longitude;
$request = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.$geolocation.'&sensor=false';
$file_contents = file_get_contents($request);
$json_decode = json_decode($file_contents);
if(isset($json_decode->results[0])) {
$response = array();
foreach($json_decode->results[0]->address_components as $addressComponet) {
if(in_array('political', $addressComponet->types)) {
$response[] = $addressComponet->long_name;
}
}
if(isset($response[0])){ $first = $response[0]; } else { $first = 'null'; }
if(isset($response[1])){ $second = $response[1]; } else { $second = 'null'; }
if(isset($response[2])){ $third = $response[2]; } else { $third = 'null'; }
if(isset($response[3])){ $fourth = $response[3]; } else { $fourth = 'null'; }
if(isset($response[4])){ $fifth = $response[4]; } else { $fifth = 'null'; }
$loc['address']=''; $loc['city']=''; $loc['state']=''; $loc['country']='';
if( $first != 'null' && $second != 'null' && $third != 'null' && $fourth != 'null' && $fifth != 'null' ) {
$loc['address'] = $first;
$loc['city'] = $second;
$loc['state'] = $fourth;
$loc['country'] = $fifth;
}
else if ( $first != 'null' && $second != 'null' && $third != 'null' && $fourth != 'null' && $fifth == 'null' ) {
$loc['address'] = $first;
$loc['city'] = $second;
$loc['state'] = $third;
$loc['country'] = $fourth;
}
else if ( $first != 'null' && $second != 'null' && $third != 'null' && $fourth == 'null' && $fifth == 'null' ) {
$loc['city'] = $first;
$loc['state'] = $second;
$loc['country'] = $third;
}
else if ( $first != 'null' && $second != 'null' && $third == 'null' && $fourth == 'null' && $fifth == 'null' ) {
$loc['state'] = $first;
$loc['country'] = $second;
}
else if ( $first != 'null' && $second == 'null' && $third == 'null' && $fourth == 'null' && $fifth == 'null' ) {
$loc['country'] = $first;
}
}
return $loc;
}
Loc2country 는 주어진 위치 좌표 (lat / lon)에 대한 ISO 알파 -3 국가 코드를 반환하는 Golang 기반 도구입니다. 마이크로 초 단위로 응답합니다. 지리 해시를 사용하여 국가지도에 표시합니다.
geohash 데이터는 georaptor를 사용하여 생성됩니다 .
이 도구에는 1.2km x 600m 크기의 상자에 대해 6 단계에서 geohash를 사용합니다.
라이브러리의 양을 최소화하십시오.
웹 사이트에서 API를 사용할 수있는 키를 얻고 http 요청으로 결과를 얻으십시오.
curl -i -H "키 : YOUR_KEY"-X GET https://api.latlong.dev/lookup?lat=38.7447913&long=-9.1625173
아래 답변을 확인하십시오. 그것은 나를 위해 작동
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position){
initialize(position.coords.latitude,position.coords.longitude);
});
}
function initialize(lat,lng) {
//directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);
//directionsService = new google.maps.DirectionsService();
var latlng = new google.maps.LatLng(lat, lng);
//alert(latlng);
getLocation(latlng);
}
function getLocation(latlng){
var geocoder = new google.maps.Geocoder();
geocoder.geocode({'latLng': latlng}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
var loc = getCountry(results);
alert("location is::"+loc);
}
}
});
}
function getCountry(results)
{
for (var i = 0; i < results[0].address_components.length; i++)
{
var shortname = results[0].address_components[i].short_name;
var longname = results[0].address_components[i].long_name;
var type = results[0].address_components[i].types;
if (type.indexOf("country") != -1)
{
if (!isNullOrWhitespace(shortname))
{
return shortname;
}
else
{
return longname;
}
}
}
}
function isNullOrWhitespace(text) {
if (text == null) {
return true;
}
return text.replace(/\s/gi, '').length < 1;
}
Google의 Places API를 사용하는 경우 다음은 자바 스크립트를 사용하여 장소 객체에서 국가 및 도시를 가져올 수있는 방법입니다.
function getCityAndCountry(location) {
var components = {};
for(var i = 0; i < location.address_components.length; i++) {
components[location.address_components[i].types[0]] = location.address_components[i].long_name;
}
if(!components['country']) {
console.warn('Couldn\'t extract country');
return false;
}
if(components['locality']) {
return [components['locality'], components['country']];
} else if(components['administrative_area_level_1']) {
return [components['administrative_area_level_1'], components['country']];
} else {
console.warn('Couldn\'t extract city');
return false;
}
}