Geolocation


السلام عليكم و رحمه الله تعالى و بركاته

مقدمه
الكائن geolocation
الحصول على الموقع الحالى للمستخدم
مراقبه تحركات المستخدم
التعامل مع الاخطاء
الدعم من المتصفحات
المزيد

مقدمه

ال Geolocation api هى وسيله من خلالها يتعرف تطبيق الانترنت على موقع المستخدم بعد إذن منه من خلال المتصفح ، يتم تحديد موقع المستخدم عن طريق إرسال عنوان ال ip و مناطق الاتصال اللاسلكيه إلى خدمه تحديد المواقع – فايرفوكس يتعامل مع Google location service – بعد ذلك يحصل المتصفح على موقع تقريبى للمستخدم ، فى بعض الأحيان لا يتعدى الفرق امتار قليله و فى بعض الاحيان الاخرى قد بتجاوز الكيلومترات لذلك لا يمكن الإستعانه به فى إستخدامات حساسه مثل الإغاثه و غيره ، و يتم ذلك فى سريه و بعد اذن المستخدم حيث لا يتم تعقب المستخدم عن طريق هذه الخدمه🙂 ، لنفرض انك تقوم ببرمجه تطبيق يقوم بإخبار المستخدمين عن الخدمات المجاوره لهم فى موقعهم كالفنادق و المطاعم و محطات الوقود … الخ ، بدلا من ملىء العديد من المدخلات لمعرفه الموقع ، يمكنك استخدام ال geolocatio API مباشره لمعرفه موقع المستخدم ، و يمكن أيضا إستخدامه  فى عمل worm او هجمه من نوع XSS شديده المكر و الدهاء .

الكائن geolocation

الكائن geolocation موجود داخل الكائن navigator ضمن ال browser object model لذلك يمكن الإستعلام عن وجوده من خلال الكودالبسيط التالى :

if(navigator.geolocation){
    /*do something with geolocation api*/
}else{
    /* geolocation api isn't available*/
}

الحصول على الموقع الحالى

بعد التأكد من وجود الكائن geolocation يمكنك الحصول على الموقع الحالى للمستخدم من خلال الوظيفه getCurrentPosition حيث تقبل اكثر من عباره ، العباره الاولى هى وظيفه يتم إستدعائها عند الحصول على الموقع ويتم  تمرير الكائن position لها الذى يحتوى على العديد من البيانات عن موقع المستخدم ، و العباره التانيه يتم إستدعائها عند حدوث خطأ مثل المستخدم رفض مشاركه التطبيق بيانات موقعه ، و العباره الثالثه هى اقصى وقت لإنتظار بيانات الموقع بعدها سيحدث خطأ و سيتم إستدعاء العباره التانيه ، كما يوضح المثال البسيط التالى :

navigator.geolocation.getCurrentPosition( function(position){
    position.timestamp; //time at which position was taken
    position.coords.latitude; //user's current latitude in degrees
    position.coords.longitude; //user's current longitude in degrees
    position.coords.alatitude;
    //user's current latitude in meters, zero if not supported
    position.coords.accuracy; //the accuracy of position information in meters
    position.coords.alatitudeAccuracy;
    //the accuracy of alatitude info, zero if alatitude not supported
    position.coords.heading;
    //the current heading at which the user's moving to in degrees
    position.coords.speed; //seed at which user's moving, meter/sec
} );

يتم تمرير الكائن position للعباره الاولى التى يتم إستداعئها عند تحديد موقع المستخدم ، يحتوى الكائن position على خاصيتين : الاولى هى timestamp وقت تحديد الموقع ، و الخاصيه الثانيه coords عباره عن كائن يحتوى على العديد من خصائص الموقع مثل latitude خط العرص بالدرجه و longitude و alatitude و accuracy و alatitudeAccuracy و accuracy و heading و speed ، يمكنك إستخدام قيمتى latitude و longitude للحصول على خريطه من جوجل بإستخدام google maps api

مراقبه تحركات المستخدم

يمكنك مراقبه تحركات المستخدم عن طريق الوظيفه watchPosition التى يتم إستدعاءها دوريا و ينتج عنها اى تغير فى موقع المستخدم ، تقبل نفس العبارات التى تقبلها الوظيفه getCurrentPosition كما يوضح المثال البسيط التالى :

var watcherID = navigator.geolocation.watchPosition( function(position){
    alert(position.coords.latitude); //user's current position latitude
});

الوظيفه watchPosition ينتج عنها معرف ID يمكنك إستخدامه لإيقاف مراقبه حركات المستخدم عن طريق الوظيفه clearWatch كما يوضح المثال البسيط التالى :

navigator.geolocation.clearWatch(watcherID);

التعامل مع الاخطاء

كما ذكرت كلا من الوظيفتين getCurrentPosition و watchPosition تقبل العباره التانيه وظيفه يتم إستدعائها عند حدوث خطأ ، يتم تمرير كائن من نوع PositionError له خاصيتين الاولى code و هو عباره عن رقم يدل على نوع الخطأ الذى حدث ، و الخاصيه الثانيه message و هى رساله مقرؤه توضح طبيعه الخطأ الذى حدث . الخاصيه code قد تكون 0 وتدل على خدوث خطأ غير معروف UNKNOWN_ERROR ، اما اذا كانت قيمته 1 فإن الخطأ بسبب ان المستخدم لم يعطى إذن لمشاركه بيانات موقعه PERMISSION_ERROR ، اما اذا كانت قيمته 2 فإن الخطأ بسبب عدم امكانيه الحصول موقع المستخدم بسبب خطأ فى خدمه تحديد المواقع ، و اخيرا إذا كانت قيمه الخاصيه code تساوى 2 فإن الوقت المسموح به للحصول على بيانات الموقع قد فات قبل الحصول على البيانات TIMEOUT ، كما يوضح المثال البسيط التالى :

navigator.geolocation.getCurrentPosition(function(position){
    alert(position.coords.latitude); //user's current position latitude
}, function(positionError){
    if(positionError.code == 1){
        alert("give me permission please");
    }
});

الدعم من المتصفحات

الكائن geolocation موجود فى FireFox 3.5 و iphone 3.0 safari و Opera 10

للمزيد :

MDC using geolocation API
W3C geolocation API
Mozilla location aware browsing

الأوسمة: , , , , , ,

رد واحد to “Geolocation”

  1. عبدالرحمن Says:

    أحب أن أحييك على جهودك الكبيره في نشر هذه المعلومات القيمة ، ويمكنني أن أؤكد لك أنه يوجد العديد من المتابعين لمدونتك .. حتى لو كانو يتابعون بصمت . بالتوفيق لك وشكراً لك مرة أخرى .

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s


%d مدونون معجبون بهذه: