أكثر

لماذا يتم عرض مضلع GeoJSON الخاص بي على هيئة خط فقط؟

لماذا يتم عرض مضلع GeoJSON الخاص بي على هيئة خط فقط؟


أحاول تحويل ملف شكل بسيط مرسوم في GIS إلى GeoJSON. ومع ذلك ، فهو لا يعمل ولا أعرف لماذا.

يتم تحويل الملف باستخدام QGIS (حفظ باسم) ، لكن http://geojsonlint.com/ لا يرسم الشكل ، ولا تطبيق Mapbox الخاص بي - بل يرسمه كخط.

لقد قمت بتعيين CRS على EPSG 3857.

هنا GeoJSON ، http://pastebin.com/93e0wWzA

هل تحتاج إلى ملف الأشكال لمعرفة ذلك؟


يبدو أن Geojsonlint يفترض أن GeoJSON موجود في نظام إحداثيات WGS84 وهو أيضًا CRS الوحيد المدعوم رسميًا في أحدث مواصفات GeoJSON (مسودة) https://tools.ietf.org/html/draft-butler-geojson-04

لقد قمت بتحويل GeoJSON الخاص بك إلى epsg: 4326 مع ogr2ogr باستخدام الأمر

ogr2ogr -f geojson -s_srs epsg: 3857 -t_srs epsg: 4326 geojsontest2.json geojsontest.json

يظهر ملف GeoJSON الجديد في geojsonlint.


لماذا يتم عرض مضلع GeoJSON الخاص بي على هيئة خط فقط؟ - نظم المعلومات الجغرافية

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

تحتوي كل خريطة على كائن map.data ، والذي يعمل كطبقة بيانات للبيانات الجغرافية المكانية التعسفية ، بما في ذلك GeoJSON. يمكنك تحميل وعرض ملف GeoJSON عن طريق استدعاء طريقة loadGeoJSON () لكائن البيانات. يوضح المثال أدناه كيفية إضافة خريطة وتحميل بيانات GeoJSON الخارجية.

تيبسكريبت

جافا سكريبت

جرب العينة

عينة GeoJSON

تستخدم معظم الأمثلة الموجودة في هذه الصفحة ملف GeoJSON شائعًا. يعرّف هذا الملف الأحرف الستة في & # 8216Google & # 8217 كمضلعات فوق أستراليا. لا تتردد في نسخ هذا الملف أو تعديله أثناء اختبار طبقة البيانات.

ملاحظة: لتحميل ملف json من مجال آخر ، يجب أن يكون هذا المجال قد مكّن مشاركة الموارد عبر الأصل.

يمكن رؤية النص الكامل للملف أدناه من خلال توسيع السهم الصغير بجوار الكلمات google.json.

Google.json


إزالة crsURN # 6

التحديث (2014-01-08): تمت إعادة أقسام CRS الأصلية إلى المسودة ، ولكن توصية قوية لاستخدام CRS84 الافتراضي. البرنامج ، مثل Leaftlet ، الذي يحتوي على دعم أساسي لـ CRS84 فقط ، يتماشى تمامًا مع المسودة.

هذا يجعل جميع مواقع GeoJSON خطوط الطول والعرض [والارتفاع بالأمتار] بالنسبة إلى CRS ellispoidal استنادًا إلى بيانات WGS84.

أنا أؤيد تقييد الأنظمة المرجعية للإحداثيات المسموح بها لكائنات GeoJSON على 1: CRS84.

أعتقد أن ثاني أفضل بديل هو التقييد بـ 2: CRS84 أو EPGS: 3857. لكن هذا يعني أننا سنكون رائعين فقط طالما أن Google Mercator رائعًا. و 2 تعسفي جدًا. قريبا سوف يريد الناس 3.

لا أحب "السماح لأي CRS والسماح بترتيب المحور باتباع CRS" لأنني أعتقد أنه إما يقلل من إمكانية التشغيل البيني أو يفرض عبئًا غير معقول على عملاء الويب (لا أعرف خدمة ويب جيدة - أو أريد حقًا الاعتماد على واحد - يوفر معلومات ترتيب المحور لـ CRS URN التعسفي ، والجدول أكبر من أن يطلب من كل عميل تحمله).

مع وصول جميع GeoJSON إلى CRS معروف ، فإن العملاء الذين يرغبون في استهلاك أي GeoJSON ولكنهم يعملون أو يقدمون في CRS مختلفة لا ينبغي أن يواجهوا صعوبة في العثور على رمز للقيام بتحويلات تنسيق. هذا عبء أصغر من القدرة على البحث عن ترتيب المحور لأي CRS URN.

(لاحظ أن هذه تمريرة ثانية عند رقم 2.)

Sthagen تم التعليق عليه في 18 مايو 2013

طالما أننا نحذف أجزاء "الوعود التي لا نفي بها" فأنا موافق على كل اقتراح. أود الحصول على مشورة من أعضاء المجتمع بناءً على معرفتهم بما هو مستخدم بالفعل اليوم. لذلك يجب إعادة قياس +1 الخاص بي باستخدام عامل Stranger-Factor 0 (صفر) أخشى -)

Sthagen تم التعليق عليه في 21 مايو 2013

يرجى cf. تعليقي على مناقشة التصحيح رقم 10 لمزيد من التفويض + 1 + 1 مني.

حداد تم التعليق عليه في 23 مايو 2013

أنا أحب هذا! أبسط كان ذلك أفضل.

إليموين تم التعليق عليه في 27 مايو 2013

أنا أحب بساطة النهج أيضًا. لكنني أعتقد أن تقييد أنظمة الإحداثيات على WGS84 ، أو WGS84 و EPSG: 3857 سيكون مقيدًا للغاية. على وجه الخصوص ، سيجعل الأشخاص الذين يستخدمون GeoJSON مع أنظمة إحداثيات أخرى ينتهكون المواصفات. ونحن ، في Camptocamp ، نستخدم GeoJSON لخدمات الويب المخصصة المحددة التي تنقل بيانات EPSG: 21781. (لم نقم بتعيين "crs" حاليًا ، لذلك قد ننتهك بالفعل المواصفات ، ولكنها تعمل فقط من أجلنا.) كما هو مقترح في القائمة البريدية ، قد تكون هناك توقعات معروفة (WGS84 أو WGS84 و EPSG: 3857) ، ويمكن لمحللي GeoJSON تجاهل كل الإسقاطات الأخرى. أعتقد أنه سيعمل بشكل رائع بالنسبة لنا ، ولكن يتم الحفاظ على البساطة.

