উদাহরণস্বরূপ যদি আমাদের এই সমন্বয়গুলির সেট থাকে
"latitude": 48.858844300000001,
"longitude": 2.2943506,
কীভাবে আমরা শহর / দেশ সন্ধান করতে পারি?
উদাহরণস্বরূপ যদি আমাদের এই সমন্বয়গুলির সেট থাকে
"latitude": 48.858844300000001,
"longitude": 2.2943506,
কীভাবে আমরা শহর / দেশ সন্ধান করতে পারি?
উত্তর:
ফ্রি গুগল জিওকোডিং এপিটি এইচটিটিপি আরএসটি এপিআই এর মাধ্যমে এই পরিষেবা সরবরাহ করে। দ্রষ্টব্য, API হ'ল ব্যবহার এবং হার সীমিত তবে আপনি সীমাহীন অ্যাক্সেসের জন্য অর্থ দিতে পারেন।
আউটপুটটির উদাহরণ দেখতে এই লিঙ্কটি ব্যবহার করে দেখুন (এটি জসনে রয়েছে, এক্সএমএলে আউটপুটও পাওয়া যায়)
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'}
একটি ওপেন সোর্সের বিকল্প হ'ল ওপেন স্ট্রিট ম্যাপ থেকে নামিনটিম। আপনাকে যা করতে হবে তা হ'ল একটি ইউআরএল ভেরিয়েবল সেট করে এবং এটি সেই অবস্থানের শহর / দেশ ফিরিয়ে দেয়। অফিসিয়াল ডকুমেন্টেশনের জন্য দয়া করে নীচের লিঙ্কটি চেক করুন: নমিনিটিম
আমি অনুরূপ কার্যকারিতা সন্ধান করছিলাম এবং আমি পূর্ববর্তী উত্তরে " http://download.geonasure/export/dump/ " ডেটা ভাগ করা দেখেছি (ভাগ করার জন্য আপনাকে ধন্যবাদ, এটি একটি দুর্দান্ত উত্স), এবং একটি পরিষেবা ভিত্তিক বাস্তবায়ন করেছি শহরে 1000.txt ডেটাতে।
আপনি এটি চলমান দেখতে পারেন
http://scatter-otl.rhcloud.com/location?lat=36&long=-78.9 (ভাঙা লিঙ্ক)
কেবলমাত্র আপনার অবস্থানের জন্য অক্ষাংশ এবং দ্রাঘিমাংশ পরিবর্তন করুন।
এটি ওপেনশিফ্টে (রেডহ্যাট প্ল্যাটফর্ম) স্থাপন করা হয়েছে। দীর্ঘ নিষ্ক্রিয় সময়ের পরে প্রথম কলটি কিছুটা সময় নিতে পারে তবে সাধারণত সম্পাদন সন্তোষজনক। আপনার পছন্দ মতো এই পরিষেবাটি নির্দ্বিধায় ব্যবহার করুন ...
এছাড়াও, আপনি https://github.com/turgos/Location এ প্রকল্পের উত্সটি খুঁজে পেতে পারেন ।
আমি ব্যবহার করেছি Geocoder , একটি ভাল পাইথন গ্রন্থাগার যে Google, Geonames এবং OpenStreetMaps সহ সমর্থন একাধিক প্রদানকারীরা, মাত্র কয়েক উল্লেখ । আমি জিওপি লাইব্রেরিটি ব্যবহার করার চেষ্টা করেছি এবং এটি প্রায়শই টাইমআউট করে। জিওনামের জন্য আপনার নিজস্ব কোড বিকাশ করা আপনার সময়ের সেরা ব্যবহার নয় এবং আপনি অস্থির কোড পেয়ে শেষ করতে পারেন। জিওকডারটি আমার অভিজ্ঞতায় ব্যবহার করা খুব সহজ, এবং যথেষ্ট পরিমাণে ডকুমেন্টেশন রয়েছে । অক্ষাংশ এবং দ্রাঘিমাংশ অনুসারে শহর দেখার জন্য বা শহরের নাম অনুসারে অক্ষাংশ / দ্রাঘিমাংশ সন্ধান করার জন্য নীচে কয়েকটি নমুনা কোড দেওয়া আছে।
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
হয় তবে আমি নিজেও চেষ্টা করে দেখতে চাই!
জাভাস্ক্রিপ্টে এটি কীভাবে করা যায় তার একটি কোড উদাহরণ খোঁজার চেষ্টা করে আমি প্রায় 30 মিনিট ব্যয় করেছি। আপনার পোস্ট করা প্রশ্নের একটি দ্রুত পরিষ্কার উত্তর আমি খুঁজে পাইনি। তাই ... আমি আমার নিজের তৈরি করেছি। আশা করি লোকেরা এপিআইতে খোঁড়াখুঁড়ি না করে বা কোডের দিকে তাকানো ছাড়াই এটি ব্যবহার করতে পারে তাদের কীভাবে পড়তে হবে তার কোনও ধারণা নেই। হ্যা যদি আর কিছু না হয় আমি নিজের পোস্টের জন্য এই পোস্টটি উল্লেখ করতে পারি না .. চমৎকার প্রশ্ন এবং আলোচনার ফোরামের জন্য ধন্যবাদ!
এটি গুগল এপিআই ব্যবহার করছে।
<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: '/' });
}
});
}
}
আমি জানি এই প্রশ্নটি আসলেই পুরানো, তবে আমি একই ইস্যুতে কাজ করছি এবং আমি একটি অত্যন্ত দক্ষ এবং সুবিধাজনক প্যাকেজ পেয়েছি reverse_geocoder
, এটি অজয় থাম্পি নির্মিত। কোডটি এখানে উপলব্ধ । এটি কেডি গাছগুলির সমান্তরাল বাস্তবায়নের উপর ভিত্তি করে যা প্রচুর পরিমাণে পয়েন্টের জন্য অত্যন্ত কার্যকর (এটি আমার 100,000 পয়েন্ট পেতে কয়েক সেকেন্ড সময় নেয়)।
এটি ইতিমধ্যে @ টার্গোস দ্বারা হাইলাইট করা এই ডাটাবেসের উপর ভিত্তি করে ।
যদি আপনার কাজটি স্থানাঙ্কের তালিকার দেশ এবং শহরটি দ্রুত খুঁজে পাওয়া যায় তবে এটি দুর্দান্ত সরঞ্জাম।
এটি আসলে আপনার কী প্রযুক্তির সীমাবদ্ধতা রয়েছে তার উপর নির্ভর করে।
একটি উপায় হ'ল আপনার আগ্রহী দেশ এবং শহরগুলির বাহ্যরেখা সহ একটি স্থানিক ডাটাবেস। আউটলাইন দ্বারা আমি বোঝাতে চাইছি যে দেশ এবং শহরগুলি স্থানিক ধরণের বহুভুজ হিসাবে সঞ্চয় store আপনার স্থানাঙ্কের সেটটি স্থানিক টাইপ পয়েন্টে রূপান্তর করতে পারে এবং পয়েন্টটি অবস্থিত দেশ / শহরের নাম পেতে বহুভুজগুলির বিরুদ্ধে অনুসন্ধান করা যেতে পারে।
এখানে কিছু ডাটাবেস রয়েছে যা স্থানিক প্রকারকে সমর্থন করে: এসকিউএল সার্ভার ২০০৮ , মাইএসকিউএল , পোস্টজিআইএস - পোস্টগ্রিজ এসকিউএল এবং ওরাকেলের একটি এক্সটেনশন ।
আপনি যদি এর জন্য আপনার নিজস্ব ডেটাবেস থাকার পরিবর্তে কোনও পরিষেবা ব্যবহার করতে চান তবে আপনি ইয়াহুর জিওপ্ল্যানেট ব্যবহার করতে পারেন । পরিষেবা পদ্ধতির জন্য আপনি এই উত্তরটি gis.stackexchange.com এ যাচাই করতে চাইতে পারেন , যা আপনার সমস্যা সমাধানের জন্য পরিষেবার প্রাপ্যতা জুড়ে।
আপনি গুগল জিওকোডিং এপিআই ব্যবহার করতে পারেন
বেলো পিএইচপি ফাংশন যা অ্যাড্রেস, শহর, রাজ্য এবং দেশকে ফিরিয়ে দেয়
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 একটি গোলাং ভিত্তিক সরঞ্জাম যা প্রদত্ত অবস্থানের স্থানাঙ্কের জন্য (ল্যাট / লম্বা) আইএসও আলফা -3 দেশ কোড দেয়। এটি মাইক্রোসেকেন্ডে প্রতিক্রিয়া জানায়। এটি দেশের মানচিত্রে একটি জিওহ্যাশ ব্যবহার করে।
জিওহ্যাশ ডেটা জিওরপ্টর ব্যবহার করে তৈরি করা হয় ।
আমরা এই সরঞ্জামটির জন্য 6 স্তরের জিওহ্যাশ ব্যবহার করি, অর্থাৎ, 1.2km x 600m আকারের বাক্স।
গ্রন্থাগারের পরিমাণ হ্রাস করুন।
তাদের ওয়েবসাইটে এপিআই ব্যবহার করার জন্য একটি কী পান এবং কেবল একটি http অনুরোধে ফলাফল পান:
curl -i -H "কী: YOUR_KEY" -X 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;
}
আপনি যদি গুগলের স্থানগুলি এপিআই ব্যবহার করে থাকেন তবে জাভাস্ক্রিপ্ট ব্যবহার করে আপনি জায়গা প্লেট থেকে এইভাবে দেশ এবং শহর পেতে পারেন:
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;
}
}