خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: مشاريع مفتوحة المصدر Java App
صفحة 1 من اصل 1 • شاطر
خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل
بسم الله الرحمن الرحيم
أهلا وسهلا بكم أخوانى الكرام ....درس اليوم ان شاء الله تعالى عن كيفية انشاء تطبيق بسيط للجوالات لقرائة و تشغيل بيانات نظام تحديد المواقع 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 provider;
double latitude = 0;
double longitude = 0;
- الكود:
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 .....وللمزيد من المعلومات حول كيفية أستخدام هذا الكائن أطلع على الرابط التالى :
https://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.*;
- الكود:
public class GoogleMaps extends Canvas implements CommandListener {
_نقوم بالاعلان عن المتغيرات اللازمة و انشاء اوامر التحكم ...على النحو التالى :
- الكود:
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;
}
_ فى السطر الثالث و الرابع قمنا بالحصول على أحدثيات شاشة الجوال و تخزينها فى المتغيرين 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);
}
}
- الكود:
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();
}
كما أخبرنا سابقا أن معظم أجهزة الجوال تأتي معها وحدة تسمى 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 مع خرائط جوجل
بارك الله في صنيع عملك أخى أحمد دائما تأتينا بكل ما هو جديد
م/موسي- الاشراف
- تاريخ التسجيل : 18/02/2011
المساهمات : 178
النقاط : 346
التقيم : 12
الدولة :
الجنس :
رد: خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل
بارك الله فيك على مجهودك ....وجزاك الله خيرا على كل ما تقدمه لنا ...التطبيق أعجبنى كتيييييييييييييييييييييييير جدا
زهراء- ........
- تاريخ التسجيل : 18/02/2011
المساهمات : 438
النقاط : 769
التقيم : 67
الدولة :
الجنس :
رد: خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل
الكود شغال تمام ....لكن لما بحاول اكتبه بنفسى بيظهر خطأ....حتى انا أخذته cpoy &past لكن برضوا ما بيشتغل الا من خلال تطبيقك ....حضرتك عمتله ازاى يا استاذ احمد
لمار عادل- ..
- تاريخ التسجيل : 29/05/2013
المساهمات : 28
النقاط : 46
التقيم : 2
الدولة :
الجنس :
رد: خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل
الاستاذة لمار قومى بأستخدام معلومات تكوين الجهاز الاصدار CLDC-1.1 بدلا من الاصدار CLDC-1.0 وذلك لان الاخير لا يدعم معالجة بيانات الفاصلة العائمة floating point وبالتالى لن تستطيعى الحصول على احداثيات الموقع من خلال الاصدار الاخير ...
جربى و اخبرينى بالنتيجة
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل
الله يبارك فيكم جميعا
محمد يوسف- ...
- تاريخ التسجيل : 08/12/2013
المساهمات : 38
النقاط : 66
التقيم : 12
الدولة :
الجنس :
رد: خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل
جهدك مبارك
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
NEXT- الادارة
- تاريخ التسجيل : 18/02/2011
المساهمات : 446
النقاط : 200660
التقيم : 28
الدولة :
الجنس :
رد: خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل
جميل جدا
زهراء- ........
- تاريخ التسجيل : 18/02/2011
المساهمات : 438
النقاط : 769
التقيم : 67
الدولة :
الجنس :
رد: خطوة خطوة لانشاء تطبيق للجوالات لقراءة و تشغيل بيانات نظام تحديد المواقع GPS مع خرائط جوجل
شكرا جزيلا لكم
1zaza- ...
- تاريخ التسجيل : 18/11/2018
المساهمات : 39
النقاط : 66
التقيم : 3
الدولة :
الجنس :
| |
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: مشاريع مفتوحة المصدر Java App
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى
أمس في 2:36 pm من طرف nadya
» شراء اغراض مستعملة بالكويت بأعلى سعر - الدليل
أمس في 2:21 pm من طرف nadya
» شراء اثاث مستعمل الجهراء - بأعلى سعر - الدليل
أمس في 2:05 pm من طرف nadya
» تركيب مخيمات الكويت - جودة عالية خصم 20 %- الدليل
أمس في 1:47 pm من طرف nadya
» اغتنم فرصة الحصول على مدافن للبيع بمساحات مختلفة فى كل مكان فى مصر - القاهرة الجديدة
أمس في 1:40 pm من طرف ندا عمر
» افضل موقع مقابر للبيع بالقاهرة الجديدة 20% خصم
أمس في 1:29 pm من طرف ندا عمر
» مقابر وادي الراحة للبيع بأفضل الأسعار بخصم 20%
أمس في 1:18 pm من طرف ندا عمر
» مقابر للبيع بالقاهرة الجديدة بتسهيلات في السداد | سما الاقصى للمقاولات
أمس في 1:15 pm من طرف ندا عمر
» شراء اثاث مستعمل الكويت - بأعلى سعر - الدليل
أمس في 1:11 pm من طرف nadya
» مقابر طريق العين السخنه للبيع 20% من سما الاقصى
أمس في 12:59 pm من طرف ندا عمر