کاربرد GIS سرویس‌ها در تجزیه و تحلیل

کاربرد GIS سرویس‌ها در تجزیه و تحلیل


کاربرد Google Earth-موسسه چشم انداز هزاره سوم ملل-آموزش کاربردی GIS و RS

Google Earth یکی از مشتریانی است که ArcGIS for Server آن را پشتیبانی می‌کند. با ArcGIS for Server می‌توانید سرویس‌هایتان را به‌صورت فایل‌های KMZ منتشر کنید. Google Earth این نوع سرویس‌ها را ارائه می‌دهد. ابتدا یک سرویس نقشه‌ای جدید ایجاد و قابلیت KML را برای این سرویس فعال می‌کنیم. برای این کار ابتدا فایل Documents named US_States.mxd موجود در مسیر 7364EN_03_Files\ AGSA\ را بازکنید. اگر منبع داده‌های این فایل از بین رفته است می‌توانید از مسیر 7364EN_03_Files\AGSA\Data\ USS_states.gdb منبع داده را مشخص کنید. این فایل را به‌صورت یک سرویس نقشه‌ای منتشر کنید و تیک گزینه‌ی KML را بزنید. تنظیمات پیش‌فرض را بپذیرید و نام سرویس نقشه‌ای را US_States بگذارید. حال باید آدرس URL این فایل KML را به دست آوریم. Google Earth با استفاده از این URL داده‌ها را بازیابی و بارگذاری می‌کند. این URL به‌صورت قالب زیر است:

https://<SERVER>/arcgis/rest/services/<SERVICE NAME>/MapServer/Kml/mapImage.kmz

بنابراین URL سرویس ایالت‌های ما به‌صورت زیر است:

https://GIS-SERVER01:6080/arcgis/rest/services/US_States/MapServer/Kml/mapImage.kmz

تقریباً همه چیز آماده است. حالا باید Google Earth را اجرا کنیم. نسخه‌ی 7.1 این نرم‌افزار در لینک www.google.com/earth قرار دارد. پس از نصب نرم‌افزار آن را بازکنید. در قسمت Places در سمت چپ نرم‌افزار، روی My Places راست کلیک کنید و از گزینه‌ی Add گزینه‌ی Network Link را کلیک کنید. روی فرم New Network Link در فیلد Name عبارت US States را بنویسید و در فیلد Link آدرس URL را بنویسید. Ok را کلیک کنید.

مدتی طول می‌کشد تا فایل KMZ دانلود شود و Google Earth آن را ارائه دهد. وقتی دانلود شد می‌بینید که این فایل روی Google Earth ترسیم می‌شود.

فعلاً سرویس نقشه‌ای را به Google Earth اضافه کرده‌اید. اگر به دلایل امنیتی نمی‌خواهید گزینه‌ی KML را در سرویس نقشه‌ای فعال کنید، فایل‌های KML را می‌توان دانلود کرد و به‌صورت آفلاین و بدون نیاز به اینترنت به اشتراک گذاشت. Google Earth می‌تواند از سرویس‌های WMS استفاده کند. اجازه دهید به سرویس US States در ArcGIS Manager برگردیم و قابلیت WMS را فعال کنیم. سپس در Google Earth از بخش My Places روی My Places راست کلیک و از گزینه‌ی Add روی Image Overlay کلیک کنید. در فرم ظاهر شده، در فیلد Name عبارت US States WMS را بنویسید و فیلد Link را خالی بگذارید. سربرگ Refresh را فعال کنید و روی WMS Parameters کلیک کنید. در پنجره‌ی Web Mapping Service Parameters روی Add کلیک و در WMS URL آدرس URL سرویس WMS را وارد کنید. روی OK کلیک کنید تا تغییرات ثبت شوند. لایه باید در زیر لایه‌‌های انتخاب شده قرار گیرد. حالیک لایه‌ی WMS جدید می‌بینید که به Google Earth اضافه شده است.

کاربرد سرویس‌ها در API ها

تا کنون سرویس‌ها را منتشر و بدون کد نویسی از سرویس‌ها استفاده کردیم. البته سرویس‌ها به‌خوبی کار می‌کردند؛ اما می‌خواهیم از سرویس‌ها درون برنامه‌ها استفاده کنیم. پس زمان استفاده از API ها رسیده است.

