فهرست مطالب:

نحوه ایجاد نقشه های سفارشی با استفاده از OpenStreetMap: 7 مرحله (همراه با تصاویر)
نحوه ایجاد نقشه های سفارشی با استفاده از OpenStreetMap: 7 مرحله (همراه با تصاویر)

تصویری: نحوه ایجاد نقشه های سفارشی با استفاده از OpenStreetMap: 7 مرحله (همراه با تصاویر)

تصویری: نحوه ایجاد نقشه های سفارشی با استفاده از OpenStreetMap: 7 مرحله (همراه با تصاویر)
تصویری: گوز زدن پریانکا چوپرا هنرپیشه بالیوود در یکی از برنامه های لایف تلویزیونی |C&C 2024, نوامبر
Anonim
نحوه ایجاد نقشه های سبک سفارشی با استفاده از OpenStreetMap
نحوه ایجاد نقشه های سبک سفارشی با استفاده از OpenStreetMap

در این قسمت آموزشی ، من فرایندی را توصیف می کنم که به موجب آن می توانید نقشه های سبک سازی شده سفارشی خود را ایجاد کنید. نقشه تلطیف شده نقشه ای است که در آن کاربر می تواند مشخص کند که کدام لایه های داده تجسم می شوند و همچنین سبکی را که هر لایه با آن تجسم می شود ، مشخص می کند. من ابتدا فرایندی را که می توانید از طریق آن نرم افزاری برای سبک سازی نقشه ها بنویسید ، و سپس نمونه ای از نرم افزار پایتون که برای انجام این کار نوشتم ، توضیح خواهم داد.

ویدئوی زیر نحوه ایجاد نقشه های سبک را مشخص می کند ، اما برای جزئیات دقیق به خواندن ادامه دهید. من بسیار هیجان زده هستم که ببینم جامعه چه چیزی ایجاد می کند!

انگیزه من در پشت این پروژه چیست؟

صادقانه بگویم ، من این پروژه را شروع کردم زیرا فکر می کردم انجام آن سرگرم کننده خواهد بود. این ایده در یک سال گذشته در ذهن من می چرخید و سرانجام زمان لازم را برای به ثمر رساندن آن اختصاص دادم. پس از یک روز نمونه سازی اولیه با برخی از اسکریپت نویسی اولیه ، من توانستم نتایج بسیار امیدوارکننده ای ایجاد کنم - آنقدر امیدوار کننده که می دانستم باید اسکریپت های خود را به گونه ای رسمی کنم که دیگران بتوانند به راحتی ساخته های خود را بسازند.

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

منابع/پیوندها:

  • OpenStreetMap
  • OpenStreetMap Legalese
  • مخزن Github

تدارکات

  • توزیع پایتون (من از Anaconda و Python 3.6 استفاده کردم)
  • PyQt5 (برای وابستگی های رابط کاربری گرافیکی)

مرحله 1: تعریف فرآیند I: بارگیری فایل OSM

تعریف فرایند I: بارگیری فایل OSM
تعریف فرایند I: بارگیری فایل OSM

وقتی این پروژه را برای اولین بار شروع کردم ، واضح ترین سوال این بود که "از کجا می توانم داده های نقشه را دریافت کنم". به طور طبیعی ، همانطور که انتظار داشتید ، بلافاصله به Google Maps فکر کردم. پس از تحقیقات مهم ، متوجه شدم که گوگل واقعاً نمی خواهد مردم با داده های خود بازی کنند ، به معنای خلاقانه یا غیر آن. در حقیقت ، آنها صراحتا وبگردی را از Google Maps ممنوع می کنند.

خوشبختانه ناامیدی من با کشف OpenStreetMap (OSM) کوتاه مدت بود. OSM یک پروژه مشارکتی است که شامل افرادی در سراسر جهان است که داده ها را به اشتراک می گذارند. OSM به صراحت اجازه استفاده از داده های خود را به نام نرم افزار منبع باز می دهد. به این ترتیب ، بازدید از صفحه وب OSM جایی است که سفر سبک سازی نقشه آغاز می شود.

