AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

¡Nueva funcionalidad de WINDEV, WEBDEV y WINDEV Mobile 2024!
Ayuda / WLanguage / Administrar bases de datos / HFSQL / 
  • Ejemplos
  • Acceso a datos espaciales: uso de índices espaciales
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
Permite saber si dos geometrías se cruzan entre sí.
Se puede considerar que dos geometrías se cruzan si:
  • Los interiores de la geometría A y la geometría B tienen al menos un punto en común.
  • El interior de la geometría A no tiene todos sus puntos en el interior de la geometría B, y viceversa: la geometría A no debe contener la geometría B y la geometría B no debe contener la geometría A.
  • La intersección de los interiores debe tener una dimensión inferior a la dimensión máxima de las geometrías de entrada.
Ejemplo
o2DPolygon_1 is Polygon2D
Linestring2DAddPoint(o2DPolygon_1.Outline, -2.00, 1.00)
Linestring2DAddPoint(o2DPolygon_1.Outline, 2.00, 1.00)
Linestring2DAddPoint(o2DPolygon_1.Outline, 2.00, -1.00)
Linestring2DAddPoint(o2DPolygon_1.Outline, -2.00, -1.00)
// Add last point (same as first)
Linestring2DAddPoint(o2DPolygon_1.Outline, -2.00, 1.00)
// Corrects the new geometry
o2DPolygon_1 = GeometryCorrect(o2DPolygon_1)

oLinestring is Linestring2D
Linestring2DAddPoint(oLinestring, 0.00, 2.00)
Linestring2DAddPoint(oLinestring -2.00, -2.00)
// Corrects the new geometry
oLinestring = GeometryCorrect(oLinestring)

// The linestring crosses the first polygon
Trace(GeometryCross(oLinestring, o2DPolygon_1))
Sintaxis
<Result> = GeometryCross(<Geometry A> , <Geometry B>)
<Result>: Booleano
  • True si la geometría A cruza la geometría B,
  • False en caso contrario.
Si se produce un error, la variable ErrorOccurred se establece en True. Para obtener más información sobre el error, utilice la función ErrorInfo con la constante errMessage.
<Geometry A>: Variable que contiene datos espaciales
Variable que corresponde a la primera geometría. Esta geometría puede corresponder a uno de los siguientes tipos de variables:
<Geometry B>: Variable que contiene datos espaciales
Variable que corresponde a la segunda geometría. Esta geometría puede corresponder a uno de los siguientes tipos de variables:
Observaciones

Ejemplos

Ejemplo 1: Cruce de dos polígonos:
Dos polígonos (con una dimensión de 2) cuyos interiores tienen puntos en común no se cruzan. En este caso, su intersección es también un polígono, cuya dimensión es igual a la dimensión de las dos geometrías (2). Sin embargo, estos polígonos se superponen y se intersecan.
En ese caso:
  • la función GeometryCross devuelve False.
  • se produce un error no fatal si se pasan dos polígonos a la función GeometryCross.
Ejemplo 2: Polilínea y polígono:
Una polilínea que pasa a través de un polígono y tiene puntos fuera del polígono, cruza el polígono. La intersección entre las dos geometrías es una polilínea, cuya dimensión es menor que la del polígono.

Acceso a datos espaciales: uso de índices espaciales

Puede recorrer un archivo de datos aplicando un filtro sobre los datos espaciales. Por ejemplo, el filtro puede basarse en el resultado de la función GeometryCross.
Le recomendamos utilizar la siguiente sintaxis para aplicar un filtro a los datos espaciales:
FOR EACH File WHERE WLanguage_function(File.Spatial_item, Spatial_variable)

donde:
  • WLanguage_function corresponde a la función GeometryCross.
  • Spatial_item corresponde a un campo espacial en el archivo de datos. Este campo debe:
    • ser de tipo "Datos geográficos" o "Datos geométricos".
    • definirse como "clave espacial".
  • Spatial_variable corresponde a una variable espacial dada, utilizada para la comparación con el campo espacial. Esta variable puede ser de tipo PolygonGeo, Polygon2D, etc.
Observación: La sintaxis "FOR EACH File" está disponible pero no se recomienda, dado que no utiliza índices espaciales y, por lo tanto, no está optimizada. En este caso, se recorre todo el archivo de datos: no se utilizan índices espaciales.
FOR EACH File
IF WLanguage_function(File.Spatial_item, Spatial_variable) = True THEN
   ...
   END
END
Ejemplo:
// Define a triangle delimiting a geographic area
// Store this triangle in a variable of type PolygonGeo 
polyGeo is PolygonGeo
polyGeo.Outline.AddPoint(0n48.8187479172765, 0n1.9550104465229536)
polyGeo.Outline.AddPoint(0n48.685649220185574, 0n2.023674998054354)
polyGeo.Outline.AddPoint(0n48.82612543243871, 0n2.2106580854197566)
polyGeo = GeometryCorrect(polyGeo)

// Search for municipalities with territory within the specified triangle
NumberOfRecords is int
FOR EACH MunicipalityData where GeometryCross(MunicipalityData.geometry, polyGeo) 
	// Name of municipality in a trace window
	Trace(MunicipalityData.MunicipalityName)
END
Clasificación Lógica de negocio / UI: Lógica de negocio
Componente: wd290hf.dll
Versión mínima requerida
  • Versión 2024
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 27/05/2024

Señalar un error o enviar una sugerencia | Ayuda local