MaxCompute prend nativement en charge le type de données GEOGRAPHY, qui représente des objets géographiques tels que des points, des lignes et des polygones à la surface de la Terre. Il permet de stocker, de construire et de manipuler efficacement les données géospatiales. Le type de données GEOGRAPHY dans MaxCompute s'appuie sur la bibliothèque S2 Geometry.
Types de géométrie pris en charge
MaxCompute prend en charge les types de géométrie suivants :
Type de géométrie | Description |
Point | Position à la surface de la Terre définie par des coordonnées de longitude et de latitude (longitude en premier, puis latitude). Exemple : |
LineString | Courbe unidimensionnelle composée d'une série de points reliés par des lignes géodésiques. Exemple : |
Polygon | Surface bidimensionnelle décrite par une ou plusieurs boucles fermées. La première boucle définit la limite extérieure (enveloppe) et les suivantes définissent les trous du polygone (zones exclues). Exemples : |
MultiPoint | Collection de points. |
MultiLineString | Collection de LineStrings. |
MultiPolygon | Collection de Polygons. |
GeometryCollection | Collection d'objets de différents types de géométrie. |
Les coordonnées sont spécifiées sous la forme (longitude, latitude) en degrés, conformément au système de coordonnées WGS84. La longitude doit se situer dans l'intervalle [-180, 180] et la latitude dans [-90, 90].
Le type de données GEOGRAPHY de MaxCompute utilise la bibliothèque S2 Geometry. Contrairement aux bibliothèques SIG (Systèmes d'Information Géographique) traditionnelles, S2 Geometry n'utilise pas de projections cartographiques planes comme la projection de Mercator. Elle considère la Terre comme une sphère parfaite et convertit d'abord les coordonnées de latitude et de longitude en coordonnées cartésiennes tridimensionnelles (x, y, z) sur cette sphère. Cette approche évite l'augmentation des erreurs de calcul provoquée par les projections planes, en particulier près des pôles.
La bibliothèque S2 Geometry utilise le type DOUBLE pour décrire les coordonnées des objets géographiques. Lors de la conversion des données d'entrée en objets S2, une légère perte de précision peut survenir, entraînant un très faible écart entre les données d'entrée et de sortie.
Limitations
Restrictions liées à la version du client : Pour interroger des données GEOGRAPHY, vous devez utiliser odpscmd version 0.56.0 ou ultérieure. Le paramètre
use_instance_tunnel=truen'est pas pris en charge.Restrictions liées au type de données : Le type de données GEOGRAPHY n'est pas pris en charge dans le système de types de données 1,0. Vous devez activer le système de types de données 2,0 au niveau du projet ou de la session en définissant
odps.sql.type.system.odps2=true;.Le type de données GEOGRAPHY ne prend pas en charge les opérations de comparaison. Par conséquent, vous ne pouvez pas l'utiliser dans les clauses SELECT DISTINCT, GROUP BY ou ORDER BY, ni comme condition pour une jointure par égalité dans une clause JOIN.
Le type de données GEOGRAPHY ne prend pas en charge les dimensions Z (élévation) ou M (mesure) pour les objets géographiques.
-
Le type de données GEOGRAPHY ne permet pas de construire un objet géographique plus grand qu'un hémisphère. Par exemple, l'instruction SQL suivante tente de créer un objet géographique couvrant presque l'intégralité du globe, de 179 degrés de longitude ouest à 179 degrés de longitude est. Toutefois, le résultat réel est un objet plus petit qu'un hémisphère dont la longitude s'étend vers l'est à partir de 179°E, traverse le méridien 180° et se termine à 179°O.
SELECT ST_GEOGFROMTEXT( 'POLYGON ((-179 -89, 179 -89, 179 89, -179 89, -179 -89))' ); -- Result: +------+ | _c0 | +------+ | POLYGON ((-179 89, 179 89, 179 -89, -179 -89, -179 89)) | +------+
Créer et utiliser des données GEOGRAPHY
Utilisez le type de données GEOGRAPHY comme type de champ lors de la création d'une table :
SET odps.sql.type.system.odps2=true;
CREATE TABLE spatial_points (
id BIGINT,
name STRING,
location GEOGRAPHY,
region GEOGRAPHY
);
Utilisez des fonctions intégrées, telles que ST_GEOGPOINT, ST_GEOGFROMTEXT, ST_GEOGFROMWKB, ST_MAKELINE et ST_MAKEPOLYGON, pour construire des objets géographiques. Pour plus d'informations, consultez la rubrique Présentation des fonctions de géographie.
-- Insert data: Construct GEOGRAPHY objects using geography functions.
INSERT INTO spatial_points VALUES
(1, 'Beijing Center', ST_GEOGPOINT(116.4074, 39.9042),
ST_GEOGFROMTEXT('POLYGON((116.3 39.8, 116.5 39.8, 116.5 40.0, 116.3 40.0, 116.3 39.8))')),
(2, 'The Bund', ST_GEOGPOINT(121.4894, 31.2403),
ST_MAKEPOLYGON(ST_MAKELINE(ARRAY(
ST_GEOGPOINT(121.4, 31.2),
ST_GEOGPOINT(121.5, 31.2),
ST_GEOGPOINT(121.5, 31.3),
ST_GEOGPOINT(121.4, 31.3),
ST_GEOGPOINT(121.4, 31.2)
))));
-- Query the inserted data.
SELECT * FROM spatial_points;
-- Result:
+------------+--------------+--------------------------+--------+
| id | name | location | region |
+------------+--------------+--------------------------+--------+
| 1 | Beijing Center | POINT (116.4074 39.9042) | POLYGON ((116.3 39.8, 116.5 39.8, 116.5 40, 116.3 40, 116.3 39.8)) |
| 2 | The Bund | POINT (121.4894 31.2403) | POLYGON ((121.4 31.2, 121.5 31.2, 121.5 31.3, 121.4 31.3, 121.4 31.2)) |
+------------+--------------+--------------------------+--------+
Fonctions de géographie
MaxCompute propose une série de fonctions de géographie préfixées par ST_ pour construire, convertir et analyser les données GEOGRAPHY. Ces fonctions permettent de créer des objets géographiques tels que des points, des lignes et des polygones à partir de coordonnées de longitude et de latitude ou de texte WKT/WKB. Elles permettent également d'extraire des propriétés comme les coordonnées et les rectangles englobants, de déterminer des relations spatiales telles que l'inclusion, l'intersection et la couverture, et de calculer la distance entre des objets géographiques.
Pour plus d'informations, consultez la rubrique Présentation des fonctions de géographie.
Les fonctions de géographie suivantes sont prises en charge :
Catégorie | Fonction | Description |
Construction et analyse syntaxique | Construit un objet géographique ponctuel à partir de la longitude et de la latitude spécifiées. | |
Construit un objet géographique linéaire à partir des extrémités spécifiées. | ||
Construit un objet géographique polygonal à partir d'une limite extérieure (enveloppe) spécifiée et de zéro ou plusieurs trous. | ||
Convertit une chaîne au format WKT en un objet GEOGRAPHY. | ||
Convertit une valeur BINARY au format WKB en un objet GEOGRAPHY. | ||
Mise en forme | Convertit une valeur GEOGRAPHY en une valeur BINARY au format WKB. | |
Convertit une valeur GEOGRAPHY en une valeur STRING au format WKT. | ||
Accès aux propriétés | Renvoie le rectangle englobant d'une valeur GEOGRAPHY. | |
Renvoie la longitude d'un objet géographique ponctuel. | ||
Renvoie la latitude d'un objet géographique ponctuel. | ||
Opérations spatiales | Vérifie si le premier objet géographique contient le second. | |
Vérifie si le premier objet géographique couvre le second (tous les points du second objet se trouvent sur la limite ou à l'intérieur du premier). | ||
Vérifie si deux objets géographiques s'intersectent (ils ont au moins un point commun). | ||
Vérifie si le premier objet géographique se trouve à l'intérieur du second. | ||
Vérifie si la distance la plus courte entre deux objets géographiques est inférieure ou égale à une distance spécifiée. | ||
Calcule la distance la plus courte entre deux objets géographiques, en mètres. |
Jointure spatiale
Une jointure spatiale est une opération de jointure non équivalente entre deux tables contenant des données GEOGRAPHY. La condition de jointure utilise une fonction de prédicat spatial (telle que ST_CONTAINS ou ST_INTERSECTS) qui évalue la relation spatiale entre les objets géographiques.
Un cas d'utilisation courant consiste à utiliser une fonction de géographie comme condition de JOIN pour évaluer la relation spatiale entre les colonnes GEOGRAPHY.
Les cas d'utilisation typiques incluent la détermination de la présence d'un point d'intérêt (POI) dans une zone spécifiée ou l'analyse de l'intersection d'une trajectoire avec une géoclôture.
MaxCompute implémente les jointures spatiales sur la base d'une table diffusée. Vous devez utiliser un indice MAPJOIN pour spécifier la table à diffuser.
Pour plus d'informations, consultez la rubrique Jointure spatiale.