پس از ورود به وب سایت OSM ، روی برگه "صادرات" کلیک کنید تا ابزارهای صادرات نقشه نشان داده شود. اکنون ، برای مشاهده منطقه ای که به جمع آوری داده های نقشه علاقه دارید ، بزرگنمایی کنید. پیوند "به صورت دستی یک منطقه دیگر را انتخاب کنید" را انتخاب کنید ، که یک کادر روی صفحه شما ظاهر می شود. این جعبه را شکل داده و روی منطقه مورد نظر قرار دهید. پس از رضایت ، روی دکمه "صادرات" کلیک کنید تا فایل داده OSM خود را بارگیری کنید.

توجه شماره 1: اگر ناحیه انتخاب شده شما حاوی داده های زیادی باشد ، با خطایی مواجه می شوید که تعداد زیادی گره را انتخاب کرده اید. اگر چنین اتفاقی برای شما افتاد ، روی دکمه "Overpass API" کلیک کنید تا فایل بزرگتر خود را بارگیری کنید.

توجه شماره 2: اگر فایل OSM بارگیری شده شما بزرگتر از 30 مگابایت است ، برنامه پایتون که نوشتم بطور قابل توجهی کند می شود. اگر تصمیم دارید از یک منطقه بزرگ استفاده کنید ، نوشتن یک اسکریپت برای دور ریختن داده های اضافی که قصد ترسیم آن را ندارید را در نظر بگیرید.

مرحله 2: تعریف فرایند II: درک داده ها

تعریف فرایند دوم: درک داده ها
تعریف فرایند دوم: درک داده ها
تعریف فرایند دوم: درک داده ها
تعریف فرایند دوم: درک داده ها
تعریف فرایند دوم: درک داده ها
تعریف فرایند دوم: درک داده ها
تعریف فرایند دوم: درک داده ها
تعریف فرایند دوم: درک داده ها

"من داده دارم … حالا چی؟"

با باز کردن فایل OSM بارگیری شده خود در نرم افزار ویرایش متن مورد علاقه خود شروع کنید. ابتدا متوجه خواهید شد که این یک فایل XML است که بسیار عالی است! تجزیه و تحلیل XML به اندازه کافی آسان است. ابتدای فایل شما باید تقریباً شبیه تصویر اول این مرحله باشد - برخی از فوق داده ها و مرزهای جغرافیایی ذکر شده است.

با پیمایش فایل ، متوجه سه عنصر داده می شوید که در سراسر مورد استفاده قرار می گیرند:

  1. گره ها
  2. راه ها
  3. روابط

اساسی ترین عنصر داده ، یک گره به سادگی دارای یک شناسه ، عرض و طول جغرافیایی منحصر به فرد است. البته ، فراداده اضافی وجود دارد ، اما می توانیم با خیال راحت آن را کنار بگذاریم.

راهها مجموعه ای از گره ها هستند. یک راه را می توان به صورت یک شکل محصور یا به عنوان یک خط باز ارائه کرد. روش ها شامل مجموعه ای از گره ها است که با شناسه منحصر به فرد آنها مشخص شده است. آنها با کلیدهایی که گروه داده ای را که به آن تعلق دارند ، مشخص می کنند. به عنوان مثال ، راهی که در تصویر سوم بالا نشان داده شده متعلق به گروه داده "مکان" و زیر گروه آن "جزیره" است. به عبارت دیگر ، این روش خاص متعلق به لایه "جزیره" در زیر گروه "مکان" است. روشها همچنین دارای شناسه های منحصر به فرد هستند.

در نهایت ، روابط مجموعه ای از راه ها هستند. یک رابطه می تواند نشان دهنده یک شکل پیچیده با حفره ها یا چند ناحیه باشد. روابط همچنین دارای یک شناسه منحصر به فرد بوده و به روش های مشابه برچسب گذاری می شوند.

می توانید در مورد این عناصر داده از ویکی OSM بیشتر بخوانید:

  • گره ها
  • راه ها
  • روابط

مرحله 3: تعریف فرایند III: هضم داده ها

تعریف فرایند سوم: هضم داده ها
تعریف فرایند سوم: هضم داده ها

اکنون شما باید حداقل یک درک سطحی از عناصر داده تشکیل دهنده یک فایل OSM داشته باشید. در این مرحله ، ما علاقه مند هستیم که داده های OSM را با استفاده از زبان دلخواه شما بخوانیم. در حالی که این مرحله پایتون محور است ، اگر نمی خواهید از پایتون استفاده کنید ، باید این قسمت را بخوانید زیرا حاوی چند نکته و ترفند است.

