أكثر

مشكلة * pgRouting مع قيم x1 و y1 و x2 و y2

مشكلة * pgRouting مع قيم x1 و y1 و x2 و y2


أحاول استخدام خوارزمية A * في هيكل صنعته في PostgreSQL. يمكنني ملء x1 و y1 و x2 و y2 وخط الطول / العرض ، لكنني قرأت أن نفس الإصدار به مشاكلST_StartPoint&ST_EndPointواستخدم وظائف أخرى.

أحاول ولكن x1 x2 y1 y2 يظل فارغًا بعد تنفيذ استفساري ويعطي رسالة نجاح

ها هي الاستفسارات (أولاً أستخدم هذه الأربعة)

تحديث الطرق SET x1 = ST_x (ST_startpoint (geom)) ؛ تحديث الطرق SET y1 = ST_y (ST_startpoint (geom)) ؛ تحديث الطرق SET x2 = ST_x (ST_endpoint (geom)) ؛ تحديث الطرق SET y2 = ST_y (ST_endpoint (geom)) ؛

بعد أن جربت هذه الأربعة ونفسها ، لم يحدث شيء!

تحديث الطرق SET x1 = ST_x (ST_PointN (geom، 1)) ؛ تحديث الطرق SET y1 = ST_y (ST_PointN (geom، 1)) ؛ تحديث الطرق SET x2 = ST_x (ST_PointN (geom ، ST_NumPoints (geom))) ؛ UPDATE road SET y2 = ST_y (ST_PointN (geom، ST_NumPoints (geom))) ؛

لا تقدم PostgreSQL أي خطأ ، لكنها تضع عمودًا فارغًا.

كمثال بعد الاستعلامات ، لدي هذه النتيجة

> gid | dromoi_id | النوع | leng | geom (MultiLineString ، 4326) | المصدر | الهدف | reverse_cost | x1 | y1 | x2 | y2> 1 | 10 | كـ | 300 | 01051232 | 15 | 60 | 352.2 | | | |

لن أضع كل هؤلاء في نفس السطر من هذا القبيل. أعتقد أنه سيكون من الأسهل بكثير قراءة مجموعة من الأسطر المتعددة:

من المحتمل أن يكون لدي فئة Node كـ toplevel بدلاً من المتداخلة. لا أعتقد أنك تكسب الكثير من خلال امتلاكه داخل عطار. يمكنك تسميته _Node لجعله & quotmodule-private & quot حتى تؤدي محاولة استيراده إلى ملف آخر إلى إثارة التحذيرات.

في تطبيق Node's __lt__ ، لن أستدعي مقارن المعامل الثاني. المقارنة هي شيء يقارن ، بينما في هذه الحالة ، هذه مجرد عقدة أخرى. other_node أو شيء ما سيكون أكثر ملاءمة.

في الكشف عن مجريات الأمور ، كنت سأستخدم شخصًا آخر هناك:

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

nodeNeighbours (التي يجب أن تكون node_neighbours) ستكون أكثر نظافة مكسورة على عدة أسطر:

أعتقد أن هذا يسهل كثيرًا رؤية ما يحدث فيه.

مرة أخرى ، في العديد من الأماكن تقوم بتعيين متغيرين أو أكثر في سطر واحد:

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

في computePath ، يبدو أن ClosedList يجب أن يكون مجموعة. لا يبدو الأمر كما لو كان الأمر مهمًا معه ، وسيكون الجار في القائمة المغلقة أسرع مع مجموعة مما سيكون عليه مع القائمة. يبدو أن openList مطلوب ليكون قائمة على الرغم من أنه يتم تمريره إلى heapify.

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


النصيحة 1: l_moves

  1. الاسم l_moves ليس جيدًا على الإطلاق. ضع في اعتبارك numberOfMoves.
  2. نظرًا لأنه يُقرأ فقط ، اجعله ثابتًا. والأفضل من ذلك ، أنه من المعتاد في Java تسمية الثوابت بـ رأس المال قضية. لهذه الحالة بالذات ، أقترح عليك إعادة تسمية l_moves

العدد النهائي الثابت الخاص NUMBER_OF_MOVES = 4

نصيحة 2: فئة SlidingPuzzle

أقترح عليك إعادة تسميته ، على سبيل المثال ، SlidingPuzzleSolver.

النصيحة 3: فئة العقدة

أقترح عليك إخراجها من SlidingPuzzle وإنشاء ملف .java مخصص لذلك.

نصيحة 4: لا تقم بتخزين حالة البحث في عقد اللغز الفعلية

النصيحة 5: تطبيق hashCode

يتيح تنفيذ hashCode الخاص بـ SlidingPuzzle.Node إمكانية تخزين عقد الألغاز في HashSet أو HashMap على سبيل المثال كمفتاح.

النصيحة 6: على printBoard

لماذا لا يتم تجاوز toString لـ Node؟

نصيحة 7: على إعادة بناء المسار

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

نصيحة 8: ArrayList كقائمة مغلقة

لا ، لا ، لا ولا. يحتوي على أي قائمة JDK تعمل في الوقت الخطي. يمكن لـ HashSet أن يفعل الشيء نفسه في $ Theta (1) $. لكي يحدث ذلك ، ارجع إلى نصيحة 5.


حجج الإدخال

قيم Y & # 8212 y سلمي | ناقلات | مصفوفة

ذ القيم المحددة كسلسلة أو متجه أو مصفوفة. للتآمر ضد معين x يجب عليك أيضًا تحديد القيم X.

أنواع البيانات: واحد | مزدوج | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | قاطع | التاريخ والوقت | المدة الزمنية

قيم X & # 8212 x سلمي | ناقلات | مصفوفة

x القيم المحددة كسلسلة أو متجه أو مصفوفة.

أنواع البيانات: واحد | مزدوج | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | قاطع | التاريخ والوقت | المدة الزمنية

LineSpec & # 8212 نمط الخط وعلامة ولون ناقلات الشخصية | سلسلة

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

مثال: "--or" هو خط أحمر متقطع بعلامات دائرية

علامةوصف
"س" دائرة
'+' علامة زائد
'*' النجمة
'.' هدف
"x" يعبر
'_' خط أفقي
'|' خط عمودي
'س' ميدان
'د' الماس
'^' مثلث يشير إلى الأعلى
'الخامس' مثلث يشير للأسفل
"& gt" مثلث يشير لليمين
"& lt" مثلث يشير لليسار
"ع" نجمة خماسية
"ح" سداسية

الفأس & # 8212 محاور الهدف كائن المحاور | كائن PolarAxes | كائن GeographicAxes

محاور الهدف ، المحددة ككائن محاور ، أو كائن PolarAxes ، أو كائن GeographicAxes. إذا لم تحدد المحاور وإذا كانت المحاور الحالية محاور ديكارتية ، فإن وظيفة الرسم تستخدم المحاور الحالية. للرسم في محاور قطبية ، حدد كائن PolarAxes كأول وسيطة إدخال أو استخدم دالة polarplot. لرسم محاور جغرافية ، حدد كائن GeographicAxes كأول وسيطة إدخال أو استخدم دالة geoplot.

وسيطات زوج الاسم والقيمة

حدد أزواجًا اختيارية مفصولة بفواصل من وسيطات الاسم والقيمة. الاسم هو اسم الوسيطة والقيمة هي القيمة المقابلة. يجب أن يظهر الاسم داخل علامات الاقتباس. يمكنك تحديد عدة وسيطات لزوج الاسم والقيمة بأي ترتيب مثل Name1 و Value1. الاسم N ، القيمة

مثال: "Marker" ، "o" ، "MarkerFaceColor" ، "أحمر"

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

"اللون" & # 8212 لون الخط [0 0.4470 0.7410] (افتراضي) | ثلاثي RGB | كود اللون الست عشري | 'r' | "ز" | 'ب' | .

لون الخط المحدد على هيئة RGB ثلاثي ، أو رمز لون سداسي عشري ، أو اسم لون ، أو اسم قصير.

للون مخصص ، حدد رمز لون RGB ثلاثي أو رمز لون سداسي عشري.

ثلاثي RGB هو ناقل صف ثلاثي العناصر تحدد عناصره شدة مكونات اللون الأحمر والأخضر والأزرق. يجب أن تكون الشدة في النطاق [0،1] على سبيل المثال ، [0.4 0.6 0.7].

رمز اللون السداسي العشري هو متجه حرف أو سلسلة عددية تبدأ برمز تجزئة (#) متبوعًا بثلاثة أو ستة أرقام سداسية عشرية ، والتي يمكن أن تتراوح من 0 إلى F. القيم ليست حساسة لحالة الأحرف. وبالتالي ، فإن رموز الألوان "# FF8800" و "# ff8800" و "# F80" و "# f80" متكافئة.

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

فيما يلي مجموعات RGB الثلاثية ورموز الألوان السداسية العشرية للألوان الافتراضية التي يستخدمها MATLAB & # x00AE في العديد من أنواع المؤامرات.

مثال: 'أزرق'

مثال: [0 0 1]

مثال: "# 0000FF"

"LineStyle" & # 8212 نمط الخط '-' (افتراضي) | '-' | ':' | "-." | 'لا أحد'

نمط الخط المحدد كأحد الخيارات المدرجة في هذا الجدول.

"عرض الخط" & # 8212 عرض الخط 0.5 (افتراضي) | قيمة موجبة

عرض الخط ، محدد كقيمة موجبة بالنقاط ، حيث 1 نقطة = 1/72 من البوصة. إذا كان الخط يحتوي على علامات ، فسيؤثر عرض الخط أيضًا على حواف العلامة.

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

"علامة" & # 8212 رمز علامة "لا شيء" (افتراضي) | 'o' | '+' | '*' | "." | .

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

قيمةوصف
"س" دائرة
'+' علامة زائد
'*' النجمة
'.' هدف
"x" يعبر
'_' خط أفقي
'|' خط عمودي
"مربع" أو "s" ميدان
"الماس" أو "d" الماس
'^' مثلث يشير إلى الأعلى
'الخامس' مثلث يشير للأسفل
"& gt" مثلث يشير لليمين
"& lt" مثلث يشير لليسار
'pentagram' أو 'p' نجمة خماسية (نجمة خماسية)
"hexagram" أو "h" نجمة سداسية (سداسية)
'لا أحد' لا توجد علامات

'MarkerIndices' & # 8212 فهارس نقاط البيانات التي يتم عندها عرض العلامات 1: الطول (YData) (افتراضي) | ناقلات الأعداد الصحيحة الموجبة | عدد صحيح موجب

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

لمشاهدة العلامات ، يجب عليك أيضًا تحديد رمز علامة.

مثال: الرسم (x، y، '- o'، 'MarkerIndices'، [1 5 10]) يعرض علامة دائرة عند نقاط البيانات الأولى والخامسة والعاشرة.

مثال: الرسم (x ، y ، '- x' ، 'MarkerIndices' ، 1: 3: length (y)) يعرض علامة متقاطعة كل ثلاث نقاط بيانات.

مثال: الرسم (x ، y ، "Marker" ، "square" ، "MarkerIndices" ، 5) يعرض علامة مربعة واحدة عند نقطة البيانات الخامسة.

'MarkerEdgeColor' & # 8212 لون تخطيط ماركر "تلقائي" (افتراضي) | ثلاثي RGB | كود اللون الست عشري | 'r' | 'g' | 'ب' | .

لون المخطط التفصيلي للعلامة ، محدد كـ "تلقائي" ، أو ثلاثي RGB ، أو رمز لون سداسي عشري ، أو اسم لون ، أو اسم قصير. تستخدم القيمة الافتراضية لـ "auto" نفس لون خاصية Color.

للون مخصص ، حدد رمز لون RGB ثلاثي أو رمز لون سداسي عشري.

ثلاثي RGB هو ناقل صف ثلاثي العناصر تحدد عناصره شدة مكونات اللون الأحمر والأخضر والأزرق. يجب أن تكون الشدة في النطاق [0،1] على سبيل المثال ، [0.4 0.6 0.7].

رمز اللون السداسي العشري هو متجه حرف أو سلسلة عددية تبدأ برمز تجزئة (#) متبوعًا بثلاثة أو ستة أرقام سداسية عشرية ، والتي يمكن أن تتراوح من 0 إلى F. القيم ليست حساسة لحالة الأحرف. وبالتالي ، فإن رموز الألوان "# FF8800" و "# ff8800" و "# F80" و "# f80" متكافئة.

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

فيما يلي ثلاثة توائم RGB ورموز الألوان السداسية العشرية للألوان الافتراضية التي يستخدمها MATLAB في العديد من أنواع المؤامرات.

"MarkerFaceColor" & # 8212 لون تعبئة ماركر "لا شيء" (افتراضي) | "تلقائي" | ثلاثي RGB | كود اللون الست عشري | 'r' | 'g' | 'ب' | .

لون تعبئة العلامة ، محدد كـ "تلقائي" ، أو ثلاثي RGB ، أو رمز لون سداسي عشري ، أو اسم لون ، أو اسم قصير. يستخدم الخيار "auto" نفس لون خاصية Color الخاصة بالمحاور الرئيسية. إذا حددت "تلقائي" وكان مربع رسم المحاور غير مرئي ، فإن لون تعبئة العلامة هو لون الشكل.

للون مخصص ، حدد رمز لون RGB ثلاثي أو رمز لون سداسي عشري.

ثلاثي RGB هو ناقل صف ثلاثي العناصر تحدد عناصره شدة مكونات اللون الأحمر والأخضر والأزرق. يجب أن تكون الشدة في النطاق [0،1] على سبيل المثال ، [0.4 0.6 0.7].

رمز اللون السداسي العشري هو متجه حرف أو سلسلة عددية تبدأ برمز التجزئة (#) متبوعًا بثلاثة أو ستة أرقام سداسية عشرية ، والتي يمكن أن تتراوح من 0 إلى F. القيم ليست حساسة لحالة الأحرف. وبالتالي ، فإن رموز الألوان "# FF8800" و "# ff8800" و "# F80" و "# f80" متكافئة.

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

فيما يلي ثلاثة توائم RGB ورموز الألوان السداسية العشرية للألوان الافتراضية التي يستخدمها MATLAB في العديد من أنواع المؤامرات.

"حجم العلامة" & # 8212 حجم العلامة 6 (افتراضي) | قيمة موجبة

حجم العلامة ، المحدد كقيمة موجبة بالنقاط ، حيث 1 نقطة = 1/72 بوصة.

تنسيق "DatetimeTickFormat" & # 8212 لتسميات التجزئة للتاريخ والوقت ناقلات الشخصية | سلسلة

تنسيق لعلامات التجزئة للتاريخ والوقت ، المحدد كزوج مفصول بفواصل يتكون من "تنسيق DatetimeTickFormat" ومتجه حرف أو سلسلة تحتوي على تنسيق تاريخ. استخدم الحروف A-Z و a-z لإنشاء تنسيق مخصص. تتوافق هذه الأحرف مع Unicode & # x00AE لغة ترميز البيانات المحلية (LDML) للتواريخ. يمكنك تضمين أحرف غير ASCII مثل واصلة أو مسافة أو نقطتين لفصل الحقول.

إذا لم تحدد قيمة لـ "DatetimeTickFormat" ، فحينئذٍ يُحسِّن الرسم تلقائيًا ويحدِّث تسميات التجزئة استنادًا إلى حدود المحور.

مثال: يعرض "DatetimeTickFormat"، "eeee، MMMM d، yyyy HH: mm: ss" التاريخ والوقت مثل السبت ، 19 أبريل 2014 21:41:06.

يعرض الجدول التالي العديد من تنسيقات العرض الشائعة وأمثلة للإخراج المنسق للتاريخ ، السبت 19 أبريل 2014 الساعة 9:41:06 مساءً في مدينة نيويورك.

قيمة DatetimeTickFormat مثال
"yyyy-MM-dd" 2014-04-19
"dd / MM / yyyy" 19/04/2014
"dd.MM.yyyy" 19.04.2014
'yyyy MM 月 dd 日' 2014 04 19 日
"MMMM d ، yyyy" 19 أبريل 2014
"eeee، MMMM d، yyyy HH: mm: ss" السبت ، 19 أبريل 2014 21:41:06
"MMMM d ، yyyy HH: mm: ss Z" 19 أبريل 2014 21:41:06 -0400

للحصول على قائمة كاملة بمعرفات الأحرف الصالحة ، راجع خاصية Format لمصفوفات التاريخ والوقت.

DatetimeTickFormat ليس خاصية خط مخطط. يجب عليك تعيين تنسيق التجزئة باستخدام وسيطة زوج الاسم والقيمة عند إنشاء مخطط. بدلاً من ذلك ، قم بتعيين التنسيق باستخدام وظيفتي xtickformat و ytickformat.

تقوم الخاصية TickLabelFormat الخاصة بمسطرة التاريخ والوقت بتخزين التنسيق.

تنسيق "DurationTickFormat" & # 8212 لعناوين علامات التجزئة الخاصة بالمدة ناقلات الشخصية | سلسلة

تنسيق لعناوين علامات التجزئة للمدة ، المحددة كزوج مفصول بفواصل يتكون من "تنسيق DurationTickFormat" ومتجه حرف أو سلسلة تحتوي على تنسيق المدة.

إذا لم تحدد قيمة لـ "DurationTickFormat" ، فحينئذٍ يقوم الرسم تلقائيًا بتحسين وتحديث تسميات التجزئة بناءً على حدود المحور.

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

قيمة DurationTickFormat وصف
"y" عدد السنوات المحددة ذات الطول المحدد. السنة ذات الطول الثابت تساوي 365.2425 يومًا.
'د' عدد الأيام المحددة ذات الطول المحدد. يوم محدد الطول يساوي 24 ساعة.
"ح" عدد الساعات
'م' عدد الدقائق
'س' عدد الثواني

مثال: يعرض "DurationTickFormat" ، "d" قيم المدة من حيث الأيام ذات الطول الثابت.

لعرض المدة في شكل مؤقت رقمي ، حدد إحدى هذه القيم.

بالإضافة إلى ذلك ، يمكنك عرض ما يصل إلى تسعة أرقام كسور ثانية من خلال إلحاق ما يصل إلى تسعة أحرف S.

مثال: يعرض "DurationTickFormat" ، "hh: mm: ss.SSS" المللي ثانية من قيمة المدة إلى ثلاثة أرقام.

DurationTickFormat ليست خاصية خط مخطط. يجب عليك تعيين تنسيق التجزئة باستخدام وسيطة زوج الاسم والقيمة عند إنشاء مخطط. بدلاً من ذلك ، قم بتعيين التنسيق باستخدام وظيفتي xtickformat و ytickformat.

تقوم خاصية TickLabelFormat الخاصة بمسطرة المدة بتخزين التنسيق.


2. الشبكات

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

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

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

قم بتنفيذ الاستعلام التالي:

حدد * من الأماكن التي يكون فيها خط العرض بين 100-10 و 100 + 10 وخط الطول بين 85-10 و 85 + 10 و GridID في (mainGridID ، Left ، Right ، Top ، Bottom ، Top-Left ، Top-Right ، Bottom-Left ، أسفل اليمين)

سيؤدي هذا بالتأكيد إلى تقليل وقت التشغيل الكلي للاستعلام وتحسينه حيث تم تقليل نطاق تنفيذ استعلام البحث إلى 9 شبكات فقط.

تخزين البيانات
يمكننا جعلها أسرع من خلال تخزين رقم الشبكة وقائمة أماكنها في الذاكرة. كما نوقش أعلاه ، سوف يكون لدينا 50 مليون ويمكننا أن نفترض أن كل معرف شبكة سيكون من 6 بايت وكما هو الحال مع مقياس الماموث 400 مليون الأماكن ، يمكننا أن نفترض أن معرّف_المكان ليكون من 8 بايت. لذلك فإن إجمالي الذاكرة المطلوبة للتخزين المؤقت معرفات الشبكة و هويات المكان سيكون 4 جيجابايت.


كيفية حساب المسافة بين نقطتين باستخدام بيثون

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

بواسطة DanPatterson_Re متعب

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

بواسطة DarrenWiens2

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

يمكنك حساب المسافة بين نقطتين.

إذا كان على طول خط ، فيمكنك فقط تقسيم الخط بالنقاط واستخدام طول الخط لذلك

مرحبًا كارل ، شكرًا جزيلاً على تلميحك. لطفك سيكافأ خير

إليك GitHub لإيجاد المسافة بين نقطتين باستخدام مسافة دائرة كبيرة:

هناك أيضًا جيوبى ، والتي لديها طرق مضمنة:

لن تحتاج حتى إلى استخدام ArcGIS لمعرفة ذلك إذا كان لديك ببساطة ملف csv لأزواج النقاط لإجراء الحساب.


نمذجة نظام ديناميكيات السيارة

يوضح هذا المثال نمذجة الصندوق الرمادي غير الخطية لديناميات السيارة. تعتمد العديد من ميزات السيارة الجديدة (مثل برامج الثبات الإلكتروني (ESP) ، وأنظمة مراقبة ضغط الإطارات غير المباشرة (TPMS) ، وأنظمة مراقبة احتكاك إطارات الطرق ، وما إلى ذلك) على نماذج من ديناميكيات السيارة الأساسية. إن ما يسمى بنموذج مركبة الدراجة هو هيكل نموذجي بسيط إلى حد ما يتم استخدامه بشكل متكرر في أدبيات ديناميكيات السيارة. سنبدأ في هذا المثال بهيكل النموذج هذا ونحاول تقدير الصلابة الطولية والجانبية للإطار. تم تنفيذ أعمال النمذجة الفعلية في الأصل من قبل إريك ناربي في عمله لدرجة الماجستير في NIRA Dynamics AB ، السويد.

نمذجة ديناميكية السيارة

يوضح الشكل التالي حالة نمذجة السيارة التي يجب مراعاتها.

شكل 1: عرض تخطيطي لنظام ديناميكيات السيارة.

باستخدام قانون نيوتن للحركة وبعض العلاقات الهندسية الأساسية ، يمكن للسرعة الطولية v_x (t) والسرعة الجانبية v_y (t) ومعدل الانعراج r (t) المقاس حول مركز الجاذبية (COG) للمركبة يتم وصفها بالمعادلات التفاضلية الثلاث التالية:

حيث يتم استخدام الرمز x للإشارة إلى أن القوة F تعمل في الاتجاه الطولي و y أنها تعمل في الاتجاه الجانبي. تسمي الاختصارات FL و FR و RL و RR الإطارات: يسار أمامي ، يمين أمامي ، خلفي يسار وخلفي يمين ، على التوالي. تحتوي المعادلة الأولى التي تصف التسارع الطولي أيضًا على مصطلح مقاومة الهواء الذي يُفترض أنه دالة تربيعية لسرعة السيارة الطولية v_x (t). بالإضافة إلى ذلك ، دلتا (t) (مدخلات) هي زاوية التوجيه ، J لحظة القصور الذاتي ، و a و b المسافة من مركز الجاذبية إلى المحورين الأمامي والخلفي ، على التوالي.

لنفترض أنه يمكن نمذجة قوى الإطارات من خلال التقريبات الخطية التالية:

حيث C_x و C_y هما صلابة الإطارات الطولية والجانبية ، على التوالي. لقد افترضنا هنا أن معايير الصلابة هذه هي نفسها لجميع الإطارات الأربعة. s_i (t) هو ما يسمى الانزلاق (الطولي) للإطار i و alpha_i (t) زاوية انزلاق الإطار. بالنسبة للمركبة ذات الدفع بالعجلات الأمامية (كما هو موضح هنا) ، يتم اشتقاق الانزلاق s_FL (t) و s_FR (t) من سرعات العجلات الفردية (المقاسة) بافتراض أن العجلات الخلفية لا تظهر أي انزلاق (على سبيل المثال ، s_RL ( ر) = s_RR (ر) = 0). ومن ثم فإن الزلات هي مدخلات لهيكل نموذجنا. بالنسبة للعجلات الأمامية ، يمكن تقريب زوايا انزلاق الإطارات alpha_Fj (t) بواسطة (عندما v_x (t) & gt 0)

بالنسبة للعجلات الخلفية ، يتم اشتقاق وحساب زوايا انزلاق الإطارات alpha_Rj (t) بالمثل

باستخدام J = 1 / ((0.5 * (a + b)) ^ 2 * m) يمكننا بعد ذلك إعداد هيكل فضاء حالة يصف ديناميكيات السيارة. قدِّم الدول:

إشارات الدخل الخمسة المقاسة أو المشتقة

مخرجات النظام هي السرعة الطولية للمركبة y1 (t) = x1 (t) ، تسارع السيارة الجانبي (يقاس بمقياس التسارع):

ومعدل الانعراج y3 (t) = r (t) (يقاس بالجيروسكوب).

معًا ، نصل إلى هيكل نموذج الدولة والفضاء التالي:

موديل المركبة IDNLGREY

كأساس لتجارب تحديد السيارة ، نحتاج أولاً إلى إنشاء ملف نموذج IDNLGREY يصف معادلات السيارة هذه. هنا نعتمد على نمذجة C-MEX وننشئ ملف طراز vehicle_c.c ، حيث يتم تعيين NY إلى 3. وظائف تحديث الحالة والمخرجات الخاصة بـ vehicle_c.c و compute_dx و compute_y ، متضمنة إلى حد ما وتتضمن العديد من معايير C المحددة الدوال الرياضية ، مثل cos (.) و sin (.) وكذلك pow (.) لحساب قوة حجتها.

تقوم دالة تحديث الحالة compute_dx بإرجاع dx (الوسيطة 1) وتستخدم 3 وسائط إدخال: متجه الحالة x ومتجه الإدخال u والمعلمات العددية الستة المشفرة في p (تمت إزالة t و auxvar لملف نموذج C-MEX هنا):

تقوم دالة تحديث الإخراج compute_y بإرجاع y (الوسيطة 1) وتستخدم 3 وسيطات إدخال: متجه الحالة x ومتجه الإدخال u وخمسة من المعلمات الستة (ليست هناك حاجة لمقاومة الهواء CA) المشفرة في p:

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

يتم تحديد أسماء ووحدات الحالات (الأولية) ومعلمات النموذج عبر SETINIT. نستخدم هذا الأمر أيضًا لتحديد أن الحالة الأولية الأولى (السرعة الطولية) يجب أن تكون موجبة تمامًا حتى يكون النموذج صالحًا ولتحديد أن جميع معلمات النموذج يجب أن تكون موجبة تمامًا. سيتم احترام هذه القيود لاحقًا عند إجراء تقدير الحالة الأولية و / أو تقدير معامل النموذج.

يمكن الحصول على أربعة من المعلمات الستة لهذا الهيكل النموذجي بسهولة من خلال ورقة بيانات السيارة المعنية:

ومن ثم فإننا لن نقدر هذه المعلمات:

بهذا ، يتم الحصول على ملخص نصي لبنية نموذج IDNLGREY الذي تم إدخاله من خلال PRESENT على النحو التالي.

بيانات الإدخال والإخراج

في هذه المرحلة ، نقوم بتحميل بيانات الإدخال والإخراج المتاحة. يحتوي هذا الملف على بيانات من ثلاث تجارب مختلفة:

في جميع الحالات ، وقت العينة Ts = 0.1 ثانية.

أ. تحديد النظام باستخدام بيانات محاكاة صلابة الإطارات العالية

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


المستطيلات المتداخلة

تلقيت السؤال التالي في مقابلة فنية اليوم (لوظيفة devops / SRE):

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

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

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

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

كانت عملية تفكيري ، عندما وصلت إلى المنزل وجلست مع لوحة المفاتيح كما يلي:

نحن نهتم فقط بالحواف ، في النهاية. لذا فإن صفي Rect () يخزن فقط العدد X للحواف اليمنى واليسرى ، والقياس Y للحواف العلوية والسفلية.

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

إليك رمز إنشاء النقاط والمستطيلات. يتم إنشاء مثيل للمستطيلات فقط باستخدام نقاط الزوايا هي في الواقع تافهة ويمكن تسميتها tuple إذا كنت مائلاً.

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

ها هي وظيفة التداخل:

يبدو أن هذا يعمل (لجميع حالات الاختبار الخاصة بي) ولكنه يبدو أيضًا خطأ بالنسبة لي. كانت محاولتي الأولية أن أبدأ بـ hoverlaps و voverlaps كـ False ، وقم بتعيينها بشكل انتقائي على True باستخدام ظروف مشابهة لتلك الموضحة (ولكن مع عكس عوامل عدم المساواة).


تكعيب شرائح استيفاء في بايثون من الصفر

لقد قمت بتنفيذ الاستيفاء المكعب الموضح في
https://en.wikipedia.org/wiki/Spline_interpolation كصف بايثون. بالطبع ، مثل هذا الاستيفاء يجب أن يكون موجودًا بالفعل في بعض مكتبات الرياضيات في بايثون. ومع ذلك ، فإن هذا المنشور لا يتعلق باستخدام حل معين موجود ، ولكنه يتعلق بمراجعة رمز مكتوب من الصفر يستخدم فقط الوظائف القياسية.

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

هل يمكنك مساعدتي في تحسين جودة الكود؟ يمكنك فقط مشاركة ملاحظاتك العامة أو اقتراح بعض التحسينات.

رمز: CubicSplineStruct.py


مشكلة * pgRouting مع قيم x1 و y1 و x2 و y2 - أنظمة المعلومات الجغرافية

spt_cpp / يحتوي على الكود المصدري لإعادة بناء الرسم البياني ، py_visualization / يحتوي على نتيجة تحويل كود المصدر إلى تنسيق Paraview. تحتاج إلى تجميع spt_cpp أولاً واستدعائها من graphRecon.py. يرجى الحفاظ على هيكل الدليل المحدد. لاستخدام مجموعة البيانات الخاصة بك ، أنشئ مجموعة بيانات الدليل / your_dataset_name / ، ثم ضع كل شيء في هذا الدليل. يمكن العثور على المخرجات في النتيجة /. بمجرد إكمال تشغيل واحد على مجموعة البيانات الخاصة بك ، سيتم حفظ المثابرة ولن تحتاج إلى حسابها مرة أخرى عندما تريد تجربة عتبة مختلفة. ensity_estimation.cpp مخصصة لتحويل مسارات GPS إلى حقول كثافة.

لتجميع الملفات في spt_cpp / ، قم بتغيير الدليل إلى spt_cpp / ، قم بتشغيل الأمر التالي في المحطة:

python graphRecon.py dataset_name dataset_form عتبة البعد

dataset_form -g شبكة الإدخال

dataset_form -t تثليث المدخلات

عتبة [0،1] (يتم تسوية دالة الكثافة إلى [0،1])

التثليث ثنائي الأبعاد كمدخل:

التثليث ثلاثي الأبعاد كمدخل:

يمكن تنزيل جميع مجموعات البيانات هنا.

يمكن أن يكون الإدخال عبارة عن شبكات ثنائية / ثلاثية الأبعاد أو مثلثات من وظائف الكثافة.

يجب أن يخزن ملف نص الإدخال الشبكة ثنائية الأبعاد كمصفوفات. يمكنك ببساطة تخزين المصفوفة ثنائية الأبعاد في لغة python باستخدام np.savetxt ().

السطر الأول من ملف نص الإدخال هو أبعاد الشبكة ثلاثية الأبعاد m، n، l. ويتم تخزين المصفوفة ثلاثية الأبعاد كمصفوفة 1D بعد تسويتها باستخدام np.reshape ([m * n * l]).

يتم تخزين التثليث في ثلاثة ملفات: tri_vert.txt و tri_edge.txt و tri_triangle.txt

tri_vert.txt:

tri_edge.txt:

tri_triangle.txt:

t1_adjacent_vertex_index1 t1_adjacent_vertex_index2 t1_adjacent_vertex_index3

t2_adjacent_vertex_index1 t2_adjacent_vertex_index2 t2_adjacent_vertex_index3

يتم تخزين الرسم البياني الناتج في ملفين: vert.txt و edge.txt

visualization.png هي مؤامرة الرسم البياني المعاد بناؤه. يوصى باستخدام Paraview للتصور ثلاثي الأبعاد.

التصور بواسطة paraview (تحتاج حزمة python3.6 numpy و sys و vtk):

تحويل إخراج إعادة بناء الرسم البياني إلى .vtp:

قم بتغيير الدليل إلى py_visualization / (إذا لم تكن تستخدم نفس بنية الدليل ، فيجب تغيير موقع الدليل داخل الكود) ، قم بتشغيل الأمر التالي في المحطة:

على سبيل المثال ، ينشئ "python to_vtk_form_recon_3D.py test_3D" ملف vtp من أجل test_3D. ثم يمكنك فتح ملف vtp في Paraview مباشرة.

ينشئ "python to_vtk_form_recon_2D.py Berlin" ملف vtp لبرلين.

تعليمات حول تقديم الحجم انظر هنا.

يتم استخدام ملفات .raw لعرض وحدة التخزين.

فتح ملف .raw في Paraview ،

حدد ملفات Raw (ثنائية) عند الفتح

حدد ملفات Raw (ثنائية) عند الفتح

حدد ملفات Raw (ثنائية) عند الفتح

النوع القياسي للبيانات: حرف غير موقّع

يمكن تنزيل جميع مجموعات البيانات هنا.

مجموعات البيانات ثنائية الأبعاد: أثينا ، برلين

مجموعات البيانات ثلاثية الأبعاد: ENZO ، العظام ، test_3D

sur.vtp هي كثافة التضاريس لمجموعات البيانات ثنائية الأبعاد ، والتي يمكن فتحها مباشرةً في Paraview

[1] وانج وسوي ويوسو وانج ويانجي لي. "إعادة بناء الخرائط بشكل فعال والزيادة من خلال الأساليب الطوبولوجية." وقائع المؤتمر الدولي الثالث والعشرين SIGSPATIAL حول التقدم في نظم المعلومات الجغرافية. ACM ، 2015.

[2] داي وتامال ك. وجيايوان وانج ويوسو وانج. "الرسم البياني لإعادة البناء من خلال نظرية مورس المنفصلة." إصدار arXiv التمهيدي arXiv: 1803.05093 (2018).


شاهد الفيديو: pgRouting + Geoserver + Leaflet JS #4 - Building the Network