নেভিগেটর.জিওলোকেশন.জেটকেন্দ্রিক পজিশন কখনও কখনও কখনও কখনও কাজ করে না


220

সুতরাং আমার কাছে নেভিগেটর.জিওলোকেশন.জেটকন্ট্রেন্টপজিশন জ্যামি ব্যবহার করে বেশ সহজ জেএস রয়েছে।

$(document).ready(function(){
  $("#business-locate, #people-locate").click(function() {
    navigator.geolocation.getCurrentPosition(foundLocation, noLocation);
  });

  navigator.geolocation.getCurrentPosition(foundLocation, noLocation);

  function foundLocation(position) {
    var lat = position.coords.latitude;
    var lon = position.coords.longitude;
    var userLocation = lat + ', ' + lon;
    $("#business-current-location, #people-current-location").remove();
    $("#Near-Me")
      .watermark("Current Location")
      .after("<input type='hidden' name='business-current-location' id='business-current-location' value='"+userLocation+"' />");
    $("#people-Near-Me")
      .watermark("Current Location")
      .after("<input type='hidden' name='people-current-location' id='people-current-location' value='"+userLocation+"' />");
  }
  function noLocation() {
    $("#Near-Me").watermark("Could not find location");
    $("#people-Near-Me").watermark("Could not find location");
  }
})//end DocReady

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


ফাংশনগুলি ব্যবহারের আগে সম্ভবত সেগুলি সংজ্ঞায়িত করুন।
tcooc

4
@ ডিজিটালফ্রেশ, এতে কিছু আসে যায় না কারণ কোড কার্যকর করা শুরুর আগে জেএস পার্সার এই ঘোষণাগুলি সন্ধান করেন
অ্যান্টিমেটার 15

এটা কি সম্ভব যে সেখানে jQuery ব্যবহারের ফলে সমস্যা দেখা দিচ্ছে?
theassociatedweb

1
আপনি যখন বলছেন এটি কখনও কখনও কাজ করে না ঠিক কী বলতে চান? হয়noLocation ফাংশন বলা হচ্ছে? যদি তাই হয়, আপনি একটি যোগ করতে পারেন errorথেকে প্যারামিটার noLocation()এবং তারপর error.codeএবং error.messageআপনি ডিবাগ সাহায্য করতে পারে। আপনি কী ব্রাউজার ব্যবহার করছেন এবং যদি আপনি একই ব্রাউজারটি বিভিন্ন ব্রাউজারে দেখেন তবে এটি আমাদের জানতেও সহায়তা করতে পারে।
npdoty

আমি বোঝাতে চাই যে কখনও কখনও এটি আমাকে দীর্ঘতম দেয়, এবং কখনও কখনও তা দেয় না। যখন এটি কাজ করে না, এটি এমনকি "অবস্থানটি খুঁজে পেল না" বার্তাটি ফেলে দেয় না যাতে নোলোসেশন বিটটিও গুলি চালায় না।
theassociatedweb

উত্তর:


342

আমার ঠিক একই সমস্যা ছিল এবং এটি সম্পর্কে অনলাইনে কোনও তথ্যই খুঁজে পাচ্ছি না। বইগুলিতে কিছুই নেই। অবশেষে আমি স্ট্যাকওভারফ্লোতে এই নিখুঁত জিজ্ঞাসাটি পেয়েছি এবং (হ্যাক!) এটি এখানে একটি অ্যাকাউন্ট সেটআপ করার জন্য আমার চূড়ান্ত প্রেরণা ছিল।

এবং আমি একটি আংশিক উত্তর আছে, কিন্তু হায় একটি সম্পূর্ণ উত্তর না।

প্রথমত, উপলব্ধি করুন যে getCenterPosition জন্য ডিফল্ট সময়সীমা অসীম (!)। এর অর্থ হ'ল যদি getCurrentPosition পিছনের প্রান্তে কোথাও স্থির থাকে তবে আপনার ত্রুটি হ্যান্ডলারটি কখনও কল করা হবে না

আপনি একটি সময়সীমা পেয়েছেন তা নিশ্চিত করার জন্য, আপনার কলটিতে getচ্ছিক তৃতীয় প্যারামিটারটি getCenterPosition এ যুক্ত করুন, উদাহরণস্বরূপ, যদি আপনি চান ব্যবহারকারী কী ঘটছে তার কোনও ক্লু দেওয়ার আগে 10 সেকেন্ডের বেশি অপেক্ষা না করে, ব্যবহার করুন:

navigator.geolocation.getCurrentPosition(successCallback,errorCallback,{timeout:10000});

দ্বিতীয়ত, আমি বিভিন্ন প্রসঙ্গে যথেষ্ট ভিন্ন নির্ভরযোগ্যতা পেয়েছি। এখানে বাড়িতে, আমি এক বা দুটি মধ্যে কলব্যাক পাই, যদিও যথার্থতা সঠিক নয়।