بسته xml به طور پیش فرض با اکثر توزیع های استاندارد پایتون گنجانده شده است. ما از این بسته برای تجزیه و تحلیل آسان فایل OSM خود مانند تصویر اول استفاده خواهیم کرد. در یک حلقه single for ، می توانید پردازش داده های OSM را برای هر عنصر داده خاص پردازش کنید.

در خط آخر تصویر ، متوجه خواهید شد که من برچسب 'bounds' را بررسی می کنم. این مرحله در ترجمه مقادیر عرض و عرض جغرافیایی به پیکسل روی صفحه بسیار مهم است. من اکیداً توصیه می کنم این تبدیل را در هنگام بارگیری فایل OSM اجرا کنید ، زیرا تبدیل انبوه داده ها فرآیند زیادی دارد.

در مورد تبدیل عرض جغرافیایی و طول جغرافیایی به مختصات صفحه ، در اینجا پیوندی به تابع محاسباتی است که نوشتم. به احتمال زیاد در تبدیل عرض جغرافیایی به مختصات صفحه چیزی عجیب خواهید دید. در مقایسه با طول جغرافیایی یک مرحله دیگر نیز وجود دارد! همانطور که معلوم است ، داده های OSM با استفاده از روش طرح Pseudo-Mercator مدل سازی می شود. خوشبختانه ، OSM اسناد فوق العاده ای در مورد این موضوع در اینجا دارد و آنها توابع تبدیل عرض جغرافیایی را برای تعداد قابل توجهی از زبانها ارائه می دهند. عالی!

توجه: در کد من ، مختصات صفحه (0 ، 0) گوشه سمت چپ بالای صفحه است.

مرحله 4: پیاده سازی نقشه پایتون Stylizer

پیاده سازی نقشه ساز پایتون
پیاده سازی نقشه ساز پایتون
پیاده سازی نقشه ساز پایتون
پیاده سازی نقشه ساز پایتون
پیاده سازی نقشه ساز پایتون
پیاده سازی نقشه ساز پایتون

تا این لحظه ، من در مورد فایل داده OSM بحث کرده ام - این چیست ، چگونه باید آن را بخوانیم و با آن چه کار کنم. اکنون من در مورد نرم افزاری که برای مقابله با تجسم نقشه سبک نوشتم بحث می کنم (GitHub repo در مقدمه ارائه شده است).

پیاده سازی خاص من بر کنترل کاربر خط لوله رندر متمرکز است. به طور خاص ، من به کاربر اجازه می دهم لایه هایی را که می خواهد قابل مشاهده باشد و نحوه نمایش آن لایه را انتخاب کند. همانطور که قبلاً به طور مختصر اشاره کردم ، دو دسته از عناصر ارائه شده وجود دارد: موارد پر کردن و موارد خطی. پرکننده ها فقط با یک رنگ تعریف می شوند ، در حالی که خطوط با رنگ ، عرض خط ، سبک خط ، سبک کلاه خط و سبک پیوست خط تعریف می شوند.

همانطور که کاربر تغییراتی در سبک های لایه و قابلیت مشاهده ایجاد می کند ، تغییرات در ویجت نقشه به سمت راست منعکس می شود. هنگامی که کاربر ظاهر نقشه را مطابق رضایت خود تغییر داد ، می تواند حداکثر ابعاد نقشه را تنظیم کرده و نقشه را به عنوان یک تصویر در رایانه خود ذخیره کند. در ذخیره یک تصویر ، یک فایل پیکربندی کاربر نیز ذخیره می شود. این اطمینان می دهد که کاربر می تواند پیکربندی مورد استفاده برای ایجاد یک تصویر خاص را در هر زمان به خاطر بیاورد و مجدداً استفاده کند.

مرحله 5: اشکال پیاده سازی + راه حل

اشکال پیاده سازی + راه حل
اشکال پیاده سازی + راه حل
اشکال پیاده سازی + راه حل
اشکال پیاده سازی + راه حل

هنگامی که من برای اولین بار شروع به طراحی یک نقشه به صورت دستی کردم ، متوجه شدم که این یک فرآیند خسته کننده است. ارائه حداکثر کنترل کاربر به دلیل تعداد زیاد "دستگیره" موجود می تواند به سادگی طاقت فرسا باشد. با این حال ، یک راه حل ساده وجود دارد که شامل یک اسکریپت نویسی اضافی می شود.

