جدول المحتويات:

كيفية إنشاء خرائط مبسطة مخصصة باستخدام OpenStreetMap: 7 خطوات (بالصور)
كيفية إنشاء خرائط مبسطة مخصصة باستخدام OpenStreetMap: 7 خطوات (بالصور)

فيديو: كيفية إنشاء خرائط مبسطة مخصصة باستخدام OpenStreetMap: 7 خطوات (بالصور)

فيديو: كيفية إنشاء خرائط مبسطة مخصصة باستخدام OpenStreetMap: 7 خطوات (بالصور)
فيديو: Inkscape Map Art Tutorial: How to Make Custom Stylized Maps with Free OpenStreetMap Data 2024, يوليو
Anonim
كيفية إنشاء خرائط مبسطة مخصصة باستخدام OpenStreetMap
كيفية إنشاء خرائط مبسطة مخصصة باستخدام OpenStreetMap

في هذا الدليل ، سأصف عملية يمكنك من خلالها إنشاء خرائطك الخاصة المصممة حسب الطلب. الخريطة المبسطة هي خريطة حيث يمكن للمستخدم تحديد طبقات البيانات التي يتم تصورها ، بالإضافة إلى تحديد النمط الذي يتم من خلاله تصور كل طبقة. سأصف أولاً العملية التي يمكنك من خلالها كتابة برنامج لتصميم الخرائط ، متبوعًا بمثال من برنامج Python الذي كتبته لأداء هذه المهمة.

يسلط الفيديو التالي الضوء على كيفية إنشاء خرائط مبسطة شخصيًا ، لكن استمر في القراءة للحصول على التفاصيل الحميمة. أنا متحمس جدًا لمعرفة ما سيخلقه المجتمع!

ما هو الدافع وراء هذا المشروع؟

بصراحة ، لقد بدأت هذا المشروع لأنني اعتقدت أنه سيكون من الممتع القيام به. كانت هذه الفكرة تدور في ذهني على مدار العام الماضي ، وأخذت أخيرًا الوقت الذي أحتاجه لتحقيقها. بعد يوم من وضع النماذج الأولية مع بعض البرمجة النصية الأساسية ، تمكنت من تحقيق نتائج واعدة للغاية - واعدًا للغاية لدرجة أنني كنت أعرف أنني بحاجة إلى إضفاء الطابع الرسمي على البرامج النصية الخاصة بي بحيث يمكن للآخرين إنشاء إبداعاتهم بسهولة.

يرجع حافزي في كتابة هذا التوجيه إلى حقيقة أنني وجدت قدرًا ضئيلًا جدًا من المعلومات حول كيفية إنشاء خرائطك الخاصة من البداية. آمل أن أشارك ما تعلمته مع المجتمع.

الموارد / الروابط:

  • OpenStreetMap
  • OpenStreetMap قانوني
  • مستودع جيثب

اللوازم

  • توزيع بايثون (استخدمت أناكوندا وبايثون 3.6)
  • PyQt5 (لتبعيات واجهة المستخدم الرسومية)

الخطوة 1: تحديد العملية الأولى: تنزيل ملف OSM

تحديد العملية الأولى: تنزيل ملف OSM
تحديد العملية الأولى: تنزيل ملف OSM

عندما بدأت هذا المشروع لأول مرة ، كان السؤال الأكثر وضوحا هو "أين يمكنني الحصول على بيانات الخرائط". بطبيعة الحال ، كما كنت تتوقع ، فكرت على الفور في خرائط Google. بعد بحث مهم ، اكتشفت أن Google لا تريد حقًا أن يلعب الأشخاص ببياناتهم ، بالمعنى الإبداعي أو غير ذلك. في الواقع ، إنهم لا يسمحون صراحةً بكشط الويب من خرائط Google.

لحسن الحظ ، لم يدم اليأس طويلًا عند اكتشافي لـ OpenStreetMap (OSM). OSM هو مشروع تعاوني يشارك فيه أشخاص من جميع أنحاء العالم يساهمون بالبيانات. يسمح OSM صراحة بالاستخدام المفتوح لبياناتهم باسم برنامج مفتوح المصدر. على هذا النحو ، فإن زيارة صفحة الويب الخاصة بـ OSM هي المكان الذي تبدأ منه رحلة تصميم الخرائط.

