سرویس تبدیل نقطه جغرافیایی به آدرس (ریورس جئوکدینگ) – B4A

Android SDK Resources

هدف از این بخش از پروژه، استفاده از وب سرویس تبدیل نقطه جغرافیایی به آدرس (Reverse GeoCoding) در B4A است.

از سرویس تبدیل نقطه جغرافیایی به آدرس میتوانید برای تبدیل یک مختصات جغرافیایی به آدرس نوشتاری استفاده کنید.

کتابخانه های مورد نیاز

برای پیاده سازی این سرویس باید کتابخانه زیر را در پنجره Libraries Manager تیک بزنید:

  • JavaObject

وب سرویس

برای آشنایی سریع با وب سرویس ریورس جئوکدینگ نشان، میتوانید از لینک زیر استفاده کنید:

وب سرویس ریورس جئوکدینگ

 

نمونه ای از پاسخ دریافت شده از سرویس ریورس جئوکدینگ به صورت زیر می باشد:

            {
    "status": "OK",
    "formatted_address": "تهران، دکتر فاطمی، حجاب، سازمان آب، بین دائمی و عبداله زاده",
    "route_name": "سازمان آب",
    "route_type": "secondary",
    "neighbourhood": "فاطمي",
    "city": "تهران",
    "state": "استان تهران",
    "place": null,
    "municipality_zone": "6",
    "in_traffic_zone": "true",
    "in_odd_even_zone": "true",
    "village": null,
    "county": شهرستان تهران,
    "district": "بخش مرکزی شهرستان تهران",
}
        

پیاده سازی

به منظور استفاده از سرویس های نشان، شما باید یک Api-Key در پنل توسعه دهندگان نشان ایجاد کرده و از آن در ارسال سرویس استفاده کنید.

در فایل Main پروژه در قسمت Region Project Attributes خطوط زیر را اضافه کنید:

#AdditionalJar: common-release.aar
#AdditionalJar: gson-2.8.5.jar

جهت صدا زدن سرویس ریورس جئوکدینگ از طریق اس دی کی B4A نشان میتوانید از متد neshanReverseGeocoding به صورت زیر استفاده کنید:

            NeshanMapSdk1.neshanReverseGeocoding(API-KEY(String),Latitude(Double),Longitude(Double))
        

پارامترها:

API-KEY: کلید دسترسی از نوع string که در پنل توسعه دهندگان ایجاد کرده اید.

Latitude: عرض جغرافیایی

Longitude: طول جغرافیایی

پس از صدا زدن این سرویس، خروجی توسط متد reverseGeocodingResultReceived دریافت میشود.

جهت دریافت خروجی، متد reverseGeocodingResultReceived را در اکتیویتی خود به صورت زیر پیاده سازی کنید:

            Sub reverseGeocodingResultReceived(neshanReverseGeocodingResultObject As Object)
	
End Sub
        

در صورتی که سرویس به هر دلیلی با خطا مواجه شود، متد reverseGeocodingResultReceivingError صدا زده خواهد شد.

بنابراین در اکتیویتی خود، متد reverseGeocodingResultReceivingError را برای دریافت خطا به صورت زیر پیاده سازی کنید.

            Sub reverseGeocodingResultReceivingError(errorObject As Object)
	
End Sub
        

متغیر errorObject حاوی خطایی است که از سمت سرویس برگردانده شده است.

در صورتی که سرویس با خطا مواجه نشود، متغیر neshanReverseGeocodingResultObject در متد reverseGeocodingResultReceived حاوی خروجی سرویس ریورس جئوکدینگ خواهد بود.

بر اساس خروجی سرویس که یک جیسون با ساختاری است که پیش تر به آن اشاره شد، توسط یک شی JavaObject میتوان مقادیر را به صورت زیر از آن استخراج کرد.

            Sub geocodingReverseResultReceived(neshanGeoReverseResultObject As Object)
	Private reverseGeocodingResultJO As JavaObject = neshanGeoReverseResultObject
	Log(reverseGeocodingResultJO.GetField("gRStatus"))
	Log(reverseGeocodingResultJO.GetField("gRFormattedAddress"))
	Log(reverseGeocodingResultJO.GetField("gRRouteName"))
	Log(reverseGeocodingResultJO.GetField("gRRouteType"))
	Log(reverseGeocodingResultJO.GetField("gRNeighbourhood"))
	Log(reverseGeocodingResultJO.GetField("gRCity"))
	Log(reverseGeocodingResultJO.GetField("gRState"))
	Log(reverseGeocodingResultJO.GetField("gRPlace"))
	Log(reverseGeocodingResultJO.GetField("gRMunicipalityZone"))
	Log(reverseGeocodingResultJO.GetField("gRInTrafficZone"))
	Log(reverseGeocodingResultJO.GetField("gRInOddEvenZone"))
	Log(reverseGeocodingResultJO.GetField("gRVillage"))
	Log(reverseGeocodingResultJO.GetField("gRCounty"))
	Log(reverseGeocodingResultJO.GetField("gRDistrict"))
End Sub
        

در مثال بالا ابتدا خروجی سرویس که در متغیر neshanReverseGeocodingResultObject است داخل یک متغیر از نوع JavaObject به نام reverseGeocodingResultJO ریخته میشود. با این کار متغیر neshanReverseGeocodingResultObject تبدیل به یک متغیر از نوع JavaObject شده و داخل متغیر reverseGeocodingResultJO قرار میگیرد.

سپس از طریق متد GetField و نام فیلدهای ذکر شده که در قسمت نام فیلدها به صورت کامل آورده شده است، میتوان به مقادیر خروجی سرویس دسترسی داشت.

مثال بالا مقادیر مربوط به خروجی سرویس را استخراج کرده و آنها را Log میکند.

نحوه نام گذاری فیلدهای مربوط به هر سرویس به این صورت است که ابتدا حروف ابتدایی نام سرویس مورد نظر به صورت camel case آورده شده سپس نام فیلد پس از آن قرار میگیرد.

در تکه کد بالا همانطور که نام سرویس reverse geocoding است، ابتدای فیلدها حروف rG به صورت camel case قرار گرفته است.

 

نام فیلدها:

نام فیلد در سرویس

            status
formatted_address
route_name
route_type
neighbourhood
city
state
place
municipality_zone
in_traffic_zone
in_odd_even_zone
village
county
district
        

نام فیلد در اس دی کی

            rGStatus
rGFormattedAddress
rGRouteName
rGRouteType
rGNeighbourhood
rGCity
rGState
rGPlace
rGMunicipalityZone
rGInTrafficZone
rGInOddEvenZone
rGVillage
rGCounty
rGDistrict
        
فهرست مطالب این صفحه