জিওলোকেশন ব্যবহার করে শহরের নাম পান


140

আমি এইচটিএমএল-ভিত্তিক জিওলোকেশন ব্যবহার করে ব্যবহারকারীর অক্ষাংশ এবং দ্রাঘিমাংশ পরিচালনা করতে সক্ষম হয়েছি।

//Check if browser supports W3C Geolocation API
if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(successFunction, errorFunction);
} 
//Get latitude and longitude;
function successFunction(position) {
    var lat = position.coords.latitude;
    var long = position.coords.longitude;
}

আমি শহরের নামটি প্রদর্শন করতে চাই, এটি পাওয়ার একমাত্র উপায় হ'ল বিপরীত জিওলোকেশন API ব্যবহার করা। আমি বিপরীত ভূ-অবস্থানের জন্য গুগলের ডকুমেন্টেশন পড়েছি তবে কীভাবে আমার সাইটে আউটপুট পেতে হয় তা আমি জানি না।

কীভাবে এটি ব্যবহার করবেন তা আমি জানি না: "http://maps.googleapis.com/maps/api/geocode/json?latlng='+lat+','+long+'&sensor=true"পৃষ্ঠায় শহরের নামটি প্রদর্শন করতে।

আমি কীভাবে এটি অর্জন করতে পারি?


4
আপনি যদি মানচিত্র ব্যবহার করতে যাচ্ছেন না, আপনি কী জানেন যে এটি গুগলের টিওএসের বিরুদ্ধে? 10.4 পয়েন্ট এখানে ডেভেলপারস. google.com/maps/terms একটি গুগল মানচিত্র ছাড়া সামগ্রী ব্যবহার করা হবে না। মানচিত্রের এপিআইএস ডকুমেন্টেশন আপনাকে স্পষ্টরূপে এটি করার অনুমতি না দিলে আপনি কোনও মানচিত্রের এপিআই বাস্তবায়নের সামগ্রীটিকে কোনও Google মানচিত্র ছাড়াই ব্যবহার করবেন না। উদাহরণস্বরূপ, আপনি সম্পর্কিত গুগল মানচিত্র ছাড়াই রাস্তার দৃশ্য চিত্র প্রদর্শন করতে পারেন কারণ মানচিত্রের এপিআই ডকুমেন্টেশন স্পষ্টভাবে এই ব্যবহারের অনুমতি দেয়।
পাইরেটএপ

5
হ্যাঁ, @ পাইরেট অ্যাপের একটি ভাল পয়েন্ট রয়েছে point সেখানে আরও ভাল পরিষেবা থাকতে পারে। আমি এর আগে স্মার্টস্ট্রিটসের সাথে কাজ করেছি এবং আমি জানি তাদের কাছে আরও অনেক বেশি মুক্ত পরিষেবার শর্তাদি রয়েছে। তবে বেশিরভাগ পরিষেবাগুলি বিপরীত জিওকোডিং করে না। আমি জানি টেক্সাস এ অ্যান্ড এম এর একটি নিখরচায় পরিষেবা আছে তবে তাদের কাছে টিওএস সতর্কতা রয়েছে যে আপনি অন্য লোকের উপর ডেটা সংগ্রহ করতে পারবেন না এবং তাদের আগে আপটাইম এবং নির্ভুলতার সমস্যা ছিল।
জোসেফ হানসেন

উত্তর:


201

আপনি গুগল এপিআই ব্যবহার করে এমন কিছু করবেন।

দয়া করে মনে রাখবেন এটির কাজ করার জন্য আপনাকে অবশ্যই Google মানচিত্রের লাইব্রেরি অন্তর্ভুক্ত করতে হবে। গুগল জিওকডার ঠিকানাগুলির অনেকগুলি উপাদান ফেরত দেয় তাই আপনার অবশ্যই শহরটি কী হবে সে সম্পর্কে একটি শিক্ষিত অনুমান করতে হবে।

"প্রশাসনিক_আরএ_লেভেল_1" হ'ল সাধারণত আপনি যা সন্ধান করছেন তবে কখনও কখনও লোকালাই হল আপনার পরে শহর you

যাইহোক - গুগল প্রতিক্রিয়া ধরণের আরও বিশদ এখানে এবং এখানে পাওয়া যাবে

নীচে কোডটি দেওয়া উচিত যাতে কৌশলটি করা উচিত:

