গুগল ম্যাপস: কীভাবে দেশ, রাজ্য / প্রদেশ / অঞ্চল, শহরকে একটি দীর্ঘ / দীর্ঘ মূল্য দেওয়া যায়?


107

আমার যে ল্যাব / লম্বা মানগুলির সংকলনের উপর ভিত্তি করে আমার দেশ, রাজ্য এবং শহরগুলির একটি তালিকা দরকার। আমার এই তথ্যটি এমনভাবে সংরক্ষণ করতে হবে যাতে শ্রেণিবদ্ধতা সংরক্ষণ করা হয় এবং নকল ছাড়াই (যেমন "মার্কিন যুক্তরাষ্ট্র" এবং "মার্কিন যুক্তরাষ্ট্র" এবং "আমেরিকা যুক্তরাষ্ট্র" একই দেশ; আমি কেবল আমার ডাটাবেসে এই দেশের একটি উদাহরণ চাই) ।

গুগল ম্যাপ এপিআই দিয়ে কি এটি করা সম্ভব?


আপনি কি প্রদেশ পেয়েছেন?
দীপক ধোলিয়ান

উত্তর:


135

আপনি যা খুঁজছেন তাকে রিভার্স জিওকোডিং বলা হয় । গুগল গুগল জিওকোডিং এপিআইয়ের মাধ্যমে একটি সার্ভার-সাইড বিপরীত জিওকোডিং পরিষেবা সরবরাহ করে , যা আপনার প্রকল্পের জন্য আপনাকে ব্যবহার করতে সক্ষম হওয়া উচিত।

নিম্নলিখিত অনুরোধটির প্রতিক্রিয়াটি এমনভাবে দেখবে:

http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=false

প্রতিক্রিয়া:

