پیدا کردن موقعیت جغرافیایی کاربر (در فایرفاکس 3.5)

تصویر مهدی

بحث وب 2.0 به یک موضوع جذاب و در عین حال مبهم تبدیل شده است. هنوز هم بحث زیادی در این مورد وجود دارد که چه چیزی در حوزه وب 2.0 قرار می گیرد و چه چیزی نه! اما بدون تردید یکی از کلیدی ترین پارامترهایی که لزوم وجود آن در وب 2.0 غیرقابل انکار است، تکنولوژی های موقعیت یابی دستگاههای متصل به شبکه است. با استفاده از این تکنولوژی در آینده به عنوان مثال شما هنگام سفارش نهار خود از طریق اینترنت، نیازی وارد کردن آدرس خود نخواهید داشت و نهار شما مستقیما در محل خودتان به شما تحویل داده می شود و یا مثلا هنگامی که شما درخواست یک تاکسی میکنید، به طور خودکار توسط سیستم نزدیکترین تاکسی به شما فرستاده میشود.

پیدا کردن موقعیت

در حال حاضر برای تشخیص موقعیت کاربر، معمولا از آدرس IP کاربر استفاده می شود و برای اینکار ابزارهای متفاوتی وجود دارد تا جایی که هم اکنون به سادگی میتوان به پایگاه داده های حاوی اطلاعات موقعیت IP های ثبت شده نیز دستری داشت (به عنوان نمونه http://ipinfodb.com را ببینید). اما مشکلی که استفاده از IP دارد اینست که دقت بسیار کمی دارد و فقط در مورد کامپیوترهای ثابت میتوان به آن اعتماد کرد و در مورد دستگاههای متحرک مانند موبایلها کاربردی ندارد و این درحالی است که قسمت هیجان انگیز این تکنولوژی کاربرد آن در دستگاههای متحرک خواهد بود و در مورد دستگاههای ثابت تحول چندانی ایجاد نخواهد کرد.
برای استفاده از سرویسهای موقعیت یابی در وب 2.0، استانداردهایی از طرف w3c در حال بررسی است که استفاده از آنها میتواند یک راهکار موقعیت یابی یکپارچه و اصولی برای انواع مختلف ابزارهای متصل به شبکه فراهم کند. این تکنولوژی در آخرین نسخه های مروگرهای اپرا و فایرفاکس پیاده سازی شده است. در اینجا توضیح مختصری بر شیوه استفاده از این تکنولوژی با استفاده از JavaScript میدهم و همچنین یک مثال نسبتا کامل ارایه میکنم. دقت کنید که کلیه کدهای توضیح داده شده در اینجا را توسط مرورگر فایرفاکس نسخه 3.5 آزمایش کرده ام.

مثال

در مرورگر فایرفاکس برای امنیت بیشتر، هنگامی که درخواست موقعیت از طرف یک سایت فرستاده می شود، تا زمانی که مجوز دسترسی به این اطلاعات توسط کاربر صادر نشده باشد، موقعیتی در اختیار سایت قرار نخواهد گرفت. برای امتحان کردن این سرویس میتوانید با فشار دادن دکمه زیر، موقعیت خود را دریافت کنید. بدیهی است که استفاده از این سرویس در صورتی امکان پذیر است که مرورگر شما آن را پشتیبانی کند. به عنوان مثال شما نیز میتوانید از فایرفاکس نسخه 3.5 استفاده نمایید. در این حالت شما باید بعد از کلیک بر روی دکمه زیر، به سوالی که فایرفاکس مبنی بر اجازه دادن برای ارسال اطلاعات موقعیت می پرسد، پاسخ دهید.

روش استفاده

کلیه توابع مرتبط با این سرویس در شیء navigator.geolocation قرار گرفته است. برای استفاده ابتدا باید بررسی کرد این این شیء وجود دارد یا نه.

if(navigator.geolocation) {
	alert('مرورگر شما از سرویس موقعیت یابی پشتیبانی می کند.');
} else {
	alert('متاسفانه مرورگر شما قابلیت پشیبانی از سرویس موقعیت یابی را ندارد.');
}

بعد از اینکه مطمین شدیم که مرورگر کاربر این قابلیت را داراست، میتوانیم به سادگی با فراخوانی تابع getCurrentPosition موقعیت کاربر را پیدا کنیم. این تابع به عنوان پارامتر ورودی، یک تابع دیگر دریافت میکند که در صورت دریافت موقعیت کاربر آن را فراخوانی میکند.

if(navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        alert('عرض جغرافیایی: ' + position.coords.latitude +
            '\nطول جغرافیایی: ' + position.coords.longitude);
    });
} else {
    alert('متاسفانه مرورگر شما قابلیت پشیبانی از سرویس موقعیت یابی را ندارد.');
}

همچنین در صورت نیاز میتوان از تابع watchPosition استفاده کرد. این استفاده از تابع کاملا مشابه همان تابع getCurrentPosition است، با این تفاوت که در اینجا فقط یک بار موقعیت دریافت نمی شود و به طور پیوسته آخرین موقعیت کاربر با فراخوانی مجدد تابع اعلام می شود.
شیء position در مثال بالا خود شامل دو شیء timestamp و coords است. timestamp زمان خواندن موقعیت کاربر را نشان میدهد و coords (که در مثال بالا نیز از آن استفاده شد) مختصات کاربر را نشان می دهد. coords خود شامل اطلاعات زیر است:

  • latitude: عرض جغرافیایی کاربر بر حسب درجه
  • longitude: طور جغرافیایی کاربر برحسب درجه
  • altitude: ارتفاع فعلی کاربر از سطح دریا بر حسب متر (اگر پشتیبانی نشود، مقدار صفر برگردانده میشود)
  • accuracy: دقت اطلاعات موقعیت بر حسب متر
  • altitudeAccuracy: دقت اطلاعات ارتفاع بر حسب متر (اگر پشتیبانی نشود، مقدار صفر برگردانده میشود)
  • heading: جهت حرکت کاربر بر حسب درجه
  • speed: سرعت حرکت کاربر بر حسب متر بر ثانیه
  • if(navigator.geolocation) {
    	navigator.geolocation.getCurrentPosition(
    		function(position) {  
    			alert('زمان: ' + (new Date(position.timestamp)).toLocaleString() + '\n' +
    			    'عرض جغرافیایی: ' + position.coords.latitude + ' درجه\n' +
    				'طول جغرافیایی: ' + position.coords.longitude + ' درجه\n' +
    				'ارتفاع: ' + position.coords.altitude + ' متر\n' +
    				'دقت مختصات: ' + position.coords.accuracy + ' متر\n' +
    				'دقت ارتفاع: ' + position.coords.altitudeAccuracy + ' متر\n' +
    				'جهت حرکت: ' + position.coords.heading + ' درجه\n' +
    				'سرعت حرکت: ' + position.coords.speed + ' متر/ثانیه'
    				);
    		}
    	);
    } else {
    	alert('متاسفانه مرورگر شما قابلیت پشیبانی از سرویس موقعیت یابی را ندارد.');
    }
    

    در صورتی که بخواهیم خطاهای احتمالی هنگام موقعیت یابی را تشخیص دهیم، تابعی برای مدیریت این خطا به عنوان پارامتر دوم به getCurrentPosition فرستاده میشود. در اینجا میتوانیم با استفاده از کد خطا، نوع خطا را تشخیص دهیم. این کد شامل چهار حالت زیر است:

    • کد 0: خطای نامشخص (هر خطایی که شامل کدهای دیگر نباشد)
    • کد 1: خطای مجوز دسترسی (اجازه ارسال اطلاعات موقعیت داده نشده است)
    • کد 2: موقعیت نامشخص (موقعیت کاربر به علت وجود مشکلات در سیستم موقعیت یابی، تشخیص داده نشده است)
    • کد 3: timeout (اطلاعات موقعیت در زمانی که انتظار میرفت، دریافت نشده است)
    • if(navigator.geolocation) {
      	navigator.geolocation.getCurrentPosition(
      		function(position) {  
      			alert('مختصات: ' + position.coords.latitude + ':' + position.coords.longitude);
      		}, function(error) {
      			switch(error.code){
      			    case 0:
      			        alert('خطای نامشخص');
      			        break;
      			    case 1:
      			        alert('خطای مجوز دسترسی');
      			        break;
      			    case 2:
      			        alert('موقعیت نامشخص');
      			        break;
      			    case 3:
      			        alert('timeout');
      			        break;
      			}
      		}
      	);
      } else {
      	alert('متاسفانه مرورگر شما قابلیت پشیبانی از سرویس موقعیت یابی را ندارد.');
      }
      

      منابع

      برای تهیه این مطلب از منابع زیر کمک گرفته ام:

نظرات

http://www.rogervivieroutlet.org

salvatoreferragamo its superb design brings self-confidence and competence.This shoes,is the smart choice for white-collar workers,but also for most of the party,in one of this best clothes.Is usually a new type of buy Roger Vivie shoes,the uk favorite style quite a few wo,it isferragamo seriously simple,generous,suitable for different age-conscious wo.This kind of fine says how the shoes,it is chaep.If you make up your mind it,is to think about fashion,option is harvested beauty.It may be the first choice a lot of stars and famous people.gianmarco lorenzi Leading first thing so as to do is to be able to show around all typically the shoes on conversion and just end up with the feel of the usb ports. The next step is pick shoes that anybody think appear terrific based on a new style and pattern and are nice for you.duvetica you have always been bound not time for face this variety of concern after you opt for the Roger Vivie Peep-Toe knockoffs as how they are just charged right. quality sensitive thus provide upgrade opportunities. Their designs require monitoring service regarding to their colour, texture, padding, shape, back pitch and seat stodginess.FREY WILLE these features conduct sustainable improvet as well flexibility based inside the users dynamisms. In designing,roger vivier outlet companies also focus your biodegradable plastics. ice support. His partnership which has Reebok was declared earlier today on the press conference in the Pro Hockey Roger Vivie Boots sale all the way through Kanata. Do you think that roger vivier is just designed for winter? In fact, you can wear Roger Vivie shoes in any season.in summerroger vivier outlet store .In spring, autumn and winter, Roger Vivie pumps and Roger Vivie boots become the must buy for stylish wo. Winter is coming now, have you considered chanel replica are the most suitable items for you.When you see a red sole, what do you think of right now? At least I will think of the famous female shoes, roger vivie outlet online be said to be a dream for most our females. Roger Vivie can be said to be the most successful female shoes brand,roger vivier boots as the designer said their never think too much but also attractive the largest growp of female. It is said thathttp://www.chanelsreplica.net, no matter your are a ordinary people, or a world personage, you can not resist its great charm. Roger Vivie went so far as to that he designs his shoes to slow wo down which gives them a sexier walk. Belinda White, wearing Roger Vivie heels can mean a better wonderful based on the editor of roger vivier flats

تشکر

مهدی جان
واقعا جالب بود من تست کردم و IPسیستم رو با یه روش تغییر دادم که کاملا صحیح بود ولی نمیدونم چرارو نقشه صحیح نبود
دستت درد نکنه

یک غلط املایی(Typo)

عالی بود.ممنون.فقط...
در حال حاظر برای...---->در حال حاضر برای....
Typo

تصویر مهدی

بی سوادیه دیگه!

ممنون. هم از نظرتون و هم از تصحیح!
بیسوادی من رو ببخشید. من کلا با ض و ظ خیلی مشکل دارم. این مشکل رو با چپ و راست هم داشتم که به تازگی حل شده، دیگه وقتشه رو ض و ظ تمرین کنم! ;)

سلام

میبخشید من از بهقثبخطث4 نسخه بتا استفاده می کنم می خواستم ببینم این نسخه هم موردی رو که گفتید پشتیبانی می کنه؟

بی سوادی

اختیار داری قربان شما منبع سوادی ممنون از مطلب جالبت