أكثر

عمل رسم بياني قابل للتوجيه من ملف شكل النقطة والخط باستخدام Networkx؟

عمل رسم بياني قابل للتوجيه من ملف شكل النقطة والخط باستخدام Networkx؟


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

هل من الممكن إيجاد أقصر طريق بين جميع الأصول والوجهات باستخدام الروابط الموجودة في ملف شكل الارتباط؟

أنا أستخدم Python و Networkx و QGIS بشكل أساسي في عملي ، لذلك سيكون من الرائع استخدام هذه الأدوات في هذه المهمة.


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

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

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


يحتوي QGIS 1.8 على فئة مدمجة تسمى qgis.networkanalysis ، ولها وظائف لربط النقاط بالخطوط وحساب أقصر مسار.


عند قراءة shp باستخدام networkx ، تفقد الحواف المتوازية بعض السمات

أحاول استخدام networkx.read_shp لإنشاء MultiGraph من ملف الشكل. أفهم أن الوظيفة تحتاج إلى تعديل لأنها عادةً ما تنشئ DiGraph أحاول من خلال تجربة هذا:

تبقى بقية الوظيفة كما هي. عند التحقق من eges ، يمكنني رؤية أنه عند وجود حواف متوازية ، يبدو أن أحدها يحتوي على قاموس فارغ بدلاً من السمات (على الرغم من وجودها في ملف الأشكال). لقد رأيت سؤالًا مشابهًا من قبل ولكن يبدو أنه يستخدم إصدارًا قديمًا من networkx. هل هناك أي طريقة لعمل رسم بياني متعدد له حواف متوازية مع سماتها؟ لقد رأيت هذه الإجابة NetworkX - كيفية إنشاء MultiDiGraph من Shapefile؟ ولكن من أجل أحد الموجهين ، يمكنني محاولة تحويله بعد ذلك ولكن إذا كان هناك حل مباشر أكثر ، فسيكون موضع تقدير.


TypeError: unhashable type: & # 39LineString & # 39 عند استخدام ox.simplify_graph ()

لدي مجموعة بيانات قمت من خلالها بإنشاء رسم بياني متوافق مع NetworkX. تم تحويل ملف الشكل إلى قواميس للعقد والحواف ، والتي تم تحويلها بعد ذلك إلى GeoDataFrame. من هناك ، استخدمت ox.graph_from_gdfs () لإنشاء رسم بياني فعال. تبدو حافة GeoDataFrame مثل هذا (الصف الأول ، مبسط):

بينما تبدو العقدة GeoDataFrame كما يلي:

تحويلها إلى MultiDiGraph لا يُرجع أي أخطاء:

يتم إرجاع نفس البيانات أيضًا عند التحويل مرة أخرى من الرسم البياني إلى ملفات gdf.

ومع ذلك ، عند تبسيط G ، يظهر الخطأ التالي:

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

إليك رمز بسيط لإعادة إنتاج الخطأ

أظن أن هناك بعض العقد المكررة بمعرفات مختلفة (انظر x و y لـ 111603 و 111604). ربما يمكن أن تكون هذه هي القضية؟


تحليل الشبكة في بايثون¶

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

من الممكن أيضًا إجراء تحليل الشبكة مثل توجيه التحويل في Python. Networkx هي وحدة Python النمطية التي توفر أدوات لتحليل الشبكات بطرق مختلفة مختلفة. كما أنه يحتوي على خوارزميات مثل خوارزمية Dijkstra أو A * algoritm التي تُستخدم عادةً للعثور على أقصر المسارات على طول شبكة النقل.

لتكون قادرًا على إجراء تحليل الشبكة ، من الضروري بالطبع أن يكون لديك شبكة تُستخدم للتحليلات. حزمة OSMnx التي اكتشفناها للتو في البرنامج التعليمي السابق ، تجعل من السهل حقًا استرداد الشبكات القابلة للتوجيه من OpenStreetMap باستخدام أوضاع نقل مختلفة (المشي وركوب الدراجات والقيادة). تجمع OSMnx أيضًا بين بعض الوظائف من وحدة networkx لجعلها مباشرة لإجراء التوجيه على طول بيانات OpenStreetMap.

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


