خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل

مُساهمة من طرف أحمد مناع في السبت سبتمبر 14, 2013 10:11 am

بسم الله الرحمن الرحيم

أهلا وسهلا بكم أخوانى الكرام ....درس اليوم ان شاء الله تعالى عن كيفية انشاء تطبيق بسيط للجوالات لقرائة و تشغيل بيانات نظام تحديد المواقع GPS و ايضا خرايط جوجل فى الجوالات ....وكما تعلمون فإن  Global Positioning System  و التى تختصر الى GPS بالإنجليزية هو لفظ للإشارة إلى النظام الموضوع من قبل الولايات المتحدة الأمريكية لتحديد المواقع العالمي والذي تقوم عليه معظم التطبيقات المدنية المعروفة

و معظم أجهزة الجوال تأتي معها وحدة تسمى GPS أو يمكنك الاتصال على واحده باستخدام خدمات Bluetooth. تلك الوحدة تسمح لتطبيقات J2ME للاستعلام عن إلإحداثيات الموقع الجغرافي الحالى .....  والتطبيقات التى يتم دمجها فى أجهزة الجوال لتحديد الموقع الجغرافى تعتمد على تلك الوحدة بالاضافة الى ذلك تستخدم صور و خرائط لاضافة مميزات لتحديد الموقع وذلك باستخدام خرائط جوجل وهي خدمة مفتوحة وحرة وأكثر كفاءة لأنه يقلل من التحويلات الشبكة.

في هذه المقالة سنتعلم خطوة خطوة كيفية إنشاء تطبيق MIDlet للحصول على إحداثيات الموقع الحالى من وحدة GPS بالجوال واستخدامها لعرض خريطة جوجل لهذا الموقع.  ويمكن اختبار التطبيق على المحاكي أو على جهاز حقيقي يحتوي على وحدة نظام تحديد المواقع GPS


الخطوات :

1_ قم بفتح Netbeans ثم أختر إنشاء مشروع جديد

2_من المربع الحوارى الذى سيظهر ومن خلال التويب categories أختر نوع المشروع Java ME ليظهر لك فى الجانب الاخر بعض انواع المشروعات أختر منه Mobile Application

3__ قم بالنقر على زر التالى ليظهر لك مربع حوارى أخر يطالبك بأسم للتطبيق ...أكتب أسم GPS مثلا مع مراعاة إزالة علامة الخيار   Create Hello MIDlet

4_تحديد ايقونة التطبيق ثم كليك يمين ومن القائمة التى ستظهر أختر الامر New ثم الامر  Visual MIDlet أذا أردت تصميم العناصر بدون الشفرة ....

5_ _سيظهر لك مربع حوارى يطالبك ببعض المعلومات كأسم الملف فضع  MidletGPS كأسم و اسم الكلاس الخاص ب MidletGPS

6_ بعد الانتهاء من تحديد كافة المعلومات اللازمة للمربع الحوارى السابق قم بالنقر على زر الامر (next) لتظهر لك البنية الرسومية كما فى الشكل التالى :

7_ قم بإضافة نافذة FORM مع تغير الاسم البرمجى الى mainForm

8_ قم باضافة عدد 2 عنصر StringItem مع تغير الاسم البرمجى الى infoGPS و infoCoordinates ...ومن نافذة الخصائص لكل عنصر قم بجعل الخاصية Label تساوى GPS status و Coordinates .....و من الخاصية text أجعل قيمتها لكل منهما تساوى unknown

9_ قم باضافة عدد Command الى النافذة مع تغير الاسم البرمجى الى cmdExit و cmdStart وcmdDisplay ...ومن نافذة الخصائص قم بتسمية العناصر السابقة الى " خروج " و "حدد الموقع " و "تشغيل الخريطة " وذلك من الخاصية label لكل عنصر

10_ كتابة التعليمات البرمجية :

أولا : الحصول على أحداثيات الموقع

_ من أجل التواصل مع وحدة GPS بالهاتف والحصول على البيانات المتعلقة إحداثيات الموقع الحالى يجب إستيراد المكتبة التالية :