<!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]) {
         //formatted address
         alert(results[0].formatted_address)
        //find country name
             for (var i=0; i<results[0].address_components.length; i++) {
            for (var b=0;b<results[0].address_components[i].types.length;b++) {

            //there are different types that might hold a city admin_area_lvl_1 usually does in come cases looking for sublocality type will be more appropriate
                if (results[0].address_components[i].types[b] == "administrative_area_level_1") {
                    //this is the object you are looking for
                    city= results[0].address_components[i];
                    break;
                }
            }
        }
        //city data
        alert(city.short_name + " " + city.long_name)


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

</body> 
</html> 

3
প্রশাসক অঞ্চল স্তর 1 এর ক্ষেত্রে সত্য নয়, কখনও কখনও শহরের নাম থাকে না। - long "দীর্ঘ_নাম" => "সান ফ্রান্সিসকো", "প্রকার" => ["প্রশাসনিক_আরিয়া_লেভেল_2", "রাজনৈতিক"], "সংক্ষিপ্ত নাম" => "সান ফ্রান্সিসকো"}, long "দীর্ঘ_নাম" => "ক্যালিফোর্নিয়া", "প্রকারগুলি "=> [" প্রশাসনিক_আরএ_লেভেল_1 "," রাজনৈতিক "]," সংক্ষিপ্ত নাম "=>" সিএ "}, long" দীর্ঘ নাম "=>" মার্কিন যুক্তরাষ্ট্র "," প্রকার "=> [" দেশ "," রাজনৈতিক "]," সংক্ষিপ্ত নাম "=>" মার্কিন "}
মিং

5
ভি 3 এর জন্য, 'জিওকোড (location' লোকেশন ': ল্যাটলং}) এর মতো location' ল্যাটলং ': ল্যাটলং} স্ট্রিংটি' লোকেশন 'তে পরিবর্তন করা উচিত। এই উদাহরণটি আমাকে প্রায় সেখানে পেয়েছে তবে 'ল্যাটল্যাং' স্ট্রিংটি আর নতুন এপিএসে বৈধ বলে মনে হচ্ছে না। সুনির্দিষ্টতার জন্য দেখুন: developers.google.com/maps/docamentation/javascript/…
বাইনারিজিয়ান্ট

@ মিশল কীভাবে আমরা পুরো ঠিকানার পরিবর্তে কেবল দেশের নাম বা দেশের কোড খুঁজে পাব?
অজয়

1
"দেশ" এবং সিটির ভেরিয়েবলের জন্য if স্টেটমেন্ট টেস্টে @ayay এখন দেশের ডেটা ফেরত দেবে। যদি এটির নামকরণ হয় দেশের = ফলাফলগুলি [0]। ঠিকানা_সংগঠনগুলি [i] আপনি দেশ.লং_নাম এবং দেশ.সোর্ট_নাম দ্বারা ডেটা অ্যাক্সেস করতে পারবেন
মিশাল

এটি কি কোনও প্রদেশের শহরগুলিতে সংকীর্ণ করার উপায় আছে বা কেবল অবস্থানটি নির্দিষ্ট প্রদেশের কিনা তা পরীক্ষা করার জন্য এবং যদি ব্যবহারকারী হয় তবে এটি কোনও নির্দিষ্ট ওয়েবপৃষ্ঠায় পুনঃনির্দেশিত হয়?
দুঃখিত 14

52

এর আর একটি পদ্ধতি হ'ল আমার পরিষেবা, http://ipinfo.io , যা ব্যবহারকারীর বর্তমান আইপি ঠিকানার ভিত্তিতে শহর, অঞ্চল এবং দেশের নাম ফেরত দেয় use এখানে একটি সাধারণ উদাহরণ:

$.get("http://ipinfo.io", function(response) {
    console.log(response.city, response.country);
}, "jsonp");

এখানে আরও বিস্তারিত জেএসফিডেলের উদাহরণ যা সম্পূর্ণ প্রতিক্রিয়া সম্পর্কিত তথ্যও ছাপায়, তাই আপনি উপলব্ধ সমস্ত বিবরণ দেখতে পাবেন: http://jsfiddle.net/zK5FN/2/


23
যদিও সঠিক হিসাবে না।
সালমান ভন আব্বাস

