¿Cómo crear, dentro de un polígono, una cuadrícula regular de puntos espaciados x,y en PostGIS?
Como el ejemplo:
¿Cómo crear, dentro de un polígono, una cuadrícula regular de puntos espaciados x,y en PostGIS?
Como el ejemplo:
Aquí está mi versión de lujo que le permite establecer el relleno de los bordes, y los centros de las parcelas en la geometría (o la extensión de la geometría si su multi). Yo paso geojson, pero debería ser trivial para cambiar eso a una geometría.
CREATE OR REPLACE FUNCTION gridded_points_in_bounds(_geo_json jsonb, _m_spacing real, _m_buffer real)
RETURNS table (
lon float,
lat float
) AS $$
DECLARE
_meters_boundary geometry;
_buffered_extent geometry;
_x_range float;
_y_range float;
_x_steps integer;
_y_steps integer;
_x_padding float;
_y_padding float;
BEGIN
SELECT ST_Transform(ST_SetSRID(ST_GeomFromGeoJSON(_geo_json), 4326), 3857) INTO _meters_boundary;
SELECT ST_Buffer(_meters_boundary, -1 * _m_buffer) INTO _buffered_extent;
SELECT ST_XMax(_buffered_extent) - ST_XMin(_buffered_extent) INTO _x_range;
SELECT ST_YMax(_buffered_extent) - ST_YMin(_buffered_extent) INTO _y_range;
SELECT floor(_x_range / _m_spacing) INTO _x_steps;
SELECT floor(_y_range / _m_spacing) INTO _y_steps;
SELECT (_x_range - _x_steps * _m_spacing) / 2 INTO _x_padding;
SELECT (_y_range - _y_steps * _m_spacing) / 2 INTO _y_padding;
RETURN QUERY
SELECT ST_X(ST_Centroid(geom)),
ST_Y(ST_Centroid(geom))
FROM (
SELECT ST_Transform(
ST_SetSRID(
ST_POINT(x::float + _x_padding, y::float + _y_padding), ST_SRID(_buffered_extent)
),
4326
) as geom
FROM
generate_series(floor(st_xmin(_buffered_extent))::int, ceiling(st_xmax(_buffered_extent))::int, _m_spacing::int) AS x,
generate_series(floor(st_ymin(_buffered_extent))::int, ceiling(st_ymax(_buffered_extent))::int, _m_spacing::int) AS y
WHERE ST_Intersects(
_buffered_extent,
ST_SetSRID(ST_POINT(x::float + _x_padding, y::float + _y_padding), ST_SRID(_buffered_extent))
)
) a;
END
$$ LANGUAGE PLPGSQL;
I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.