درج نقاط روی نقشه با استفاده از GeoJSON ایجاد شده در OpenRefine
دسترسی به داده های جغرافیایی یک چیز است و نمایش سریع آن روی نقشه یک چیز دیگر. در این آموزش، به این مهم می پردازیم که چگونه می توانید با استفاده از openRefine داده ها را به صورت جدولی گرفته و آنها را با فرمتی که به سرعت قابل مصورسازی بر روی نقشه های تعاملی باشد تولید کنید. ما قصد داریم تا یک استاندارد آزاد مبتنی بر این رویکرد را ترویج دهیم: اگر شما داده هایتان را در یک فرمت استاندارد ذخیره کنید، خواهید توانست آنها در برنامه هایی متفاوت با استاندارد خودتان هم نمایش دهید با این فرض که برنامه های مختلف در یک حوزه، امکان ورود داده ها از فرمتهای استاندارد دیگر به فرمتهای مورد استفاده خود را برای کاربرانشان مهیا خواهند کرد. البته این روش همواره درست نیست اما ما با امید زندگی می کنیم 🙂
در دنیای جئو دیتا (داده های جغرافیایی) ، استاندارد GeoJSON فرمتی را تعریف می کند که یک روش نسبتاً راحت از نمایش داده های مرتبط با نقاط (نشانه های تکی بر روی نقشه)، خطوط (خط های روی نقشه) و چندضلعی ها (اشکال یا مناطق روی نقشه) را مهیا می کند. برنامه های کاربردی زیادی می توانند داده ها در این فرمت را بخوانند و بنویسند.
به طور خاص، سرویس gist در گیت هاب، که یک سرویس برای ذخیره و به اشتراک گذاری کدهای برنامه نویسی است، این امکان را به شما می دهد تا فایل داده های geojson خود را درون یک gist قرار دهید و گیت هاب آنها را به صورت نقشه نمایش دهد.(در این آدرس توضیحات بیشتر را می توانید مشاهده کنید). بدین منظور شما می توانید به وسیله ابزار Geojson.io ، می توانید نقاطی را به صورت گرافیکی و به سادگی روی نقشه مشخص کنید و در انتهای کار، فرمت GeoJson آنرا تحویل بگیرید. در مرحله بعد محتوای این فایل را در یک Gist کپی کرده و یک نقشه بسازید؛ نقشه ای که به راحتی می توانید آنرا با بقیه به اشتراک بگذارید.
سرویس gist در گیت هاب در واقع یک سیستم کارآمد جهت به اشتراک گذاشتن یک قطعه کد است. با این ابزار میتوانیم یک فایل یا بخش هایی از یک فایل و یا یک برنامه کامل را به اشتراک بگذاریم. گیست در این آدرس در دسترس است. در واقع هر gist یک منبع (repository) گیت است.
با مشاهده ابزار فوق این سوال در ذهن ایجاد می شود که پس چگونه می توان از برخی داده های جدولی که به صورت زیر به نظر می رسد:
درون الگوی داده geojson به شکل زیر قرار داد و نتایج را نمایش داد.
{"features": [ {"geometry": { "coordinates": [ 0.124862, 52.2033051 ], "type": "Point"}, "id": "Cambridge,UK", "properties": {}, "type": "Feature" }, {"geometry": { "coordinates": [ 151.2164539, -33.8548157 ], "type": "Point"}, "id": "Sydney, Australia", "properties": {}, "type": "Feature" }], "type": "FeatureCollection"}
برای این کار ابتدا مجموعه داده ی خود را آماده می کنیم. ما فرض می کنیم قبلاً مختصات مکان ها را برای بدست آوردن طول و عرض جغرافیایی برچسب گذاری کرده ایم. برای آشنایی با نحوه برچسب گذاری جغرافیایی داده ها به اینجا مراجعه نموده و یا از این آموزش استفاده کنید. ( برای استفاده از این مثال شما می توانید در سایت Geojson نقاط مدنظر خود را نشانه گذاری کنید تا مختصات آن را به صورت جدولی جهت استفاده در این مثال بدست آورید. در استفاده ی حقیقی شما ابتدا داده ها و مختصات را به صورت جدولی در اختیار داشته باشید و بخواهید این اطلاعات را بر روی نقشه های حقیقی شناسایی کرده و ارتباطات نقاط را بیابید). روش دیگر برای ساخت فایل geojson از روی داده های جدولی، استفاده از openRefine می باشد. openRefine به شما اجازه می دهد تا خروجی را به فرمت دلخواه ایجاد نمایید. در ادامه این آموزش از این روش استفاده می کنیم .
مراحل استفاده از OpenRefine
پس از وارد کردن فایل اطلاعات درون openRefine، با استفاده از منوی کشویی openRefine مطابق شکل زیر خروجی نوع templating را بیابید.
الگو را مطابق با نوع فرمت خروجی GeoJson تعریف کنید.
الگوی پشتیبانی شده شامل چهار قسمت زیر می باشد: سربرگ استاندارد (پیشوند یا الگویی که در ابتدای تمام داده ها قرار میگیرد) ، الگوی هر سطر که برای دادهی geoJson شبیه شکل زیر خواهد بود، یک جداکننده هر سطر و نهایتاً یک فوتر استاندارد (پسوند) . که آنها را مطابق شکل وارد کنید.
در این الگو ستونی با برچسب “place”، ستون “lat” حاوی مقدار عددی عرض جغرافیایی و ستون “long” حاوی مقدار عددی طول جغرافیایی تنظیم شده و نهایتاً یک فایل geojson که اجازه می دهد تا نقاط بر روی یک نقشه نمایش داده شود، تولید می شود.
الگوی مورد استفاده پیشوند:
{"features": [
الگوی سطر:
{"geometry": { "coordinates": [ {{cells["Long"].value}}, {{cells["Lat"].value}} ], "type": "Point"}, "id": {{jsonize(cells["Place"].value)}}, "properties": {}, "type": "Feature" }
جداکننده سطر ها:
,
پسوند:
], "type": "FeatureCollection"}
اطلاعات این الگو در اینجا به عنوان یک gist در دسترس می باشد. نوع دیگری از داده ها که ممکن است بخواهیم آنها را بر روی نقشه نمایش دهیم، مجموعه ی نشانه هایی ست که به هم به صورت خطی متصل می شوند. برای مثال، برخی داده ها می توانند برای توصیف ارتباط و اتصال بین دو مکان استفاده شوند که در سطرهای مشابه قرار می گیرند (در مثال شکل زیر ستون های “از مکان x”، “به مکان y”، “از عرض جغرافیایی”،”به عرض جغرافیایی” و به طور مشابه ستون های “از طول جغرافیایی” و “به طول جغرافیایی” لحاظ شده است): الگوی زیر یک نشانه برای هر نام مکان تولید می کند و همینطور یک خط که اتصال بین دو مکان را نمایش می دهد. الگوی مورد استفاده پیشوند:
{"features": [
الگوی سطر:
{"geometry": { "coordinates": [ {{cells["from_lon"].value}}, {{cells["from_lat"].value}} ], "type": "Point"}, "id": {{jsonize(cells["from"].value)}}, "properties": {}, "type": "Feature" }, {"geometry": { "coordinates": [ {{cells["to_lon"].value}}, {{cells["to_lat"].value}} ], "type": "Point"}, "id": {{jsonize(cells["to"].value)}}, "properties": {}, "type": "Feature" }, {"geometry": {"coordinates": [[{{cells["from_lon"].value}}, {{cells["from_lat"].value}}], [{{cells["to_lon"].value}}, {{cells["to_lat"].value}}]], "type": "LineString"}, "id": null, "properties": {}, "type": "Feature"}
جداکننده سطر ها:
,
پسوند:
], "type": "FeatureCollection"}
اگر ما خروجی geojson را از پنجره پیش نمایش کپی کنیم، می توانیم آن را برای تولید یک پیش نمایش روی نقشه، داخل یک giist کپی کنیم و یا آن را درون یک جستجوگر فرمت geojson مانند GeoJSONLint مطابق شکل زیر قرار دهیم: در شکل بالا الگوی نوشته شده در openRefine را کپی کرده و قرار داده ایم. شما می توانید الگوی نوشته شده برای تولید شکل فوق(تولید اتصال خطی نقاط) را در اینجا مشاهده نمایید. پیشنهاد می شود برای ساخت الگوهای اولیه، کد مربوط به تولید خط، نشانه یا چند ضلعی را بر روی داده های فرضی با استفاده از geojsaon.io تولید نمایید. تا با نحوه کدنویسی الگو ها برای ساخت الگوهای مدنظر خود در openRefine آشنا شوید. جهت آشنایی با ساختار الگوهای geojson از اینجا نیز می توانید استفاده کنید. به طور مختصر در زیر چند نمونه از اجزای الگو بیان می شود:
در نهایت، شایان ذکر است که اگر ما بتوانیم یک روش استاندارد برای توصیف الگوی تولید خروجی از مجموعه داده های جدولی تعریف کنیم، بر این اساس می توان کتابخانه هایی برای سایر ابزارهای برنامه نویسی مانند R یا پایتون نوشت. این کتابخانه ها می توانند یک فایل تعریف الگو (مانند gists های نوشته شده براساس خروجی الگوی تعریف شده در openRefine در لینک بالا) را خوانده و سپس از آن به عنوان یک نتیجه مستقیم، در تبدیل فرمت داده های خروجی به صورت “table2format” پشتیبانی کنند.
منبع مقاله : SchoolOfData