[OSM-Devserver] Entwicklungsstand Datenbank und neues Projekt
Peter Körner
osm-lists at mazdermind.de
Di Mai 18 23:05:19 CEST 2010
m 18.05.2010 22:47, schrieb Tobias Wendorff:
> Was natürlich auch noch geht ... wieder ein Trigger und ein Eintrag
> im hstore bzw. einer zusätzlichen Spalte "is_valid" mit Index.
Ich schlage dies hier vor:
CREATE TABLE planet_polygon_centeroid_test ( LIKE planet_polygon
INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING INDEXES );
INSERT INTO planet_polygon_centeroid_test
SELECT * FROM planet_polygon LIMIT 10000;
ALTER TABLE planet_polygon_centeroid_test ADD centeroid GEOMETRY;
CREATE FUNCTION calculate_centeroid () RETURNS TRIGGER AS '
BEGIN
IF(
(NOT ST_Equal(OLD.way, NEW.way)) AND
ST_IsValid(NEW.way)
) THEN
NEW.centeroid = ST_PointOnSurface(NEW.way);
ELSE
NEW.centeroid = NULL;
END IF;
RETURN NEW;
END;
' LANGUAGE plpgsql;
CREATE TRIGGER planet_polygon_centeroid_test_calculate_centeroid
AFTER INSERT OR UPDATE ON planet_polygon_centeroid_test
FOR EACH ROW EXECUTE PROCEDURE calculate_centeroid ();
UPDATE planet_polygon_centeroid_test
SET centeroid = ST_PointOnSurface(way) WHERE ST_IsValid(way);
habe es wie beschrieben auf einer test-tabelle mal probiert. dort konnte
ich den trigger nicht richtig ausprobieren weil ich die geometrie nicht
so gut selbst ändern kann. Mal sehen ob ich es mich morgen auf der
planet-tabelle traue ;)
Lg, Peter