Her iki SRID 4326 ile tanımlanan iki geometri sütun ile PostGIS tablo var. Aşağıdaki INSERT
deyimi kullanarak (nerede lng
ve lat
değerleri programlı olarak geçirilir) tabloya sorunsuz ekleyebilirsiniz :
INSERT INTO pad_meta (
uuid, created, updated, name, origin, radius, area, expiry, creator
) VALUES (
$1, now(), now(), $2, ST_GeomFromText('POINT(lng, lat)', 4326), $3,
ST_Buffer(ST_GeomFromText('POINT(lng, lat)', 4326), $4), $5, $6
)
Ama aldığım noktanın değerine bağlı olarak ST_Intersects kullanarak bir kavşak için sorgu yaptığımda ERROR: Operation on mixed SRID geometries
.
Örneğin, bu sorgu çalışır:
SELECT * FROM pad_meta where ST_Intersects(
'POINT(-122.334172173172 46.602634395263560)'::geometry, area::geometry
) ORDER BY created DESC;
Ve bu hatalar:
SELECT * FROM pad_meta where ST_Intersects(
'POINT(-122.334172173172 47.602634395263560)'::geometry, area::geometry
) ORDER BY created DESC;
Unutmayın, bunlar boylam değeri dışında özdeş sorgulardır. Farklı değerlerle denemeler yaptım, ancak çalışan ve çalışmayan sorgular arasında net bir geçiş noktası belirlemedim.
Sanırım temelde bir şeyi yanlış anlıyorum. Şu an için, çözülmüş / düzeltilmiş / sorguyu kullanmak için yeniden biçimlendirerek ST_GeomFromText
ve açıkça SRID belirterek sorun etrafında çalıştım :
SELECT * FROM pad_meta where ST_Intersects(
ST_GeomFromText('POINT(-122.334172173172 47.602634395263560)', 4326), area
) ORDER BY created DESC;
Ama dürüstçe, farkın ne olduğunu gerçekten anlamıyorum ya da bu gerçekten "çözüm" ise.
Benim sorum: Neden sadece belirli değerler için bir hata alıyorum ve bu sorguyu biçimlendirmek için uygun yol nedir?
İşte referans için benim tablo tanımı:
CREATE TABLE IF NOT EXISTS pad_meta (
uuid CHAR(32),
created TIMESTAMP,
updated TIMESTAMP,
name VARCHAR(128),
origin GEOMETRY(Point, 4326),
radius INTEGER,
area GEOMETRY(Polygon, 4326),
expiry TIMESTAMP,
creator CHAR(32),
PRIMARY KEY (uuid)
);
Ayrıca geometry_columns SRID sadece bir tür olduğunu doğruladı:
SELECT f_table_name, f_geometry_column, srid FROM geometry_columns;
f_table_name | f_geometry_column | srid
--------------+-------------------+------
pad_meta | origin | 4326
pad_meta | area | 4326
Yardım / tavsiye takdir. Teşekkür ederim! (Not: Bu soruyu da gördüm , ancak zaten tabloya eklerken geometri SRID'lerimi açıkça tanımladığım için, olan şey bu değil gibi görünüyor.)
SRID=4326
ifadesinin geri kalanı için SRID'yi ayarlamanın doğru yolunu (yukarıda yaptığınız gibi) önek olarak kullanmak? (ST_GeomFromText
sadece SRID belirtmek için başka bilmiyordum çünkü kullanmak yerine ...?) sorgular için varsayılan bir SRID ayarlamak için bir yolu var mı? her seferinde açıkça ayarlamak için oldukça ayrıntılı görünüyor. Tekrar teşekkürler!