কাজের ক্ষেত্রে যদিও আমি আচরণের মধ্যে বেশ বিচিত্র পরিবর্তনগুলি অনুভব করি: জিওলোকেশন কিছু সময় সমস্ত কম্পিউটারে কাজ করে (IE বাদে, অবশ্যই), অন্যরা কেবল ক্রোম এবং সাফারিতে কাজ করে তবে ফায়ারফক্স (জেকো ইস্যু?) নয়, অন্যরা একবার কাজ করে, তারপরে পরবর্তীকালে ব্যর্থ - এবং প্যাটার্নটি ঘন্টার পর ঘন্টা, দিনে দিনে পরিবর্তিত হয়। কখনও কখনও আপনার একটি 'ভাগ্যবান' কম্পিউটার থাকে, কখনও কখনও না। সম্ভবত পূর্ণিমাতে ছাগল জবাই করা সাহায্য করবে?

আমি এটি অনুধাবন করতে সক্ষম হইনি, তবে আমি সন্দেহ করি যে এই বৈশিষ্ট্যটি চাপ দিচ্ছে এমন বিভিন্ন গুং-হো বই এবং ওয়েবসাইটগুলিতে বিজ্ঞাপনের চেয়ে পিছনের দিকের অবকাঠামো বেশি অসম । আমি সত্যিই চাই যে এই বৈশিষ্ট্যটি কীভাবে ফ্লিকে এবং কীভাবে আপনার সময়সীমার সেটিংটি গুরুত্বপূর্ণ, যদি আপনি ত্রুটি হ্যান্ডলারটি সঠিকভাবে কাজ করতে চান তবে সেগুলি সম্পর্কে তারা আরও কিছুটা সোজা হন ।

আমি আজ এই স্টুডেন্টদের শিক্ষার্থীদের শেখানোর চেষ্টা করেছি এবং আমার নিজের কম্পিউটার (প্রজেক্টর এবং বেশ কয়েকটি বড় স্ক্রিনে) নিঃশব্দে ব্যর্থ হচ্ছিল এমন বিব্রতকর পরিস্থিতি ছিল, যেখানে প্রায় ৮০% শিক্ষার্থী প্রায় তাত্ক্ষণিকভাবে ফলাফল পেয়েছিল (এটি ব্যবহার করে) ঠিক একই ওয়্যারলেস নেটওয়ার্ক)। যখন আমার শিক্ষার্থীরা টাইপস এবং অন্যান্য গাফ তৈরি করছে এবং যখন আমার নিজস্ব পিসিও ব্যর্থ হচ্ছে তখন এই সমস্যাগুলি সমাধান করা খুব কঠিন।

যাইহোক, আমি আশা করি এটি আপনার কয়েকজনকে সহায়তা করে। স্যানিটি চেক করার জন্য ধন্যবাদ!


5
ভাল বিস্তারিত তথ্য, ধন্যবাদ! আমি একই সমস্যাগুলি দেখতে পাচ্ছি, তবে কেবল ফায়ারফক্স ৩.6.১৩ এ। ক্রোম বেশ নির্ভরযোগ্য বলে মনে হচ্ছে।
ফিলিপ লিমা

এখানেও একই এবং সর্বোচ্চ প্যারামিটারটিও অবিশ্বাস্য বলে মনে হয়। পোস্টের জন্য ধন্যবাদ.
রিচার্ড

1
ভাল এক, আমার একই সমস্যা ছিল (একটি স্যামসাং গ্যালাক্সি ট্যাবে, ১০.১, অ্যান্ড্রয়েড 4.0.০.৩ চালাচ্ছে ), একবার আমি উপরের টাইমআউট প্যারামটি ব্যবহার করার পরে আমি সমস্যাটি পরিচালনা করতে সক্ষম হয়েছি।
mlo55

9
timeoutবিকল্পটি getCurrentPosition()কী আসলে টাইমিংয়ের তা বোঝা গুরুত্বপূর্ণ । ভৌগলিক অবস্থানের অনুরোধটি ব্যবহারকারীকে অনুমতি বা অস্বীকার করার সময় আসেনি, তবে অনুমতি পাওয়ার পরে নেটওয়ার্ককে কোনও অবস্থান ফিরিয়ে নিতে কতক্ষণ অনুমতি দেওয়া হবে। যদি ব্যবহারকারী ভূ-অবস্থানের অনুরোধটির উত্তর না দেয় তবে ত্রুটি হ্যান্ডলারটি কখনও কল করা হবে না। সুতরাং, আপনার @ xiaohouzi79 উত্তরের মতো দ্বিতীয় সময়সীমা দরকার।
ফ্রান্সোইস

2
পূর্ণিমাতে ছাগল জবাই করতে সাহায্য করবে? এলএল
অসীম কেটি

66

এটি এই হ্যাকি উপায়ে আমি প্রায় ঘুরে বেড়াচ্ছি, কমপক্ষে এটি সমস্ত বর্তমান ব্রাউজারগুলিতে কাজ করে (উইন্ডোজে, আমি ম্যাকের মালিক নই):

if (navigator.geolocation) {
    var location_timeout = setTimeout("geolocFail()", 10000);

    navigator.geolocation.getCurrentPosition(function(position) {
        clearTimeout(location_timeout);

        var lat = position.coords.latitude;
        var lng = position.coords.longitude;

        geocodeLatLng(lat, lng);
    }, function(error) {
        clearTimeout(location_timeout);
        geolocFail();
    });
} else {
    // Fallback for no geolocation
    geolocFail();
}

কেউ যদি ফায়ারফক্সে কখনই ক্লিক করুন বন্ধ বা ক্লিক না করে বা না ভাগ করে নেওয়ার বিকল্পটি বেছে নেয় তবে এটি কাজ করবে।

আড়ষ্ট, কিন্তু এটি কাজ করে।


1
+1 তবে আপনি geolocFail();ত্রুটি হ্যান্ডলার এবং getcodeLatLng();জিও কোডারটি অনুপস্থিত ।
কায়সার 15

মিষ্টি - টাইমার সুন্দরভাবে কাজ করে যদি কেউ কোনও অবস্থান ভাগ না করা পছন্দ করে। কিছু ব্যবহারকারীরা যখন এটি করেন তখন ভাল খেলেন না play আমার স্টোর লোকেটার প্লাস ডব্লিউপি প্লাগইনে এই টাইমারটির কাজটি দুর্দান্ত কাজ করেছে!
ল্যান্স ক্লিভল্যান্ড

2
@ সাজিথ - নিশ্চিত নয় যে এই সমাধানটি এখনকার এফএফ ব্রাউজারগুলির সাথে পুরানো হয়েছে। আমি সমাধানটি দেওয়ার সময় এটি কাজ করেছিল কারণ আমি যে সাইটে কাজ করছি তার জন্য এটির দরকার ছিল। আপনি পরীক্ষা করেছেন?
যাচ্ছে

দুঃখিত, এটি কাজ করেছে। তবে এটিকে কী কাজ করে তা আমি খুঁজে পাচ্ছি না closingএফএফটি বন্ধ করার পরে এটি পুনরায় খুলতে চাই ........ আপনার সমাধানের জন্য
থ্যানেক্স

1
আপনার স্ট্রিংয়ের ভিতরে ফাংশন ব্যবহার করা উচিত নয়। দুর্ভাগ্যজনকভাবে সেখানে মন্দ কাজ করে। সেটটাইমআউট ("জিওলোকফেইল ()", 10000);
এটেলিকান

42

এটি প্রতিবার আমার জন্য কাজ করে:

navigator.geolocation.getCurrentPosition(getCoor, errorCoor, {maximumAge:60000, timeout:5000, enableHighAccuracy:true});

যদিও এটি খুব নির্ভুল নয়। মজার বিষয় হ'ল একই ডিভাইসে যদি আমি এটি চালনা করি তবে এটি আমাকে প্রায় 100 মিটার (প্রতিবার) বন্ধ করে দেয় তবে আমি যদি গুগলের মানচিত্রে যায় তবে এটি আমার অবস্থানটি ঠিক খুঁজে পায়। সুতরাং যদিও আমি মনে করি সক্ষমযোগ্য উচ্চতা নির্ভুলতা: সত্য এটি ধারাবাহিকভাবে কাজ করতে সহায়তা করে, মনে হয় এটি এটিকে আরও নির্ভুল করে তোলে ...


এটি ফায়ারফক্সকে অনুরোধ অস্বীকার করে এবং একটি সময়সীমা অজানা ফেরত পাঠানো বন্ধ করে দিয়েছে।
টনি

100 মিটার দূরে সেল টাওয়ারটি আমি সংযুক্ত। সুতরাং এটি সেল টাওয়ারের অবস্থানটি ফিরিয়ে আনছে, আমার ফোন নয়। জিপিএস-এ লাথি
মারার

9
এটি আপনাকে কয়েক মিটার দূরে সরিয়ে রাখে কারণ আপনার সর্বোচ্চ প্যারামিটার 60 সেকেন্ডে সেট করা আছে। সুতরাং এটি আপনার অবস্থানটি যেখানে আপনি 60 সেকেন্ড আগে এসেছিলেন putting সর্বোচ্চ দশকে 10 সেকেন্ড বা তার চেয়ে কম সেট করুন (সর্বাধিক বয়স: 10000) এবং আবার চেষ্টা করুন।
রবার্ট স্মিথ