الرمز:
import javax.microedition.location.*;
_ نقوم بالاعلان و انشاء مثيل مزود الاشارة LocationProvider و الذى يستخدم لجلب بيانات خطوط العرض و الطول للموقع ....بالاضافة الى ذلك نقوم بالاعلان عن متغيرين من نوع double لتحزين بيانات العرض و الطول على النحو التالى :
الرمز:

LocationProvider provider;
   double latitude = 0; 
  double longitude = 0; 
_ سنقوم بإنشاء طريقة بأسم getGPSData و مهمتها جلب بيانات GPS وذلك على النحو التالى :
الرمز:

private void getGPSData() {
    
      Thread t = new Thread() {

           public void run() {
               Criteria criteria = new Criteria();
                criteria.setCostAllowed(true);
                criteria.setPreferredPowerConsumption(Criteria.NO_REQUIREMENT);
               try {

                   infoGPS.setText("Getting data ...");
                   provider = LocationProvider.getInstance(criteria);
              
                  Location location = provider.getLocation(60);
                   Coordinates coordinates = location.getQualifiedCoordinates();

                   if (coordinates != null) {

                       infoGPS.setText("GPS active");
                       latitude = coordinates.getLatitude();
                       longitude = coordinates.getLongitude();

                       infoCoordinates.setText("\n" +
                               "latitude: " + latitude + "\n" +
                               "longitude: " + longitude);
                   } else {
                       infoGPS.setText("GPS inactive");
                                        }
               } catch (LocationException ex) {
                   infoGPS.setText("GPS inactive");
                   System.out.println("Problems with location provider ! " + ex.getMessage());
                   ex.printStackTrace();
               } catch (InterruptedException ex) {
                   infoGPS.setText("GPS inactive");
                   System.out.println(ex.getMessage());
                   ex.printStackTrace();
               }
           }
       };
    
       t.start();
   }
}

شرح الكود :

_ السطر الاول ...قمنا بأستخدام الكائن Thread وهو أحد الكائنات يتم استخدامة فى الجافا ليسمح للتطبيق بالقيام بعدة مهام مترابطة تعمل سويا بشكل متزامن ....وقمنا باستخدامة فى التطبيق لأننا نريد الاستعلام عن وحدة نظام تحديد المواقع GPS من ناحية ....و في الوفت ذاته نريد من التطبيق الاستجابة للأوامر وهو فى اتظاره الرد من وحدة GPS .....وللمزيد من المعلومات حول كيفية أستخدام هذا الكائن أطلع على الرابط التالى :

http://egy-tech.forumegypt.net/t543-topic

_ بداخل الطريقة getGPSData أنشأنا طريقة داخلية أخرى بأسم run وهى طريقة يجب أنشاها طالما استخدمنا الكائن Thread

_ فى الاسطر الثلاث الاولى داخل الطريقة RUN قمنا بأنشاء مثيل للكائن Criteria ويستخدم لتحديد مزود الموقع location provider ...وجعلناه يقوم بالسماح بأستخدام تكلفة الخدمة وذلك لاستخدام الشبكة الخلوية ....ولا تخف على نفاذ رصيدك فالخدمة أساسا مجانية ولا يتم خصم أى شىء .....وليس لدينا شرط استهلاك الطاقة من استخدام GPS ...
.
_ من خلال السطر provider = LocationProvider.getInstance نقوم بالحصول على على مزود الموقع و نحن على استعداد للانتظار 60 ثانية حتى تتم العملية provider.getLocation(60)

_ من خلال السطر Coordinates coordinates = location.getQualifiedCoordinates(); نقوم بالحصول على أحداثيات الطول و العرض للموقع الحالى

_ قمنا بعد ذلك بأستخدام جملة شرطية فان كان الاحداثيات التى تم الحصول ليها ليست قيم فارغة nul يتم تخزينها فى المتغرين  latitude , longitude

ثانيا : أستخدام خرائط جوجل

خرائط جوجل هى خدمة مجانية تقدمها جوجل للمطورين الذين يريدون تضمين الخرائط في تطبيقاتهم استنادا إلى معلمات URL المرسلة من خلال سلسلة بسيطة الاستعلام HTTP دون الحاجة إلى تشغيل الجافا أو أي تحميل الصفحة الديناميكية. فالخدمة تنحصر فى إرسال صورة كرد على الاستعلام.

