طراحی اپلیکیشن با الگوهای ArcGIS و Dojo

 طراحی اپلیکیشن با الگوهای ArcGIS و Dojo


تبدیل نقطه به آدرس و تبدیل آدرس به نقطه-موسسه چشم انداز-آموزش کاربردی GIS و RS

رسم نقاط یا آدرس‌ها بر روی نقشه یکی از رایج ترین توابع مورد استفاده در اپلیکیشن‌های Web Gis است. برای اینکه یک آدرس را به صورت یک نقطه بر روی نقشه رسم کنید نیاز به مختصات طول و عرض جغرافیایی دارید. Geocoding فرآیند تبدیل آدرس فیزیکی به مختصات جغرافیایی و reverse geocoding فرآیند تبدیل مختصات جغرافیایی به آدرس فیزیکی است. برای آدرس‌هایی که می‌خواهید به نقشه اضافه کنید، طی فرآیند Geocoding یک مختصات به آدرس اختصاص می‌یابد. فرآیند Geocoding با استفاده از یک سرویس Locator که خود شامل یک کلاس Locator است، انجام می‌شود. Geocoding به پارامترهای ورودی مختلفی نیاز دارد. شی Address یکی از پارامترهای ورودی است که برای تطبیق آدرس است؛ اما در فرآیند reverse geocoding به جای شی Address از شی Point استفاده می‌شود. شی Address در سرویس geocoding ثبت شده سپس یک شی AddressCandidate که شامل تطبیق آدرس با نقطه‌ای از نقشه است، برگردانده می‌شود. سپس این نقطه بر روی نقشه ترسیم می‌شود.

در این بخش مفاهیم زیر را تحت پوشش قرار می‌دهیم.

1- معرفی geocoding

2- Geocoding موجود سرویس Locator

3- فرآیند geocoding

4- فرآیند reverse geocoding

5- بررسی سرویس Locator

معرفی geocoding

ابتدا به نمونه‌ای از geocoding نگاهی می‌کنیم. مثلاً اگر شما آدرس 150 Main St را دارید، ابتدا باید آدرس را geocode و سپس به صورت یک نقطه بر روی نقشه نمایش دهید. اگر آدرس 150 Main St روی تکه‌ای از خیابان با محدوده‌ی آدرس 100 Main St تا 200 Main St قرار می‌گیرد، فرآیند geocoding موقعیت 150 Main St را درونیابی می‌کند و دقیقاً وسط خیابان را به این آدرس تخصیص می‌دهد و با توجه به مختصات جغرافیایی آدرس 100 Main St و مختصات جغرافیایی آدرس 200 Main St، مختصات جغرافیایی آدرس 150 Main St را به دست می‌آورد. حال که مختصات جغرافیایی این آدرس را داریم، یک نقطه در این مختصات قرار می‌دهیم.

متد geocoding از فرآیند درونیابی استفاده می‌کند و در نواحی شهری با آدرس‌های دقیق و با قاعده، بیشترین دقت را دارد.

 ابزار Geocoding موجود در سرویس Locator

سرویس Locator موجود در ArcGIS Server، فرآیندهای geocoding و reverse geocoding را انجام می‌دهد. با استفاده از ArcGIS Server API for JavaScript یک آدرس را در سرویس Locator ثبت و سپس مختصات جغرافیایی این آدرس را بازیابی می‌کنید و آدرس را به صورت نقطه بر روی نقشه رسم می‌کنید. این فرآیند را در تصویر زیر می‌بینید. آدرس با شی JSON مشخص می‌شود که این شی، ورودی شی Locator است. خروجی شی Locator، شی AddressCandidate است که یک نقطه را بر روی نقشه نمایش می‌دهد. عملیات geocoding شبیه کارهایی است که در فصل قبل یاد گرفتیم. شی Address پارامترهای ورودی را تعیین می‌کند، نتایج در شی AddressCandidate قرارگرفته و به تابع بازخوردی فرستاده می‌شود. این تابع شی نتیجه را پردازش می‌کند.

اشیاء ورودی شی Locator

Locator، شی پارامتر ورودی را به دو صورت شی JSON یا شی Point می‌پذیرد. ایجاد هر کدام از این اشیاء با دیگری متفاوت است. ایجاد هر کدام را در بخش‌های بعدی توضیح می‌دهیم.

شی ورودی JSON

سرویس Locator، برای reverse geocoding شی Point و برای geocoding شی JSON را می‌گیرد. شی JSON یک آدرس را در قالب شی تعریف می‌کند. در کد زیر، آدرس به صورت مجموعه زوج‌های نام/مقدار است که با {} مشخص می‌شوند. یک زوج نام/مقدار می‌تواند برای یک خیابان، یک شهر، یک ایالت و موارد مشابه تعریف شود؛ اما این زوج نام/ مقدار، وابستگی زیادی به نوع و استانداردهای سرویس geocoding دارد.

var address = {
street: “380 New York”,
city: “Redlands”,
state: “CA”,
zip: “92373”
}

 شی ورودی Point

reverse geocoding یک شی ورودی point می‌گیرد. این شی در قالب esri/ geometry/Point است. شی point با کلیک کاربر بر روی نقشه، تعریف می‌شود. رویداد Map.click شی point را برمی‌گرداند سپس این شی را به عنوان ورودی سرویس Locator استفاده می‌کند.

شی Locator

برای اجرای عملیات reverse geocoding و geocoding از کلاس Locator استفاده می‌شود. این کلاس شامل رویدادها و متدهایی است که از اشیاء ورودی Point و Address استفاده می‌کند. Locator یک اشاره گر به آدرس سرویس geocoding است. ArcGIS Server این URL را فراهم می‌کند. در کد زیر یک نمونه از شی Locator ایجاد می‌شود.

var locator = new Locator
(“https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Locators/ESRI_Geocode_USA/GeocodeServer”);

 

ابتدا یک نمونه از کلاس Locator ایجاد می‌شود. برای عملیات geocoding متد addressToLocations() و برای عملیات reverse geocoding متد locationToAddress() را صدا می‌زنیم. برای تکمیل عملیات geocoding رویداد address-to-locations-complete() و برای تکمیل عملیات reverse geocoding رویداد on-location-to-address-complete() اجرا می‌شود.

شی AddressCandidate

در نتیجه‌ی عملیات Locator یک شی AddressCandidate برمی‌گردد. ویژگی‌هایی مانند آدرس، اطلاعات توصیفی، موقعیت و نمره در این شی ذخیره می‌شود.

اطلاعات توصیفی شامل یک زوج نام/مقدار یا همان نام فیلد و مقدار فیلد است. مختصات x و y آدرس به یک نام تبدیل می‌شوند و این نام در ویژگی مکان قرار می‌گیرد. ویژگی نمره، عددی بین 0 تا 100 است. عدد بالاتر نشان می‌دهد که تطبیق آدرس با مکان با دقت خوبی انجام شده است. آدرس‌های چندگانه نیز می‌توانند در شی AddressCandidate ذخیره شوند.

حال می‌خواهیم نگاه عمیق تری به متدهای Locator بیاندازیم. متد Locator.addressToLocations() درخواست عملیات geocoding را می‌فرستد. یک شی آدرس ایجاد شده و به عنوان پارامتر ورودی متد addressToLocations() استفاده می‌شود. نتایج عملیات geocoding در شی AddressCandidate قرار می‌گیرد. سپس آدرس به صورت یک گرافیک بر روی نقشه ترسیم می‌شود.

عملیات Reverse geocoding با شی Locator در متد locationToAddress() انجام می‌شود. شی point با کلیک کاربر بر روی نقشه ایجاد و به عنوان پارامتر ورودی به متد locationToAddress() ارسال می‌شود. یک پارامتر فاصله بر حسب متر نیز به این متد فرستاده می‌شود. یک نقطه را تعیین کرده و باید مطابق با آن نقطه، یک آدرس برگردانده شود. این پارامتر، حداکثر فاصله‌ای که آدرس برگشتی تا نقطه دارد را تعیین می‌کند و در واقع برای دقت آدرس برگشتی مهم است. اینکه آدرس برگشتی در چه فاصله‌ای از نقطه قرار دارد؟ متد addressToLocations() یک شی AddressCandidate برمی‌گرداند. این شی شامل یک آدرس است.

فرآیند geocoding

ابتدا با استفاده از سرویس geocoding موجود در ArcGIS Server، یک شی Locator ایجاد می‌کنیم. آدرس ورودی در قالب شی JSON است. متد addressToLocations()، شی JSON را در شی Locator ثبت می‌کند. این متد یک یا چند شی AddressCandidate برمی گرداند.

فرآیند reverse geocoding

این فرآیند از شی Locator استفاده می‌کند. شی Locator توسط یک URL به سرویس geocoding ارجاع می‌کند. در نتیجه‌ی کلیک کاربر بر روی نقشه، یک شی Point ایجاد می‌شود. توسط متد locationToAddress()، شی point در شی Locator ذخیره می‌شود. متد locationToAddress() یک پارامتر شعاع بر حسب متر نیز دارد. شی Locator تلاش می‌کند تا در این شعاع، یک آدرس پیدا کند. اگر آدرسی در این شعاع پیدا شود، شی AddressCandidate ایجاد و رمزگشایی می‌شود و یک آدرس برمی‌گرداند.

برگرفته از کتاب تولید و طراحی اپلیکیشن‌ های Web GIS و Mobile GIS با استفاده از ArcGIS API for JavaScript

نویسنده: دکتر محمد بافقی زاده

نشر: انتشارات اکادمیک

وب جی آی اس (WebGIS)


Fatal error: Uncaught TypeError: ltrim(): Argument #1 ($string) must be of type string, WP_Error given in /home/gisland1/public_html/wp-includes/formatting.php:4482 Stack trace: #0 /home/gisland1/public_html/wp-includes/formatting.php(4482): ltrim(Object(WP_Error)) #1 /home/gisland1/public_html/wp-content/themes/xtra/functions.php(3349): esc_url(Object(WP_Error)) #2 /home/gisland1/public_html/wp-content/themes/xtra/single.php(19): Codevz_Core_Theme::generate_page('single') #3 /home/gisland1/public_html/wp-includes/template-loader.php(106): include('/home/gisland1/...') #4 /home/gisland1/public_html/wp-blog-header.php(19): require_once('/home/gisland1/...') #5 /home/gisland1/public_html/index.php(17): require('/home/gisland1/...') #6 {main} thrown in /home/gisland1/public_html/wp-includes/formatting.php on line 4482