شود. سيستم در اين حالت عمليات حذف پارک را اجرا مي کند. همچنين بخاطر استفاده از سنسورهاي گوشي زماني که کاربر زاويه حرکتيش عوض شود سيستم داراي خطايي مي شود که نياز است با آزمايشات فراوان فيلتر مناسب را براي آن اتخاذ کرد.

فصل سوم
پياده سازي پروژه

3-1-مقدمه
در اين فصل ابتدا در مورد پارکينگ حاشيه اي بحث مي شود سپس به معرفي پروژه پياده سازي شده ميپردازيم. همان طور که ديده شد بيشتر تحقيقات انجام شده و پياده سازي شده در مورد پارکينگ هاي عمومي بود و کمتر به پارکينگ هاي حاشيه اي توجه شده بود. بيشتر تحقيقات انجام شده در اين رابطه (پارک حاشيه اي) مربوط به فرهنگ سازي مردم و تشويق مردم به استفاده از پارکينگ هاي عمومي است، که اين کار را با استفاده از اجراي قوانين سخت راهنمايي و رانندگي و مقايسه پول پرداختي در مورد پارکينگ هاي عمومي و پارکينگ هاي حاشيه اي انجام داده اند. ولي بايد به اين نکته توجه داشت که در ايران و به خصوص در شهرهاي بزرگ مشکل پارکينگ هاي عمومي از نظر تعداد و نوع هنوز حل نشده است و پارکينگ هاي موجود يا پاسخ گوي نياز مردم نيستند و يا حتي از مکان مورد نظر مسافران فاصله زيادي دارند. پس نياز است تا به سراغ اين نوع از پارکينگ ها برويم و اين فرهنگ را در مردم به وجود آوريم که با استفاده درست از اين نوع پارکينگ ها مي توان سهمي عظيم در مورد کاهش ترافيک داشت.
خوش بختانه در ايران ميل مردم به سوي استفاده از گوشي هاي همراه هوشمند روز به روز در حال افزايش است و کمتر کسي است که نتواند با آن ها کار کند. پس اين موقعيت فراهم مي شود که بدون هزينه اضافي، اين پروژه (موبايل پارک) را عملي کرد و در اختيار مردم قرار داد. تنها قسمت اين پروژه که بر عهده شهرداري ها مي باشد خط کشي و مشخص کردن جاي پارک در حاشيه خيابان ها مي باشد تا تعداد دقيق مکان پارک در خيابان ها مشخص شود.
مزاياي استفاده از پارکينگ هاي حاشيه اي و برنامه موبايل پارک را مي توان به اين صورت بيان کرد که:
1)مي توان از پارکينگ ها استفاده بهينه اي داشت، 2) ايجاد اطمينان از وجود محل پارک در خيابان مورد نظر، 3) کاهش ترافيک خيابان ها، 4) کاهش زمان جستجو براي يافتن جاي پارک، 5) مديريت بهتر ترافيک و معايب استفاده از اين سيستم :
1)مشخص نبودن تعداد جاي پارک در خيابان ها، 2)استفاده نکردن بسياري از رانندگان از اين نوع سيستم 3)پارک به صورت غير قانوني، 4)از همه مهمتر نداشتن فرهنگ کافي براي استفاده از اين نوع سيستم
با همه اين تفاسير ما قصد داريم تا در اين پروژه به سراغ اين نوع از پارکينگ ها برويم و سعي کنيم تا با ارائه اين سيستم بتوانيم سهم اين نوع از پارکينگ ها را در مورد کاهش زمان اتلاف براي پيدا کردن جاي پارک خالي داشته باشيم.

