Sebagai contoh jika kita memiliki set koordinat ini
"latitude": 48.858844300000001,
"longitude": 2.2943506,
Bagaimana kita bisa mengetahui kota / negara?
Sebagai contoh jika kita memiliki set koordinat ini
"latitude": 48.858844300000001,
"longitude": 2.2943506,
Bagaimana kita bisa mengetahui kota / negara?
Jawaban:
Google Geocoding API gratis menyediakan layanan ini melalui HTTP REST API. Perhatikan, API adalah penggunaan dan tarif terbatas , tetapi Anda dapat membayar untuk akses tanpa batas.
Coba tautan ini untuk melihat contoh output (ini dalam json, output juga tersedia dalam XML)
https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=true
Pilihan lain:
Keuntungan:
Kekurangan:
Kamu butuh geopy
pip install geopy
lalu:
from geopy.geocoders import Nominatim
geolocator = Nominatim()
location = geolocator.reverse("48.8588443, 2.2943506")
print(location.address)
untuk mendapatkan informasi lebih lanjut:
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'}
Alternatif Open Source adalah Nominatim dari Open Street Map. Yang harus Anda lakukan adalah mengatur variabel dalam URL dan mengembalikan kota / negara lokasi itu. Silakan periksa tautan berikut untuk dokumentasi resmi: Nominatim
Saya sedang mencari fungsi yang sama dan saya melihat data " http://download.geonames.org/export/dump/ " dibagikan pada balasan sebelumnya (terima kasih telah berbagi, ini adalah sumber yang sangat baik), dan menerapkan layanan berbasis pada data cities1000.txt.
Anda dapat melihatnya berjalan di
http://scatter-otl.rhcloud.com/location?lat=36&long=-78.9 (tautan rusak)
Ubah saja garis lintang dan bujur untuk lokasi Anda.
Ini digunakan pada OpenShift (Platform RedHat). Panggilan pertama setelah periode idle yang lama mungkin memakan waktu, tetapi biasanya kinerja memuaskan. Jangan ragu untuk menggunakan layanan ini sesuka Anda ...
Anda juga dapat menemukan sumber proyek di https://github.com/turgos/Location .
Saya telah menggunakan Geocoder , pustaka Python bagus yang mendukung banyak penyedia, termasuk Google, Geonames, dan OpenStreetMaps, untuk menyebutkan beberapa saja . Saya sudah mencoba menggunakan perpustakaan GeoPy, dan sering mengalami timeout. Mengembangkan kode Anda sendiri untuk GeoNames bukanlah penggunaan waktu Anda yang terbaik dan Anda mungkin mendapatkan kode yang tidak stabil. Geocoder sangat mudah digunakan dalam pengalaman saya, dan memiliki dokumentasi yang cukup baik . Di bawah ini adalah beberapa contoh kode untuk mencari kota dengan lintang dan bujur, atau menemukan lintang / bujur dengan nama kota.
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
, saya juga ingin mencobanya sendiri!
Saya menghabiskan sekitar 30 menit untuk mencoba menemukan contoh kode tentang bagaimana melakukan ini dalam Javascript. Saya tidak dapat menemukan jawaban yang jelas dan cepat untuk pertanyaan yang Anda posting. Jadi ... saya buat sendiri. Mudah-mudahan orang dapat menggunakan ini tanpa harus menggali ke dalam API atau menatap kode yang mereka tidak tahu cara membaca. Ha kalau tidak ada yang lain saya bisa mereferensikan posting ini untuk barang-barang saya sendiri .. Pertanyaan yang bagus dan terima kasih untuk forum diskusi!
Ini memanfaatkan Google 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: '/' });
}
});
}
}
Saya tahu pertanyaan ini benar-benar sudah tua, tetapi saya telah mengerjakan masalah yang sama dan saya menemukan paket yang sangat efisien dan nyaman reverse_geocoder
, yang dibangun oleh Ajay Thampi. Kode tersedia di sini . Itu didasarkan pada implementasi paralel dari pohon-pohon KD yang sangat efisien untuk sejumlah besar poin (saya butuh beberapa detik untuk mendapatkan 100.000 poin.
Itu didasarkan pada database ini , sudah disorot oleh @turgos.
Jika tugas Anda adalah menemukan negara dan kota dari daftar koordinat dengan cepat, ini adalah alat yang hebat.
Ini benar-benar tergantung pada batasan teknologi apa yang Anda miliki.
Salah satu caranya adalah memiliki basis data spasial dengan garis besar negara dan kota yang Anda minati. Secara garis besar maksud saya bahwa negara dan kota disimpan sebagai poligon jenis spasial. Set koordinat Anda dapat dikonversi ke titik jenis spasial dan ditanyai dengan poligon untuk mendapatkan nama negara / kota tempat titik tersebut berada.
Berikut adalah beberapa database yang mendukung tipe spasial: SQL server 2008 , MySQL , postGIS - ekstensi postgreSQL dan Oracle .
Jika Anda ingin menggunakan layanan sebagai pengganti memiliki database Anda sendiri untuk ini, Anda dapat menggunakan GeoPlanet Yahoo . Untuk pendekatan layanan, Anda mungkin ingin memeriksa jawaban ini di gis.stackexchange.com , yang mencakup ketersediaan layanan untuk menyelesaikan masalah Anda.
Anda dapat menggunakan Google Geocoding API
Di bawah adalah fungsi php yang mengembalikan Alamat, Kota, Negara dan Negara
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 adalah alat berbasis Golang yang mengembalikan kode negara ISO alpha-3 untuk koordinat lokasi tertentu (lat / lon). Merespon dalam mikrodetik. Ini menggunakan geohash ke peta negara.
Data geohash dihasilkan menggunakan georaptor .
Kami menggunakan geohash pada level 6 untuk alat ini, yaitu, kotak ukuran 1,2km x 600m.
Minimalkan jumlah perpustakaan.
Dapatkan kunci untuk menggunakan api di situs web mereka dan dapatkan hasilnya dalam permintaan http:
curl -i -H "key: YOUR_KEY" -X DAPATKAN https://api.latlong.dev/lookup?lat=38.7447913&long=-9.1625173
Silakan periksa jawaban di bawah ini. Ini bekerja untuk saya
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;
}
Jika Anda menggunakan Google Places API, ini adalah bagaimana Anda bisa mendapatkan negara dan kota dari objek tempat menggunakan Javascript:
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;
}
}