لذلك، من أجل الحصول على صورة خارطة بمقاس 300 × 300 بكسل  لخط العرض 44.435251  و خط طول  26.1024 بأستخدام طلب HTTP على النحو التالى :

http://maps.google.com/maps/api/staticmap?center=44.435251,26.1024&zoom=14&size=300×300&sensor=false

والنتيجة هي الصورة التالية:


من خلال التطبيق وبعد ما قمنا بالحصول على أحداثيات الموقع الحالى من وحدة GPS يمكننا بناء استعلام HTTP.و إرسالة الى GOOGL MAP ليتم تحميل صورة خريطة الموقع الحالى وعرضها على نافذة التطبيق ....يتم تحميل صورة باستخدام الكائن HttpConnection و الذى يقوم بعمل اتصال مع الموقع GOOGL MAP  و الكائن InputStream للحصول على تدفق بيانات الصورة ....حالما يتم الحصول على بيانات الصورة، يتم إنشاء صورة مباشرة باستخدام طريقة Image.createImage (InputStream)

تعالوا الان نقوم بتنفيذ ذلك برمجية :

_ نقوم بإستيراد المكتبات اللازمة التالية :
الرمز:

import java.io.InputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.*;
_نقوم بإنشاء فئة جديدة وليكن بأسم GoogleMaps وذلك على النحو التالى :
الرمز:

public class GoogleMaps extends Canvas implements CommandListener {
وكما ترى فإن الفئة السابقة تم توسيعها باستخدام الطبقة Canvas وهى الطبقات التى تسمح بالوصول الى مراجع Graphics اللازمة للرسم .
_نقوم بالاعلان عن المتغيرات اللازمة و انشاء اوامر التحكم ...على النحو التالى :
الرمز:

