پریسا رشیدی نژاد
پریسا رشیدی نژاد
خواندن ۴ دقیقه·۴ سال پیش

دسترسی به عارضه های ثبت شده در openstreetmap


اگه شما یه بیزینس مکان محور دارین، یا به هر نحوی با نقشه ی متن باز اوپن استریت مپ کار میکنین و دارین یه کار تحلیلی روی عارضه های جغرافیایی انجام میدین، احتمالا سوالاتی در مورد کیفیت و کمیت دیتای موجود در این بستر براتون پیش اومده!

به طور مثال:

* کاش میشد محله های استان فارس رو به صورت یک جا بتونم ببینم. اسامی شون رو هم احتیاج دارم.

* چه طور میتونم ببینم رستوران ها در ایران کجا قرار دارن؟ شماره تلفن همشون رو میخوام.

* توزیع پراکندگی روستاهای ایران.

و اینکه میخوایم نتیجه ی این سوال ها همیشه بر اساس دیتای osm به روز باشن و دیتاهای جدید رو هم بتونیم ببینیم.

توی این مقاله میخوام روشی رو معرفی بکنم که با حداقل دانش جغرافیایی و برنامه نویسی پاسخ این سوالات رو در قالب یه نقشه خوشگل و تر و تمیز و همینطور یه فایل json کاربردی داشته باشین تا با خلاقیت خودتون کارای آماری روی این دیتا انجام بدین و مهم تر از اون قبل از اینکه برید سراغ استفاده از osm یه دید کلی نسبت به اینکه آیا میتونه نیازتون رو برآورده بکنه یا نه داشته باشین.

سایت overpass-trubo که درواقع یه API برای ارتباط با داده های osm هست از یه زبان کوئری نویسی استفاده میکنه که میخوایم سه چالشی که در بالا مطرح شد رو با کمک این سایت حل کنیم.

قدم اول: متن سوال رو به زبان قابل فهم برای osm ترجمه میکنیم.

منظور از متن سوال کلمات محله، روستا، رستوران، ایران و استان فارس هست. برای اینکار مثلا عبارت restaurant رو اینجا وارد میکنیم و بعد از enter کردن ما رو به صفحه ی مربوط به رستوران راهنمایی میکنه.

وارد کردن کلمه ی restaurant برای پیدا کردن مقدار key-value آن
وارد کردن کلمه ی restaurant برای پیدا کردن مقدار key-value آن
عبارت amenity = restaurant در کوئری مورد استفاده قرار میگیره
عبارت amenity = restaurant در کوئری مورد استفاده قرار میگیره

مقادیر key-value برای رستوران، محله یا روستا به این شکل میشه:

restaurant: amenity = restaurant
village: place = village
neighbourhood: place = neighbourhood

حالا باید یه مقدار یکتا برای کشور ایران و استان فارس پیدا کنیم. برای اینکار وارد نقشه osm میشیم و روی ایران اونقدر زوم میکنیم که با راست کلیک کردن گزینه ی query feature برامون فعال بشه. وقتی فعال شد و روش کلیک کردیم از سمت چپ عبارت ISO3166 که به ازای هر کشور یکتاست رو به همراه مقدارش که IR هست کپی میکنیم. برای پیدا کردن مقدار یکتای استان فارس هم به همین ترتیب روی استان فارس زوم میکنیم و مراحل رو برای این استان هم انجام میدیم.

با استفاده از این key-value در کوئری فیلتر کشور ایران را قرار میدهیم
با استفاده از این key-value در کوئری فیلتر کشور ایران را قرار میدهیم
iran: &quotISO3166-1&quot = &quotIR&quot
Fars province: &quotISO3166-2&quot=&quotIR-14

اگه این کار رو انجام ندیم در واقع کوئری مون رو محدود نکردیم و برای کل جهان اجرا میشه :|

قدم دوم: در template زیر متغیر هایی که بدست آوردیم رو قرار میدیم و دستور به دست اومده رو در اینجا کپی میکنیم. بعد گزینه ی RUN رو از بالای صفحه انتخاب میکنیم:

[out:json][timeout:250];
area[ISO KEY-VALUE]->.boundaryarea;
(nwr[&quotITEM KEY-VALUE&quot](area.boundaryarea););
out body;
>;
out skel qt;

مثلا برای مورد اول که رستوران های ایران رو میخواستیم به جای ISO KEY-VALUE و ITEM KEY-VALUE در کد بالا به ترتیب اطلاعات زیر رو که بدست آوردیم قرار میدیم.

&quotISO3166-1&quot = &quotIR&quot &quotamenity&quot = &quotrestaurant&quot

وقتی اجرا شد با استفاده از آپشن Data خروجی کوئری مون رو به صورت json و با استفاده از آپشن map به صورت گرافیکی و روی نقشه میبینیم. همچنین میتونیم در فرمت های مختلف که ممکنه به این دیتا نیاز داشته باشیم دانلودش کنیم.

پراکندگی رستوران ها در ایران
پراکندگی رستوران ها در ایران
اطلاعات محله ها در استان فارس
اطلاعات محله ها در استان فارس


اطلاعات روستاهای ایران
اطلاعات روستاهای ایران



openstreetmappostgisgisdata analysis
یه همسر، یه مادر، یه مهندس داده در map.ir
شاید از این پست‌ها خوشتان بیاید