[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