سؤال

لدي هذا الجدول البسيط:

CREATE TABLE tbl_test
(
  id serial NOT NULL,
  poly polygon NOT NULL
)
WITH (OIDS=FALSE);

ثم محاولة إدراج صف واحد مع المضلع:

insert into tbl_test values(1, PolyFromText('POLYGON((0 0, 10 10, 10 0, 0 0))'))

واجهت هذا الخطأ:

عمود "بولي" هي من نوع المضلع ولكن التعبير هو من نوع الهندسه

وهو عرجاء.لذلك أول الأسئلة:

  1. هل علي حقا أن المدلى بها ؟

على أية حال, بعد الصب يعمل.و الآن أنا أحاول فعل بسيط ST_Contains الاستعلام:

select id, poly from tbl_test where ST_Contains(poly, Point(GeomFromText('POINT(9 2)')))

الذي يعطي خطأ:

ERROR:  function st_contains(polygon, point) does not exist
LINE 1: select id, poly from tbl_test where ST_Contains(poly, Point(...
                                            ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

ما أنا من المفترض أن تفعل ؟

الأعمال التالية:

select st_contains(st_geomfromtext('POLYGON((0 0, 10 10, 10 0, 0 0))'), st_geomfromtext('POINT(0 0)'))

ولكن هذا ربما لأن كل الحجج هي من نوع الهندسه.الفعلية استعلام مقابل جدول البيانات لا يعمل.

الجواب:

دوى!المشكلة أن DB أنا خلقت لم يكن على أساس postgis قالب DB (و لذلك لم يكن لديك ذات الصلة وظائف هندسة عمود الجداول ، إلخ.).هل لي فقط ملاحظة في الختام أن الطريق PostGIS يتطلب منك إضافة المئات من الوظائف الصفوف و عدد قليل من الجداول الخاصة بك ديسيبل فقط لذلك كنت قد نظم المعلومات الجغرافية الدعم تماما عرجاء.يجعل نسخة احتياطية من المخطط أن أكثر تعقيدا من ذلك بكثير جدا معرضون للخطأ (لا سمح الله إذا أهملت الاتصال AddGeometryColumn فقط إضافة الهندسة عمود نفسك).

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

المحلول

المضلع هو أساسي بوستجرس النوع الذي PostGIS يبني على رأس.يمكنك تمكين الهندسة الأعمدة مع PostGIS وظيفة select AddGeometryColumn(...).وإلا كنت تعمل مباشرة مع المضلعات:

=> create table gt (id int, space polygon);
=> insert into gt values (1, '((2,2),(3,4),(3,6),(1,1))');
INSERT 0 1
=> select point(space) from gt where id = 1;
    point    
-------------
 (2.25,3.25)
(1 row)

هذا هو نقطة المركز المضلع

=> select circle(space) from gt where id = 1;
             circle             
--------------------------------
 <(2.25,3.25),1.93994028704315>
(1 row)

هذا هو الحد الأدنى إحاطة الدائرة المضلع ، كنسبة بوستجرس circle نوع.كل هندسية مشغلي موثقة هنا:http://www.postgresql.org/docs/8.3/interactive/functions-geometry.html قاعدة المضلع لا يملك أي عرض بيانات SRID ، وما إلى ذلك ، حتى إذا كان يعمل مع PostGIS وربما هو فقط المتعثرة المسبقة الحصول على محظوظا.ولكن بالطبع هناك الكثير من الحالات التي تحتاج ببساطة الهندسة على الفرعية الجغرافية المكانية على النطاق.

نصائح أخرى

حسنا, غريب, لقد وجدت التالية أبسط من ذلك بكثير جملة الأعمال:

insert into tbl_test (poly) values ('(0,0),(0,10),(10, 10), (0, 0)')

select * from tbl_test where poly @> '(2, 8)'

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

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