شکل(3-1)-دياگرام معماري سيستم
3-2-معماري سيستم
اين سيستم به گونه اي طراحي شده است که مي تواند با محيط پيرامون خود ارتباط برقرار کند. زماني که خودروي اول در مکاني پارک مي کند با اجراي برنامه موبايل، سيستم به صورت خودکار به ماهواره موقعيت ياب جهاني و دکل هاي ارائه دهنده اينترنت متصل مي شود و اطلاعات مورد نياز را با سيستم هاي موجود رد و بدل مي کند.
همانطور که در شکل (3-1) مشخص است، زماني که اتومبيل در مکاني بعنوان پارک متوقف ميشود برنامه با دريافت اطلاعات ماهواره، موقعيت را با استفاده از طول و عرض جغرافيايي بدست آورده و در برنامه به کاربر نمايش مي دهد. برنامه به منظور ارسال اطلاعات به پايگاه داده با اتصال به اينترنت و پايگاه داده موقعيت کاربر را پس از تاييد پياده بودن راننده که بصورت خودکار توسط برنامه ارائه مي شود، به سمت پايگاه داده ارسال مي کند. اين اطلاعات بر روي وب سرويس قرار گرفته و شامل مواردي از جمله طول و عرض جغرافيايي و شماره شناسه مي باشد. از اين پس هر کاربري به وب سرويس مراجعه کند ميتواند از مکان هاي ثبت شده اطلاع يابد و ديدي کلي از آن خيابان بدست آورد. همچنين کاربران نيز ميتوانند مکان مورد نظر خود را بر روي نقشه از طريق وب سايت رزرو نمايند. از اين بعد تمام رانندگاني که از اين برنامه استفاده مي کنند مي توانند آن مکان رزرو را نيز بر روي نقشه مشاهده کنند و تصميمات مناسب را براي پارک خودروي خود داشته باشند.

شکل (3-2)- دياگرام معماري برنامه
با توجه به شکل(3-2) برنامه از قسمت هاي مختلفي تشکيل شده است که هر کدام وظايف مختلفي دارند و در ادامه در مورد هر يک بصورت کامل توضيحاتي داده شده است.
3-2-1-بخش اول (سيستم پايه)
در ساخت اين پروژه از نقشه هاي گوگل جهت ارتباط با ماهواره هاي موقعيت ياب و اعلام طول و عرض جغرافيايي و همچنين مسير يابي استفاده شده است. بنابر اين لازم است تا مجوز هاي لازم و کتابخانه هاي مورد نياز را از کنسول گوگل دريافت کرد. به دليل اين که ايران همچنان از دسترسي به توسعه دهنده هاي وب43، گوگل محروم مي باشد، از اين رو بايد براي استفاده از اين توسعه دهنده ها و دريافت آن ها از اينترنت بصورت مداوم از روش هاي دور زدن تحريم ها استفاده کرد، يعني استفاده از شبکه هاي مجازي خصوصي (VPN)44. البته سايت هاي آموزش اندرويد بي شماري هستند که تمامي اين برنامه ها را بر روي پايگاه داده خود بارگذاري کرده اند که ديگر نيازي به دور زدن تحريم ها نباشد اما بعضا آن ها هم داراي مشکلاتي هستند از جمله اين که
در زمان فشرده شدن اطلاعات دچار مشکل شده اند و يا دانلود نشدن بصورت کامل، پس استفاده از ساير سايت ها بغير از خود سايت ارائه دهنده پيشنهاد نمي شود.(اين پروژه با استفاده از Google api 45 نسخه دو و سه، پياده سازي شده است).