بعد الوصول إلى موقع OSM الإلكتروني ، انقر فوق علامة التبويب "تصدير" لإظهار أدوات تصدير الخريطة. الآن ، قم بالتكبير لعرض المنطقة التي ترغب في جمع بيانات الخريطة بها. حدد الرابط "تحديد منطقة مختلفة يدويًا" ، والذي سيظهر مربعًا على شاشتك. شكل ووضع هذا المربع فوق المنطقة التي تهمك. بمجرد الرضا ، انقر فوق الزر "تصدير" لتنزيل ملف بيانات OSM الخاص بك.

ملاحظة # 1: إذا كانت منطقتك المحددة تحتوي على الكثير من البيانات ، فستتلقى رسالة خطأ تفيد بأنك حددت عددًا كبيرًا جدًا من العقد. إذا حدث هذا لك ، فانقر فوق الزر "Overpass API" لتنزيل الملف الأكبر حجمًا.

ملاحظة # 2: إذا كان ملف OSM الذي تم تنزيله أكبر من 30 ميجابايت ، فإن برنامج Python الذي كتبته سوف يتباطأ بشكل ملحوظ. إذا كنت مصممًا على استخدام منطقة كبيرة ، ففكر في كتابة نص برمجي للتخلص من البيانات الزائدة عن الحاجة التي لا تخطط لرسمها.

الخطوة الثانية: تحديد العملية الثانية: فهم البيانات

تحديد العملية 2: فهم البيانات
تحديد العملية 2: فهم البيانات
تحديد العملية 2: فهم البيانات
تحديد العملية 2: فهم البيانات
تحديد العملية 2: فهم البيانات
تحديد العملية 2: فهم البيانات
تحديد العملية 2: فهم البيانات
تحديد العملية 2: فهم البيانات

"لدي البيانات … ماذا الآن؟"

ابدأ بفتح ملف OSM الذي تم تنزيله في برنامج تحرير النصوص المفضل لديك. ستلاحظ أولاً أن هذا ملف XML ، وهو أمر رائع! XML سهل التحليل بدرجة كافية. يجب أن تبدو بداية الملف متطابقة تقريبًا مع الصورة الأولى لهذه الخطوة - سيتم سرد بعض البيانات الوصفية الأساسية والحدود الجغرافية.

أثناء قيامك بتمرير الملف ، ستلاحظ استخدام ثلاثة عناصر بيانات في جميع أنحاء:

  1. العقد
  2. طرق
  3. علاقات

العنصر الأساسي في البيانات هو أن العقدة لها معرّف فريد وخط عرض وخط طول مرتبط بها. بالطبع ، هناك بيانات وصفية إضافية ، لكن يمكننا التخلص منها بأمان.

الطرق عبارة عن مجموعات من العقد. يمكن عرض طريقة على هيئة شكل مغلق أو خط مفتوح النهاية. تتكون الطرق من مجموعة من العقد التي تم تحديدها بواسطة معرفها الفريد. يتم تمييزها بمفاتيح تحدد مجموعة البيانات التي ينتمون إليها. على سبيل المثال ، الطريقة الموضحة في الصورة الثالثة أعلاه تنتمي إلى مجموعة البيانات "المكان" ، ومجموعتها الفرعية ، "الجزيرة". بمعنى آخر ، تنتمي هذه الطريقة الخاصة إلى طبقة "الجزيرة" ضمن مجموعة "المكان". للطرق أيضًا معرّفات فريدة.

أخيرًا ، العلاقات هي مجموعات من الطرق. يمكن أن تمثل العلاقة شكلًا معقدًا به ثقوب أو مناطق متعددة. سيكون للعلاقات أيضًا معرف فريد وسيتم تمييزها بشكل مشابه للطرق.

يمكنك قراءة المزيد حول عناصر البيانات هذه من OSM wiki:

  • العقد
  • طرق
  • علاقات

الخطوة 3: تحديد العملية III: استيعاب البيانات

تحديد العملية III: استيعاب البيانات
تحديد العملية III: استيعاب البيانات

الآن يجب أن يكون لديك على الأقل فهم سطحي لعناصر البيانات التي تشكل ملف OSM. في هذه المرحلة ، نحن مهتمون بقراءة بيانات OSM باستخدام لغتك التي تختارها. في حين أن هذه الخطوة تتمحور حول Python ، إذا كنت لا ترغب في استخدام Python ، فلا يزال يتعين عليك قراءة هذا الجزء لأنه يحتوي على بعض النصائح والحيل.

