اگه شما یه بیزینس مکان محور دارین، یا به هر نحوی با نقشه ی متن باز اوپن استریت مپ کار میکنین و دارین یه کار تحلیلی روی عارضه های جغرافیایی انجام میدین، احتمالا سوالاتی در مورد کیفیت و کمیت دیتای موجود در این بستر براتون پیش اومده!
به طور مثال:
* کاش میشد محله های استان فارس رو به صورت یک جا بتونم ببینم. اسامی شون رو هم احتیاج دارم.
* چه طور میتونم ببینم رستوران ها در ایران کجا قرار دارن؟ شماره تلفن همشون رو میخوام.
* توزیع پراکندگی روستاهای ایران.
و اینکه میخوایم نتیجه ی این سوال ها همیشه بر اساس دیتای osm به روز باشن و دیتاهای جدید رو هم بتونیم ببینیم.
توی این مقاله میخوام روشی رو معرفی بکنم که با حداقل دانش جغرافیایی و برنامه نویسی پاسخ این سوالات رو در قالب یه نقشه خوشگل و تر و تمیز و همینطور یه فایل json کاربردی داشته باشین تا با خلاقیت خودتون کارای آماری روی این دیتا انجام بدین و مهم تر از اون قبل از اینکه برید سراغ استفاده از osm یه دید کلی نسبت به اینکه آیا میتونه نیازتون رو برآورده بکنه یا نه داشته باشین.
سایت overpass-trubo که درواقع یه API برای ارتباط با داده های osm هست از یه زبان کوئری نویسی استفاده میکنه که میخوایم سه چالشی که در بالا مطرح شد رو با کمک این سایت حل کنیم.
منظور از متن سوال کلمات محله، روستا، رستوران، ایران و استان فارس هست. برای اینکار مثلا عبارت restaurant رو اینجا وارد میکنیم و بعد از enter کردن ما رو به صفحه ی مربوط به رستوران راهنمایی میکنه.
مقادیر key-value برای رستوران، محله یا روستا به این شکل میشه:
restaurant: amenity = restaurant
village: place = village
neighbourhood: place = neighbourhood
حالا باید یه مقدار یکتا برای کشور ایران و استان فارس پیدا کنیم. برای اینکار وارد نقشه osm میشیم و روی ایران اونقدر زوم میکنیم که با راست کلیک کردن گزینه ی query feature برامون فعال بشه. وقتی فعال شد و روش کلیک کردیم از سمت چپ عبارت ISO3166 که به ازای هر کشور یکتاست رو به همراه مقدارش که IR هست کپی میکنیم. برای پیدا کردن مقدار یکتای استان فارس هم به همین ترتیب روی استان فارس زوم میکنیم و مراحل رو برای این استان هم انجام میدیم.
iran: "ISO3166-1" = "IR"
Fars province: "ISO3166-2"="IR-14
اگه این کار رو انجام ندیم در واقع کوئری مون رو محدود نکردیم و برای کل جهان اجرا میشه :|
[out:json][timeout:250];
area[ISO KEY-VALUE]->.boundaryarea;
(nwr["ITEM KEY-VALUE"](area.boundaryarea););
out body;
>;
out skel qt;
مثلا برای مورد اول که رستوران های ایران رو میخواستیم به جای ISO KEY-VALUE و ITEM KEY-VALUE در کد بالا به ترتیب اطلاعات زیر رو که بدست آوردیم قرار میدیم.
"ISO3166-1" = "IR" "amenity" = "restaurant"
وقتی اجرا شد با استفاده از آپشن Data خروجی کوئری مون رو به صورت json و با استفاده از آپشن map به صورت گرافیکی و روی نقشه میبینیم. همچنین میتونیم در فرمت های مختلف که ممکنه به این دیتا نیاز داشته باشیم دانلودش کنیم.