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

22

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

Soy consciente de la función ST_Centroid . Sin embargo, el centroide no siempre está dentro de un polígono, vea a continuación:

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

    
pregunta fmark 04.08.2010 - 11:03

2 respuestas

17

Si está buscando una función PostGIS que le dirá un punto que está dentro de su polígono, la función ST_PointOnSurface 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)
    
respondido por el Ian Dodd 04.08.2010 - 11:56
6

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

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;
    
respondido por el Skinkie 16.08.2012 - 14:33

Lea otras preguntas en las etiquetas