İşte yapmaya çalıştığım şeylerle ilgili kısa bir özet: Postgres'te 3 tablo var, 'a' ve 'b', her birinin bir Çokgen sütunu var ve 'c' bir Nokta sütununa sahip. Burada yapmaya çalıştığım şey 'a', 'b' ve 'c' arasındaki geometri kesişimlerini elde etmek ve bu geometrileri bir OpenLayers vektör katmanında görüntülemek.
Zaten OpenLayers bir String herhangi bir geometri görüntülemek nasıl biliyorum, ama PostGIS 'ST_Intersection işlevi ile sorun yaşıyorum, bunu yapıyorum:
SELECT ST_Intersection(a.geom, b.geom) as inter from a, b;
Burada a.geom ve b.geom her ikisi de geometri sütunlarıdır ve bu hata iletisini alıyorum:
NOTICE: TopologyException: found non-noded intersection between 515172 2.14408e+06, 497067 2.13373e+06 and 501321 2.13546e+06, 471202 2.14843e+06 500621 2.13576e+06
ERROR: GEOS Intersection() threw an error!
Ayrıca böyle geometri ST_AsText kullanarak metin olarak ortaya çıkan geometri ifade etmeye çalıştım:
SELECT ST_AsText(ST_Intersection(a.geom, b.geom)) as inter from a, b;
ama bana şu hata mesajını gönderdi:
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Ne yaptığımı bilmiyorum, çokgenlerin WKT'sini OpenLayers'da görüntülemesini istiyorum, bir WKT'den bir geometriyi nasıl görüntüleyeceğim:
var in_options = {
'internalProjection': new OpenLayers.Projection("EPSG:4326"),
'externalProjection': new OpenLayers.Projection("EPSG:4326")
};
var fea= new OpenLayers.Format.WKT(in_options).read(data); //data is the string with the WKT
vectorLayer.addFeatures([fea]); //this piece of code works great
map.zoomToExtent(bounds);
GÜNCELLEME: Sonrakini denedim:
SELECT ST_Intersection(a.geom, b.geom) as intersect_ab FROM a INNER JOIN b ON
ST_Intersection(a,b) WHERE ST_Overlaps(a.geom, b.geom)
AND ST_isvalid(a.geom)='t' AND ST_isvalid(b.geom)='t';
ama bir sonraki hata mesajını alıyorum:
ERROR: Function st_intersection(a,b) does not exist.
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Yalnızca geçerli çokgenlerin değerlendirildiğini doğrulamak için geçersiz ekledim, ancak hatanın ST_Intersection'da (a, b) olduğunu söylüyor, hem a, b hem de c aynı SRID'ye sahip olduğunu söylüyor, bu yüzden gerçekten kafam karıştı, üzgünüm çok soruyorum, ama PostGIS ile oldukça yeniyim, umarım seni fazla rahatsız etmiyorum. Teşekkürler.
SELECT PostGIS_Full_Version();
dönüyor?