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

الخطوة 1. المسوحات.
يمكنك بالطبع أن تخمن بإصبعك في السماء كيف يمكن تدوينها ، لكن من الأفضل الانتقال إلى Wiki-OSM. وهناك يمكننا العثور على ما يلي: border = forest_compartment
لذلك ، يتم تعيين كتل الغابات بواسطة المضلعات مع boundary=forest_compartment
العلامة boundary=forest_compartment
. صحيح ، هناك توضيح أنه في البداية تم تعيينه boundary=forestry_compartment
، لكنه كان أقل معرفة بالقراءة والكتابة. وبما أن عدد الاستخدامات مع التعيين القديم كبير (وفقًا لـ taginfo حوالي 4 آلاف مرة) ، فلن نقوم بخصمه.
الخطوة 2. البيانات.
خذ البيانات من Geofabrik . قم بتنزيل ملف لكامل روسيا - russia-latest.osm.pbf
. باستخدام osmconvert
نحصل على البيانات بتنسيق o5m للتصفية اللاحقة.
osmconvert russia-latest.osm.pbf -o=russia-latest.o5m
الآن نقوم بتصفية البيانات التي نحتاجها فقط باستخدام osmfilter
osmfilter russia-latest.o5m --keep="boundary=forest_compartment =forestry_compartment" -o=forest_compartment-local.o5m
الخطوة 3. ناقلات البلاط.
نظرية موجزة قليلا. تتمثل الطريقة القديمة في طلب بعض البيانات من قاعدة بيانات كبيرة ، والحصول على صورة منها ، وحفظها لإعطائها للعميل في المستقبل. في قاعدة البيانات الجديدة ، من قاعدة بيانات كبيرة ، اطلب القليل من البيانات واحفظها لنقلها لاحقًا إلى العميل. ودع العميل يحولها إلى صورة. الربح ، كما كان ، على وجهه - نقلنا عبء تقديم الصورة إلى أكتاف العميل. من السلبيات - على صانع القهوة قد لا تتمكن من رؤية الخريطة ، فأنت بحاجة إلى دعم WebGL.
وهكذا اقترح Mapbox تنسيقًا لبلاطات المتجهات وحاوية لها في شكل قاعدة بيانات sqlite. لذلك ، ليس الآن هو توزيع الملفات في المجلدات ، ولكنه ملف وحيد أنيق. يحتوي البلاط المتجه على طبقات منطقية (منازل ، طرق ، إلخ) تتكون من هندسة وسمات.
هنا سنعدهم لأحياء الغابات لدينا. سأستخدم أداة TileMaker . يتلقى بيانات OSM بتنسيق pbf كمدخلات ، لذلك بعد التصفية ، نحتاج إلى إعادة التحويل إلى هذا التنسيق.
osmconvert forest_compartment-local.o5m -o=forest_compartment-local.pbf
نحتاج الآن إلى توضيح TileMaker للطبقات وأي السمات التي نحتاجها ، وفقًا للوثائق .
الخطوة 4. طبقات؟
وما هي الطبقات التي نحتاجها؟ وهذا يعتمد على ما نظهره. أي بادئ ذي بدء ، يجب علينا تخيل بطريقة ما الجزء البصري. وكيف يمكن تحقيق ذلك من البيانات المتاحة. من بيانات OSM ، لدينا شبكة من المضلعات وسماتها. السمات لها اسم الغابات ورقم الربع.

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

لذلك ، بالنسبة لبلاطات المتجهات ، يتم إعداد طبقة منفصلة مع نقوش ، عندما لا يزال هناك كل المعلومات الضرورية حول الهندسة.
خلاصة القول: نحتاج إلى طبقتين ، مضلع للملء ونقطة للتوقيع. قم config.json
ملف config.json
.
{ "layers": { }, "settings": { "minzoom": 11, "maxzoom": 11, "basezoom": 14, "include_ids": false, "author": "freeExec", "name": "Forest Compartment RUS", "license": "ODbL 1.0", "version": "0.1", "description": "Forest compartment from OpenStreetMap", "compress": "gzip", "metadata": { "attribution": "<a href=\"http://www.openstreetmap.org/copyright/\" target=\"_blank\">© OpenStreetMap</a>", "json": { "vector_layers": [ ] } } } }
في قسم الطبقات ، حدد ما نحتاج إليه
"layers": { "forest_compartment": { "minzoom": 11, "maxzoom": 11 }, "forest_compartment_label": { "minzoom": 11, "maxzoom": 11 } },
يشار إلى أسماء الطبقات وعلى أي مقياس سنظهر لهم.
"json": { "vector_layers": [ { "id": "forest_compartment", "description": "Compartment", "fields": {}}, { "id": "forest_compartment_label", "description": "Compartment", "fields": {"ref":"String"}} ] }
في البيانات الوصفية ، نعلم متخيل المستقبل ما هي السمات المتاحة معنا. بالنسبة لطبقة العلامات ، سيكون لدينا رقم الربع في ref
.
الخطوة 5. معالجة البيانات.
لهذا الغرض ، يتم استخدام برنامج نصي بلغة lua
، والذي سيحدد الكائنات من بيانات OSM التي نحتاجها ، وفي أي طبقة لإرسالها ومع أي سمات.
لنبدأ مع قالب ملف process.lua
.
ما لدينا هنا:
node_keys - هناك الكثير من النقاط في بيانات OSM ، إذا قام كل منا بتكديس هذا البرنامج النصي ، فستستغرق المعالجة وقتًا طويلاً للغاية. هذا المرشح يخبرنا بالنقاط الرئيسية التي نهتم بها.
function node_function (node) - سيتم استدعاء الوظيفة في كل نقطة مهمة بالنسبة لنا من الفقرة السابقة. هنا يجب أن نقرر ما يجب القيام به.
دالة way_function (way) - دالة سيتم استدعاؤها في أي سطر وعلى العلاقات مع أنواع متعددة الحدود والحدود ، لأن أنها تعتبر كائنات المساحات.
نبدأ في كتابة الرمز. بادئ ذي بدء ، نشير إلى النقاط التي نحتاجها:
node_keys = { "boundary" }
نكتب الآن وظيفة معالجتها:
function node_function(node) local boundary = node:Find("boundary") if boundary == "forestry_compartment" or boundary == "forest_compartment" then local ref = node:Find("ref") if ref ~= "" then node:Layer("forest_compartment_label", false) node:Attribute("ref", ref) end end end
ما يحدث هنا: نقرأ قيمة مفتاح boundary
خلال node:Find("")
. إذا كان هذا هو forest_compartment
، فاقرأ رقم الربع من علامة ref
. إذا لم يكن فارغًا ، فسيتم إضافة هذا الكائن إلى Layer("_", ___)
مع التسميات ، من خلال Layer("_", ___)
. في سمة طبقة ref
نقوم بحفظ رقم الربع.
تقريبا بسيطة للكتل المربعة:
function way_function(way) local boundary = way:Find("boundary") if way:IsClosed() and ( boundary == "forestry_compartment" or boundary == "forest_compartment" ) then way:Layer("forest_compartment", true) way:AttributeNumeric("nomerge", way:Id()) local ref = way:Find("ref") if ref ~= "" then way:LayerAsCentroid("forest_compartment_label", false) way:Attribute("ref", ref) end end end
هنا نتحقق بالإضافة إلى ذلك من أن الخط مغلق ، لأن يحدث أن العلامات موجودة ببساطة على شرائح. تجدر الإشارة إلى أن طبقة مجموعة forest_compartment
مساحة (وبالتالي ، الوسيطة الثانية للدالة Layer("", true))
، ونأخذ مكان التوقيع كمركز LayerAsCentroid
.
يجدر أيضًا الانتباه إلى السمة التي nomerge
، على الرغم من أننا لم nomerge
في config - nomerge
. هناك حاجة لهزيمة ميزة أخرى ، وهذه المرة بالفعل محول TileMaker (على الرغم من أن المعلمة لتعطيله قد ظهرت في الإصدار الجديد).
الخصوصية هي أنه للتحسين ، عندما يكون هناك العديد من الكائنات التي لها نفس السمات في طبقة واحدة ، فإن المحول الخاص بهم يجمع بين الأشكال الهندسية في واحد. على سبيل المثال ، لدينا شارع يتكون من ثلاثة قطاعات منفصلة ، ونتيجة لذلك سيتم إرسالها ثلاث مرات للعرض. هذا أطول من ذلك ، بالمقارنة مع حقيقة أننا سوف نرسل كائنًا واحدًا لتقديمه ، ولكن مع هندسة أكثر تعقيدًا (توحيد كل منهم).
في حالتنا ، سيتم توحيد جميع الأحياء المجاورة في مضلع واحد كبير ، لكننا لسنا بحاجة إلى ذلك. لذلك ، نضيف رقم الكائن بحيث يكون مختلفًا وليس مدمجًا.
حان الوقت الآن لبدء عملية إنشاء مربعات المتجهات.
tilemaker forest_compartment-local.pbf --output forest_compartment-local.mbtiles
نتيجة لذلك ، يجب أن يكون لدينا ملف forest_compartment-local.mbtiles
الخطوة 6. إنشاء نمط.
نقوم بإنشاء حساب على mapbox.com . في Mapbox Studio ، في قسم Tileset ، أنشئ مجموعة جديدة من خلال سحب ملفنا الذي تم إنشاؤه مسبقًا إلى نافذة التنزيل. في غضون دقيقة ، يجب معالجته وإضافته إلى القائمة.
ننتقل الآن إلى قسم "الأنماط" وننشئ عنصرًا جديدًا استنادًا إلى "الضوء النهائي" ، حتى نتمكن من رؤية العناصر الرئيسية للخريطة ، مثل الطرق والمستوطنات وما إلى ذلك. نترك إلى تشيبوكساري لأنه كانت هناك كتل الغابات.
نذهب إلى المستوى 11 من المقياس (أنشأنا مربعات فقط له) وانقر على زر إضافة طبقة. في علامة تبويب مصدر البيانات ، نجد مصدر بيانات forest_compartment-local-XXXXX
، حيث نختار طبقة المضلع. يجب تسليط الضوء باللون الأخضر على اليمين.

بعد ذلك ، في علامة تبويب النمط ، اضبط لون التعبئة على اللون الأخضر والسكتة الدماغية إلى اللون البني.

الآن يبقى لإضافة التوقيع. أضف طبقة جديدة ، فقط هذه المرة نختار forest_compartment_label
في البيانات ، وحدد symbol
الكتابة ، يجب أن تظهر الأرقام على اليمين.

في علامة تبويب النمط ، حدد أننا بحاجة إلى عرض سمة ref
.

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