عمل رسم بياني قابل للتوجيه من ملف شكل النقطة والخط باستخدام Networkx؟ - نظم المعلومات الجغرافية

هذه واحدة من أكثر من 100 وصفة مجانية من IPython Cookbook ، الإصدار الثاني ، من إعداد Cyrille Rossant ، وهو دليل للحوسبة الرقمية وعلوم البيانات في Jupyter Notebook. الكتاب الإلكتروني والكتاب المطبوع متاحان للشراء في Packt Publishing.

14.7. إنشاء مخطط طريق لشبكة طرق

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

أنت بحاجة إلى Smopy لهذه الوصفة. يمكنك تثبيته باستخدام تثبيت النقطة git + https: //github.com/rossant/smopy. لكي تتمكن NetworkX من قراءة مجموعات البيانات Shapefile ، فإنك تحتاج أيضًا إلى GDAL / OGR. يمكنك تثبيته باستخدام conda install gdal.

في وقت كتابة هذه السطور ، لا يبدو أن gdal يعمل بشكل جيد مع conda و Python 3.6. قد تحتاج إلى الرجوع إلى إصدار سابق من Python إلى Python 3.5 باستخدام conda install python = 3.5.

  1. نقوم بتحميل البيانات (مجموعة بيانات Shapefile) باستخدام NetworkX. تحتوي مجموعة البيانات هذه على معلومات مفصلة حول الطرق الرئيسية في كاليفورنيا. تقوم وظيفة read_shp () في NetworkX بإرجاع رسم بياني ، حيث تكون كل عقدة موقعًا جغرافيًا ، وتحتوي كل حافة على معلومات حول الطريق التي تربط بين العقدتين. تأتي البيانات من موقع مكتب الإحصاء بالولايات المتحدة على الويب http://www.census.gov/geo/maps-data/data/tiger.html.
  1. هذا الرسم البياني ليس مرتبطًا بالضرورة ، لكننا نحتاج إلى رسم بياني متصل لحساب أقصر المسارات. هنا ، نأخذ أكبر رسم بياني فرعي متصل باستخدام وظيفة connect_component_subgraphs ():
  1. نحدد موضعين (مع خط العرض وخط الطول) ونجد أقصر طريق بين هذين الموضعين:
  1. تحتوي كل حافة في الرسم البياني على معلومات حول الطريق ، بما في ذلك قائمة بالنقاط على طول هذا الطريق. نقوم أولاً بإنشاء دالة تُرجع مجموعة الإحداثيات هذه ، لأي حافة في الرسم البياني:
  1. يمكننا بشكل ملحوظ استخدام مسار الطريق لحساب طوله. نحتاج أولاً إلى تحديد دالة تحسب المسافة بين أي نقطتين في الإحداثيات الجغرافية:
  1. نقوم بتحديث الرسم البياني لدينا عن طريق حساب المسافة بين أي عقدتين متصلتين. نضيف هذه المعلومات مع سمة المسافة للحواف:
  1. الخطوة الأخيرة قبل أن نتمكن من العثور على أقصر مسار في الرسم البياني هي العثور على عقدتين في الرسم البياني الأقرب إلى الموضعين المطلوبين:
  1. الآن ، نستخدم الدالة shortest_path () الخاصة بـ NetworkX لحساب أقصر مسار بين الموضعين. نحدد أن وزن كل حافة هو طول الطريق بينهما:
  1. تم حساب خط سير الرحلة. يحتوي متغير المسار على قائمة الحواف التي تشكل أقصر مسار بين الموضعين. الآن ، يمكننا الحصول على معلومات حول مسار الرحلة مع الباندا. تحتوي مجموعة البيانات على عدد قليل من مجالات الاهتمام ، بما في ذلك الاسم والنوع (الولاية ، والطريق السريع ، وما إلى ذلك) للطرق:

فيما يلي الطول الإجمالي لمسار الرحلة هذا:

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

قمنا بحساب أقصر مسار باستخدام وظيفة NetworkX's shortest_path (). هنا ، تستخدم هذه الوظيفة خوارزمية ديكسترا. تحتوي هذه الخوارزمية على مجموعة متنوعة من التطبيقات ، على سبيل المثال في بروتوكولات توجيه الشبكة.

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

يمكنك العثور على مزيد من المعلومات حول أقصر مشاكل المسار وخوارزمية Dijkstra في المراجع التالية:


