PostGIS'e nokta ekleme?


49

PostGIS somunumda bir tane tablo oluşturdum, nokta ekleyemiyorum.

Sorgumda yanlış olan ne?

CREATE TABLE app ( 
  p_id INTEGER PRIMARY KEY

);

SELECT AddGeometryColumn('app','the_geom','4326','POINT',2);

INSERT INTO app(p_id, the_geom) VALUES(2, POINT(-71.060316, 48.432044));

Son sorgudan sonra bazı hatalar gösterir ..

ERROR:  column "the_geom" is of type geometry but expression is of type point
LINE 1: ...SERT INTO app(p_id, the_geom) VALUES(2, POINT(-71....
                                                             ^
HINT:  You will need to rewrite or cast the expression.


********** Error **********

ERROR: column "the_geom" is of type geometry but expression is of type point
SQL state: 42804
Hint: You will need to rewrite or cast the expression.
Character: 53

PostGIS versiyonumu zaten kontrol ediyorum.

SELECT PostGIS_full_version();

Aşağıdaki çıktıyı aldım ..

"POSTGIS="1.5.3" GEOS="3.3.1-CAPI-1.7.1" PROJ="Rel. 4.7.1, 23 September 2009" LIBXML="2.7.3" USE_STATS"

Yanıtlar:


84

Sen karıştırıyorsun SQL ve WKT (tanınmış metin ). WKT, şekilleri tanımlayan bir geometri dili gibidir, ancak veritabanlarını sorgulamak ve işlemek için kullanılan bir dil olan SQL değildir. WKT ile bir SQL sorgusunda çalışırken, metin olmalı ve SQL ile karıştırılmamalıdır.

WKT'yi düzgün biçimde biçimlendirirseniz ("," işaretini kaldırın) ve bir SRID belirlerseniz, sorgunuz çalışır. Bu yöntem için ST_GeomFromText(wkt, srid)iyi çalışıyor:

INSERT INTO app(p_id, the_geom)
VALUES(2, ST_GeomFromText('POINT(-71.060316 48.432044)', 4326));

Sayısal boylam / enlem değerine sahip sütunlarınız varsa, doğrudan bir POINT geometrisi yapabilirsiniz:

ST_SetSRID(ST_MakePoint(long, lat), 4326);

Kılavuzdaki diğer geometri yapıcılarına bakın .


@ Vik86'nın isteği için, sayısal sütunlardan ve aşağıdakileri kullanarak the_geomtabloda güncellenebilir :applonglat

UPDATE app SET
  the_geom = ST_SetSRID(ST_MakePoint(long, lat), 4326);

"Sayısal boylam enlemine sahip sütunlarınız varsa, doğrudan bir POINT geometrisi oluşturabilirsiniz: ST_SetSRID (ST_MakePoint (long, lat), 4326);" Şu anda enlem ve boyuna sahip bir masam var. PostGIS api'sini kullanmak için ona nokta biçiminde ihtiyacım var. Dolayısıyla bu özelliği kullanarak nokta sütununu nasıl güncelleyeceğimi bilmek istedim. Teşekkürler Vikram
Vik86

@ Vik86 güncellenmiş cevabı gör
Mike T

1

Eğer siz bir Java istemcisi ile çalışıyoruz sonra benim tavsiyem veri aktarmak için ikili türlerini kullanmaktır. Bu değişikliği ST_AsEWKT yöntemine göre yaptığımda bellekten% 10'luk bir performans artışı kaydettim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.