من با شناسایی لایه هایی که به آنها علاقه خاصی دارم شروع کردم. برای این منظور ، فرض کنید من بیشتر به ساختمانها (همه آنها) ، رودخانه ها ، بزرگراههای اصلی و خیابانهای سطحی علاقه دارم. من یک اسکریپت می نویسم که در آن یک نمونه از پیکربندی ایجاد می کنم ، حالت لایه را به طور مناسب با استفاده از تابع setItemState () و ثابت های تعریف شده تغییر می دهم ، و رنگ ها را بر اساس نحوه نمایش لایه های من با استفاده از setValue () تنظیم می کنم. فایل پیکربندی حاصله که ذخیره می شود می تواند در پوشه configs کپی شده و توسط کاربر بارگیری شود.

یک اسکریپت نمونه در تصویر بالا آمده است. تصویر دوم نمونه ای از عملکردهای کمکی است و از آنجا که اساساً همه یکسان هستند ، فقط با ثابت های متفاوت ، من فقط یک عکس از یک مثال را اضافه کردم.

مرحله ششم: زمینه های بهبود

زمینه های بهبود
زمینه های بهبود

پس از تأمل در مورد پیاده سازی نرم افزار ، چندین حوزه را شناسایی کرده ام که می تواند برای کاربران قدرتمند پیشرفت های مفیدی باشد.

  1. رندر لایه پویا در حال حاضر ، من یک لیست از پیش تعریف شده از لایه ها دارم که رندر می شوند ، همین. بخشی از توجیه مشکل در تعیین اینکه آیا یک لایه باید یک خط یا یک پر باشد ، بود. در نتیجه ، تقریباً با هر فایل OSM که باز می کنید ، با هشدارهای متعددی در مورد لایه هایی که ارائه نمی شوند ، مواجه خواهید شد. اغلب این موارد بسیار کم هستند و مسئله ای نیست ، اما احتمالاً لایه های بحرانی وجود ندارد. ارائه لایه پویا این نگرانی ها را برطرف می کند.
  2. تعیین لایه پویا این با شماره 1 دست به دست می شود. اگر می خواهید لایه پویا ارائه شود ، به تعیین لایه پویا نیاز دارید (به عنوان مثال ، شناسایی یک لایه پر کردن در مقابل یک لایه خط). این را می توان به طور معقول انجام داد ، همانطور که من آموخته ام ، زیرا راههایی که اولین و آخرین گره آنها یکسان است ، مسیرهای بسته شده و بنابراین پر می شوند.
  3. گروه های رنگی یک نقشه تلطیف شده اغلب دارای چندین لایه است که دارای سبک یکسانی هستند و این امکان را در اختیار کاربر قرار می دهد که به طور همزمان سبک گروهی را تغییر دهد ، زمان کاربر را برای ویرایش لایه ها تک به تک بسیار کاهش می دهد.

مرحله 7: بستن افکار

بستن افکار
بستن افکار
بستن افکار
بستن افکار
بستن افکار
بستن افکار

از همه تشکر می کنم که وقت گذاشتید و مطالب آموزشی من را مطالعه کردید. این پروژه نشان دهنده اوج ساعت ها تحقیق ، طراحی ، برنامه نویسی و اشکال زدایی است. امیدوارم توانسته باشم یک سکوی پرتاب ارائه کرده باشم که می توانید پروژه خود را از آن بسازید یا بر اساس آنچه قبلاً نوشته ام تکیه کنید. همچنین امیدوارم کاستی ها و نکات من نکات زیادی را در طراحی شما در نظر بگیرم. اگر تمایل کمتری برای برنامه نویسی دارید و تمایل بیشتری به خلق آثار هنری دارید ، خوشحال می شوم نظرات شما را ببینم! امکانات بی پایان است!

تشکر ویژه از مشارکت کنندگان OpenStreetMap! چنین پروژه هایی بدون تلاش های قابل توجه آنها امکان پذیر نخواهد بود.

لطفا در صورت داشتن هرگونه سوال در نظرات به من اطلاع دهید!

چالش نقشه ها
چالش نقشه ها
چالش نقشه ها
چالش نقشه ها

نفر دوم در چالش Maps

توصیه شده: