أكثر

حلقة المسافة ST_

حلقة المسافة ST_


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

للجدول:

CREATE TABLE s_1 (معرف المفتاح الأساسي bigserial ، the_geom geometry ، descr text) ؛

للنقاط:

INSERT INTO s_1 (the_geom) حدد ST_MakePoint (جولة (عشوائي () * 100) ، دائري (عشوائي () * 100)) من سلسلة توليد (1،25) ؛

الآن أريد إنشاء وظيفة تحسب جميع المسافات الممكنة بين النقاط وتخزينها في جدول إخراج ، على سبيل المثال 1 إلى 2 ، 1 إلى 3 ، ... 2 إلى 3 ، 2 إلى 4 ، ... وهكذا. لذا يجب أن تبدو الحلقة هكذا

i = 1 n = max id لـ i إلى n-1 من أجل j إلى n ST_Distance (id.i، id.j)

أنا مبتدئ مع SQL ولا أستطيع الحصول على حلقة تعمل حتى الآن.


هل يمكنك مساعدتي في إنشاء وظيفتي الخاصة أيضًا. أفترض أنه يجب أن يبدو مثل هذا؟!؟

إنشاء أو استبدال دالة DIST () RETURNS CREATE TABLE Distance (a.id عدد صحيح ، b.id عدد صحيح ، ST_Distance الصحيح) ؛ AS $$ INSERT INTO Distance (a.id، b.id، ST_DISTANCE) حدد ST_Distance (a.the_geom، b.the_geom) من s_1 a، s_1 b حيث a.id 

في الجدول أريد حفظ المعرف الأول والمعرف الثاني والمسافة بينهما ... لست متأكدًا مما إذا كان هذا قريبًا :-(


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

اختر st_distance (a.the_geom، b.the_geom) من s_1 a، s_1 b حيث a.id<>

يمنحك المرشح a.id b ولكنه يقوم بتصفية أزواج b-> a.

بالنظر إلى تعليق alpha-beta-soup ، فإن الكود الزائف لإجابتي سيكون مثل هذا:

i = 1 n = max id لـ i إلى n-1: j = i + 1 لـ j إلى n: st_distance (geom [i]، geom [j])

إجابة alpha-beta-soup هي:

i = 1 n = max id لـ i إلى n: j = i لـ j إلى n: st_distance (geom [i]، geom [j])

والذي قد يكون أيضًا ما تريده. هذا الأخير يحتفظ بأزواج مسافات صفرية ، والأولى لا. عدد النتائج في إجابتي هو n (n-1) / 2 وفي alpha-beta-soup's ، n ^ 2.


كنت ترغب فيتقاطع الانضمام:

حدد ST_Distance (a.geom، b.geom) من الجدول كجدول CROSS JOIN AS b

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


شاهد الفيديو: مسافة أمان أغنية المسلسل إياد الريماوي و لينا شاماميان - Iyad Rimawi Ft. Lena Chamamyan