أتلفرين تم التعليق عليه في 27 مايو 2013

في مكان عملي السابق استخدمنا GeoJSON لنقل البيانات من الخادم إلى العميل. استخدمت خرائطنا WGS84 UTM zone 33N ، ولتجنب استخدام proj4.js وضعنا هذه الإحداثيات في بنية GeoJSON. كما قالelemoine ، لم نقم أبدًا بتعيين "crs".

سهولة الاستخدام هي قيمة أساسية لـ GeoJSON ، ووجود عدد قليل (واحد؟) من الإسقاطات المعروفة وتجاهل الباقي (بدون أي أخطاء في التحقق من الصحة) يبدو لي فكرة رائعة.

(هذا هو سنتي مقابل ما يستحقان على أي حال.)

تشاب تم التعليق عليه في 28 مايو 2013

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

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

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

إليموين تم التعليق عليه في 28 مايو 2013

(رفض الإحداثيات خارج نطاق الإحداثيات الجغرافية الصالحة)

أو محاولة تحويل البيانات بافتراض أنها بيانات CRS84.

ولكن يمكننا أيضًا الحفاظ على تساهل المحلل اللغوي وتمرير الإحداثيات مباشرة عبر الأشكال الهندسية.

نعم ، لكن الموزعين الآخرين قد يكونون أكثر صرامة. ربما تكون هناك فرصة ضئيلة للغاية لأن يرفض المحللون بياناتنا المتوقعة أو يفعلوا أشياء سيئة بها.

تشاب علق في 13 يونيو 2013

المزيد من الدعم لـ CRS84 فقط GeoJSON (في رأيي):

إذا كانت نقاطك لا تظهر في المكان الذي تتوقعه (على سبيل المثال ، في وسط المحيط) ،
من المحتمل أنك تستخدم إسقاطًا غير مدعوم حاليًا.

برامسي علق في 13 يونيو 2013

في عالم من دعم تنسيق إعادة الإسقاط من جانب العميل لكل من البيانات النقطية والمتجه (عالم لم يكن موجودًا بالفعل عندما أنشأ WMS نمط "قد يطلب العملاء البيانات في أحد مجموعة الإسقاطات المدعومة" من الصعب كسرها عقليًا) من المعقول تمامًا دعم CRS واحد فقط وتوقع أن يقوم العميل بالرفع الثقيل لوضعه في أي عرض عرض يريده.

ملاحظة مهمة: إذا كنت في إحداثيات كروية (مرحبًا ، CRS84) فأنت بحاجة إلى فرض اتجاه الحلقة للتمييز بين POLYGON ((0 0 ، 0 1 ، 1 1 ، 1 0 ، 0)) الذي يحيط قليلاً من المحيط و أفريقيا و POLYGON ((0 0 ، 1 0 ، 1 1 ، 0 1 ، 0 0)) التي تضم العالم كله يستثني قليلاً من المحيط وأفريقيا (أو العكس ، اعتمادًا على مستواك).

تشاب علق في 13 يونيو 2013

تحتاج إلى فرض اتجاه الحلقة

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

برامسي علق في 13 يونيو 2013

نعم أو العكس. هناك حاجة إلى القليل من البحث في قواعد التوجيه المشتركة أولاً. يستخدم Shapefile الشكل الخارجي - اتجاه عقارب الساعة / الداخلي - عكس اتجاه عقارب الساعة ، وهو عكس القاعدة التي حددتها.

Sgillies علق في 13 يونيو 2013

هل سيكون المضلع الثاني في ملاحظتك المهمة بسيطًا تمامًا؟
ألن نضطر حقًا إلى تمثيله كسطح عالمي بامتداد
حفرة على شكل صندوق؟

ربما يكون أفضل مثال على ذلك هو نصفي الكرة الأرضية: هل حلقة على طول خط الاستواء
ملزمة نصف الكرة الشمالي أو الجنوبي؟

يوم الخميس ، 13 حزيران (يونيو) 2013 ، الساعة 2:25 مساءً ، كتب بول رامزي [email protected]:

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

ملاحظة مهمة: إذا كنت في إحداثيات كروية (مرحبًا ، CRS84) فأنت بحاجة
لفرض اتجاه الحلقة للتمييز بين POLYGON ((0 0 ، 0 1 ، 1 1 ،
1 0 ، 0 0)) الذي يحيط قليلاً من المحيط وأفريقيا و POLYGON ((0 0 ، 1 0 ،
1 1 ، 0 1 ، 0 0)) الذي يحيط العالم كله يستثني قليلا من المحيط
وأفريقيا.


قم بالرد على هذه الرسالة الإلكترونية مباشرة أو اعرضها على GitHubhttps: //github.com//pull/6#issuecomment-19422624
.

برامسي علق في 13 يونيو 2013

تصبح مواصفات "الميزات البسيطة" مختلفة على الكرة. كيف
تمثل "سطح عالمي به ثقب" ، على سبيل المثال؟ بولجون ((- 180-90 ،
-180 90 ، 180 90 ، 180-90 ، -180-90) ، (0 0 ، 1 0 ، 1 1 ، 0 1 ، 0 0))؟ الأول
تتكون "الحلقة" في المثال من خط يمتد من القطب الشمالي إلى الجنوب
قطب والعودة مرة أخرى على طول خط التاريخ. لا "مجنون" أكثر أو أقل من بلدي
حلقة موجهة ، IMO.

لا أعتقد أنه يمكنك الابتعاد عن الاتجاه الدائري بمجرد دخولك
لكن نعم ، يجب أن يجعل التقسيم الكروي المشكلة أكثر وضوحًا
للقارئ العادي. أو ربما الصندوق POLYGON ((90-45 ، 90 45 ، -90 45 ، -90
-45 ، 90-45)). هل يغطي أفريقيا أم المحيط الهادئ؟

وبالمثل بالنسبة للخطوط ، فهل تعبر LINESTRING (100 0 ، -100 0) إفريقيا أو
المحيط الهادئ؟ ماذا عن LINESTRING (100 0 ، 0 0 ، -100 0)؟


مشاكل إنشاء مضلع من خلال قراءة هندسته

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

يبدو الإخراج الحالي كما يلي:

أحتاجه ليبدو كما يلي:

سيكون موضع تقدير أي اقتراحات.

بواسطة JoshuaBixby

بالتراجع عن السؤال المحدد ، لماذا تريد إخراج الشكل الهندسي كنص لإعادة إنشاء نفس الشكل الهندسي من النص لاحقًا؟ هل تريد التفريغ / التصدير للمعالجة بواسطة برنامج أو برنامج نصي آخر؟

لإغراق أو تصدير الأشكال الهندسية ، من الأفضل استخدام أحد أنواع تنسيقات تبادل البيانات مثل JSON / GeoJSON و WKT / WKB. يمكنك استخدام FromWKT / FromWKB أو AsShape لتحويل تلك السلاسل مرة أخرى إلى أشكال هندسية.

حسنًا ، أريد في الأساس الحصول على الخصائص الهندسية (X ، Y) لمدخل FC ونسخه في مخطط مضلع فارغ من نفس FC. لا أرغب في استخدام أداة "إدارة النسخ" أو "الإلحاق" لأنها لا تلائم جميع متطلباتي للمخرجات النهائية. بدلاً من ذلك ، أحاول استخدام مؤشر إدراج لإدراج الصفوف. بعد اتباع وثائق Esri حول كيفية استخدام إدراج المؤشر ، تمكنت من إضافة الصفوف ولكن لم يكن لدى FC أي خصائص هندسية ، أي أن جدول السمات الخاص بـ FC تم ملؤه ولكن لم يتم عرض أي ميزات لأن معلومات الهندسة كانت مفقودة. بعد تجربة طرق مختلفة ، اكتشفت أنه من خلال تمرير الإحداثيات كما هو مقترح في رسالتي الأولى داخل shapeArray = arcpy. Array ([pntArray]) ، تمكنت من تحقيق النتيجة المرجوة. لقد قمت بترميز القيم لاختبارها ونجحت ولكن لا يمكنني تنسيق النص بالطريقة التي أحتاجها. ربما لم يكن أسلوبي هو النهج الصحيح ، لذلك نرحب بأي اقتراحات.

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


مؤقت متقطع أو دوري

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

جيوتزلر علق في 14 أبريل 2014

sgillies يحتوي اقتراحي على تسلسل (مثل Multipoint) و WhenCollection (مثل GeometryCollection) ، على الرغم من عدم وجود أي منهما في ISO19108 أو OWL Time Ontology. ما لم يرد في اقتراحي هو فترات منتظمة - أن يحدث شيء أسبوعيًا أو يوميًا أو كل 17 دقيقة أو أيًا كان. ليس لدي حالة استخدام لذلك.

Kgeographer علق في 14 أبريل 2014

sgillies ، الكل - أشاهد هذا باهتمام كبير ، لكن منغمسًا تمامًا في أعمال أخرى مع تحديد موعد نهائي ، سيتعين عليك الانتظار حتى المساء للتفكير في الأمر بالفعل

راجع للشغل ، لا غير المصنفة في موضع. إلى cc لي ، لأنني أحصل عليها في الوقت الفعلي

jyutzler أنا أفضل أن تكون أوقات الفاصل الزمني قائمة. أحب أيضا
باستخدامtschaub 's Since و until بدلاً من إضافة القيم الخالية. أحب أن
للحصول على مزيد من التعليقات من الأشخاص الذين يشاهدون هذا الريبو.


قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub.

Sfsheath علق في 15 أبريل 2014

أود أن أرى "WhenCollections". يحتوي مثالjyutzler الموجود على https://github.com/jyutzler/slartime-spec/blob/master/0.0.2/README.md#3-example على DatetimeCollection. أرى ذلك كطريق لتنفيذ "أقرب بداية ممكنة" و "أحدث تاريخ بدء ممكن" كعنصر فاصل زمني في مجموعة ، مع فاصل زمني مماثل لتاريخ الانتهاء.

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

Kgeographer علق في 15 أبريل 2014

fwiw ، في Topotime (https://github.com/ComputingPlace/Topotime) نقوم بنمذجة الفترات في PeriodCollections. الفترة هي أي شيء زمني (حدث ، فترة تاريخية ، عمر) ، المكافئ الزمني للسمات. تحتوي النقاط على tSpans (مثل "when": [<]، <>]). ليس لديهم "هندسة": [] لكن يمكنني أن أخمن.

كل من الفترات والميزات لها سياق مكاني وزماني وهي في منظور معين.

sgillies - لدينا عدة أجزاء "when" (tSpans) ، وهي قوائم من أزواج الكائنات (أو الثلاثية أو الرباعية). يتعرف المحللون لدينا على هذه الهياكل دون الكثير من المتاعب. نتعامل أيضًا مع الوقت الدوري ، كقيمة بداية / نهاية وقيمة "cduration" (3 d = 3 أيام ، وما إلى ذلك). تشمل حالات الاستخدام التي أخذناها في الاعتبار مواسم ، مثل "صيف شبابها" أو "في طفولته ساعد في حصاد العنب في Fiesole." هذه هي نموذجية للبيانات الحقيقية في مشروع هنا بالمناسبة.

jyutzler هذا لا يربط "متى" بالخصائص ، لكننا وجدنا أن السماح لأي مجموعة من مفاتيح البداية / أحدث بداية ، ومفاتيح النهاية الأقدم / النهاية لتعبيرات الوقت كان مطلبًا أساسيًا. بالمناسبة ، فإن s / ls ، ee / e هو نمط شائع جدًا بالمناسبة - ظهر في Simile Timeline وأكثر من ذلك ، ويجعل جميع أنواع حسابات الاحتمالات المثيرة للاهتمام ممكنة.

أخشى أن يكون هناك المزيد من علب الديدان. أعتقد أن السؤال هو أين نرسم الخط ، وما هي حالات الاستخدام التي يجب استيعابها. أعترف بأنني مهتم أكثر بالتعامل مع حالات الاستخدام التاريخية غير الدقيقة ، لكنني أريد حقًا أن يكون Topotime متوافقًا مع أي GeoJSON-Time. ستكون بيانات حالات الاستخدام مفيدة. لدينا البعض في Topotime repo ونبحث عن المزيد. تبدو المسارات ، والحدود المتغيرة ، والفترات / العصور التاريخية قليلة مفيدة على نطاق واسع.

تشاب علق في 15 أبريل 2014

هناك حاجة ماسة لشيء للتعامل مع عدم اليقين

هل عدم اليقين في الوقت المناسب أكثر أهمية من عدم اليقين في الموقف؟

آمل أن يتماشى أي تمديد مع الجوهر من حيث البساطة.

Kgeographer علق في 15 أبريل 2014

tschaub أوافق على أن عدم اليقين المكاني والزماني لهما فائدة متساوية لنمذجة السمات الجغرافية. يقترح هذا خطوتين ، ربما مهام منفصلة: أولاً ، إضافة "متى" إلى "أين" ("الهندسة") على مستوى مماثل من البساطة. سيتجاهل مترجمي GeoJSON الحاليون كلمة "متى". ستكون الخطوة التالية هي تطوير نماذج بديلة موسعة للأشياء غير المؤكدة "متى" و "أين". مهمة غير تافهة ، كما يقولون. Topotime هو أول طعنة في ذلك. إن مترجمي GeoJSON الحاليين لن يتعاملوا مع هذه الأمور على الإطلاق. ربما يصبح هذا هو GeoJSON-LD أو HistJSON أو.

يبدو أن هناك بعض الإجماع هنا ، سيكون الأول عبارة عن قوائم بمصطلحات ISO8601 وأزواج المصطلحات ، مكتوبة على أنها "فورية" أو "فاصلة". الجانب الجانبي - السماح بفاصل زمني فارغ يبدو مكافئًا تقريبًا للسماح لـ LineString بنقطة واحدة - ما هو المحلل اللغوي الذي يصنعها ، بصريًا أو حسابيًا؟ يبدو من المناسب بالنسبة لي أن Simile Timeline كان يحتوي على كائنات رباعية الوقت منذ بعض الوقت ، أفضل ذلك كخط أساس على الرغم من أنه يحول القوائم إلى مفتاح: كائنات القيمة.

يعرض برنامج رسم الخرائط النقاط والخطوط والمضلعات مع إعطاء قوائم بأزواج الإحداثيات وتسمية النوع. يبدو من المعقول أن برنامج المخطط الزمني يجب أن يتعامل بشكل عام مع القوائم (أو الكائنات) المصنفة بشكل مشابه لمصطلحات ISO8601. سيكون التحويل من وإلى ISO8601 مؤلمًا في الحالات ، كما هو الحال مع WGS84 / UTM ، إلخ.

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

جيوتزلر علق في 15 أبريل 2014

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

تعجبني فكرة @ sfsheath لاستخدام WhenCollection لالتقاط كل من البداية / أحدث بداية ونهاية / أقرب نهاية ولكن أقترح تنظيمها بشكل مختلف. ربما يكون الإدخال الأول حسب الاصطلاح هو فاصل البداية / النهاية ("أفضل تخمين") والثاني هو ls / ee. التطبيق البسيط سوف ينتبه فقط للعنصر الأول في المصفوفة لكن تطبيقك سيفهم كليهما.

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

قد يكون MapStory مصدرًا جيدًا لنماذج البيانات.

Sgillies علق في 15 أبريل 2014

لا يميز GeoJSON بين عدم الدقة والغموض في الإحداثيات المكانية ، لذلك عندما تحتوي مجموعة البيانات على إحداثيات مثل [-105 ، 40] فقد يعني ذلك إما أن الأشكال الهندسية قد قطعت عمدًا إلى شبكة من درجة واحدة أو أن المنتج قد يعني أن الميزة في مكان ما بالقرب من تلك النقطة. لقد اعتمدنا على ناشري البيانات لشرح ما يحدث للمستخدمين خارج النطاق الترددي. سواء كان يعمل طوال الوقت أم لا يمكن مناقشته ، لكنني أعتقد أن مواصفات GeoJSON Time التي فعلت الشيء نفسه يمكن أن تنجح.

بعبارة "افعل نفس الشيء" أعني السماح للمنتجين باستخدام <"type": "since" ، "datetimes": "1000"> لتعني إما بالضبط منذ 1 يناير 1000 م (على الرغم من أن 1000-01-01 هي طريقة أفضل بكثير للتعبير عن ذلك) أو منذ حوالي 1000 م. يجب نقل الدلالات الدقيقة في البيانات الوصفية أو اتفاقيات الخدمة أو سياقات JSON-LD.

يعد تنسيق التاريخ / الوقت الممتد (EDTF) 1.0 الخاص بمكتبة الكونغرس أمرًا مثيرًا للاهتمام بالنسبة لي لأنه يميز بين عدم الدقة والغموض ، ولكن لا يوجد الكثير من البرامج التي تدعمه. إن توقيت GeoJSON الذي نناقشه هنا لن يستبعده ، على الأقل.

kgeographer أود الموزعين تحويل <"type": "Interval"، "datetimes": ["2006"، "2014"]> إلى شريط مدته 8 سنوات في مخطط زمني. هذه معلومات كافية ، نعم؟ أنا لا أفهم ما تقصده بالوقت الرباعي.


The Skorasaurus & # 8211 مدونة Will Skora

كيف تعلمت طريقة ثالثة للربط بملفات GEOJSON الخارجية في mapbox.js والنشرة.

هل لديك ملف geojson وتريد تحميله في النشرة؟

كل ما يتطلبه الأمر هو سطرين.

var featLayer = L.mapbox.featureLayer (). addTo (mizzap)
featLayer.loadURL ('dtparking.geojson')

يقوم السطر الأول بتهيئة طبقة المعالم لخريطتك.
في المثال الخاص بي ، mizzap هو متغير الكائن الذي قمت بإنشائه لتهيئة خريطتي .. (أكره أن & # 8216map & # 8217 يُستخدم طوال الوقت كمتغير) ، أنت لا تعرف ما & # 8217s تشير إلى ل). يمكن أن يشير Mizzap إلى كائن موجه من خلال l.mapbox.map أو l.map :)

يقوم السطر الثاني بتحميل ملف geojson الخاص بي الموجود في نفس الدليل مثل ملف html الخاص بي. يمكنني الآن استخدامه لاحقًا ببساطة كـ & # 8216featLayer & # 8217.
.

لقد أطلقت عليها بشكل فضفاض & # 8216 الطريقة الثالثة & # 8217 بصفتي منظمًا لبرنامج Maptime وشخصًا شاملاً للركل ، وصفت Lyzi Diamond طريقتين أخريين ((1) و (2)) لتحميل ملفات Geojson وأطمح أن تكمل هذه المشاركة منشوراتها ..

لماذا استخدمت هذه الطريقة لتحميل geojson الخاص بي (ويمكنك أيضًا)؟

الآن ، كيف تعلمت استخدام هذه الطريقة الثالثة هو أنني أردت تحميل وتصميم المضلعات في المنشور أو mapbox.js استنادًا إلى الخصائص الموجودة في ملف geojson ولم & # 8217t أريد تضمين خصائص التصميم في ملف geojson.

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

كانوا يقومون بتحميل GEOJSON داخل المتصفح نفسه وليس إلى ملف خارجي.
https://www.mapbox.com/mapbox.js/example/v1.0.0/geojson-simplestyle/

أو في بعض الحالات ، قام المؤلفون بمزيج من هذه.

أعترف ، لم أكن على دراية بـ AJAX على الإطلاق ولم & # 8217t أرغب في لمسها. بالنظر إلى الوراء ، ربما كنت خائفًا جدًا منه وفي نفس الوقت كنت أقرأ وثائق mapbox.js وفكرت: & # 8216wow ، سيوفر لي استخدام Mapbox.js بعض الوقت ولن أضطر إلى استخدام المكون الإضافي Leaflet-Ajax ،
لقد استخدمت mapbox.js عدة مرات من قبل وعرفت أنه يتضمن وظيفة المنشور ، ولديه أيضًا العديد من الأساليب والفئات الأخرى المصممة لإضافة المزيد من الوظائف ، ويوفر تكاملًا أسهل مع مربعات الخرائط من mapbox.com

قلت لنفسي: & # 8221 يمكنني فقط تحميل ملف geojson الخاص بي باستخدام loadurl () ، وسيكون لدى mapbox مثال لإظهاره لي! & # 8221

أتعلم الكود من خلال قراءة الأمثلة وتعديلها.

أدناه ، أذهب من خلال العديد من الالتزامات حيث تعلمت استخدام loadURL () ، وتحميل وتصميم جميع المضلعات في ملف geojson ، ثم أشر إلى أخطائي على طول الطريق حيث استخدمت رمزًا خاطئًا.
=======
التزم بواحد:

حاولت استخدام خيار النمط (من l.geojson) ومفتاح لتخصيص تصميم ملف geojson كما هو معروض في الصفحة النموذجية للنشرة & # 8217s geojson.
الذي لديه المثال التالي.
===
L.geoJson (الدول ، <
النمط: الوظيفة (الميزة) <
التبديل (feature.properties.party) <
القضية & # 8216 الجمهورية & # 8217: العودة
القضية & # 8216Democrat & # 8217: العودة
>
>
>). addTo (خريطة)

لقد قمت بتكييفه في هذا الالتزام (على جيثب) وبصيغة html هنا
لسوء الحظ ، لم يعمل هذا & # 8217t & # 8230
عرض وحدة التحكم:

& # 8220 خطأ غير معلوم: كائن GeoJSON غير صالح. mapbox.js: 3
s.extend.geometryToLayer mapbox.js: 3
s.GeoJSON.s.FeatureGroup.extend.addData mapbox.js: 3
s.GeoJSON.s.FeatureGroup.extend.initialize mapbox.js: 3
البريد الإلكتروني mapbox.js: 1
s.geoJson mapbox.js: 3
(دالة مجهولة) index.html: 36 & # 8243

اعتقدت .. & # 8221
ربما يمكنني & # 8217t النمط داخل loadURL & # 8230 ربما يتعين علي استخدام l.geojson
وندعوها مرة أخرى؟ & # 8221 & # 8221

=======
بعد ذلك ، كنت لا أزال في حيرة من أمري ، وبينما كنت أستمر في العثور على أمثلة لما كنت أبحث عنه ، وفي النهاية سألت بيل موريس ، مستخدم المنشور / mapbox.js / tilemill منذ فترة طويلة.

لقد استخدمت وظيفتين لتصميم المضلعات ولكن لم يحدث أي تصميم. لا يزال في حيرة من أمره.
كنت أرغب في التأكد من استدعاء / تشغيل وظيفتي الثانية (لتحديد اللون الذي يتم استخدامه في النمط بناءً على خاصية وقوف السيارات). لذلك استخدمت طريقة العرض لأول مرة داخل وظيفة getColor.

اعتقدت أنه لم يكن هناك خطأ في وحدة تحكم جافا سكريبت أو المعلومات لمعرفة سبب استدعاء الوظائف.

حاولت مرة أخرى استبدال show بـ console.log والنتيجة نفسها: سيتم عرض المضلعات ، لكن
لم أستطع معرفة سبب عدم استدعاء وظيفة getColor الخاصة بي & # 8217t الخاصية في ملف geojson الخاص بي.

طوال اليوم ، وجدت بعض الأمثلة الأخرى (من maptime و mapbox & # 8217s store locator & # 8211 التي كانت مشابهة لما كنت أبحث عنه & # 8211 تخصيص ميزة بناءً على الميزة وخصائص # 8217s
(كمرجع ، الميزة عبارة عن كائن جغرافي يمثل نقطة أو مضلعًا) & # 8211 ولكن لم يكن أي منهما مخصصًا لتخصيص المضلعات ، لكنهما قدموا بعض الأفكار لأشياء أخرى جربتها دون نجاح ..

لقد تساءلت عما إذا كان يجب علي أولاً استخدام طريقة لودورل ثم استخدام خيار / طريقة المرشح لعدم تحميل أي تصميم ثم استخدام وظيفة أخرى لإضافة البيانات مرة أخرى وتصميمها؟ & # 8221

ثم ساعدني & lta href = & quothttp: //twitter.com/geografa"Rafa Gutierrez من MapBox ، وقدم لي مثالاً لتطبيق نمط على جميع المضلعات في ملف geojson (كود).

بفضل مثال Rafa & # 8217s وقراءة المستندات للمرة العاشرة ، فإن قراءة ملف
لقد اكتشفت أخيرًا مفهومين مهمين حقًا وتعلمت أين أخطأت:

كنت أستخدم & # 8216style & # 8217 كطريقة في التزاماتي السابقة. مرة أخرى ، هذا خطأ!
فقط رعاية مثاله ،

النمط ليس طريقة ، ولكنه خيار في النشرة.

يعتمد L.mapbox.featureLayer () على & # 8216extends & # 8217 l.featureGroup. يمكنك استخدام بعض الطرق الأخرى المدرجة في L.mapbox.featureLayer () بالإضافة إلى جميع الطرق الموجودة في l.featureGroup مع l.mapbox.featureLayer.

لم أدرك على الفور أنه يمكنني استخدام طريقة setStyle لتصميم المضلع الخاص بي لأن الكائن الخاص بي (الذي سميته & # 8216featLayer & # 8217 في جميع الأمثلة الخاصة بي) تم إنشاؤه من l.mapbox.featureLayer لأن كل الأمثلة التي أملكها تم العثور عليها عبر الإنترنت (في ذلك الوقت) قاموا ببناء الكائن الخاص بهم باستخدام l.geojson واستخدم خيار النمط الخاص بـ l.geojson.

ولكن ، الآن كيف يمكنني النمط بناءً على خصائص الميزة في ملف geojson ، تساءلت!
الجزء الثاني كيف تعلمت هذا ، الخروج.


لماذا يتم عرض مضلع GeoJSON الخاص بي على هيئة خط فقط؟ - نظم المعلومات الجغرافية

الاقتباس المقترح: ديكسون ، ناديا ميليكين ، جينيفيف موكوندا ، كيشاف موراي ، رينا ستاري ، راشيل. (2019). GeoJSON Data Curation التمهيدي. مستودع جيثب لشبكة تنظيم البيانات.

تم إنشاء هذا العمل كجزء من ورشة العمل "المتخصصة لتنظيم البيانات" رقم 2 التي عقدت في جامعة جونز هوبكنز في بالتيمور ، ماريلاند في 17-18 أبريل 2019. وقد تم تمويل ورش العمل هذه بسخاء من قبل معهد خدمات المتاحف والمكتبات # RE- 85-18-0040-18.

GeoJSON هو تنسيق لتبادل البيانات الجغرافية المكانية لتشفير هياكل البيانات الجغرافية المتجهة ، مثل هندسة النقاط والخط والمضلعات ، بالإضافة إلى سماتها غير المكانية. كما يوحي الاسم ، فهو يعتمد على JavaScript Object Notation (JSON) ويواصل تنسيق JSON الخفيف ، والنص العادي ، والقابل للقراءة آليًا ، مما يجعله نوع ملف متعدد الاستخدامات خاصة للتطبيقات والتطبيقات على شبكة الإنترنت. يحدد تنسيق GeoJSON عدة أنواع من كائنات JSON لتمثيل هيكل وتخطيط المعالم الجغرافية وخصائصها ومساحتها. يدعم GeoJSON نظامًا مرجعيًا للإحداثيات الجغرافية واحدًا ، النظام الجيوديسي العالمي 1984 (WGS84) ، في وحدات من الدرجات العشرية تصل عادةً إلى 7 منازل عشرية من الدقة.

في GeoJSON ، هناك سبعة "أنواع هندسية" حساسة لحالة الأحرف على النحو المحدد في مواصفات تنفيذ ميزات OpenGIS البسيطة لـ SQL: "Point" و "MultiPoint" و "LineString" و "MultiLineString" و "Polygon" و "MultiPolygon" و "مجموعة الهندسة". تتكون هذه الأشكال الهندسية البسيطة من "نوع" ومجموعة من الإحداثيات المدرجة على أنها خطوط الطول والعرض والارتفاع ، مع اعتبار الارتفاع اختياريًا. تشكل الأنواع الهندسية السبعة المذكورة أعلاه ، جنبًا إلى جنب مع الأنواع الحساسة لحالة الأحرف "Feature" و "FeatureCollection" ، "أنواع GeoJSON" التسعة. أنواع "Feature" و FeatureCollection "هي أشكال هندسية مع خصائصها الوصفية.

هناك العديد من المزايا لـ GeoJSON تجعله خيارًا جيدًا لتشفير البيانات الجغرافية. GeoJSON هو مستند إلى النص ، وقابل للتحرير في محرر نصوص ، ويستخدم كلمات إنجليزية شائعة ، ويستخدم بنية بيانات بسيطة للغاية ، ويسهل قراءتها على كل من البشر والآلات. علاوة على ذلك ، فإن GeoJSON هو ملف واحد ، على عكس تنسيقات البيانات الجغرافية المكانية المضغوطة. نتيجة لبساطته وتعدد استخداماته ، فهو تنسيق مثالي لاستهلاك وإنتاج البيانات الجغرافية المكانية. تتضمن بعض بدائل GeoJSON التي قد يتم مواجهتها Shapefile و KML / KMZ و GML و CSV.

قد يواجه القيمون أيضًا تنسيق ملف EsriJSON. هذا معيار ESRI مملوك لترميز البيانات المكانية في نص منظم JSON. يتم تعيينه كخيار التحويل الافتراضي عندما يتم تحويل مجموعة البيانات المكانية من تنسيق متجه آخر إلى JSON باستخدام برنامج ArcMap و ArcGIS Pro. في حين أن التنسيق والبناء يتشابهان إلى حد كبير مع GeoJSON ، إلا أن هناك بعض الاختلافات الرئيسية ، لا سيما في العضو "النوع". يتوفر شرح لكيفية تحديد ملف EsriJSON في قسم "توصيات لتحويل الملف." إذا تم تقديم ملف EsriJSON للتنظيم ، ففكر في مطالبة المرسل بمجموعة البيانات بتنسيق مختلف.

يحتوي كل كائن GeoJSON على عضو يسمى "type" ، والذي يجب أن يكون أحد أنواع GeoJSON التسعة المذكورة سابقًا. تحتوي جميع كائنات الهندسة تقريبًا أيضًا على عضو يسمى "إحداثيات" مدرج بالترتيب مثل خط الطول وخط العرض والارتفاع (اختياري). يتم التعبير عن الارتفاع على أنه الارتفاع بالأمتار فوق أو أسفل الشكل الإهليلجي المرجعي WGS84 المستخدم لتقريب الأرض. فيما يلي الكائنات الهندسية السبعة البسيطة التي يمكن تحديدها في GeoJSON:

  • هدف: بالنسبة لكتابة "Point" ، يكون عضو الإحداثيات هو منصب واحد. على سبيل المثال ، يتم تحديد موضع بخط الطول -122.918958 وخط العرض 49.279778 والارتفاع 340 في WGS84 على النحو التالي:

  • سلسلة الخط: بالنسبة لنوع "LineString" ، يكون عضو الإحداثيات عبارة عن مصفوفة من موقعين أو أكثر. تتكون هذه الهندسة من مقاطع خطية متصلة:

  • المضلع: بالنسبة للنوع "Polygon" ، يجب أن يكون عضو الإحداثيات مصفوفة من مصفوفة واحدة أو أكثر من مصفوفات إحداثيات الحلقة الخطية ، حيث تحتوي كل مجموعة على أربع نقاط على الأقل ويجب أن تكون النقطتان الأولى والأخيرة متطابقتين. تحدد هذه الحلقات الخطية حدود المضلع. بالنسبة للمضلعات التي تحتوي على أكثر من واحدة من هذه الحلقات الخطية ، يجب أن تكون الأولى هي الحلقة الخارجية ، ويجب أن تكون أي مضلعات أخرى حلقات داخلية. الحلقة الخارجية هي حدود المضلع ، والحلقات الداخلية (إن وجدت) هي حدود الثقوب داخل المضلع. فيما يلي مثال على مضلع رباعي الأضلاع بداخله فتحة مثلثة واحدة:

متعدد النقاط: بالنسبة لنوع "MultiPoint" ، يكون عضو الإحداثيات عبارة عن مجموعة من المواضع. تحدد هذه الهندسة مجموعة من النقاط.

MultiLineString: For type "MultiLineString", the coordinates member is an array of LineString coordinate arrays. This geometry specifies a collection of LineStrings.

MultiPolygon: For type "MultiPolygon", the coordinates member is an array of Polygon coordinate arrays. This geometry specifies a collection of Polygons.

GeometryCollection: A GeoJSON object with type "GeometryCollection" is a heterogeneous collection of point, line, and polygon geometries grouped together. A GeometryCollection has a member with the name "geometries". The value of "geometries" is an array. Each element of this array is a GeoJSON Geometry object with its own coordinates. Here is an example of a GeometryCollection that contains a MultiPoint and a Polygon:

The last two types specified in GeoJSON describe ​Features​, which are a combination of simple geometry and their descriptive properties.

ميزة: An object with type "Feature" has a member with the name "geometry". This “geometry” member must be exactly one of the seven geometry objects defined above, or a null value. A Feature object also contains a member named “properties”, whose value can be any JSON object (for example, “name”, “marker-size”, “marker-color”, etc.)

FeatureCollection: Feature Collection​: An object with type "FeatureCollection" has a member with the name "features". This “features” member is a JSON array of Feature objects, which were just described above.

Existing GeoJSON Documentation

RFC 7946 is the official documentation for GeoJSON and is maintained by the Internet Engineering Task Force (IETF). The current documentation, which was put forward by the GeoJSON Working Group in 2016 and replaced the original documentation 2008 (GJ2008), has undergone public review, is the consensus of the IETF community, and was approved for publication by the Internet Engineering Steering Group (IESG). The documentation provides specifications for GeoJSON, including syntax for GeoJSON objects.

The GeoJSON format is often a download option in geospatial data repositories, administrative open data portals, and when using certain APIs. While not an exhaustive list, examples of GeoJSON Datasets that are openly available include:


Analyzing and improving the results

The tools simplify lines and polygon outlines one at a time the longer a line or outline runs, the more pleasing the result will be. Keep this in mind when you collect or construct the source data. Wherever possible, position endpoints of lines on long, smooth sections of lines, rather than at severely angled sections.

Topology problems in the input feature class—features that overlap other features without an intersection point—are flagged in a field in the input feature class. This field is named SimPgnFlag in the case of Simplify Polygon and SimLinFlag in the case of Simplify Line . A value of 1 in these fields indicates that a topological error was present for that feature in the input feature class.

For reference, an ID field corresponding to the object ID of the input feature is also added to the output feature class. The field is called InPoly_FID in the case of the Simplify Polygon tool, or InLine_FID in the case of the Simplify Line tool. In addition, MinSimpTol and MaxSimpTol fields are added to the output to store the tolerance that was used.

A derived point output feature class is created of point features that represent either the endpoints of lines simplified to zero-length lines in the case of Simplify Line ), or polygons simplified to zero-area polygons or to a polygon smaller than the minimum area as defined by the Minimum Area parameter in the case of Simplify Polygon , or possibly both in the case of Simplify Shared Edges . A simplified polygon that has been reduced to empty geometry or to a polygon smaller than the minimum area as defined by the Minimum Area parameter.


The 180th Meridian

The 180th meridian is one of the shames of geospatial technology. The story goes that given the rules of

  • LineStrings and Polygons are represented as collections of positions
  • Positions should be within -180° and 180° longitude and -90° and 90° latitude

It is simply impossible to tell the difference between a line that goes from -179° around the world to 179°, or one that just hops over the 180th meridian. That’s one problem with Cartesian coordinates on a sphere.

A popular way to represent these lines is to break the second rule: a line that crosses the 180th meridian would be represented as 179° to 181° instead of 179° to -179°. By some definitions, this is invalid: 181° is out of the range of the EPSG:4326 datum. But most modern map technology tolerates this kind of data and helpfully draws the image you’d expect.

There’s a clear need for a cleverer and cleaner solution to the 180th meridian problem: both at zero and at the dateline, even the most sophisticated tools exhibit eccentricities and bugs. The most promising option in my opinion is delta-encoding, like in TopoJSON and Geobuf. Instead of representing coordinate pairs as in their full form, delta-encoded geodata will save a line as a series of directional steps: starting from -73, 38 , it would say to move by -3, -3 , instead of specifying that the next coordinate is -76, 35 . Perhaps this gives a clear way to differentiate meridian wrapping from world-sized jumps without breaking the rules of a datum. But that’s just a guess.


Понимание кода

В этой части руководства представлено объяснение наиболее важных компонентов приложения المضلعات, помогающее понять принципы создания подобного приложения.

Проверка манифеста Android

Обратите внимание на следующие элементы в файле AndroidManifest.xml своего приложения:

Добавьте элемент meta-data , чтобы указать версию сервисов Google Play, с которой было скомпилировано приложение.

Добавьте элемент meta-data с указанием своего ключа API. В примере, приведенном в этом руководстве, значение ключа API сопоставляется с определенной ранее переменной сборки ( MAPS_API_KEY ). Во время сборки приложения плагин Secrets Gradle Plugin для Android делает ключи в вашем файле local.properties доступными, используя переменные манифеста.

В файле build.gradle приведенная ниже строка осуществляет передачу ключа API в манифест Android.

Ниже приведен пример манифеста полностью:

Добавление карты

Отобразите карту, используя Maps SDK для Android.

Добавьте элемент <fragment> в файл макета для объекта activity, activity_maps.xml . Этот элемент указывает, что фрагмент SupportMapFragment должен выступать в роли контейнера для карты и предоставить доступ к объекту GoogleMap . В учебном проекте используется версия библиотеки поддержки Android для фрагмента карты. Это обеспечивает обратную совместимость с более ранними версиями фреймворка Android.

В методе onCreate() своего объекта activity установите файл макета как представление контента. Получите дескриптор для фрагмента карты путем вызова метода FragmentManager.findFragmentById() . Затем используйте метод getMapAsync() , чтобы зарегистрировать обратный вызов карты:

Kotlin

Реализуйте интерфейс OnMapReadyCallback и переопределите метод onMapReady() . API выполняет этот обратный вызов, когда объект GoogleMap доступен (это позволяет вам добавлять объекты на карту и настраивать их в своем приложении).

Kotlin

Чтобы начертить линию на карте, используйте ломаную линию

Ломаная линия (объект Polyline ) – это последовательность отрезков прямых, с помощью которых можно нарисовать любую фигуру. Как правило, ломаные линии используются для нанесения на карту маршрутов.

Создайте объект PolylineOptions и добавьте к нему точки. Каждая точка соответствует местоположению на карте, которое вы определяете с помощью объекта LatLng с указанием широты и долготы. Ниже приведен пример кода для ломаной линии с шестью точками.

Чтобы добавить ломаную линию на карту, вызовите метод GoogleMap.addPolyline() .

Kotlin

Задайте для параметра clickable значение true , если вы хотите, чтобы для ломаной линии обрабатывались события кликов. Дополнительная информация об обработке событий будет приведена далее в этом руководстве.

Сохранение произвольных данных с помощью ломаной линии

Вы можете сохранять объекты с произвольными данными с помощью ломаных линий и других геометрических фигур.

Чтобы сохранить объект данных с помощью ломаной линии, вызовите метод Polyline.setTag() . Код ниже определяет произвольный тег ( A ), который указывает тип ломаной линии.

Kotlin

Извлеките данные с помощью метода Polyline.getTag() , как показано в следующем разделе.

Собственный стиль ломаной линии

В объекте PolylineOptions вы можете задавать различные свойства стиля, например, цвет линии, ее толщину и начертание, тип соединения, вид начальной и конечной точек. Если какое-либо свойство не определено, API будет использовать вариант по умолчанию.

Приведенный ниже код задает круглый элемент для конца линии, а также другой круглый элемент для ее начала. Это зависит от типа линии, который представляет собой произвольное свойство в объекте данных для нее. В этом примере также заданы толщина линии, ее цвет и тип соединений.

Kotlin

Приведенный ниже код задает пользовательскую битовую карту для ломаной линии типа А, а также ориентировочную толщину линии, равную 10 пикселям. API масштабирует битовую карту с учетом ориентировочной толщины линии. Укажите толщину линии, которую вы использовали при создании битовой карты в исходном размере изображения. Совет: откройте битовую карту в графическом редакторе в масштабе 100 % и определите нужную толщину линии для этого изображения.

Обработка событий кликов для ломаной линии

Чтобы сделать ломаную линию кликабельной, вызовите метод Polyline.setClickable() . По умолчанию ломаные линии не интерактивны, а приложение не получает уведомления, если пользователь нажимает на линию.

Реализуйте интерфейс OnPolylineClickListener и вызовите метод GoogleMap.setOnPolylineClickListener() , чтобы добавить прослушиватель на карту:

Kotlin

Переопределите метод обратного вызова onPolylineClick() . Пример кода, где вид ломаной линии меняется со сплошного на пунктирный или обратно каждый раз, когда пользователь нажимает на нее:

Kotlin

Представление областей на карте с помощью многоугольников

Многоугольник ( Polygon ) – это фигура, состоящая из упорядоченной последовательности координат, как и ломаная линия ( Polyline ). Разница только в том, что многоугольник – закрытая фигура, которую можно заполнить заливкой.

Создайте объект PolygonOptions и добавьте в него точки. Каждая точка соответствует местоположению на карте, которое вы определяете с помощью объекта LatLng с указанием широты и долготы. Ниже приведен пример кода для многоугольника из четырех точек.

Чтобы сделать многоугольник кликабельным, вызовите метод Polygon.setClickable() . По умолчанию многоугольники не интерактивны, а приложение не получает уведомления, если пользователь нажимает на фигуру. События кликов для многоугольников обрабатываются так же, как и для ломаных линий. См. выше.

Чтобы добавить многоугольник на карту, вызовите GoogleMap.addPolygon() .

Чтобы сохранить объект данных для многоугольника, вызовите метод Polygon.setTag() . Приведенный ниже код определяет произвольный тип ( alpha ) для многоугольника.

Kotlin

Собственный стиль многоугольника

В объекте PolygonOptions вы можете задавать различные свойства стиля, например, цвет линии, ее толщину и начертание, тип соединения и цвет заливки. Если какое-либо свойство не определено, API будет использовать вариант по умолчанию.

Приведенный ниже код задает определенные цвета и начертание линий в зависимости от типа многоугольника – произвольного свойства в объекте данных для фигуры.

Kotlin

Подробнее о начертании, а также других вариантах персонализации фигур…


شاهد الفيديو: What is GeoJSON and why should you care about it?