আমি এই গেটকন্টার পজিশনটি একটি কৌণিক রেজোলভারের মধ্যে ব্যবহার করছিলাম যা একটি পর্যবেক্ষণযোগ্য ফেরত দেয়। রেজোলভারটি কেবলমাত্র মাঝেমধ্যে শেষ হয়েছিল। এই বিকল্পগুলি যুক্ত করা হচ্ছে: {সর্বাধিক বয়স: 60000, সময়সীমা: 5000, সক্ষম করুন হাইঅ্যাকসিওরেসি: সত্য every এটি প্রতিবার কাজ করে !!!
মাটোনো

17

এটি ইতিমধ্যে একটি পুরাতন প্রশ্ন, তবে সমস্ত উত্তর আমার সমস্যাটির সমাধান করেনি, সুতরাং যা আমি শেষ পর্যন্ত পেয়েছি তা যুক্ত করুন। এটি হ্যাকের মতো গন্ধযুক্ত (এবং এটি এক), তবে আমার পরিস্থিতিতে সর্বদা কাজ করে। আপনার পরিস্থিতিতেও আশা করি।

//Dummy one, which will result in a working next statement.
navigator.geolocation.getCurrentPosition(function () {}, function () {}, {});
//The working next statement.
navigator.geolocation.getCurrentPosition(function (position) {
    //Your code here
}, function (e) {
    //Your error handling here
}, {
    enableHighAccuracy: true
});

3
এটি হ্যাকের হ্যাকিস্ট এবং আপনি কীভাবে চেষ্টা করে দেখতে ভেবেছিলেন তা আমার কোনও ধারণা নেই তবে এটি আমার সমস্যা সমাধান করে। ধন্যবাদ!
ব্রেট গ্রেগসন

আমি কিছু ক্ষেত্রে এটি নিজেই ব্যবহার করেছি। দ্বিতীয় চেষ্টাটি সর্বদা আমার অভিজ্ঞতায় আরও ভাল কাজ করে
নিকো ওয়েস্টারডেল

13

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

আমি যা পেয়েছি তা এখানে:

আপনি যখন প্রথমবার getCenterPosition বলবেন এটি নিখুঁত কাজ করে। পরবর্তী কোনও কল কখনই ফিরে আসে না, অর্থাৎ এটি সাফল্য কলব্যাক বা ত্রুটি-কলব্যাক ফাংশনগুলিকে আগুন দেয় না। আমার বক্তব্য প্রমাণ করার জন্য আমি আমার কলটিতে কয়েকটি অবস্থানের বিকল্প যুক্ত করেছি:

 navigator.geolocation.getCurrentPosition(successCallback, errorCallback,  {timeout: 10000});

এবং এটি প্রতিবারের বার হয়ে যায় (প্রথম সফল কলের পরে)। আমি ভেবেছিলাম যে আমি এটি সর্বোচ্চ পর্বের সাথে সংশোধন করতে পারি তবে এটি কাজ করে বলে মনে হয় না যে এটি কাজ করে:

navigator.geolocation.getCurrentPosition(successCallback, errorCallback,  {maximumAge:60000, timeout: 2000});

এটি যদি আপনি seconds০ সেকেন্ডের মধ্যে কল করে তবে এটি সরাসরি কন্ট্রোলপজিশন ফাংশনটি কল করা রোধ করা উচিত, তবে এটি এটিকে উপেক্ষা করে (তবে এটির কারণ হতে পারে কারণ আমি দ্বিতীয় পাতাটি ট্রিগার করতে আমার পৃষ্ঠাটি রিফ্রেশ করেছিলাম, নিশ্চিত না যে এটি যদি অবিরাম কলগুলিতে থাকে তবে নিশ্চিত না)

BTW, এমনকি এর উদাহরণ google এই ব্রাউজারগুলিতে ব্যর্থ হয় যা আমাকে বিশ্বাস করতে বাধ্য করে যে এটি সত্যই ব্রাউজার বাগ, এটি চেষ্টা করে দেখুন, সাফারিতে দুবার লোড করুন এবং এটি দ্বিতীয়বার কার্যকর হবে না।

যদি কেউ এর জন্য সমাধান খুঁজে পান তবে দয়া করে আমাকে জানান :-)

চিয়ার্স।


আমার ঠিক আপনার মতো সমস্যা রয়েছে, এটি প্রথম কলের জন্য কাজ করে তবে পরেরটির জন্য কখনই নয়, যদি কেউ সমাধান পান তবে আমি খুব ছেদ করে যাব ... @ xiaohouzi79 আপনার সমাধান প্রতিবারই শেষ হবে (হিমশীতল ছাড়া) জিওলোকফাইলে ( )
অ্যাড্রিয়ানো রিজো

8

আপনি কোনও ত্রুটি বার্তা পাবেন না কারণ এটির ডিফল্টরূপে সময়সীমা নেই (অন্তত আমি মনে করি)। ফায়ারফক্সের সাথে আমার একই সমস্যা ছিল কেবল আমার জন্য ফায়ার ফক্স সর্বদা একটি সময়সীমা দেয়। আপনি নিজের মতো করে একটি টাইমআউট সেট করতে পারেন।

আমার ফাংশন ক্রোমে দুর্দান্ত কাজ করে তবে ফায়ার ফক্সে আমি প্রতিবার একটি সময়সীমা পেয়েছি।

    navigator.geolocation.getCurrentPosition(
        function(position) {
            //do succes handling
        },
        function errorCallback(error) {
            //do error handling
        },
        {
            timeout:5000
        }
    );

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


7
কেবলমাত্র একটি এফওয়াইআই, সর্বাধিক বয়স ক্যাশে অবস্থানের ডেটার বয়স বোঝায়, এটি অনন্ত গ্যারান্টিতে সেট করে আপনি ক্যাশেড সংস্করণ পাবেন। এটিকে 0 এ সেট করা ডিভাইসকে অবস্থানটি পুনরুদ্ধার করতে বাধ্য করে।
পোরকো

ডাউনভোটেড কারণ সর্বাধিক বয়স: উপরের দিকে ইঙ্গিত হিসাবে অনন্তি আপনাকে স্ক্রু আপ করবে মানে জোর করে ব্যবহারের ক্যাশেড মান।
n13

7

আমি এখনও 2017 সালে স্পটি ফলাফল পেয়েছি, এবং আমার একটি তত্ত্ব রয়েছে: এপিআই ডকুমেন্টেশন বলছে যে কলটি এখন কেবল "সুরক্ষিত প্রসঙ্গে", অর্থাৎ এইচটিটিপিএস-এ উপলব্ধ। আমার বিকাশের পরিবেশের ফলাফল পেতে লোকাল হোস্টে (লোকালহোস্টে এইচটিপি) এবং আমি বিশ্বাস করি এ কারণেই।


হুঁ মজার। এমনকি 2020 এ এখনও লোকালহোস্টে এইচটিটিপিএসের সাথে ঝাপটায়!
নাইট্রস্টাউটপ্লিজ

6

এটি কারও পক্ষে কার্যকর হলে আমি এখানে এটি পোস্ট করব ...

আইওএস সাফারিতে, navigator.geolocation.getCurrentPositionআমার যদি একটি সক্রিয় navigator.geolocation.watchPositionক্রিয়াকলাপ চলমান থাকে তবে কলগুলি শেষ হয়ে যাবে ।

এখানে বর্ণিত হিসাবে watchPositionযথাযথভাবে ব্যবহার শুরু করা এবং থামানো clearWatch(), কাজ করা হয়েছে: https://developer.mozilla.org/en-US/docs/Web/API/Goolocation/watchPosition


1
তোমাকে অনেক ধন্যবাদ. এটি ছিল আমার জন্য সমাধান।
কিন ঝেংকুয়ান

5

বন্ধ করার জন্য এখানে আমার সমাধানটি ধন্যবাদ:

  function geoloc(success, fail){
    var is_echo = false;
    if(navigator && navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(
        function(pos) {
          if (is_echo){ return; }
          is_echo = true;
          success(pos.coords.latitude,pos.coords.longitude);
        }, 
        function() {
          if (is_echo){ return; }
          is_echo = true;
          fail();
        }
      );
    } else {
      fail();
    }
  }

  function success(lat, lng){
    alert(lat + " , " + lng);
  }
  function fail(){
    alert("failed");
  }

  geoloc(success, fail);

এটি আমার পক্ষে প্রতিক্রিয়া-স্থানীয় হিসাবে কাজ করেছে navigator && navigator.geolocation
আশীষ সিং রাওয়াত

5

সুতরাং আমি একই জিনিস মধ্যে চলমান ছিল। আমি সময়সীমা সমাধান চেষ্টা করেছিলাম যা কার্যকর হয়েছিল তবে নির্ভরযোগ্যভাবে নয়। আমি দেখতে পেয়েছি যে আপনি যদি কেবল দু'বার কল করেন তবে লোকেশনটি সঠিকভাবে রিফ্রেশ হয়

function getLocation(callback)
{   
    if(navigator.geolocation)
    {
        navigator.geolocation.getCurrentPosition(function(position)
        {
            navigator.geolocation.getCurrentPosition(callback, function(){},{maximumAge:0, timeout:10000});
        },function(){}, {maximumAge:0, timeout:10000});
    }
    return true;
}

অবশ্যই এটি কিছুটা ধীর গতিযুক্ত তবে আমার এটি একবারও ভুল অবস্থানটি দেয় নি। আমি এটি কয়েক বার সময়সীমায় আঘাত করতে পেরেছি এবং এটির দুর্দান্ত কাজ করার পরে আর কিছু না ফিরিয়ে দিয়েছি। আমি জানি এটি এখনও কিছুটা হ্যাকি এবং আসল সমাধানের সন্ধানের জন্য আমি অপেক্ষা করছি।

অথবা আপনি যদি নিশ্চিত করতে চান যে আপনি হাল ছেড়ে দিতে না চান ততক্ষণ চেষ্টা চালিয়ে যাচ্ছে আপনি এই জাতীয় কিছু চেষ্টা করতে পারেন।

//example
$(document).ready(function(){
    getLocation(function(position){
        //do something cool with position
        console.log(position);
    });
});


var GPSTimeout = 10; //init global var NOTE: I noticed that 10 gives me the quickest result but play around with this number to your own liking


//function to be called where you want the location with the callback(position)
function getLocation(callback)
{   
    if(navigator.geolocation)
    {
        var clickedTime = (new Date()).getTime(); //get the current time
        GPSTimeout = 10; //reset the timeout just in case you call it more then once
        ensurePosition(callback, clickedTime); //call recursive function to get position
    }
    return true;
}

//recursive position function
function ensurePosition(callback, timestamp)
{
    if(GPSTimeout < 6000)//set at what point you want to just give up
    {
        //call the geolocation function
        navigator.geolocation.getCurrentPosition(
            function(position) //on success
        {
                //if the timestamp that is returned minus the time that was set when called is greater then 0 the position is up to date
            if(position.timestamp - timestamp >= 0)
                {
                    GPSTimeout = 10; //reset timeout just in case
                    callback(position); //call the callback function you created
                }
                else //the gps that was returned is not current and needs to be refreshed
                {
                    GPSTimeout += GPSTimeout; //increase the timeout by itself n*2
                    ensurePosition(callback, timestamp); //call itself to refresh
                }
            },
            function() //error: gps failed so we will try again
            {
                GPSTimeout += GPSTimeout; //increase the timeout by itself n*2
                ensurePosition(callback, timestamp);//call itself to try again
            },
            {maximumAge:0, timeout:GPSTimeout}
        )
    }       
}

আমার সম্ভবত এখানে কিছু টাইপস এবং কিছু বানান ত্রুটি রয়েছে তবে আমি আশা করি আপনি ধারণাটি পেয়ে গেছেন। কারও কাছে প্রশ্ন থাকলে বা কেউ এর থেকে ভাল কিছু পেলে আমাকে জানান।


4

আইফোন অ্যাপে যে কারও জন্য কাজ করা ...

যদি আপনার কোডটি আইওএস 9+ এ কোনও ইউআইবিউভিউতে চলছে তবে আপনাকে অবশ্যই NSLocationWhenInUseUsageDescriptionআপনার অ্যাপ্লিকেশনটির তালিকা তৈরি করতে হবে ।

আপনি যদি সেট না করে থাকেন তবে getCurrentPositionকখনই আর কল করবেন না এবং ব্যবহারকারীকে কখনই অনুরোধ করা হবে না।


3

আমি পেয়েছি, যে এই ভাবে কাজ করে না

navigator.geolocation.getCurrentPosition(function() {...}, function(err) {...}, {});

কিন্তু

এই উপায় নিখুঁত কাজ করে

function storeCoordinates(position) {
    console.log(position.coords.latitude, position.coords.longitude);
}    

function errorHandler() {...}

navigator.geolocation.getCurrentPosition(storeCoordinates, errorHandler, { enableHighAccuracy: true, timeout: 20000, maximumAge: 0 });

4
উভয়ের মধ্যে পার্থক্য কী?
পারদীপ জৈন

নামহীন ফাংশন বনাম একটি
1nstinct

সত্যিই বড় পার্থক্য। আপনাকে ধন্যবাদ,
এটিও

3

@ ব্রেন্যানুউং এর উত্তর দুর্দান্ত, তবে আপনি যদি ভাবছেন যে ব্যর্থতার ক্ষেত্রে কী করবেন তবে আপনি https://ipinfo.io (যা আমার পরিষেবা) এর মতো একটি আইপি জিওলোকেশন এপিআই ব্যবহার করতে পারেন । এখানে একটি উদাহরণ:

function do_something(coords) {
    // Do something with the coords here
    // eg. show the user on a map, or customize
    // the site contents somehow
}

navigator.geolocation.getCurrentPosition(function(position) { 
    do_something(position.coords);
    },
    function(failure) {
        $.getJSON('https://ipinfo.io/geo', function(response) { 
        var loc = response.loc.split(',');
        var coords = {
            latitude: loc[0],
            longitude: loc[1]
        };
        do_something(coords);
        });  
    };
});

আরও তথ্যের জন্য https://ipinfo.io/developers/replacing-getcurrentposition দেখুন ।



5
ভয়ানক. নির্ভুলতাটি মার্কিন অবস্থান এবং কানাডায় এবং রাশিয়ায় কোথাও 100 মাইল দূরে যখন আসল অবস্থান থেকে 5-7 মাইল দূরে।
ekashking

1
প্রচুর অ্যাপ্লিকেশনগুলির জন্য এটি সূক্ষ্ম - এবং অবস্থানটি কী তা জানার চেয়ে অনেক ভাল।
বেন ডাউলিং

এটি কোথাও কাজ করে না। প্রতিটি অনুরোধ দ্রাঘিমাংশ এবং
অক্ষাংশকে

ভুল বলতে কি বুঝ? আপনার কিছু উদাহরণ আছে?
বেন ডাউলিং

2

আমি একই ধরণের সমস্যা পেয়েছি, এবং ব্রাউজারগুলির কতবার getCenterPosition বলা যেতে পারে তার সীমাবদ্ধতার সম্ভাবনাটি খতিয়ে দেখছি। দেখে মনে হচ্ছে আমি প্রায়শই একটি অবস্থান পেতে পারি তবে আমি যদি এখনই পৃষ্ঠাটি রিফ্রেশ করি তবে এটি সময় শেষ হয়ে যাবে। আমি যদি কিছুটা অপেক্ষা করি তবে আমি সাধারণত আবার একটি অবস্থান পেতে পারি। এটি সাধারণত এফএফের সাথে ঘটে। ক্রোম এবং সাফারিতে, আমি এখনও getCenterPosition সময় শেষ লক্ষ্য করা যায় নি। শুধু একটি ভাবনা...

যদিও আমি এটি সমর্থন করার জন্য কোনও ডকুমেন্টেশন পাচ্ছি না, এটি অনেকগুলি পরীক্ষার পরে আমি এই সিদ্ধান্তে এসেছি। সম্ভবত অন্য কারও কাছে সে সম্পর্কে কিছু তথ্য আছে?


এটা একটা ভাল দিক. আমার সময়সীমাগুলি / ব্যর্থতাগুলি বেশিরভাগ ক্ষেত্রে যখন আমি পরীক্ষা করে দেখছি এবং বারবার ভূ-অবস্থানের ডেটা অনুসন্ধান করছি তখন মনে হয় happen আমি সম্ভবত এটি নকশাক্রমে কোনও বাগের ফল বা আপনার পরামর্শ মতো ফলাফল কিনা তা জানতে উদ্বিগ্ন।
জেমি

ব্রাউজার লোকেশন পরিষেবাগুলিতে কলগুলির পরিমাণ সীমিত করে এমন কোনও ক্ষেত্রে আমি দেখিনি। আপনি কতবার জিজ্ঞাসা করছেন?
নিকো ওয়েস্টারডেল

2

শেষ পর্যন্ত আমি অ্যান্ড্রয়েডে ফায়ারফক্স, ক্রোম এবং ডিফল্ট নেভিগেটরের জন্য একটি কার্যকরী সংস্করণ পেয়েছি (কেবলমাত্র পরীক্ষিত ৪.২):

function getGeoLocation() {
        var options = null;
        if (navigator.geolocation) {
            if (browserChrome) //set this var looking for Chrome un user-agent header
                options={enableHighAccuracy: false, maximumAge: 15000, timeout: 30000};
            else
                options={maximumAge:Infinity, timeout:0};
            navigator.geolocation.getCurrentPosition(getGeoLocationCallback,
                    getGeoLocationErrorCallback,
                   options);
        }
    }

2

দ্বিতীয় প্যারামিটারটি Geolocation.getCurrentPosition()হ'ল সেই ফাংশনটি যা আপনি কোনও ভূ-অবস্থান ত্রুটি পরিচালনা করতে চান। ত্রুটি হ্যান্ডলার ফাংশন নিজেই PositionErrorকেন ভূ-অবস্থানের প্রচেষ্টা ব্যর্থ হয়েছে সে সম্পর্কে বিশদ সহ একটি বস্তু গ্রহণ করে । আপনার যদি কোনও সমস্যা থাকে তবে কনসোলে ত্রুটিটি আউটপুট দেওয়ার পরামর্শ দিচ্ছি:

var positionOptions = { timeout: 10000 };
navigator.geolocation.getCurrentPosition(updateLocation, errorHandler, positionOptions);
function updateLocation(position) {
  // The geolocation succeeded, and the position is available
}
function errorHandler(positionError) {
  if (window.console) {
    console.log(positionError);
  }
}

আমার কোডটিতে এটি করার ফলে "' https://www.googleapis.com/ ' এ নেটওয়ার্ক অবস্থান প্রদানকারী: বার্তা ফিরে পাওয়া ত্রুটি কোড 400" বার্তাটি প্রকাশিত হয়েছে । গুগল ক্রোম সন্ধান করে যে জিপিএস অন্তর্নির্মিত নেই এমন ডিভাইসে একটি অবস্থান পেতে Google API গুলি ব্যবহার করে (উদাহরণস্বরূপ, বেশিরভাগ ডেস্কটপ কম্পিউটার)। গুগল ব্যবহারকারীর আইপি ঠিকানার ভিত্তিতে আনুমানিক অক্ষাংশ / দ্রাঘিমাংশ প্রদান করে। তবে ক্রোমের বিকাশকারী বিল্ডগুলিতে (যেমন উবুন্টুতে ক্রোমিয়াম) ব্রাউজার বিল্ডে কোনও এপিআই অ্যাক্সেস কী অন্তর্ভুক্ত নেই। এর ফলে এপিআই অনুরোধটি নিঃশব্দে ব্যর্থ হয়। দেখুন ক্রোমিয়াম ইস্যু 179686: ভৌগলিক-অবস্থান 403 এরর দান বিস্তারিত জানার জন্য।


1

মজিলায় আমার এই সমস্যা আছে। সর্বদা: ত্রুটি: অবস্থান অর্জনের ক্ষেত্রে অজানা ত্রুটি

এখন আমি 47 মজিলা ব্যবহার করছি। আমি সব চেষ্টা করেছি, কিন্তু সর্বদা এই সমস্যা। কিন্তু তারপর আমি খোলা : config সম্পর্কে আমার addsress বারে যান geo.wifi.ui এবং পরিবর্তন এটি "মান https://location.services.mozilla.com/v1/geolocate?key=test "। কাজ করে!

আপনার যদি পজিশন অধিগ্রহণের সময়সীমা শেষ হয়ে যায় তবে সময়সীমা মান বাড়ানোর চেষ্টা করুন:

var options = {
  enableHighAccuracy: true,
  timeout: 5000,
  maximumAge: 0       
};
navigator.geolocation.getCurrentPosition(success, error, options);

1

getCurrentPositionব্যর্থ হলে আইপি অ্যাড্রেস জিও লোকেশন পরিষেবাটি ফ্যালব্যাক পদ্ধতি হিসাবে ব্যবহার করা ভাল ধারণা হতে পারে । উদাহরণস্বরূপ আমাদের এপিআই https://ip-api.io সহ

$.getJSON("http://ip-api.io/json/",
    function(result) {
        console.log(result);
    });

1

আমাদের ক্ষেত্রে এটি সর্বদা প্রথমবারের মতো কাজ করে তবে ফাংশনটি 3-4 বারের বেশি পুনরায় চালিত করা, এটি ব্যর্থ হয়।

সরল কাজের মতো: লোকালস্টোরারেজে এর মান সংরক্ষণ করুন।

আগে:

navigator.geolocation.getCurrentPosition((position) => {
  let val = results[0].address_components[2].long_name;
  doSthWithVal(val);      
}, (error) => { });

পরে:

if(localStorage.getItem('getCurrentPosition') !== null) {
  doSthWithVal(localStorage.getItem('getCurrentPosition'));
}
else {
  navigator.geolocation.getCurrentPosition((position) => {
      let val = results[0].address_components[2].long_name;
      localStorage.setItem('getCurrentPosition',val);
      doSthWithVal(val);      
  }, (error) => { });
}

0

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


0

এই পাঠাগারটি জিওলোকেশন কলগুলিতে একটি কাঙ্ক্ষিত যথার্থতা এবং ম্যাক্সওয়েট বিকল্প যুক্ত করে, যার অর্থ এটি যথাযথতা নির্দিষ্ট সীমার মধ্যে না হওয়া পর্যন্ত অবস্থান পাওয়ার চেষ্টা চালিয়ে যাবে।


0

প্রত্যেককে তাদের ইনপুট দেওয়ার জন্য ধন্যবাদ, এটি আমাকে সহায়তা করেছে।

GetCenterPosition () এর পরিবর্তে ওয়াচ পজিশন () ব্যবহার করা ছাড়াও, আমি এটিও পেয়েছি যে ডকুমেন্টের মধ্যে থেকে কলটি সরিয়ে নেওয়া দরকার ready প্রস্তুতি () মাথায় to


0

ফায়ারফক্সের প্রতিক্রিয়াশীল ডিজাইন মোড ব্যবহার করার সময় আমার সাথে এটি ঘটেছিল। একটি বাগ রিপোর্ট দায়ের করা হয়েছে । আপাতত, জিওলোকেশন এপিআই ব্যবহার করার সময় কেবল প্রতিক্রিয়াশীল ডিজাইন মোড ব্যবহার করবেন না।


0

এটি কারওর পক্ষে সহায়তা করতে পারে, অ্যান্ড্রয়েডে আমারও একই সমস্যা ছিল তবে আমি এটি setTimeout ভিতরে ব্যবহার করে বুঝতে পেরেছিলাম এটি document.readyআমার পক্ষে কাজ করেছে দ্বিতীয়ত আপনাকে যদি সময়সীমা বাড়াতে হয় তবে যদি ব্যবহারকারী কয়েক সেকেন্ড পরে তার অবস্থানের অনুমতি দেয় তবে আমি এটি 60000 এ রেখেছি মিলি সেকেন্ড (1 মিনিট) আমার সাফল্য ফাংশনটি কল করতে দেয় যদি ব্যবহারকারী 1 মিনিটের মধ্যে অনুমতি বোতামে ক্লিক করেন allowing

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