ONLINE HELP
 WINDEVWEBDEV AND WINDEV MOBILE

New WINDEV, WEBDEV and WINDEV Mobile 2024 feature!
Help / WLanguage / Managing databases / HFSQL / 
  • Parcours des données spatiales : utilisation des index spatiaux
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReports and QueriesUser code (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Browser code
WINDEV Mobile
AndroidAndroid Widget iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Others
Stored procedures
GeometryWithin (Function)
In french: FormeEstContenu
Permet de savoir si la géométrie A est complètement contenue dans la géométrie B (c'est-à-dire que la géométrie B contient complètement la géométrie A).
Dans ce cas :
  • Il n'existe pas de point de la géométrie A dans l'extérieur de la géométrie B : tout point de la géométrie A est soit dans l'intérieur de la géométrie B, soit dans son contour.
  • Il existe au moins un point de l'intérieur de la géométrie A dans l'intérieur de la géométrie B.
Example
oPolygone2D_1 is Polygon2D
Linestring2DAddPoint(oPolygone2D_1.Outline, -4.00, -4.00)
Linestring2DAddPoint(oPolygone2D_1.Outline, -4.00, 2.00)
Linestring2DAddPoint(oPolygone2D_1.Outline, 5.00, 2.00)
Linestring2DAddPoint(oPolygone2D_1.Outline, 5.00, -4.00)
// Ajout du dernier point (identique au premier)
Linestring2DAddPoint(oPolygone2D_1.Outline, -4.00, -4.00)

oPolygone2D_2 is Polygon2D
Linestring2DAddPoint(oPolygone2D_2.Outline, -1.00, -2.00)
Linestring2DAddPoint(oPolygone2D_2.Outline, 2.00, 0.00)
Linestring2DAddPoint(oPolygone2D_2.Outline, 2.00, -2.00)
Linestring2DAddPoint(oPolygone2D_2.Outline, -1.00, -2.00) // Fermeture

let p2_dans_p1 = GeometryContain(oPolygone2D_1, oPolygone2D_2) // Renvoie "vrai"
GeometryWithin(oPolygone2D_2, oPolygone2D_1) // Renvoie "vrai"
Syntax
<Résultat> = GéométrieEstContenu(<Géométrie A> , <Géométrie B>)
<Résultat>: Booléen
  • Vrai si la géométrie A est contenue dans la géométrie B,
  • Faux dans le cas contraire.
En cas d'erreur, la variable ErreurDétectée est à Vrai. Pour connaître le libellé de l'erreur, utilisez la fonction ErreurInfo avec la constante errMessage.
<Géométrie A>: Variable correspondant à des données spatiales
Nom de la variable correspondant à la première géométrie manipulée. Cette géométrie peut correspondre à un des types de variables suivants :
<Géométrie B>: Variable correspondant à des données spatiales
Nom de la variable correspondant à la seconde géométrie manipulée. Cette géométrie peut correspondre à un des types de variables suivants :
Remarks
La fonction GeometryWithin est similaire à la fonction GéométrieEstCouvert. Cependant, avec la fonction GéométrieEstCouvert, il n'est pas nécessaire d'avoir un point de l'intérieur de la géométrie A dans l'intérieur de la géométrie B. Ainsi, un polygone couvre son contour, mais il ne le contient pas.

Parcours des données spatiales : utilisation des index spatiaux

Il est possible d'effectuer un parcours sur un fichier de données avec un filtre concernant des données spatiales. Par exemple, le filtre utilisé peut être basé sur le résultat de la fonction GeometryWithin.
Pour optimiser ce filtre sur des données spatiales, il est recommandé d'utiliser les index spatiaux via la syntaxe suivante :
POUR TOUT Fichier AVEC Fonction_WLangage(Fichier.RubriqueSpatiale, variable_spatiale)

où :
  • Fonction_WLangage correspond à la fonction GeometryWithin.
  • Rubrique_spatiale correspond à une rubrique spatiale du fichier de données. Cette rubrique doit :
    • être de type "Données géographiques" ou de type "Données géométriques".
    • être définie comme une "Clé spatiale".
  • Variable_spatiale correspond à une variable spatiale donnée, utilisée pour la comparaison avec la rubrique spatiale. Cette variable est par exemple, une variable de type PolygoneGéo, Polygone2D, etc.
Remarque : Bien que disponible, la syntaxe "POUR TOUT Fichier" n'est pas recommandée car cette syntaxe n'utilisant pas les index spatiaux, ses performances ne sont pas optimisées. Effet, dans ce cas, tout le fichier de données est parcouru : les index spatiaux ne sont pas utilisés.
POUR TOUT Fichier
SI Fonction_WLangage(Fichier.Rubrique_spatiale, Variable_spatiale) = Vrai ALORS
   ...
   FIN
FIN
Exemple :
// Définition d'un triangle délimitant une zone géographique
// Mémorisation de ce triangle dans une variable de type PolygoneGéo 
polyGeo is PolygonGeo
polyGeo.Contour.AjoutePoint(0n48.8187479172765, 0n1.9550104465229536)
polyGeo.Contour.AjoutePoint(0n48.685649220185574, 0n2.023674998054354)
polyGeo.Contour.AjoutePoint(0n48.82612543243871, 0n2.2106580854197566)
polyGeo = GeometryCorrect(polyGeo)

// Recherche des communes qui ont du territoire dans le triangle ciblé
nbEnregs is int

FOR EACH DatasCommunes where GeometryWithin(DatasCommunes.geometry, polyGeo) 
	//Nom de la commune dans une trace
	Trace(DatasCommunes.NomCommune)
END
Business / UI classification: Business Logic
Minimum version required
  • Version 2024
This page is also available for…
Comments
Click [Add] to post a comment

Last update: 03/27/2024

Send a report | Local help