چندین API برای استفاده از سرویس‌ها درون برنامه‌نویسی وجود دارد. Esri برای سالهای متمادی از Silverlight API و Flex API استفاده می‌کرد. این دو API به دلیل سادگی، راحتی و تعدد منابع، استفاده می‌شدند. ولی دستگاه‌های موبایل و تبلت‌ها از این API ها پشتیبانی نمی‌کنند. برای اجرای این API ها باید پلاگین خاصی روی مرورگر نصب کرد. در حالی که JavaScript API روی همه‌ی مرورگرها بدون نیاز به نصب پلاگین اجرا می‌شود. هم‌چنین دستگاه‌های موبایل و تبلت‌ها از JavaScriptAPI پشتیبانی می‌کنند. برای پیاده‌سازی وب اپلیکیشن‌های موبایل GIS با استفاده از JavaScriptAPI می‌توانید به کتاب ” با ArcGIS JavaScript API وب اپلیکیشن موبایل GIS بسازیم” از همین مترجم مراجعه کنید.

استفاده از ArcGIS JavaScript API

ArcGIS JavaScript API از یک کتابخانه‌ی قدرتمند بر مبنای Dojo استفاده می‌کند. Dojo یک جعبه ابزار جاوااسکریپتی است که با این جعبه ابزار می‌توان کارهای زیادی با نقشه انجام داد. به دو دلیل بهتر است از JavaScript API برای سرویس‌هایمان استفاده کنیم. اولین رویکرد، متد آنلاین است که متد ساده‌ای در یک کتابخانه‌ی جاوااسکریپتی است. این کتابخانه روی سرورهای Esri قرار دارد و بنابراین برای اجرا نیاز به اینترنت دارد. دومین رویکرد، متد آفلاین است. ابتدا کتابخانه‌ی آفلاین را از سایت Esri دانلود می‌کنید و این کتابخانه را بدون نیاز به اینترنت استفاده می‌کنید.

حالت آنلاین

در اینجا می‌توانید از JavaScript API استفاده کنید. ابتدا به اینترنت متصل شوید تا به کتابخانه‌ی ArcGIS دسترسی داشته باشید و سرویس نقشه‌ای را ارائه دهید. در این تمرین از یک داده به میزبانی Esri استفاده می‌کنیم که در URL زیر قرار دارد:

https://server.arcgisonline.com/ArcGIS/ rest/services/World_Topo_Map/MapServer

تنها چیزی که نیاز داریم یک ویرایشگر متنی مانند NotePad و یک مرورگر وب است. ابتدا یک فایل HTML قدم به قدم می‌نویسیم. با این فایل HTML متوجه می‌شوید که API ها چگونه کار می‌کنند. ویرایشگر متنی خود را بازکنید. در اینجا از ++Notepad استفاده می‌کنیم. این نرم‌افزار نحوه‌ی دستوری بسیاری از زبان‌های برنامه‌نویسی را پشتیبانی می‌کند. می‌توانید از لینک www.notepad-plus-plus.org این ویرایشگرمتنی را دانلود کنید. هر چند Notepad ویندوز و TextPad مکینتاش هم همین کار را انجام می‌دهند ولی دو مورد مذکور از نحوه‌ی دستوری پشتیبانی نمی‌کنند. از آنجایی که می‌خواهیم یک فایل HTML ایجاد کنیم، اسکلت اولیه‌ی HTML را مطابق زیر ایجاد می‌کنیم.

<html>
<header>
</header>
<body>
</body>
</html>

فایل را با نام agsJS_Online_Mode.Html و در مسیر 7364EN_03_Files\AGSA\Code ذخیره کنید. حال اولین عنصر HTML که نقشه در آنجا ترسیم خواهد شد را اضافه می‌کنیم. این عنصر تگ <div> است. ID این تگ را MapCanvas می‌گذاریم. این تگ باید در تگ <body> قرار گیرد.

<html>
<header>
</header>
<body>
<div id =”MapCanvas”>Here where the map should go</div>
</body>
</html>

روی فایل HTML که با نام agsJS_Online_Mode.Html ذخیره کرده‌ایم دو بار کلیک کنید تا اجرا شود. در حال حاضر هیچ نقشه‌ای ظاهر نمی‌شود. تصویری مطابق زیر ظاهر می‌شود:

در زمان تهیه‌ی این کتاب، ArcGIS JavaScript API نسخه‌ی 3.6 می‌باشد. ولی در این کتاب از نسخه‌ی 3.5 استفاده می‌کنیم.

به فایل HTML کد بیشتری اضافه می‌کنیم. ابتدا متن موجود در تگ <div> را پاک می‌کنیم. سپس ارجاعی به کتابخانه‌ی JavaScript به‌صورت متد آنلاین ایجاد می‌کنیم. این ارجاع را با تگ <script> انجام می‌دهیم.

<html>
<header>
<script src=”https://js.arcgis.com/3.5/”></script>
</header>
<body>
<div id =”MapCanvas”></div>
</body>
</html>

