سؤال

لدي قاعدة بيانات تمكين مكنيا (DB2، في هذه الحالة). أحتاج إلى تخزين عدد كبير من المربعات في طاولة. ما هي Datatype SQL المكاني المعياري هو الأكثر ملاءمة؟

أعتقد أنني يمكن أن تستخدم st_polygon., ، ولكن ربما هناك نوع أكثر تخصصا من شأنه أن يعطي

  • أداء أفضل
  • أفضل ضمانات البيانات (أريد أن أمسك بها كخطأ إذا كان شخصا ما لتخزين قيمة غير مربعة في العمود المعين)

لقد حاولت العثور على ST_RECTACK. أو ST_SQUARE. اكتب، لكنهم لا يبدو أنه موجود (؟)

بينما أنا أعمل مع DB2، فأنا مهتم أيضا بالحلول التي لا تعمل على DB2، طالما أنها متوافقة مع المعايير.

هل كانت مفيدة؟

المحلول

في DB2 إنه أيضا مضلع. يبدو أنك تخزين الشبكات، لذا يمكن أن يكون فحص سريع هو أنه إذا كان ST_ENVINDE (الهندسة) == هندسة ثم لديك مربع

هذا الرمز هو من

وثائق DB2.

SET CURRENT PATH = CURRENT PATH, db2gse;
CREATE TABLE sample_geoms (id INTEGER, geometry ST_Geometry);

INSERT INTO sample_geoms VALUES
(1, ST_Geometry(ST_Point('point EMPTY',0)));

INSERT INTO sample_geoms VALUES
(2, ST_Geometry(ST_Point('point zm (10 10 16 30)' ,0)));

INSERT INTO sample_geoms VALUES
(3, ST_Geometry(ST_Multipoint('multipoint m (10 10 5, 50 10 6, 
         10 30 8)' ,0)));

INSERT INTO sample_geoms VALUES
(4, ST_Geometry(ST_Linestring('linestring (10 10, 20 10)',0)));

INSERT INTO sample_geoms VALUES
(5, ST_Geometry(ST_Polygon('polygon((40 120, 90 120, 90 150, 
         40 150, 40 120))',0)));


SELECT id, CAST(ST_AsText(ST_Envelope(geometry)) as VARCHAR(160))  Envelope
FROM sample_geoms;

نتائج:

ID          ENVELOPE
----------- ---------------------------------------------------------------
      1     -

      2     POLYGON (( 9 9, 11 9, 11 11, 9 11, 9 9))

      3     POLYGON (( 10 10, 50 10, 50 30, 10 30, 10 10))

      4     POLYGON (( 10 9, 20 9, 20  11, 10 11, 10 9))

      5     POLYGON (( 40 120, 90 120, 90 150, 40 150, 40 120))

انظر معرف = 5؟ آخر مضلع == ST_ENVINDE (هندسة)

نصائح أخرى

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

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

فيما يتعلق بتحقق من صحة البيانات، يمكنك إضافة مشغل قاعدة بيانات يتحقق ST_EQUALS (ST_ENVELOME (GEOM)، GEOM) = 1.

قد تكون تبحث عن ST_ENVINDE. - لا أعرف بالتأكيد حول DB2 لكنه جزء من معيار OGC. سيؤدي أي خط غير رأسي أو غير أفقي، أو مضلع، مستطيل عبر هذه الوظيفة، تخزين الإحداثيات عادة كما يطفو.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top