يتم تضمين حزمة xml افتراضيًا مع معظم توزيعات Python القياسية. سنستخدم هذه الحزمة لتحليل ملف OSM الخاص بنا بسهولة كما هو موضح في الصورة الأولى. في حلقة for واحدة ، يمكنك معالجة معالجة بيانات OSM لكل عنصر بيانات معين.

في السطر الأخير من الصورة ، ستلاحظ أنني أتحقق من علامة "الحدود". هذه الخطوة مهمة للغاية في ترجمة قيم خطوط الطول والعرض إلى وحدات بكسل على الشاشة. أوصي بشدة بتشغيل هذا التحويل في الوقت الذي تقوم فيه بتحميل ملف OSM ، لأن التحويل الجماعي للبيانات يتطلب عملية مكثفة.

عند الحديث عن تحويل خطوط العرض وخطوط الطول إلى إحداثيات الشاشة ، إليك رابط لوظيفة الحساب التي كتبتها. من المحتمل أن تلاحظ شيئًا غريبًا بعض الشيء في تحويل خط العرض إلى إحداثيات الشاشة. هناك خطوة إضافية متضمنة عند مقارنتها بخط الطول! كما اتضح ، تم تصميم بيانات OSM باستخدام طريقة الإسقاط Pseudo-Mercator. لحسن الحظ ، لدى OSM وثائق رائعة حول هذا الموضوع هنا ، وهي توفر وظائف تحويل خطوط العرض لعدد كبير من اللغات. مذهل!

ملاحظة: في الكود الخاص بي ، يكون تنسيق الشاشة (0 ، 0) هو الزاوية العلوية اليسرى من الشاشة.

الخطوة 4: تنفيذ برنامج Python Map Stylizer

تنفيذ Python Map Stylizer
تنفيذ Python Map Stylizer
تنفيذ Python Map Stylizer
تنفيذ Python Map Stylizer
تنفيذ Python Map Stylizer
تنفيذ Python Map Stylizer

حتى هذه النقطة ، ناقشت ملف بيانات OSM - ما هو ، وكيفية قراءته ، وماذا أفعل به. سأناقش الآن البرنامج الذي كتبته لمعالجة تصور الخرائط الأسلوبي (GitHub repo متوفر في المقدمة).

يركز التنفيذ الخاص بي على تحكم المستخدم في خط أنابيب العرض. على وجه التحديد ، أسمح للمستخدم بتحديد الطبقات التي يريدون رؤيتها وكيف يريدون رؤية تلك الطبقة. كما ذكرت بإيجاز سابقًا ، هناك فئتان من العناصر المقدمة: تعبئة العناصر وعناصر السطر. يتم تعريف التعبئات فقط بواسطة اللون ، بينما يتم تحديد الخطوط حسب اللون وعرض الخط ونمط الخط ونمط غطاء الخط ونمط ربط الخط.

نظرًا لأن المستخدم يقوم بإجراء تعديلات على أنماط الطبقة والرؤية ، تنعكس التغييرات في عنصر واجهة مستخدم الخريطة على اليمين. بمجرد قيام المستخدم بتعديل مظهر الخريطة بما يرضيهم ، يمكنه ضبط الحد الأقصى لأبعاد الخريطة وحفظ الخريطة كصورة على جهاز الكمبيوتر الخاص به. عند حفظ الصورة ، سيتم أيضًا حفظ ملف تكوين المستخدم. وهذا يضمن أن المستخدم يمكنه استدعاء وإعادة استخدام التكوين الذي استخدمه لإنشاء صورة معينة في أي وقت.

الخطوة الخامسة: عيوب التنفيذ + الحل

عيوب التنفيذ + الحل
عيوب التنفيذ + الحل
عيوب التنفيذ + الحل
عيوب التنفيذ + الحل

عندما بدأت في تصميم الخريطة يدويًا ، علمت أن هذه عملية شاقة إلى حد ما. قد يكون تقديم أقصى قدر من التحكم للمستخدم أمرًا مربكًا نظرًا للعدد الكبير من "المقابض" المتاحة. ومع ذلك ، هناك حل بسيط يتضمن القليل من البرمجة النصية الإضافية.

لقد بدأت بتحديد الطبقات التي أهتم بها بشكل خاص. ولأغراض هذه التعليمات ، دعنا نقول إنني مهتم أكثر بالمباني (جميعها) والأنهار والطرق السريعة الرئيسية والشوارع السطحية. أود كتابة نص برمجي حيث أقوم بإنشاء مثيل من التكوين ، وتبديل حالات الطبقة بشكل مناسب باستخدام وظيفة setItemState () والثوابت المحددة ، وتعيين الألوان بناءً على الطريقة التي أرغب في ظهور طبقاتها باستخدام setValue (). يمكن نسخ ملف التكوين الناتج الذي تم حفظه إلى مجلد التهيئة وتحميله بواسطة المستخدم.

مثال على البرنامج النصي في الصورة أعلاه. الصورة الثانية هي عينة لما ستبدو عليه وظائف المساعد ، وبما أنها متطابقة بشكل أساسي ، فقط مع ثوابت مختلفة ، قمت فقط بتضمين صورة لمثال واحد.

الخطوة 6: مجالات التحسين

مجالات للتحسين
مجالات للتحسين

بعد التفكير في تنفيذ البرنامج الخاص بي ، حددت العديد من المجالات التي من شأنها أن تكون تحسينات مفيدة لمستخدمي الطاقة.

  1. عرض الطبقة الديناميكية. حاليًا ، لدي قائمة محددة مسبقًا من الطبقات التي سيتم عرضها ، هذا كل شيء. كان جزء من التبرير هو صعوبة تحديد ما إذا كانت الطبقة يجب أن تكون خطًا أم تعبئة. نتيجة لذلك ، مع كل ملف OSM تقريبًا تفتحه ، سيتم استقبالك بعدد كبير من التحذيرات حول الطبقات التي لن يتم عرضها. غالبًا ما تكون هذه قليلة جدًا ، فهي ليست مشكلة ، ولكن لا بد أن تكون هناك طبقات حرجة مفقودة. سيؤدي عرض الطبقة الديناميكية إلى القضاء على هذه المخاوف.
  2. تعيين الطبقة الديناميكية. يسير هذا جنبًا إلى جنب مع # 1 ؛ إذا كنت تريد عرض طبقة ديناميكية ، فأنت بحاجة إلى تعيين طبقة ديناميكية (أي تحديد طبقة تعبئة مقابل طبقة خط). يمكن تحقيق ذلك بشكل معقول ، كما تعلمت ، لأن الطرق التي تكون العقدة الأولى والأخيرة فيها هي نفسها ستكون مسارات مغلقة وبالتالي يتم ملؤها.
  3. مجموعات اللون. غالبًا ما تحتوي الخريطة المبسطة على عدة طبقات لها نفس النمط ، ومن شأن تمكين المستخدم من تعديل نمط المجموعة في نفس الوقت أن يقلل بشكل كبير من الوقت الذي يقضيه المستخدم في تحرير الطبقات واحدة تلو الأخرى.

الخطوة 7: ختام الأفكار

خواطر ختامية
خواطر ختامية
خواطر ختامية
خواطر ختامية
خواطر ختامية
خواطر ختامية

شكرًا لكم جميعًا على قضاء الوقت في قراءة Instructable الخاص بي. يمثل هذا المشروع تتويجًا لساعات عديدة من البحث والتصميم والبرمجة وتصحيح الأخطاء. آمل أن أكون قادرًا على توفير منصة انطلاق يمكنك من خلالها بناء مشروعك الخاص أو البناء على ما كتبته بالفعل. آمل أيضًا أن توفر عيوبي ونصائح الكثير من النقاط التي يجب مراعاتها في التصميم الخاص بك. إذا كنت أقل ميلًا إلى البرمجة وأكثر ميلًا لإنشاء أعمال فنية ، فأنا أحب أن أرى ما تفعله في التعليقات! الاحتمالات لا حصر لها!

شكر خاص للمساهمين في OpenStreetMap! مشاريع كهذه لن تكون ممكنة بدون جهودهم الكبيرة.

يرجى إعلامي إذا كان لديك أي أسئلة في التعليقات!

تحدي الخرائط
تحدي الخرائط
تحدي الخرائط
تحدي الخرائط

الوصيف في تحدي الخرائط

موصى به: