PostGIS के साथ स्थानिक तालिकाएँ बनाना


20

PostGIS प्रलेखन में यह कहता है कि SQL के साथ एक स्थानिक तालिका बनाने के दो चरण हैं:

  1. एक सामान्य गैर-स्थानिक तालिका बनाएं।
  2. OpenGIS "AddGeometryColumn" फ़ंक्शन का उपयोग करके तालिका में एक स्थानिक कॉलम जोड़ें।

यदि मैंने उदाहरणों का पालन किया, तो मैं terrain_pointsइस तरह की एक तालिका बनाऊंगा :

CREATE TABLE terrain_points ( 
  ogc_fid serial NOT NULL, 
  elevation double precision,
);

SELECT AddGeometryColumn('terrain_points', 'wkb_geometry', 3725, 'POINT', 3 );

वैकल्पिक रूप से, यदि मैं pgAdmin III में मौजूदा तालिकाओं को देखता हूं, तो ऐसा लगता है कि मैं इस तरह से एक ही तालिका बना सकता हूं:

CREATE TABLE terrain_points
(
  ogc_fid serial NOT NULL,
  wkb_geometry geometry,
  elevation double precision,
  CONSTRAINT terrain_points_pk PRIMARY KEY (ogc_fid),
  CONSTRAINT enforce_dims_wkb_geometry CHECK (st_ndims(wkb_geometry) = 3),
  CONSTRAINT enforce_geotype_wkb_geometry CHECK (geometrytype(wkb_geometry) = 'POINT'::text OR wkb_geometry IS NULL),
  CONSTRAINT enforce_srid_wkb_geometry CHECK (st_srid(wkb_geometry) = 3725)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE terrain_points OWNER TO postgres;

-- Index: terrain_points_geom_idx

-- DROP INDEX terrain_points_geom_idx;

CREATE INDEX terrain_points_geom_idx
  ON terrain_points
  USING gist
  (wkb_geometry);

क्या ये दो विधियाँ एक ही परिणाम उत्पन्न करती हैं? क्या संस्करण pgAdmin III के आधार पर अधिक क्रियात्मक है, और उन चीजों को कर रहा है जो AddGeometryColumnडिफ़ॉल्ट रूप से करेंगे?


मुझे आशा है कि आप रेखापुंज के हर एक पिक्सेल को पकड़ नहीं रहे हैं और इसे एक बिंदु के रूप में संग्रहीत कर रहे हैं :)
रागी यासर बुरहूम

नहीं बिलकुल नहीं। :) लेकिन मैं इस तालिका को भरने के लिए कुछ समोच्च linestrings पर ST_DumpPoints का उपयोग करने जा रहा हूं।
बेंजामिन

जवाबों:


9

नहीं, वे समान परिणाम नहीं दे रहे हैं।

दूसरी विधि के साथ आपको अभी भी GEOMETRY_COLUMNS तालिका में एक रिकॉर्ड जोड़ना होगा, और आपको इसे एक INSERT कथन के साथ करने की आवश्यकता होगी, या अन्य उत्तर में सुझाए गए अनुसार Populate_Geometry_Columns फ़ंक्शन का उपयोग करना होगा।

AddGeometryColumn आपके लिए ऐसा करने का ध्यान रखेगा (साथ में सूचकांक और बाधाओं को बनाने के लिए)।


2
भविष्य के संदर्भ के लिए, यह अब सच नहीं है: postgis.net/docs/AddGeometryColumn.html
Janosimas

7

दो तरीकों को एक ही परिणाम का उत्पादन करना चाहिए। AddGeometryColumnन केवल ज्यामिति फ़ील्ड बनाएगा, यह आवश्यक अनुक्रमित को भी मान्य और बनाएगा। जब तक आप इन सभी चीजों को मैन्युअल रूप से करते हैं, तब तक परिणाम समान होगा। यदि आपके पास एक मौजूदा ज्यामिति स्तंभ है, तो आप इसे मान्य करने और आवश्यक अनुक्रमित बनाने के लिए Populate_Geometry_Columnsफ़ंक्शन का उपयोग कर सकते हैं ।


इसका मतलब यह है कि दो तरीकों से एक ही परिणाम होगा?
बेंजामिनगोल्डर

यह वही करेगा, यदि आपने मौजूदा ज्योमेट्री_कैल्यूम का उपयोग किया है, तो ठीक से अनुक्रमित और बनाए गए। आप elsasoft.org/samples/postgre_postgis/…
Senthil

क्षमा करें @ मैं, मैं आपकी सजा को नहीं समझता। जब आप कहते हैं, तो आपका क्या मतलब है: "यदि आपने मौजूदा ज्यामिति_ कॉलम का उपयोग किया है, तो ठीक से अनुक्रमित और बनाए गए"? क्या यह एक ऐसा उदाहरण है जो उदाहरणों से गायब है?
बेंजामिनगोल्डर

@BenjaminGolder ने देखा कि AddGeometryColumn इस लिंक के साथ क्या कर रहा है: elsasoft.org/samples/postgre_postgis/… आपके मामले में, जब तक कि wkb_geometry geometry_columns टेबल में पहले से ही मौजूद है और आप मैन्युअल रूप से इंडेक्स बनाते हैं। तो, ठीक लग रहा है। लेकिन, सबसे आसान विकल्प नए क्षेत्रों के लिए AddGeometryColumn के साथ जाना है।
सेंथिल

मैंने इसे स्पष्ट करने के लिए आपके उत्तर को संपादित किया। धन्यवाद।
बेंजामिनगोल्डर

5

PostGIS 2.0+ में आप सामान्य डेटा परिभाषा भाषा का उपयोग करके सीधे ज्यामिति स्तंभ बना सकते हैं।

उदाहरण के लिए:

-- points in geographic wgs84 coordinates (epsg:4326)
create table mypoints (id serial, name varchar, geom geometry(Point, 4326));

-- lines in spherical mercator (epsg:3857)
create table mylines (id serial, name varchar, geom geometry(LineString, 3857));

-- polygons in Dutch national coordinate system (epsg:28992)
create table mypolygons (id serial, name varchar, geom geometry(Polygon, 28992));

-- multipolygons in British National Grid (epsg:27700)
create table 
  mymultipolygons(id serial, name varchar, geom geometry(Multipolygon, 27700));

-- generic geometry (no data type constraints)
create table mygeometries(id serial, name varchar, geom geometry);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.