Ось короткий підсумок того, що я намагаюся зробити: у мене є 3 таблиці в Postgres, 'a' і 'b', у кожній є стовпець Polygon, а 'c' - стовпчик Point. Що я намагаюся тут зробити, це отримати перетини геометрії між 'a', 'b' і 'c' і відобразити такі геометрії на векторному шарі OpenLayers.
Я вже знаю, як відображати будь-яку геометрію з String у OpenLayers, але у мене виникають проблеми з функцією ST_Intersection PostGIS, я роблю це:
SELECT ST_Intersection(a.geom, b.geom) as inter from a, b;
де a.geom і b.geom обидва стовпчики геометрії, і я отримую це повідомлення про помилку:
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!
Також я спробував виразити отриману геометрію як текст, використовуючи ST_AsText так:
SELECT ST_AsText(ST_Intersection(a.geom, b.geom)) as inter from a, b;
але надіслати мені це повідомлення про помилку:
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Я не знаю, що я роблю неправильно, я просто хочу отримати WKT полігонів для відображення його на OpenLayers, ось як я відображую геометрію від WKT:
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);
ОНОВЛЕННЯ: Я спробував наступне:
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';
але я отримую наступне повідомлення про помилку:
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.
Я додав неправильне значення для перевірки оцінювання лише дійсних багатокутників, але це говорить про помилку в ST_Intersection (a, b), і a, b і c мають однаковий SRID, тому я справді плутаюся, вибачте, якщо я запитаю занадто багато, але я зовсім новачок із PostGIS, тому сподіваюся, що я вас не турбую багато. Спасибі.
SELECT PostGIS_Full_Version();
повертає?