در حال حاضر هیچ نقشه‌ای نداریم و فقط یک ارجاع ایجاد کرده‌ایم. برای ایجاد نقشه به توابعی نیاز داریم. یک تگ <script> دیگر اضافه و با استفاده از تابع dojo.require کتابخانه‌ی مربوط به ایجاد نقشه را اضافه می‌کنیم. سپس یک تابع خالی به نام startup ایجاد می‌کنیم. هنگامی‌که کد با موفقیت مقداردهی اولیه شد، می‌زنیم برای اینکه تابع startup دقیقاً در زمان بارگذاری اولیه‌ی صفحه اجرا شود، با استفاده از کلمه‌ی کلیدی dojo.addonLoad تابع را صدا می‌زنیم. از یک پیام در تابع startup استفاده می‌کنیم تا بارگذاری اولیه‌ی کد را بررسی کنیم.

<html>
<header>
<script src=”https://js.arcgis.com/3.5/”></script>
<script>
dojo.require(“esri.map”);
Function startup()
{
alert(“map is about to initialize”)
}
dojo.addOnLoad(startup);

</script>
</header>
<body>
<div id =”MapCanvas”></div>
</body>
</html>

فایل HTML را در مرورگر اجرا کنید. اگر جاوا اسکریپت در مرورگر فعال باشد پیام زیر را خواهید دید.

کد alert را پاک‌کنید. حالا یک شی map ایجاد می‌کنیم. سپس یک لایه به نقشه اضافه می‌کنیم. در خط map = newesri.Map()، ID تگ div را قرار می‌دهیم. این خط کد، یک شی map ایجاد می‌کند. این شی لایه‌ها را در خود نگه می‌دارد. می‌توانیم شی map را با Dataframe موجود در toc ماژول arcmap یکی دانست. در واقع این شی map مانند دیتافریمی است که لایه‌ها را در خود نگه می‌دارد. برای ایجاد لایه باید از شی ArcGISDynamicMapServiceLayer استفاده کنیم. شی map، URL پروتکل REST را می‌گیرد و این URL را به‌صورت یک لایه نشان می‌دهد. خط map.addlayer لایه را به نقشه اضافه می‌کند. در کد زیر تعدادی کد طرح بندی نیز اضافه کردیم که نقشه را به‌صورت تمام صفحه نشان می‌دهد.

<html>
<header>
<script src=”https://js.arcgis.com/3.5/”></script>
<script>
dojo.require(“esri.map”);
function startup()
{
var map = new esri.Map(“MapCanvas”);
var layer = new esri.layers.ArcGISDynamicMapServiceLayer(“https://
server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/
MapServer”);
map.addLayer(layer); }
dojo.addOnLoad(startup);
</script>
</header>
<body>
<div id =”MapCanvas” style = “height: 100%;width:100%” ></div>
</body>
</html>

کد را ذخیره کنید و فایل را در مرورگر اجرا کنید. تصویر زیر را خواهید دید:

حال باید سرویس‌هایمان را اضافه کنیم. ابتدا باید سرویس‌های نقشه‌ای REST به نام‌های Parcels و Electricity را بارگذاری کنیم. توصیه می‌شود که از یک وب سرور اختصاصی استفاده کنید. هر چند می‌توانید از وب سرور توکار برای به دست آوردن URL استفاده کنید. این وب سرور توکار هم به‌خوبی کار می‌کند.

با استفاده از وب سرور اختصاصی قدرت GIS سرورها را بهینه می‌کنید.

با استفاده از قطعه کد زیر می‌توانید هر دو سرویس را ببینید.

<html>
<header>
<script src=”https://js.arcgis.com/3.5/”></script>
<script>
dojo.require(“esri.map”);
function startup()
{
var map = new esri.Map(“MapCanvas”);
var parcelsLayer = new esri.layers.ArcGISDynamicMapServiceLayer(
“https://WEB-SERVER01/wa/rest/services/Parcels/MapServer”
);
var electriclayer = new esri.layers.ArcGISDynamicMapServiceLayer(
“https://WEB-SERVER01/wa/rest/services/Electricity/MapServer”
);
map.addLayer(parcelsLayer);
map.addLayer(electriclayer);
}
dojo.addOnLoad(startup);
</script>
</header>
<body>
<div id =”MapCanvas” style = “height: 100%;width:100%” ></div>
</body>
</html>

خروجی به‌صورت زیر خواهد بود:

برگرفته از کتاب نصب، اجرا و مدیریت Arc GIS for server

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

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

وب جی آی اس (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