{
  "status": "OK",
  "results": [ {
    "types": [ "street_address" ],
    "formatted_address": "275-291 Bedford Ave, Brooklyn, NY 11211, USA",
    "address_components": [ {
      "long_name": "275-291",
      "short_name": "275-291",
      "types": [ "street_number" ]
    }, {
      "long_name": "Bedford Ave",
      "short_name": "Bedford Ave",
      "types": [ "route" ]
    }, {
      "long_name": "New York",
      "short_name": "New York",
      "types": [ "locality", "political" ]
    }, {
      "long_name": "Brooklyn",
      "short_name": "Brooklyn",
      "types": [ "administrative_area_level_3", "political" ]
    }, {
      "long_name": "Kings",
      "short_name": "Kings",
      "types": [ "administrative_area_level_2", "political" ]
    }, {
      "long_name": "New York",
      "short_name": "NY",
      "types": [ "administrative_area_level_1", "political" ]
    }, {
      "long_name": "United States",
      "short_name": "US",
      "types": [ "country", "political" ]
    }, {
      "long_name": "11211",
      "short_name": "11211",
      "types": [ "postal_code" ]
    } ],
    "geometry": {
      "location": {
        "lat": 40.7142298,
        "lng": -73.9614669
      },
      "location_type": "RANGE_INTERPOLATED",
      "viewport": {
        "southwest": {
          "lat": 40.7110822,
          "lng": -73.9646145
        },
        "northeast": {
          "lat": 40.7173774,
          "lng": -73.9583193
        }
      }
    }
  },

  ... Additional results[] ...

আপনি ইউআরআই অনুরোধে কেবলমাত্র এক্সএমএল-এর জন্য জসনকে প্রতিস্থাপন করে, জসনের পরিবর্তে এক্সএমএলে প্রতিক্রিয়া গ্রহণ করতে পারেন:

http://maps.googleapis.com/maps/api/geocode/xml?latlng=40.714224,-73.961452&sensor=false

যতদূর আমি জানি, গুগল ঠিকানাগুলির উপাদানগুলির জন্যও একই নামটি ফিরিয়ে দেবে, বিশেষত দেশের নাম এবং শহরের নামগুলির মতো উচ্চ-স্তরের নামগুলির জন্য। তবুও, মনে রাখবেন যে ফলাফলগুলি বেশিরভাগ অ্যাপ্লিকেশনের জন্য খুব নির্ভুল হলেও আপনি মাঝে মাঝে বানান ভুল বা অস্পষ্ট ফলাফল খুঁজে পেতে পারেন।


ধন্যবাদ! আমার দীর্ঘ / দীর্ঘ এই সংগ্রহটি আমার ডেটাবেজে ব্যবহারকারী প্রোফাইলের সাথে যুক্ত with আপনি কি জানেন যে আমি কীভাবে এমন কোনও অনুসন্ধান বৈশিষ্ট্যটি প্রয়োগ করতে পারি যা ব্যবহারকারীদের নির্দিষ্ট জায়গার মধ্যে অন্যান্য ব্যবহারকারীদের খুঁজে পেতে দেয় (যেমন ব্রুকলিন, এনওয়াইতে সমস্ত ব্যবহারকারী খুঁজে পান)? মনে রাখবেন, আমার সমস্ত কিছুই ল্যাট / লম্বা।
স্ট্যাকওভারফ্লো নিউবিআই

1
@ স্টকওভারফ্লো নিউইউবি: আপনি আপনার সমস্ত ল্যাট / ল্যাংগুলিকে বিপরীত করতে এবং আপনার ডাটাবেসে "শহর", "রাজ্য", "দেশ" ক্ষেত্রগুলি পূরণ করতে পারেন। তারপরে আপনার ডাটাবেসে এই ক্ষেত্রগুলিতে কেবল একটি ফিল্টার করুন।
ড্যানিয়েল ভ্যাসালো 12

1
অথবা আপনি যদি এমএস এসকিএল ২০০৮-তে মামলা করেন এবং কোনও পয়েন্টের নিকটে অবস্থান সন্ধান করতে চান তবে আপনি ভূগোলের মতো স্থানিক ডেটাটাইপ ব্যবহার করতে পারেন
গিব্বোক

1
প্রতিক্রিয়াতে আপনি কীভাবে শহর ও দেশের সূচী নম্বর সম্পর্কে নিশ্চিত হতে পারেন? এটি পরিবর্তন করে চলেছে, উদাহরণস্বরূপ যদি কোনও অঞ্চলের উপ-অঞ্চল থাকে তবে সূচীর কীগুলি পরিবর্তন হয়
খান শাহরুখ

4
কি করে sensor=false?
CENT1PEDE

21

আপনার এখানে একটি প্রাথমিক উত্তর রয়েছে: ভূ-অবস্থান ব্যবহার করে শহরের নাম পান

তবে আপনি যা খুঁজছেন, তার জন্য আমি এইভাবে সুপারিশ করব।

কেবল আপনার যদি প্যারিস, টেক্সাস, মার্কিন যুক্তরাষ্ট্র এবং প্যারিস, ইলে-ডি-ফ্রান্স, ফ্রান্সের জন্য বিভিন্ন জিনিস সঞ্চয় করতে এবং ম্যানুয়াল ফ্যালব্যাক সরবরাহ করতে প্রশাসনিক_রেয়া_লেভেল_1 এর দরকার হয় তবেই:

-

মিশালের পথে একটি সমস্যা আছে, এটি প্রথম ফলাফল নেয়, কোনও নির্দিষ্ট নয় particular তিনি ফলাফল ব্যবহার করেন [0]। আমি যেভাবে ফিট দেখতে পাচ্ছি (আমি কেবল তার কোডটি সংশোধন করেছি) কেবল তার ফলাফলটিই গ্রহণ করা হয় যার প্রকারটি "লোকালাইটি", যা সর্বদা উপস্থিত থাকে, এমনকি যদি ব্রাউজার ভূ-অবস্থানকে সমর্থন না করে তবে একটি চূড়ান্ত ম্যানুয়াল ফলব্যাকেও থাকে।

তাঁর পথ: সংগৃহীত ফলাফল ব্যবহার থেকে ভিন্ন http://maps.googleapis.com/maps/api/geocode/json?address=bucharest&sensor=false ব্যবহার থেকে চেয়ে http://maps.googleapis.com/maps/api/geocode /json?latlng=44.42514,26.10540&sensor=false (নাম অনুসারে অনুসন্ধান / ল্যাট ও এলএনজি দ্বারা অনুসন্ধান)

এইভাবে: একই ফলস্বরূপ ফলাফল।

<!DOCTYPE html> 
<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no"/> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Reverse Geocoding</title> 

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript"> 
  var geocoder;

  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(successFunction, errorFunction);
} 
//Get the latitude and the longitude;
function successFunction(position) {
    var lat = position.coords.latitude;
    var lng = position.coords.longitude;
    codeLatLng(lat, lng)
}

function errorFunction(){
    alert("Geocoder failed");
}

  function initialize() {
    geocoder = new google.maps.Geocoder();



  }

  function codeLatLng(lat, lng) {

    var latlng = new google.maps.LatLng(lat, lng);
    geocoder.geocode({'latLng': latlng}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
      //console.log(results);
        if (results[1]) {
        var indice=0;
        for (var j=0; j<results.length; j++)
        {
            if (results[j].types[0]=='locality')
                {
                    indice=j;
                    break;
                }
            }
        alert('The good number is: '+j);
        console.log(results[j]);
        for (var i=0; i<results[j].address_components.length; i++)
            {
                if (results[j].address_components[i].types[0] == "locality") {
                        //this is the object you are looking for City
                        city = results[j].address_components[i];
                    }
                if (results[j].address_components[i].types[0] == "administrative_area_level_1") {
                        //this is the object you are looking for State
                        region = results[j].address_components[i];
                    }
                if (results[j].address_components[i].types[0] == "country") {
                        //this is the object you are looking for
                        country = results[j].address_components[i];
                    }
            }

            //city data
            alert(city.long_name + " || " + region.long_name + " || " + country.short_name)


            } else {
              alert("No results found");
            }
        //}
      } else {
        alert("Geocoder failed due to: " + status);
      }
    });
  }