   Command cmdBack = new Command("رجوع", Command.EXIT, 1);
   Command cmdRefresh = new Command("تحديث", Command.SCREEN, 10);

 
   MidletGPS midGPS;
   int zoom = 14;
   String latitude = "";
   String longitude = "";
_ نقوم بإنشاء طريقة و ليكن بأسم getGoogleMap مهمتها بناء الاستعلام المرسل الى موقع خرائط جوجل و الحصول على صورة الخريطة للموقع الحالى :
private Image getGoogleMap() {
   HttpConnection connection = null;
   InputStream inputStream = null;
 
   int width = this.getWidth();
   int height = this.getHeight();
  
   String url = "http://maps.google.com/maps/api/staticmap?center=";
   url += latitude + "," + longitude;
   url += "&zoom=" + String.valueOf(zoom);
   url += "&size=" + width + "x" + height + "&sensor=true";

   try {
       connection = (HttpConnection) Connector.open(url);
       connection.setRequestMethod(HttpConnection.GET);
       inputStream = connection.openInputStream();

       Image map = Image.createImage(inputStream);

       return map;

   } catch (Exception ex) {
       ex.printStackTrace();
   } finally {
       try {
           if (inputStream != null) {
               inputStream.close();
           }
           if (connection != null) {
               connection.close();
           }
       } catch (Exception ex) {
           ex.printStackTrace();
       }
   }
   return null;
}
_ فى السطر الاول و الثانى قمنا بإنشاء مثيل لكل من الكائن HttpConnection و الكائن InputStream
_ فى السطر الثالث و الرابع قمنا بالحصول على أحدثيات شاشة الجوال و تخزينها فى المتغيرين width وheight
_ فى السطر الخامس وحتى الثامن ....قمنا بالاعلان عن المتغير النصى url و تم تمرير الية الاستعلام المطلوب للحصول على صورة الخريطة إعتماد على أحداثيات الطول و العرض التى تم جلبها من وحدة GPS و تخزينها فى المتغيرين latitude و longitude
_ أما الاسطر الاخير فهى لفتح أتصال مع موقع خرائط جوجل و ارسال الاستعلام السابق الية ....بعد ذلك يتم تدفق البيانات ثم إنشاء الصورة المرسلة بأستخدام الاسلوب Image.createImage(inputStream);

_حتى الان تم إنشاء الصورة فى ذاكرة الجوال  ....لذلك سنقوم بإنشاء طريقة اخرى لرسم الصورة على النافذة و ليكن أسم الطريقة paint ....وذلك على النحو التالى :
الرمز:

protected void paint(Graphics g) {
    
       Image map = getGoogleMap();
       if(map!=null){
          
           g.drawImage(map, 0, 0, Graphics.LEFT | Graphics.TOP);
       }
       else{
           g.setColor(255,0,0);
           g.drawString("No map available", 20, 20, 0);
       }
   }
_ إذا كنت ترغب في تعديل مستوى التكبير و التصغير للخريطة (+ أو -) يمكننا تعريف معالج حدث لمفتاح الضغط، وهذا هو ممكن عن طريق تجاوز الفراغ keyPressed طريقة (الباحث keyCode)، لذلك سوف نستخدم المفتاح رقم 1 لعمل تصغير على الخريطة  ومفتاح رقم 3 لعمل تكبير على الصورة ....بالاضافة الى ذلك يمكنك أيضا تعديل خطوط الطول والعرض مما يسمح للمستخدمين للتحرك في جميع الاتجاهات للخريطة باستخدام لوحة المفاتيح ....لذلك سنقوم بإنشاء الطريقة التالية لعمل ذلك ...
الرمز:

protected void keyPressed(int keyCode) {
       if (((char) keyCode) == '1') {
           zoom--;
       }
       if (((char) keyCode) == '3') {
           zoom++;
       }
      
       double offset = 0.02;
       if (getGameAction(keyCode) == 5) {
           double lon = (Double.parseDouble(longitude));
           lon += offset / zoom;
           longitude = String.valueOf(lon);
       }
       if (getGameAction(keyCode) == 2) {
           double lon = (Double.parseDouble(longitude));
           lon -= offset / zoom;
           longitude = String.valueOf(lon);
       }
       if (getGameAction(keyCode) == 4) {
           double lat = (Double.parseDouble(latitude));
           lat += offset / zoom;
           latitude = String.valueOf(lat);
       }
       if (getGameAction(keyCode) == 6) {
           double lat = (Double.parseDouble(latitude));
           lat -= offset / zoom;
           latitude = String.valueOf(lat);
       }
    
       this.repaint();
   }
ثالثا : كيفية اختبار التطبيق في NetBeans باستخدام محاكي GPS


كما أخبرنا سابقا أن معظم أجهزة الجوال تأتي معها وحدة تسمى GPS و التى من خلالها تستطيع تحديد احداثيات الموقع الحالى ...أما أجهزة الكمبيوتر ليس بها تلك الوحدة ....لذلك إذا كنت ترغب في اختبار تطبيق GPS فانت بحاجة الى شيء من شأنها أن تحاكي وحدة GPS....لذلك حرصت معظم بيئات التطوير على اضافة محاكى لتلك الوحدة ...فبيئة التطوير NetBeans مثلا قامت بارفاق ما يسمى External Event Generator و التى تضاهى وحدة gps ويتم تغذية بياناته يدويا .....


_ الان قم بتشغيل التطبيق و عند ظهور محاكى الجوال ستجد فى القوائم العلوية القائمة viwe أختر منها الامر External Event Generator سيظهر لك مربع حوارى يطالبك بأحداثيات الطول و العرض للموقع ....قم بتحديد قيمة الطول و العرض لاى موقع ومن ثم ارسالها الى محاكى الجوال ليتم قرائها و عرض الخريطة لهذا الموقع


_ أوإذا كنت تريد توليد القيم GPS متعددة، قم بإنشاء ملف نصي XML به تلك البيانات و باستخدام الزر استعراض يمكنك تحميل الملف ومن ثم ارسال البيانات المتعددة الى محاكى الجوال ....والملف xml يكون كما فى الكود السابق:
الرمز:

<waypoints>
 <waypoint time="0" latitude="44.435251" longitude="26.1024" altitude="100" />
 <waypoint time="10000" latitude="46.435251" longitude="24.1024" altitude="0" />
</waypoints>
و نتيجة تشغيل التطبيق على النحو التالى :

_ يتم النقر على القائمة "حدد الموقع " حتى يتم الحصول على أحداثيات الموقع الحالى .


_ عندما نحصل على بيانات الموقع الحالى ...نقوم بالنقر على القائمة " تشغيل الخريطة " ليتم عرض خريطة الموقع الحالى



سورس كود التطبيق فى المرفقات
المرفقات
gps.zip لا تتوفر على صلاحيات كافية لتحميل هذه المرفقات.(58 Ko) عدد مرات التنزيل 19

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

إن فقدت مكان بذورك التي بذرتها يوما ما سيخبرك المطر أين زرعتها ..لذا إبذر الخير فوق أي أرض وتحت أي سماء ومع أي أحد.. فأنت لا تعلم أين تجده ومتى تجده؟! إزرع جميلا ولو في غير موضعه .... فلا يضيع جميلا أينما زرعا .. فما أجمل العطاء... فقد تجد جزاءه في الدنيا أو يكون لك ذخرا في الآخرة

أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 810
النقاط : 1479
التقيم : 69
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل

مُساهمة من طرف م/موسي في السبت سبتمبر 14, 2013 9:21 pm

بارك الله في صنيع عملك أخى أحمد دائما تأتينا بكل ما هو جديد

م/موسي
الاشراف
الاشراف

تاريخ التسجيل : 18/02/2011
المساهمات : 130
النقاط : 252
التقيم : 8
الدولة : تونس
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل

مُساهمة من طرف زهراء في الأحد سبتمبر 15, 2013 3:42 pm

بارك الله فيك على مجهودك ....وجزاك الله خيرا على كل ما تقدمه لنا ...التطبيق أعجبنى كتيييييييييييييييييييييييير جدا

زهراء
........
........

تاريخ التسجيل : 18/02/2011
المساهمات : 262
النقاط : 372
التقيم : 24
الدولة : مصر
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل

مُساهمة من طرف لمار عادل في الثلاثاء سبتمبر 17, 2013 12:39 pm

الكود شغال تمام ....لكن لما بحاول اكتبه بنفسى بيظهر خطأ....حتى انا أخذته cpoy &past لكن برضوا ما بيشتغل الا من خلال تطبيقك ....حضرتك عمتله ازاى يا استاذ احمد Very Happy

لمار عادل
..
..

تاريخ التسجيل : 29/05/2013
المساهمات : 28
النقاط : 46
التقيم : 2
الدولة : مصر
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل

مُساهمة من طرف أحمد مناع في الجمعة سبتمبر 20, 2013 11:35 am


الاستاذة لمار قومى بأستخدام معلومات تكوين الجهاز الاصدار CLDC-1.1 بدلا من الاصدار CLDC-1.0 وذلك لان الاخير لا يدعم معالجة بيانات الفاصلة العائمة floating point وبالتالى لن تستطيعى الحصول على احداثيات الموقع من خلال الاصدار الاخير ...

جربى و اخبرينى بالنتيجة

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

إن فقدت مكان بذورك التي بذرتها يوما ما سيخبرك المطر أين زرعتها ..لذا إبذر الخير فوق أي أرض وتحت أي سماء ومع أي أحد.. فأنت لا تعلم أين تجده ومتى تجده؟! إزرع جميلا ولو في غير موضعه .... فلا يضيع جميلا أينما زرعا .. فما أجمل العطاء... فقد تجد جزاءه في الدنيا أو يكون لك ذخرا في الآخرة

أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 810
النقاط : 1479
التقيم : 69
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل

مُساهمة من طرف محمد يوسف في الأربعاء ديسمبر 18, 2013 7:33 pm

الله يبارك فيكم جميعا

محمد يوسف
...
...

تاريخ التسجيل : 08/12/2013
المساهمات : 38
النقاط : 66
التقيم : 12
الدولة : السودان
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل

مُساهمة من طرف NEXT في السبت يونيو 14, 2014 12:00 pm

جهدك مبارك

NEXT
الادارة
الادارة

تاريخ التسجيل : 18/02/2011
المساهمات : 262
النقاط : 378
التقيم : 10
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل

مُساهمة من طرف زهراء في الجمعة سبتمبر 19, 2014 3:06 pm


جميل جدا

زهراء
........
........

تاريخ التسجيل : 18/02/2011
المساهمات : 262
النقاط : 372
التقيم : 24
الدولة : مصر
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى