24 votos

¿Cómo puedo encontrar un punto dentro de un polígono en PostGIS?

¿Cómo puedo encontrar un punto que esté garantizado que se encuentra dentro de un polígono dado en PostGIS?

Soy consciente de la ST_Centroid función. Sin embargo, el centroide no siempre se encuentra dentro de un polígono, véase más abajo:

a centroid lying outside a polygon

Además, me gustaría evitar utilizar un punto que esté en el límite del polígono, sino que quiero uno que esté dentro del límite (y no dentro de un agujero en polígonos con forma de donut).

17voto

therefromhere Puntos 652

Si estás buscando una función PostGIS que te diga un punto que está dentro de tu polígono entonces la función ST_PuntoEnSuperficie puede darte lo que necesitas.

SELECT 
   ST_AsText(ST_PointOnSurface('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'::geometry));

   st_astext
----------------
 POINT(2.5 2.5)
(1 row)

6voto

Olly Hodgson Puntos 253

Encontré esta función en la lista de correo de PostGIS. Supongo que es lo que necesita:

CREATE OR REPLACE FUNCTION point_inside_geometry(param_geom geometry)
  RETURNS geometry AS
$$
  DECLARE
     var_cent geometry := ST_Centroid(param_geom);
     var_result geometry := var_cent;
  BEGIN
  -- If the centroid is outside the geometry then 
  -- calculate a box around centroid that is guaranteed to intersect the geometry
  -- take the intersection of that and find point on surface of intersection
 IF NOT ST_Intersects(param_geom, var_cent) THEN
  var_result := ST_PointOnSurface(ST_Intersection(param_geom, ST_Expand(var_cent, ST_Distance(var_cent,param_geom)*2) ));
 END IF;
 RETURN var_result;
  END;
  $$
  LANGUAGE plpgsql IMMUTABLE STRICT
  COST 100;

i-Ciencias.com

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.

Powered by:

X