وحدات تعاون المؤسسة ووحدات تحليل السجل القوية

مكتبة Java مفتوحة المصدر لخريطة عبر الإنترنت وغير متصلة مع OpenStreetMap. إلى جانب مجموعتها الواسعة من الوظائف الهندسية والمكانية ، وهيكل بيانات الخرائط في الذاكرة ووظائف التعلم الآلي الأساسية ، فهي أساس متعدد الاستخدامات للخدمات المستندة إلى الموقع القابلة للتطوير وتحليل البيانات المكانية والزمانية على الخريطة. إنه مصمم للاستخدام في الأنظمة المتوازية والموزعة ، وبالتالي ، يتضمن خادمًا لمطابقة الخرائط قائمة بذاتها ويمكن استخدامه في الأنظمة الموزعة لخدمات مطابقة الخرائط في السحابة. يتكون Barefoot من مكتبة برامج وخادم خرائط (قائم على Docker) يوفر الوصول إلى بيانات خريطة الشارع من OpenStreetMap وهو مرن لاستخدامه في البنى التحتية السحابية الموزعة كخادم بيانات الخرائط أو جنبًا إلى جنب مع خوادم Barefoot المستقلة من أجل غير متصل (خادم المطابقة) ومطابقة الخرائط عبر الإنترنت (خادم تعقب) ، أو التطبيقات الأخرى التي تم إنشاؤها باستخدام مكتبة Barefoot. يتم توفير الوصول إلى بيانات الخرائط بهيكل بيانات خرائط سريع ومرن في الذاكرة. جنبًا إلى جنب مع GeographicLib [1] وواجهة برمجة التطبيقات الهندسية لـ ESRI [2] ، فإنه يوفر مجموعة واسعة من العمليات الجغرافية والهندسية لتحليل البيانات المكانية على الخريطة.


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

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


أقسام مفقودة وحركات عكسية في STMATCH # 70

أهلا،
أنا أستخدم Python API (المترجمة إلى python3) و STMATCH.
تبدو الأمور واعدة ، ومع ذلك ، لا أحصل على تطابق كامل للبيانات: إما أن أحصل على روابط مفقودة أو حركات عكسية غير ضرورية (و / أو كليهما).

لقد قمت بإنشاء مثال مستقل للسلوك هنا:
https://github.com/cweber9843/test_fmm/blob/master/test_fmm_on_synthetic_data.ipynb
بما في ذلك اختلاف المعلمة والتحقق من الشبكة.

  • ما هي أفضل طريقة لضبط المعلمات؟
  • ربما بناء مصغر من حولهم؟ نوع من البحث عن التدرج؟
  • كيف يمكن تجنب الحركات العكسية؟
  • كيف يمكن ضمان المباراة المتصلة؟
  • هل هناك أي ورق متاح لخوارزمية STMATCH؟
  • في ورقة FMM ، تم ذكر عقوبة لتجنب الحركة العكسية. هل هذا لا يزال مطبق؟
  • هل سيعطي FMM مع ملف UBODT المحسوب مسبقًا نتائج أفضل؟
  • كيف يتم تصور الشبكة (على سبيل المثال: هنا: # 30)؟ هل هذا مكون إضافي لـ QGis؟
  • أي تلميحات أخرى؟

تم تحديث النص بنجاح ، ولكن تمت مواجهة هذه الأخطاء:

لا يمكننا تحويل المهمة إلى مشكلة في الوقت الحالي. حاول مرة اخرى.

تم إنشاء المشكلة بنجاح ولكن لا يمكننا تحديث التعليق في الوقت الحالي.

سيانغ كث علق في 14 مايو 2020 & # 8226

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

من الأفضل تنفيذ تدريب المعامل الفائق خارجيًا على البرنامج الحالي.

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

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

الورقة هنا https://dl.acm.org/doi/abs/10.1145/1653771.1653820
لو Y ، تشانغ سي ، زينج واي ، وآخرون. مطابقة الخريطة لمسارات GPS ذات معدل أخذ العينات المنخفض [C] // وقائع المؤتمر الدولي السابع عشر لـ ACM SIGSPATIAL حول التطورات في أنظمة المعلومات الجغرافية. 2009: 352-361.

FMM مشابه تمامًا لهذا باستثناء أنه يتم استخدام الحساب المسبق.

  • في ورقة FMM ، تم ذكر عقوبة لتجنب الحركة العكسية. هل هذا لا يزال مطبق؟

لا ، تمت إزالته من التطبيق الحالي لأنه نادرًا ما يتم استخدامه.

لا أعتقد أن FMM و STMATCH يتبعان نفس المبدأ ولكن أحدهما يستخدم الحوسبة المسبقة والآخر لا.

يتم تصورها مباشرة في QGIS بدون مكون إضافي خارجي. أنت فقط تحدد رمز الخط الموجه.

أوصي بإلقاء نظرة على الشبكة في QGIS أولاً. قد يكون جزء منه غير متصل.

كويبير 9843 تم التعليق عليه في 14 مايو 2020

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

سويبر 9843 تم التعليق عليه في 14 مايو 2020

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

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

سويبر 9843 تم التعليق عليه في 15 مايو 2020

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

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

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

سيانغ كث تم التعليق عليه في 15 مايو 2020

السبب في أن لديك opath ولكن cpath فارغًا هو وجود نقطتين متطابقتين غير متصلتين بالشبكة.

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

يمكن أن يحتوي ملف السجل على مئات الآلاف من الصفوف ، يمكنك أولاً تصديره إلى ملف سجل ثم التحقق من ذلك السجل

سويبر 9843 تم التعليق عليه في 19 مايو 2020

@ cyang-kth ، شكرًا مرة أخرى على الرد السريع.

لقد قمت الآن بتشغيل stmatch من سطر الأوامر ، على شبكة WGS84 والبيانات (أعطى UTM32 خطأ SQLite لا يوجد مثل هذا العمود: publish_date - هل تريد تقرير خطأ حول هذا؟ API Python يعمل بشكل مستقل عن CRS.).

ومع ذلك ، لا يمكنني رؤية المزيد من المعلومات حول النقاط غير المتصلة:
محتويات stmatch.log:
[info] [stmatch_app_config.cpp: 48] ابدأ بقراءة تكوين stmatch من الوسائط [info] [stmatch_app_config.cpp: 105] قم بإنهاء القراءة بقراءة تكوين وسيطة stmatch [info] [stmatch_app_config.cpp: 109] ---- تهيئة الطباعة - - [info] [network_config.cpp: 6] NetworkConfig [info] [network_config.cpp: 7] اسم الملف: ./data/bike_centerline_v1_extract_ANVedges_source_target_rev_renamed_mini_WGS84.shp [info] [network_config.cpp: id 84.shp [network_config.cpp: 9] اسم المصدر: المصدر [المعلومات] [network_config.cpp: 10] اسم الهدف: الهدف [المعلومات] [gps_config.cpp: 19] تنسيق GPS: نقطة CSV [المعلومات] [gps_config.cpp: 20] اسم الملف: ./data/syntetic_data_ANV_WGS84.csv [info] [gps_config.cpp: 21] اسم المعرف: id [info] [gps_config.cpp: 22] x الاسم: x [info] [gps_config.cpp: 23] اسم y : y [info] [gps_config.cpp: 24] اسم الطابع الزمني: الطابع الزمني [info] [result_config.cpp: 30] ResultConfig [info] [result_config.cpp: 31] الملف: mr.txt [info] [result_config.cpp: 32] الحقول: opath cpath mgeom [info] [stmatch_algorithm.c ص: 22] STMATCHAlgorithmConfig [info] [stmatch_algorithm.cpp: 23] k 4 radius 0.4 gps_error 0.5 vmax 80 factor 1.5 [info] [stmatch_app_config.cpp: 114] مستوى السجل 0-تتبع [معلومات] [stmatch_app_config.cpp: 115] الخطوة 1 [info] [stmatch_app_config.cpp: 116] استخدم omp false [info] [stmatch_app_config.cpp: 117] ---- تم تكوين الطباعة ---- [تحذير] [result_config.cpp: 167] الكتابة فوق ملف النتائج الحالي mr.txt [info] [network.cpp: 37] قراءة الشبكة من ملف ./data/bike_centerline_v1_extract_ANVedges_source_target_rev_renamed_mini_WGS84.shp [info] [network.cpp: 130] عدد الحواف 60 عقدة 28 [info] [network.cpp: 131] فهرس الحقل: id 2 source 4 target 5 [info] [network.cpp: 134] تم قراءة الشبكة. [معلومات] [network_graph.cpp: 17] إنشاء رسم بياني من حواف الشبكة [معلومات] [network_graph.cpp: 30] عقد رسم بياني 28 حافة 60 [معلومات] [network_graph.cpp: 31] إنشاء رسم بياني من نهاية حواف الشبكة [معلومات] [gps_reader.cpp: 239] فهرس المعرف 0 x الفهرس 1 y الفهرس 2 الوقت 3 [معلومات] [stmatch_app.cpp: 33] تقرير التقدم الخطوة 1 [info] [stmatch_app.cpp: 35] ابدأ لمطابقة المسارات [معلومات] [stmatch_app.cpp: 64] تشغيل مطابقة الخريطة في موضوع واحد [info] [stmatch_app.cpp: 67] التقدم 0 [info] [stmatch_app.cpp: 81] انتهت عملية MM [info] [stmatch_app.cpp: 87] الوقت المستغرق 0.002 [info] [stmatch_app.cpp: 88] يستغرق الوقت باستثناء الإدخال 0 [معلومات] [stmatch_app.cpp: 89] إجمالي نقاط مطابقة الخريطة النهائية 26 مطابقة 0 [info] [stmatch_app.cpp: 91] النسبة المئوية المتطابقة: 0 [معلومات ] [stmatch_app.cpp: 92] سرعة مطابقة النقاط: 0 [info] [stmatch_app.cpp: 93] سرعة مطابقة النقاط (باستثناء الإدخال): -nan [info] [stmatch_app.cpp: 95] يستغرق الوقت 0.002
و mr.txt:
idopathcpathmgeom 12312150،12149،10902،10902،10902،10902،10902،11310،11309،11309،10122،10122،10122،10122،9381،9381،9381،9009،9764،9009،9009،9009،9009،900 ، 9009LINESTRING ()

أنا واثق تمامًا من أن شبكتي متصلة وثنائية الاتجاه الآن:

الأرقام باللون الأخضر والأحمر هي العقدة المصدر والهدف ، على التوالي ، والأرقام باللون الأسود هي معرف الحافة. جميع الحواف ثنائية الاتجاه ، ويبدو أنها جميعًا متصلة (على سبيل المثال ، تكون العقدة 126 مصدرًا للحافة 154 ، ولكنها مستهدفة لـ 362). لقد تحققت من هذا لجميع الحواف في هذا المثال.
bike_centerline_v1_extract_ANVedges_source_target_rev_renamed_mini_WGS84.shp


وصفة للانتقال تلقائيًا من البيانات إلى النص إلى شرائح Reveal.js

على مدى السنوات القليلة الماضية ، جربت & # 8217ve عدة وصفات لإنشاء تقارير نصية من مجموعات البيانات المجدولة ، (بدأت أيضًا المكونات الإضافية لجدول البيانات في الظهور بهدف مماثل في الاعتبار). هناك العديد من المشكلات المرتبطة بهذا ، بما في ذلك:

  • تحديد البيانات أو الإحصاءات التي تريد الإبلاغ عنها من مجموعة البيانات الخاصة بك
  • (اشتقاق الرؤى تلقائيًا)
  • بناء الجمل المناسبة من البيانات
  • تنظيم الجمل في نوع من الهيكل السردي
  • جعل الجمل تقرأ جيدًا معًا.

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

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

في المنشورتين السابقتين ، ربما لاحظ الملاحظ بينكم أني & # 8217ve كنت أستكشف مكونين لوصفة يمكن استخدامها لإنشاء عروض تقديمية مستندة إلى مستعرض revision.js من 20٪ هذا الحساب لـ 80٪.

مجموعة البيانات I & # 8217ve هي مجموعة من بيانات الإنفاق على الشفافية الشهرية من مجلس جزيرة وايت. الإصدارات الأخيرة لها النموذج:

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

هناك & # 8217s مثال لعرض الشرائح بناءً على بيانات أكتوبر 2016 هنا. لاحظ أن بعض الشرائح بها & # 8220subslides & # 8221 ، أي الشرائح تحته لذا شاهد مؤشرات الأسهم أسفل اليسار لتتبع وقت توفرها. لاحظ أيضًا أن التمرير قد تم ضربه قليلاً وفقده & # 8211 بشكل مثالي ، سيتم دائمًا تمرير شريحة جديدة إلى الأعلى ، وبالنسبة للأجزاء التي يتم إدراجها في شريحة واحدة في كل مرة ، يجب أن تقوم الشريحة بالتمرير لأسفل لمتابعتها).

هيكل العرض على نطاق واسع كما يلي:

على سبيل المثال ، هنا & # 8217s شريحة تلخيصية للإنفاق من قبل المديرية & # 8211 لاحظ أنه يمكننا تضمين المخططات بسهولة كافية. (تم تصميم المخططات باستخدام بحار، لذا فإن مجموعة من الموضوعات البديلة متاحة بشكل ضئيل). يتم إحضار عناصر المديرية المنفصلة في وقت واحد فتات.

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

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

لاحظ أن الانزلاقات السفلية متاحة تحت من هذه الشريحة بدلاً من عير الشرائح الرئيسية في سطح السفينة. تعني بنية 1.5D هذه أنه يمكننا وضع عنصر تصميم سردي مرن في العرض التقديمي ، مما يمنح القارئ فرصة لاستكشاف البيانات ، ولكن بطريقة مقيدة.

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

يمثل هذا مجرد مرور أول في إنشاء سطح شرائح 1.5D من مجموعة بيانات مجدولة. يستخدم مخطط باريتو (80/20) لمحاولة تحديد أولويات المعلومات المعروضة من أجل حساب 80٪ من الإنفاق في مجالات مختلفة ، أو مساهمات مهمة أخرى.

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

تتمثل الخطوة التالية في إلقاء نظرة على طرق أخرى لتقسيم البيانات وهيكلتها من أجل إنتاج تقارير قد تكون مفيدة بالفعل & # 8230

إذا كانت لديك أي أفكار ، فيرجى إبلاغي بها عبر التعليقات ، أو التواصل معنا مباشرة & # 8230

PS FWIW ، يجب أن يكون من السهل تشغيل أي مجموعة بيانات أخرى تشبه إلى حد كبير المثال الموجود في الجزء العلوي من خلال نفس الكود مع بعض التعديلات الطفيفة فقط & # 8230


تصور طيران متحرك

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

يتكون مستند SVG لهذا النوع من الرسوم من نص وخطوط ودوائر.

الأجزاء الديناميكية هي زمن والعناصر داخل طيران المجموعة والبيانات قد تبدو مثل هذا:

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

يمكننا الآن تمرير التاريخ المتغير إلى xScale () للحصول على إحداثي x لكل رحلة.

تقديم حلقة

تم تقريب أوقات المغادرة والوصول إلى 5 دقائق حتى نتمكن من التنقل عبر بياناتنا بزيادات قدرها 5 ملايين من المغادرة الأولى إلى آخر وصول.

الدخول والتحديث والخروج

يسمح لك D3 بتحديد عمليات التحويل والانتقالات للعناصر عندما:

  • نقاط بيانات جديدة تأتي في (أدخل)
  • تغيير نقاط البيانات الموجودة (تحديث)
  • تتم إزالة نقاط البيانات الموجودة (خروج)

الانتقالات

يعرض الكود أعلاه إطارًا كل 500 مللي ثانية مع زيادة الوقت بمقدار 5 دقائق:

  • يقوم بتحديث الوقت
  • ينشئ مجموعة طيران جديدة بدائرة لكل رحلة
  • يحدّث إحداثيات x / y للرحلات الحالية
  • يزيل مجموعات الرحلات الجوية عند وصولهم

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

على سبيل المثال ، دعونا نتلاشى في عتامة دخول مجموعات الطيران.

دعونا نتلاشى الخروج من مجموعات الطيران.

أضف انتقالًا سلسًا بين نقطتي x و y.

يمكننا أيضًا نقل الوقت بين زيادات الخمس دقائق بحيث يتم عرضه كل دقيقة بدلاً من كل خمس دقائق باستخدام وظيفة توين.


شاهد الفيديو: طريقة عمل رسم بياني على الاكسل 2007 و 2010 Excel