Hallo zusammen,
ich möchte ein 31x31 (961) grosses Punktgitter in einem rechteckigen Polygon (90° Winkel, 4 Ecken, genau 4 Knoten, i.e eine bounding box) erzeugen.
Die Abmessungen der Polygone sind verschieden, es muss also jweils eine x und y Auflösung für das Punktgitter erzeugt werden (Das Punktgitter soll wie gesagt immer 31x31 Punkte gross sein).
ich habe das bis jetzt mit generate_series implementiert, allerdings kann generate_series nur mit integern umgehen:
CREATE OR REPLACE FUNCTION makegrid(geometry, integer)
RETURNS geometry AS
$BODY$SELECT ST_Collect(st_setsrid(ST_POINT(x,y),$2)) FROM
generate_series((st_xmin($1))::int, (st_xmax($1))::int,(((abs(st_xmax($1)-st_xmin($1)))/32)::int)) as x
,generate_series((st_ymin($1))::int, (st_ymax($1))::int,(((abs(st_ymax($1)-st_ymin($1)))/32)::int)) as y
where st_intersects($1,st_setsrid(ST_POINT(x,y),$2))$BODY$
OWNER TO postgres;
Nun möchte ich das Ganze mit höherer Genauigkeit angehen, d…h. ich kann generate_series nicht mehr verwenden.
Die x,y auflösung habe ich mir folgendermassen überlegt:
xresolution := (abs(st_xmax($1)-st_xmin($1)))/32;
yresolution := (abs(st_ymax($1)-st_ymin($1)))/32;
Danach müssen die Punkte mit evtl einem geschachtelten loop o.ä (darin bin ich eher grotte) erzeugt werden:
–creating points:
{
for(x=st_xmin(geometry); x < st_xmax(geometry); x+=xresolution) {
for(y=st_ymin(geometry); y<st_ymax(geometry); y+=yresolution) {
if(st_contains(geometry, (st_point(x,y),epsg )=true) st_point(x,y),epsg ) else end;
–not sure about he else end here, i dont want to loose any points…
}
}
}
Kann mir jemand auf die Srpünge helfen? DANKE!