Hier ist eine kurze Zusammenfassung, was ich versuche: Ich habe 3 Tabellen in Postgres, 'a' und 'b', jede hat eine Polygonspalte und 'c' hat eine Punktspalte. Ich versuche hier, die Geometrieschnittpunkte zwischen 'a', 'b' und 'c' zu ermitteln und solche Geometrien auf einer OpenLayers-Vektorebene anzuzeigen.
Ich kann in OpenLayers bereits jede Art von Geometrie aus einem String anzeigen, habe jedoch Probleme mit der Funktion ST_Intersection in PostGIS.
SELECT ST_Intersection(a.geom, b.geom) as inter from a, b;
Dabei sind a.geom und b.geom die Geometriespalten, und es wird folgende Fehlermeldung angezeigt:
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!
Außerdem habe ich versucht, die resultierende Geometrie mit ST_AsText wie folgt als Text auszudrücken:
SELECT ST_AsText(ST_Intersection(a.geom, b.geom)) as inter from a, b;
aber es schickt mir diese Fehlermeldung:
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Ich weiß nicht, was ich falsch mache. Ich möchte nur, dass das WKT der Polygone es auf OpenLayers anzeigt. So zeige ich eine Geometrie aus einem WKT an:
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);
UPDATE: Ich habe folgendes ausprobiert:
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';
aber ich bekomme die nächste fehlermeldung:
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.
Ich habe den Wert isvalid hinzugefügt, um zu überprüfen, ob nur gültige Polygone ausgewertet werden. Der Fehler befindet sich jedoch in der ST_Intersection (a, b). Sowohl a, b als auch c haben dieselbe SRID. Ich bin also wirklich verwirrt Ich frage zu viel, aber ich bin ziemlich neu in PostGIS, also hoffe ich, dass ich Sie nicht viel störe. Vielen Dank.
SELECT PostGIS_Full_Version();
zurück?