Android SDK Resources
Android SDK Resources
هدف از این بخش از پروژه، استفاده از وب سرویس نگاشت نقطه بر نقشه (Map Matching) در B4A است.
فهرست مطالب این صفحه
سرویس نگاشت نقطه بر نقشه تعدادی نقاط ورودی را به محتملترین مسیری که این نقاط نشاندهنده آن هستند، نگاشت میکند.
کتابخانه های مورد نیاز
برای پیاده سازی این سرویس باید کتابخانه زیر را در پنجره Libraries Manager تیک بزنید:
- JavaObject
وب سرویس
برای آشنایی سریع با وب سرویس نگاشت نقطه بر نقشه نشان، میتوانید از لینک زیر استفاده کنید:
نمونه ای از پاسخ دریافت شده از سرویس نگاشت نقطه بر نقشه به صورت زیر می باشد:
{
"snappedPoints": [
{
"location": {
"latitude": 36.299336,
"longitude": 59.606256
},
"originalIndex": 0
},
{
"location": {
"latitude": 36.297886,
"longitude": 59.604335
},
"originalIndex": 1
},
{
"location": {
"latitude": 36.297218,
"longitude": 59.603496
},
"originalIndex": 2
}
]
}
پیاده سازی
به منظور استفاده از سرویس های نشان، شما باید یک Api-Key در پنل توسعه دهندگان نشان ایجاد کرده و از آن در ارسال سرویس استفاده کنید.
در فایل Main پروژه در قسمت Region Project Attributes خطوط زیر را اضافه کنید:
#AdditionalJar: common-release.aar
#AdditionalJar: gson-2.8.5.jar
جهت صدا زدن سرویس نگاشت نقطه بر نقشه از طریق اس دی کی B4A نشان میتوانید از متد neshanMapMatching به صورت زیر استفاده کنید:
NeshanMapSdk1.neshanMapMatching(API-KEY(String),Path(String))
پارامترها:
API-KEY: کلید دسترسی از نوع string که در پنل توسعه دهندگان ایجاد کرده اید.
Path: نقاطی که باید به یک مسیر نگاشت شوند. هر کدام از این نقاط با علامت پایپ ( | ) از یکدیگر جدا شدهاند.مختصات هر نقطه به فرم latitude,longitude
حداقل تعداد نقاط ورودی برابر با 2 است.
پس از صدا زدن این سرویس، خروجی توسط متد neshanMapMatchingResultReceived دریافت میشود.
جهت دریافت خروجی، متد neshanMapMatchingResultReceived را در اکتیویتی خود به صورت زیر پیاده سازی کنید:
Sub neshanMapMatchingResultReceived(neshanMapMatchingResultObject As Object)
End Sub
در صورتی که سرویس به هر دلیلی با خطا مواجه شود، متد mapMatchingResultReceivingError صدا زده خواهد شد.
بنابراین در اکتیویتی خود، متد mapMatchingResultReceivingError را برای دریافت خطا به صورت زیر پیاده سازی کنید.
Sub mapMatchingResultReceivingError(errorObject As Object)
End Sub
متغیر errorObject حاوی خطایی است که از سمت سرویس برگردانده شده است.
در صورتی که سرویس با خطا مواجه نشود، متغیر neshanMapMatchingResultObject در متد neshanMapMatchingResultReceived حاوی خروجی سرویس نگاشت نقطه بر نقشه خواهد بود.
بر اساس خروجی سرویس که یک جیسون با ساختاری است که پیش تر به آن اشاره شد، توسط یک شی JavaObject میتوان مقادیر را به صورت زیر از آن استخراج کرد.
Sub neshanMapMatchingResultReceived(neshanMapMatchingResultObject As Object)
Private neshanMapMatchingResultJO As JavaObject = neshanMapMatchingResultObject
Private snappedPoints As List = neshanMapMatchingResultJO.GetField("mMSnappedPoints")
For Each snappedPoint As JavaObject In snappedPoints
Log(snappedPoint.GetField("mMSnappedPointOriginalIndex"))
Log(snappedPoint.GetFieldJO("mMSnappedPointLocation").GetFieldJO("mMLocationLatitude") &","&snappedPoint.GetFieldJO("mMSnappedPointLocation").GetFieldJO("mMLocationLongitude"))
Next
End Sub
در مثال بالا ابتدا خروجی سرویس که در متغیر neshanMapMatchingResultObject است داخل یک متغیر از نوع JavaObject به نام neshanMapMatchingResultJO ریخته میشود. با این کار متغیر neshanMapMatchingResultObject تبدیل به یک متغیر از نوع JavaObject شده و داخل متغیر neshanMapMatchingResultJO قرار میگیرد.
سپس از طریق متد GetField و GetFieldJO و نام فیلدهای ذکر شده که در قسمت نام فیلدها به صورت کامل آورده شده است، میتوان به مقادیر خروجی سرویس دسترسی داشت.
مثال بالا مقادیر مربوط به خروجی سرویس را استخراج کرده و آنها را Log میکند.
نحوه نام گذاری فیلدهای مربوط به هر سرویس به این صورت است که ابتدا حروف ابتدایی نام سرویس مورد نظر به صورت camel case آورده شده سپس نام فیلد پس از آن قرار میگیرد.
در تکه کد بالا همانطور که نام سرویس map matching است، ابتدای فیلدها حروف mM به صورت camel case قرار گرفته است.
نام فیلدها:
نام فیلد در سرویس
snappedPoints
location
latitude
longitude
originalIndex
نام فیلد در اس دی کی
mMSnappedPoints
mMSnappedPointLocation
mMLocationLatitude
mMLocationLongitude
mMSnappedPointOriginalIndex