</script> 
</head> 
<body onload="initialize()"> 

</body> 
</html> 

এটি আমার দিন বাঁচায়
Andi AR

4

আমি এই প্রশ্নটি আমার নিজের সমাধানের সূচনার পয়েন্ট হিসাবে ব্যবহার করেছি। ভেবেছিলাম আমার কোডটি তাবসিটুসের চেয়ে ছোট হওয়ার কারণে এটির পিছনে অবদান রাখাই উপযুক্ত

নির্ভরতা:

কোড:

if(geoPosition.init()){  

    var foundLocation = function(city, state, country, lat, lon){
        //do stuff with your location! any of the first 3 args may be null
        console.log(arguments);
    }

    var geocoder = new google.maps.Geocoder(); 
    geoPosition.getCurrentPosition(function(r){
        var findResult = function(results, name){
            var result =  _.find(results, function(obj){
                return obj.types[0] == name && obj.types[1] == "political";
            });
            return result ? result.short_name : null;
        };
        geocoder.geocode({'latLng': new google.maps.LatLng(r.coords.latitude, r.coords.longitude)}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK && results.length) {
                results = results[0].address_components;
                var city = findResult(results, "locality");
                var state = findResult(results, "administrative_area_level_1");
                var country = findResult(results, "country");
                foundLocation(city, state, country, r.coords.latitude, r.coords.longitude);
            } else {
                foundLocation(null, null, null, r.coords.latitude, r.coords.longitude);
            }
        });
    }, { enableHighAccuracy:false, maximumAge: 1000 * 60 * 1 });
}

3

আমি যখন জিএসপি ফাইলগুলিতে অন্তর্ভুক্ত করেছি তখন আমি জিওকোডার জাভাস্ক্রিপ্টটি একটু বাগি পেয়েছি।

আপনি এটি ব্যবহার করে দেখতে পারেন:



    var lat = "43.7667855" ;
    var long = "-79.2157321" ;
    var url = "https://maps.googleapis.com/maps/api/geocode/json?latlng="
       +lat+","+long+"&sensor=false";
    $.get(url).success(function(data) {
       var loc1 = data.results[0];
       var county, city;
         $.each(loc1, function(k1,v1) {
            if (k1 == "address_components") {
               for (var i = 0; i < v1.length; i++) {
                  for (k2 in v1[i]) {
                     if (k2 == "types") {
                        var types = v1[i][k2];
                        if (types[0] =="sublocality_level_1") {
                            county = v1[i].long_name;
                            //alert ("county: " + county);
                        } 
                        if (types[0] =="locality") {
                           city = v1[i].long_name;
                           //alert ("city: " + city);
                       } 
                     }

                  }          

               }

            }

         });
         $('#city').html(city); 
    }); 