(الف) (ب)
شکل(3-3)-ارتباطات در تلفن هاي همراه هوشمند، الف)نحوه عملکرد Google Play Services، ب) نحوه ارتباط برنامه با امکانات گوشي
مجوز(کليد برنامه)46 براي دسترسي به کنسول گوگل است، که اين کار را بايد با استفاده از سايت توسعه دهنده نرم افزار هاي گوگل، پس از وارد کردن کد مرجع يا همان کد نرم افزار برنامه نويسي اندرويد دريافت کرد. در واقع اين شماره در هنگام بارگذاري نقشه توسط گوگل کنترل مي شود و مشخص ميکند که شما يک کاربر شناخته شده براي گوگل هستيد يا خير. بدون دريافت اين رمز منحصر بفرد قادر به بارگذاري نقشه هاي گوگل در محيط برنامه نخواهيم بود. اين کد را مي توان هم از طريق دستورات برنامه نويسي بدست آورد و هم از طريق برنامه توسعه دهنده.
مجوز، يک شناسه منحصر به فرد براي برنامه در گوگل است که به منظور اعتبارسنجي برنامه و همچنين گزارش هاي آماري گوگل مورد استفاده قرار مي گيرد. در واقع برنامه با استفاده از همين شناسه ميتواند از نقشه هاي موجود در گوگل استفاده کند و گوگل نيز گزارش هاي مورد نياز مثل ميزان ترافيک يا تعداد درخواست هاي روزانه را با استفاده از همين شناسه ايجاد مي کند. اولين مرحله براي دريافت مجوز يا کليد برنامه، بدست آوردن کد 47 MD5مربوط به48 JDK نصب شده بر روي کامپيوتر است. در واقع بايد کد MD5 مربوط به جاواي نصب شده به روي سيستم خود را در اختيار گوگل قرار داد تا گوگل، بتواند کليد برنامه کاملا هماهنگي با نسخه جاواي ما ارائه دهد.
اما ديگر کتابخانه اي که با آن سر و کار داريم کيت توسعه نرم افزاري اختصاصي و رابط برنامه نويسي اندرويد (Google Play Service) است. اين برنامه هم يکي از توسعه دهندگان برنامه اندرويد مي باشد که بايد کتابخانه هاي آن را دانلود و به برنامه متصل نمود. اين برنامه براي ارائه توابع به طور مستقيم با خدمات گوگل مي باشد و به منظور بروز رساني اطلاعات گوگل، اجراي نقشه گوگل، مکان يابي و … استفاده ميشود. اين برنامه را نيز مي توان از بروز رساني برنامه SDK 49 بدست آورد، پس همان طور که در شکل (3-3-الف) مشخص است برنامه با استفاده از کتابخانه Play Services با نرم افزار Google Play Services مدام در حال ارتباط است و با در اختيار قرار دادن اطلاعات نرم افزار به کنسول توسعه دهنده نرم افزاري گوگل، کد برنامه چک شده و سپس مجوز به پايگاه داده گوگل داده مي شود. اما براي استفاده از امکانات تلفن همراه نظير سنسورها و سيستم هاي بکار رفته در آن بايد مجوزهاي آن ها به صورت دستي در برنامه اعمال شود که با توجه به شکل (3-3-ب) مجوزهاي لازم براي برقراري ارتباط با سيستم ها از جمله اينترنت، لرزه ساز، مکان ياب و … که براي کار با آن ها در اين برنامه استفاده شده است در برنامه گرفته شده. شبه کدهاي زير نمونه هايي از مجوزهايي مي باشند که در برنامه اعمال شده اند.




هر کدام از اين مجوزها برنامه را قادر مي سازد تا بتواند از امکانات سخت افزاري تلفن همراه استفاده کند و با آن ها بصورت پويا در ارتباط باشد و اطلاعات لازم را در زمان هاي مورد نياز رد و بدل کند. براي مثال مجوز اينترنت، اين امکان را به برنامه مي دهد که بتواند با استفاده از WIFI و يا حتي MOBILE NETWORK به شبکه اينترنت متصل شد و اطلاعات را با پايگاه داده رد و بدل کرد. مجوز موقعيت نيز امکان دريافت اطلاعات از ماهواره موقعيت ياب جهاني را فراهم مي سازد که مکان فعلي و مکان نهايي را شامل مي شود. اين اطلاعات دريافتي همان طول و عرض هاي جغرافيايي هستند که مکان کاربر و مکان پارکينگ را مشخص مي کنند.
3-2-2-مختصات
اين قسمت از برنامه که زير مجموعه سيستم پايه مي باشد، براي نمايش مختصات و اسم شهر و کشور در نقشه طراحي شده است. با انتخاب اين گزينه از منوي طراحي شده در بالاي برنامه مختصات دقيق محل فعلي در نقشه به نمايش در خواهد آمد و کاربر مي تواند با تغيير مکان بر روي نقشه، مختصات آن محل مورد نظر را به طور دقيق مشاهده کند.
@Override
public View getInfoWindow(Marker marker) {
return null;
}
@Override
public View getInfoContents(Marker marker) {
View v = getLayoutInflater().inflate(R.layout.info_window, null);
TextView tvLocality = (TextView) v.findViewById(R.id.tv_locality);
TextView tvLat = (TextView) v.findViewById(R.id.tv_lat);
TextView tvLng = (TextView) v.findViewById(R.id.tv_lng);
TextView tvSnippet = (TextView) v.findViewById(R.id.tv_snippet);
LatLng ll= marker.getPosition();
tvLocality.setText(marker.getTitle());
tvLat.setText(“عرض جغرافيايي: “+ ll.latitude);
tvLng.setText(“طول جغرافيايي : “+ ll.longitude);
tvSnippet.setText(marker.getSnippet());
}});
اين سيستم با استفاده از دريافت اطلاعات از نقشه مي تواند طول و عرض جغرافيايي و نام شهر را به نمايش در آورد. اين قسمت بر روي نقشه هاي گوگل در صفحه اصلي پياده سازي شده و با انتخاب اين گزينه از منوي برنامه اين امکان بر روي صفحه به نمايش در خواهد آمد و تنها با دريافت اطلاعات مورد نياز از ماهواره موقعيت ياب، مي تواند اطلاعات در خواستي را جواب گو باشد.
Address add= list.get(0);
MainActivity.this.setMarker(add.getLocality(), add.getCountryName(), ll.latitude,ll.longitude);
3-2-3-مسير يابي
يکي ديگر از زير مجموعه هاي بخش
سيستم پايه مي باشد که از منوي بالاي برنامه قابل دسترس است. اين امکان به کاربر کمک مي کند تا سريعترين راه را براي پيمودن به مقصد خود پيدا کند. اين امکان نيازمند بکارگيري نقشه گوگل و اينترنت براي ارسال اطلاعات مبدا و مقصد مشخص شده توسط کاربر که شامل طول و عرض هاي جغرافيايي است، به پايگاه داده شرکت گوگل مي باشد. اين سيستم نيز بر روي نقشه هاي گوگل پياده سازي شده تا بتوان با انتخاب مکان دلخواه، طول و عرض جغرافيايي آن مکان به راحتي قابل دسترس شود، همچنين با انتخاب اين امکان، در بالاي صفحه برنامه دو گزينه نمايش داده مي شود تا کاربر بتواند نوع دلخواه سفر خود به مقصد را با انتخاب يکي از گزينه ها تعيين کند. اين گزينه ها شامل رانندگي و پياده مي باشد که با توجه به نحوه انتخاب کاربر نسبت به پياده بودن و يا رانندگي اطلاعات لازم از کنسول گوگل برگردانده مي شود. اين اطلاعات شامل يک مسير مشخص بر روي نقشه مي باشد که توسط الگوريتم هاي مسير يابي بدست آمده اند.
private String getDirectionsUrl(LatLng origin,LatLng dest){
// Origin of route
String str_origin = “origin=”+origin.latitude+”,”+origin.longitude;
// Destination of route
String str_dest = “destination=”+dest.latitude+”,”+dest.longitude;
String mode = “mode=driving”;
If (rbDriving.isChecked() ) {
mode = “mode=driving” ;
mMode = 0 ;}
else if (rbWalking.isChecked() ) {
mode = “mode=walking” ;
mMode = 1 ; }
// Building the parameters to the web service
String parameters = str_origin+”&”+str_dest+”&”+sensor+”&”+mode;
// Building the url to the web service
Send to String url = “https://maps.googleapis.com/maps/api/directions/”+output+”?”
+parameters;

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


دیدگاهتان را بنویسید