4
কোনও বড় রাশিয়ান সরবরাহকারীর আইপি থেকে শহর এবং ট্রিজিয়ন সনাক্ত করতে পারেনি: (
জেহি

2
লোল ... এটি আমার অভ্যন্তরীণ নেটওয়ার্ক আইপি দেয় (192.168 ...)
মেজর-মান্ন

আমি কি এটি কোনও ডিভাইস (হ্যান্ডহেল্ড) ব্রাউজার থেকে করতে পারি?
আরতি

নির্ভরযোগ্য মনে হয় না। আমি এখনই একটি ল্যাপটপ এবং একটি মোবাইল ফোন ব্যবহার করছি। Ipinfo.io- এর মাধ্যমে উভয় ডিভাইসে প্রদর্শিত শহরগুলি 530 কিলোমিটার দূরে রয়েছে!
আশীষ গোয়েল

52

$.ajax({
  url: "https://geolocation-db.com/jsonp",
  jsonpCallback: "callback",
  dataType: "jsonp",
  success: function(location) {
    $('#country').html(location.country_name);
    $('#state').html(location.state);
    $('#city').html(location.city);
    $('#latitude').html(location.latitude);
    $('#longitude').html(location.longitude);
    $('#ip').html(location.IPv4);
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

<div>Country: <span id="country"></span></div>
  <div>State: <span id="state"></span></div>
    <div>City: <span id="city"></span></div>
      <div>Latitude: <span id="latitude"></span></div>
        <div>Longitude: <span id="longitude"></span></div>
          <div>IP: <span id="ip"></span></div>

এইচটিএমএল 5 জিওলোকেশন ব্যবহারের জন্য ব্যবহারকারীর অনুমতি প্রয়োজন। আপনি যদি এটি না চান তবে https://geolocation-db.com আইপিভি 6 সমর্থনযোগ্য বাইরের লোকেটারের জন্য যান । কোনও সীমাবদ্ধতা এবং সীমাহীন অনুরোধ অনুমোদিত নয়।

উদাহরণ

খাঁটি জাভাস্ক্রিপ্ট উদাহরণের জন্য, jQuery ব্যবহার না করে এই উত্তরটি দেখুন।


17

গুগল ম্যাপ জিওকোডিং এপিআই ব্যবহার করে আপনি শহরের নাম, দেশ, রাস্তার নাম এবং অন্যান্য জিওডাটা পেতে পারেন

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="https://code.jquery.com/jquery-2.2.3.js"></script>
</head>
<body>
    <script type="text/javascript">
        navigator.geolocation.getCurrentPosition(success, error);

        function success(position) {
            console.log(position.coords.latitude)
            console.log(position.coords.longitude)

            var GEOCODING = 'https://maps.googleapis.com/maps/api/geocode/json?latlng=' + position.coords.latitude + '%2C' + position.coords.longitude + '&language=en';

            $.getJSON(GEOCODING).done(function(location) {
                console.log(location)
            })

        }

        function error(err) {
            console.log(err)
        }
    </script>
</body>
</html>

এবং jQuery ব্যবহার করে পৃষ্ঠায় এই ডেটা প্রদর্শন করতে

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="https://code.jquery.com/jquery-2.2.3.js"></script>
</head>
<body>

    <p>Country: <span id="country"></span></p>
    <p>State: <span id="state"></span></p>
    <p>City: <span id="city"></span></p>
    <p>Address: <span id="address"></span></p>

    <p>Latitude: <span id="latitude"></span></p>
    <p>Longitude: <span id="longitude"></span></p>

    <script type="text/javascript">
        navigator.geolocation.getCurrentPosition(success, error);

        function success(position) {

            var GEOCODING = 'https://maps.googleapis.com/maps/api/geocode/json?latlng=' + position.coords.latitude + '%2C' + position.coords.longitude + '&language=en';

            $.getJSON(GEOCODING).done(function(location) {
                $('#country').html(location.results[0].address_components[5].long_name);
                $('#state').html(location.results[0].address_components[4].long_name);
                $('#city').html(location.results[0].address_components[2].long_name);
                $('#address').html(location.results[0].formatted_address);
                $('#latitude').html(position.coords.latitude);
                $('#longitude').html(position.coords.longitude);
            })

        }

        function error(err) {
            console.log(err)
        }
    </script>
</body>
</html>

15

আমার জন্য এখানে আপডেট ওয়ার্কিং সংস্করণ রয়েছে যা সিটি / টাউন পাবে, দেখে মনে হচ্ছে কিছু কিছু ক্ষেত্র জসন প্রতিক্রিয়াতে পরিবর্তিত হয়েছে। এই প্রশ্নের জন্য পূর্ববর্তী উত্তরগুলি উল্লেখ করে। (মাইকেল ও আরও একটি রেফারেন্সকে ধন্যবাদ: লিঙ্ক

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) {
      if (results[1]) {
        var arrAddress = results;
        console.log(results);
        $.each(arrAddress, function(i, address_component) {
          if (address_component.types[0] == "locality") {
            console.log("City: " + address_component.address_components[0].long_name);
            itemLocality = address_component.address_components[0].long_name;
          }
        });
      } else {
        alert("No results found");
      }
    } else {
      alert("Geocoder failed due to: " + status);
    }
  });
}

10

জিওলোকেটর.জেএস তা করতে পারে। (আমি লেখক)

শহরের নাম (সীমিত ঠিকানা) পাওয়া

geolocator.locateByIP(options, function (err, location) {
    console.log(location.address.city);
});

পুরো ঠিকানার তথ্য প্রাপ্ত

নীচের উদাহরণগুলিতে সঠিক স্থানাঙ্কগুলি পাওয়ার জন্য প্রথমে HTML5 জিওলোকেশন এপিআই চেষ্টা করবে। যদি ব্যর্থ হয় বা প্রত্যাখ্যাত হয়, তবে এটি জিও-আইপি লুক-আপে পড়ে যাবে। এটি স্থানাঙ্কগুলি পাওয়ার পরে এটি স্থানাঙ্কগুলিকে কোনও ঠিকানার বিপরীতে জিওকোড করবে।

var options = {
    enableHighAccuracy: true,
    fallbackToIP: true, // fallback to IP if Geolocation fails or rejected
    addressLookup: true
};
geolocator.locate(options, function (err, location) {
    console.log(location.address.city);
});

এটি অভ্যন্তরীণভাবে গুগল এপিআই ব্যবহার করে (ঠিকানার জন্য) সুতরাং এই কল করার আগে আপনার জিওপিএল কী দিয়ে জিওলোকেটরটি কনফিগার করা উচিত।

geolocator.config({
    language: "en",
    google: {
        version: "3",
        key: "YOUR-GOOGLE-API-KEY"
    }
});

জিওলোকেটর জিও-লোকেশন (এইচটিএমএল 5 বা আইপি লুকআপের মাধ্যমে), জিওকোডিং, অ্যাড্রেস লুক-আপগুলি (বিপরীত জিওকোডিং), দূরত্ব ও সময়কাল, সময় অঞ্চল তথ্য এবং আরও অনেক বৈশিষ্ট্য সমর্থন করে ...


6

কিছু কিছু অনুসন্ধান এবং একত্রে আমার নিজের স্টাফ সহ বিভিন্ন সমাধানের একসাথে পাইক করার পরে, আমি এই ফাংশনটি নিয়ে এসেছি:

function parse_place(place)
{
    var location = [];

    for (var ac = 0; ac < place.address_components.length; ac++)
    {
        var component = place.address_components[ac];

        switch(component.types[0])
        {
            case 'locality':
                location['city'] = component.long_name;
                break;
            case 'administrative_area_level_1':
                location['state'] = component.long_name;
                break;
            case 'country':
                location['country'] = component.long_name;
                break;
        }
    };

    return location;
}

3

আপনি https://ip-api.io/ ব্যবহার করতে পারেনশহরের নাম পেতে । এটি আইপিভি 6 সমর্থন করে।

বোনাস হিসাবে এটি আইপি ঠিকানাটি টর নোড, পাবলিক প্রক্সি বা স্প্যামার কিনা তা পরীক্ষা করে দেখতে দেয়।

জাভাস্ক্রিপ্ট কোড:

$(document).ready(function () {
        $('#btnGetIpDetail').click(function () {
            if ($('#txtIP').val() == '') {
                alert('IP address is reqired');
                return false;
            }
            $.getJSON("http://ip-api.io/json/" + $('#txtIP').val(),
                 function (result) {
                     alert('City Name: ' + result.city)
                     console.log(result);
                 });
        });
    });

এইচটিএমএল কোড

<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<div>
    <input type="text" id="txtIP" />
    <button id="btnGetIpDetail">Get Location of IP</button>
</div>

জেএসএন আউটপুট

{
    "ip": "64.30.228.118",
    "country_code": "US",
    "country_name": "United States",
    "region_code": "FL",
    "region_name": "Florida",
    "city": "Fort Lauderdale",
    "zip_code": "33309",
    "time_zone": "America/New_York",
    "latitude": 26.1882,
    "longitude": -80.1711,
    "metro_code": 528,
    "suspicious_factors": {
        "is_proxy": false,
        "is_tor_node": false,
        "is_spam": false,
        "is_suspicious": false
    }
}

2

@ পাইরেট অ্যাপ যেমন তাঁর মন্তব্যে উল্লেখ করেছেন, এটি আপনার ইচ্ছা হিসাবে মানচিত্রের এপিআই ব্যবহার করা গুগলের মানচিত্র এপিআই লাইসেন্সিংয়ের বিরুদ্ধে স্পষ্টভাবে।

আপনার কাছে জিওআইপি ডাটাবেস ডাউনলোড করা এবং স্থানীয়ভাবে এটি জিজ্ঞাসা করা বা তৃতীয় পক্ষের এপিআই পরিষেবা, যেমন আমার পরিষেবা আইপিডাটা.এক্স ব্যবহার সহ অনেকগুলি বিকল্প রয়েছে ।

আইপডেটা আপনাকে জিওলোকেশন, সংস্থা, মুদ্রা, টাইমজোন, কলিং কোড, পতাকা এবং টর প্রস্থান নোডের যে কোনও আইপিভি 4 বা আইপিভি 6 ঠিকানা থেকে স্থিতির ডেটা দেয়।

এবং প্রতি 10 সেকেন্ডে 10,000 অনুরোধগুলি পরিচালনা করতে সক্ষম 10 টি গ্লোবাল এন্ডপয়েন্টস দিয়ে স্কেলযোগ্য!

এই উত্তরটি একটি 'পরীক্ষা' API কী ব্যবহার করে যা খুব সীমাবদ্ধ এবং কেবল কয়েকটি কল পরীক্ষার জন্য বোঝানো হয়। আপনার নিজের ফ্রি এপিআই কী এর জন্য সাইনআপ করুন এবং বিকাশের জন্য প্রতিদিন 1500 টি অনুরোধ পান get

$.get("https://api.ipdata.co?api-key=test", function(response) {
  $("#ip").html("IP: " + response.ip);
  $("#city").html(response.city + ", " + response.region);
  $("#response").html(JSON.stringify(response, null, 4));
}, "jsonp");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1><a href="https://ipdata.co">ipdata.co</a> - IP geolocation API</h1>

<div id="ip"></div>
<div id="city"></div>
<pre id="response"></pre>

ঝাঁকুনি; https://jsfiddle.net/ipdata/6wtf0q4g/922/


1

এখানে এটি আরও একবার দেখুন .. গ্রহণযোগ্য উত্তরে আরও যুক্ত করা সম্ভবত আরও বিস্তৃত .. অবশ্যই সুইচ-কেস এটিকে মার্জিত দেখাবে।

function parseGeoLocationResults(result) {
    const parsedResult = {}
    const {address_components} = result;

    for (var i = 0; i < address_components.length; i++) {
        for (var b = 0; b < address_components[i].types.length; b++) {
            if (address_components[i].types[b] == "street_number") {
                //this is the object you are looking for
                parsedResult.street_number = address_components[i].long_name;
                break;
            }
            else if (address_components[i].types[b] == "route") {
                //this is the object you are looking for
                parsedResult.street_name = address_components[i].long_name;
                break;
            }
            else if (address_components[i].types[b] == "sublocality_level_1") {
                //this is the object you are looking for
                parsedResult.sublocality_level_1 = address_components[i].long_name;
                break;
            }
            else if (address_components[i].types[b] == "sublocality_level_2") {
                //this is the object you are looking for
                parsedResult.sublocality_level_2 = address_components[i].long_name;
                break;
            }
            else if (address_components[i].types[b] == "sublocality_level_3") {
                //this is the object you are looking for
                parsedResult.sublocality_level_3 = address_components[i].long_name;
                break;
            }
            else if (address_components[i].types[b] == "neighborhood") {
                //this is the object you are looking for
                parsedResult.neighborhood = address_components[i].long_name;
                break;
            }
            else if (address_components[i].types[b] == "locality") {
                //this is the object you are looking for
                parsedResult.city = address_components[i].long_name;
                break;
            }
            else if (address_components[i].types[b] == "administrative_area_level_1") {
                //this is the object you are looking for
                parsedResult.state = address_components[i].long_name;
                break;
            }

            else if (address_components[i].types[b] == "postal_code") {
                //this is the object you are looking for
                parsedResult.zip = address_components[i].long_name;
                break;
            }
            else if (address_components[i].types[b] == "country") {
                //this is the object you are looking for
                parsedResult.country = address_components[i].long_name;
                break;
            }
        }
    }
    return parsedResult;
}

0

আপনি এটি পেতে এটি ব্যবহার করতে পারেন এমন একটি সহজ ফাংশন। আমি এপিআই অনুরোধ করতে অক্ষর ব্যবহার করেছি , তবে আপনি অন্য কিছু ব্যবহার করতে পারেন।

async function getCountry(lat, long) {
  const { data: { results } } = await axios.get(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${long}&key=${GOOGLE_API_KEY}`);
  const { address_components } = results[0];

  for (let i = 0; i < address_components.length; i++) {
    const { types, long_name } = address_components[i];

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