কিছুটা স্থির করুন, এতে পরিবর্তন $.get(url).success(function(data)করুন $.get(url, function(data)এবং এটি ভালভাবে কাজ করছে
মূল্যবান টম

3

আমি এই ফাংশনটি লিখেছি যা আপনি যা খুঁজছেন address_componentsতা জিএমএপিএস এপিআই থেকে ফেরতের ভিত্তিতে সন্ধান করে । এটি শহর (উদাহরণস্বরূপ)।

export const getAddressCity = (address, length) => {
  const findType = type => type.types[0] === "locality"
  const location = address.map(obj => obj)
  const rr = location.filter(findType)[0]

  return (
    length === 'short'
      ? rr.short_name
      : rr.long_name
  )
}

পরিবর্তন localityকরার জন্য administrative_area_level_1রাজ্য জন্য ইত্যাদি

আমার জেএস কোডে আমি এর মতো ব্যবহার করছি:

const location =`${getAddressCity(address_components, 'short')}, ${getAddressState(address_components, 'short')}`

ফিরে আসবে: Waltham, MA


0

এই কোডটি আমার সাথে কাজ করার চেষ্টা করুন

var posOptions = {timeout: 10000, enableHighAccuracy: false};
$cordovaGeolocation.getCurrentPosition(posOptions).then(function (position) {
var lat = position.coords.latitude;
var long = position.coords.longitude;
 //console.log(lat +"          "+long);
$http.get('https://maps.googleapis.com/maps/api/geocode/json?latlng=' + lat + ',' + long + '&key=your key here').success(function (output) {
//console.log( JSON.stringify(output.results[0]));
//console.log( JSON.stringify(output.results[0].address_components[4].short_name));
var results = output.results;
if (results[0]) {
//console.log("results.length= "+results.length);
//console.log("hi "+JSON.stringify(results[0],null,4));
for (var j = 0; j < results.length; j++){
 //console.log("j= "+j);
//console.log(JSON.stringify(results[j],null,4));
for (var i = 0; i < results[j].address_components.length; i++){
 if(results[j].address_components[i].types[0] == "country") {
 //this is the object you are looking for
  country = results[j].address_components[i];
 }
 }
 }
 console.log(country.long_name);
 console.log(country.short_name);
 } else {
 alert("No results found");
 console.log("No results found");
 }
 });
 }, function (err) {
 });

0

আমি একটি ছোট ম্যাপার ফাংশন তৈরি করেছি:

private getAddressParts(object): Object {
    let address = {};
    const address_components = object.address_components;
    address_components.forEach(element => {
        address[element.types[0]] = element.short_name;
    });
    return address;
}

এটি কৌণিক 4 এর একটি সমাধান তবে আমি মনে করি আপনি ধারণাটি পাবেন get

ব্যবহার:

geocoder.geocode({ 'location' : latlng }, (results, status) => {
    if (status === google.maps.GeocoderStatus.OK) {
        const address = {
            formatted_address: results[0].formatted_address,
            address_parts: this.getAddressParts(results[0])
        };
        (....)
    }

এইভাবে addressঅবজেক্টটি এরকম কিছু হবে:

address: {
    address_parts: {
        administrative_area_level_1: "NY",
        administrative_area_level_2: "New York County",
        country: "US",
        locality: "New York",
        neighborhood: "Lower Manhattan",
        political: "Manhattan",
        postal_code: "10038",
        route: "Beekman St",
        street_number: "90",
    },
    formatted_address: "90 Beekman St, New York, NY 10038, USA"
}

আশা করি এটা সাহায্য করবে!


0
 <div id="location"></div>
        <script>
            window.onload = function () {
                var startPos;
                var geoOptions = {
                    maximumAge: 5 * 60 * 1000,
                    timeout: 10 * 1000,
                    enableHighAccuracy: true
                }


                var geoSuccess = function (position) {
                    startPos = position;
                    geocodeLatLng(startPos.coords.latitude, startPos.coords.longitude);

                };
                var geoError = function (error) {
                    console.log('Error occurred. Error code: ' + error.code);
                    // error.code can be:
                    //   0: unknown error
                    //   1: permission denied
                    //   2: position unavailable (error response from location provider)
                    //   3: timed out
                };

                navigator.geolocation.getCurrentPosition(geoSuccess, geoError, geoOptions);
            };
            function geocodeLatLng(lat, lng) {
                var geocoder = new google.maps.Geocoder;
                var latlng = {lat: parseFloat(lat), lng: parseFloat(lng)};
                geocoder.geocode({'location': latlng}, function (results, status) {
                    if (status === 'OK') {
                        console.log(results)
                        if (results[0]) {
                            document.getElementById('location').innerHTML = results[0].formatted_address;
                            var street = "";
                            var city = "";
                            var state = "";
                            var country = "";
                            var zipcode = "";
                            for (var i = 0; i < results.length; i++) {
                                if (results[i].types[0] === "locality") {
                                    city = results[i].address_components[0].long_name;
                                    state = results[i].address_components[2].long_name;

                                }
                                if (results[i].types[0] === "postal_code" && zipcode == "") {
                                    zipcode = results[i].address_components[0].long_name;

                                }
                                if (results[i].types[0] === "country") {
                                    country = results[i].address_components[0].long_name;

                                }
                                if (results[i].types[0] === "route" && street == "") {

                                    for (var j = 0; j < 4; j++) {
                                        if (j == 0) {
                                            street = results[i].address_components[j].long_name;
                                        } else {
                                            street += ", " + results[i].address_components[j].long_name;
                                        }
                                    }

                                }
                                if (results[i].types[0] === "street_address") {
                                    for (var j = 0; j < 4; j++) {
                                        if (j == 0) {
                                            street = results[i].address_components[j].long_name;
                                        } else {
                                            street += ", " + results[i].address_components[j].long_name;
                                        }
                                    }

                                }
                            }
                            if (zipcode == "") {
                                if (typeof results[0].address_components[8] !== 'undefined') {
                                    zipcode = results[0].address_components[8].long_name;
                                }
                            }
                            if (country == "") {
                                if (typeof results[0].address_components[7] !== 'undefined') {
                                    country = results[0].address_components[7].long_name;
                                }
                            }
                            if (state == "") {
                                if (typeof results[0].address_components[6] !== 'undefined') {
                                    state = results[0].address_components[6].long_name;
                                }
                            }
                            if (city == "") {
                                if (typeof results[0].address_components[5] !== 'undefined') {
                                    city = results[0].address_components[5].long_name;
                                }
                            }

                            var address = {
                                "street": street,
                                "city": city,
                                "state": state,
                                "country": country,
                                "zipcode": zipcode,
                            };

                            document.getElementById('location').innerHTML = document.getElementById('location').innerHTML + "<br/>Street : " + address.street + "<br/>City : " + address.city + "<br/>State : " + address.state + "<br/>Country : " + address.country + "<br/>zipcode : " + address.zipcode;
                            console.log(address);
                        } else {
                            window.alert('No results found');
                        }
                    } else {
                        window.alert('Geocoder failed due to: ' + status);
                    }
                });
            }
        </script>

        <script async defer
                src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY">
        </script>

0

@ সজকাটা একটি ফাংশন তৈরি করে একটি দুর্দান্ত সমাধান পেয়েছিল যা একটি নামক অ্যারেতে অংশের অংশগুলি পায়। যারা সরল জাভাস্ক্রিপ্ট ব্যবহার করতে চান তাদের জন্য এখানে একটি সংকলিত সমাধান দেওয়া হয়েছে।

ফলাফলকে নামযুক্ত অ্যারেতে রূপান্তর করার কাজ:

function getAddressParts(obj) {

    var address = [];

    obj.address_components.forEach( function(el) {
        address[el.types[0]] = el.short_name;
    });

    return address;

} //getAddressParts()

জিওকেড এলএটি / এলএনজি মান:

geocoder.geocode( { 'location' : latlng }, function(results, status) {

    if (status == google.maps.GeocoderStatus.OK) {
        var addressParts =  getAddressParts(results[0]);

        // the city
        var city = addressParts.locality;

        // the state
        var state = addressParts.administrative_area_level_1;
    }

});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.