Dans Hologres, les fonctions spatiales PostGIS permettent d'interroger des données spatiales stockées dans des tables. Cette rubrique explique comment importer des données depuis une machine locale vers Hologres, puis utiliser ces fonctions pour exécuter des requêtes.
Prérequis
Vous avez créé une instance Hologres. Pour plus d'informations, consultez Acheter une instance Hologres.
Vous avez créé une base de données dans votre instance Hologres. Pour plus d'informations, consultez Créer une base de données.
-
Vous avez téléchargé les exemples de données spatiales utilisés dans cette rubrique. Utilisez les liens suivants pour obtenir les fichiers :
Informations générales
PostGIS est une extension spatiale de PostgreSQL qui fournit des fonctionnalités spatiales, notamment des objets, des index, des fonctions et des opérateurs.
Cette rubrique s'appuie sur des exemples de tables contenant divers types d'informations spatiales telles que la longitude, la latitude, les coordonnées et la distance. Vous utiliserez HoloWeb pour créer des tables, importer des données locales dans les tables accommodations et zipcode, puis interroger ces données via les fonctions spatiales PostGIS.
Procédure
|
Étape |
Description |
|
Créez la table accommodations dans une base de données de votre instance Hologres afin de stocker des données d'hébergement telles que les emplacements géographiques (longitude et latitude) et les noms des annonces. Créez également la table zipcode pour conserver les codes postaux de Berlin. |
|
|
Importez les fichiers de données locaux dans les tables accommodations et zipcode à l'aide de HoloWeb. |
|
|
Étape 3 : Utiliser les fonctions spatiales pour interroger les données |
Exploitez les fonctions spatiales PostGIS pour interroger les données contenues dans les deux tables Hologres. |
Étape 1 : Créer des tables Hologres
Créez les tables accommodations et zipcode dans votre base de données.
Connectez-vous à l'Éditeur SQL HoloWeb.
Cliquez sur l'icône
située sous l'onglet SQL Editor pour ouvrir la fenêtre Ad-hoc Query. Dans la barre d'outils de cette fenêtre, sélectionnez votre Instance Name Hologres ainsi que la Database correspondante.-
Activez l'extension PostGIS.
Saisissez l'instruction suivante dans l'éditeur SQL, puis cliquez sur Run.
CREATE extension IF NOT EXISTS postgis; -- Enable the PostGIS extension. -
Créez la table accommodations.
Exécutez l'instruction SQL ci-dessous pour créer la table accommodations. Celle-ci contiendra les données relatives aux hébergements, notamment leur emplacement géographique (longitude et latitude), le nom de l'annonce et d'autres détails.
RemarqueUne fois la table créée, vérifiez le résultat. Dans le volet Table Directory situé à gauche, cliquez sur l'icône d'actualisation
, puis accédez à public > Table. Vous pouvez également consulter les Operational Logs pour confirmer la création réussie de la table.CREATE TABLE public.accommodations ( id INTEGER PRIMARY KEY, shape GEOMETRY, name VARCHAR(100), host_name VARCHAR(100), neighbourhood_group VARCHAR(100), neighbourhood VARCHAR(100), room_type VARCHAR(100), price SMALLINT, minimum_nights SMALLINT, number_of_reviews SMALLINT, last_review DATE, reviews_per_month NUMERIC(8,2), calculated_host_listings_count SMALLINT, availability_365 SMALLINT ); -
Créez la table zipcode.
Exécutez l'instruction SQL suivante afin de créer la table zipcode, destinée au stockage des codes postaux de Berlin.
RemarqueAprès la création de la table, validez l'opération. Dans le volet Table Directory de gauche, cliquez sur l'icône d'actualisation
, puis accédez à public > Table. Vous pouvez également vérifier les Operational Logs pour vous assurer du succès de l'opération.CREATE TABLE public.zipcode ( ogc_field INTEGER PRIMARY KEY NOT NULL, wkb_geometry GEOMETRY, gml_id VARCHAR(256), spatial_name VARCHAR(256), spatial_alias VARCHAR(256), spatial_type VARCHAR(256) );
Étape 2 : Importer les exemples de données spatiales
Utilisez la fonctionnalité Import On-premises File de HoloWeb pour charger les données dans les tables accommodations et zipcode.
Dans la console HoloWeb, cliquez sur Data Solutions dans la barre de navigation supérieure.
Sur la page Data Solutions, cliquez sur Import On-premises File dans le volet de navigation de gauche, puis sur New Data Import à droite.
-
Spécifiez la table Hologres cible pour l'importation.
Dans la boîte de dialogue Import On-premises File, saisissez un nom de tâche et sélectionnez votre instance, votre base de données ainsi que la table concernée (accommodations ou zipcode). Cliquez ensuite sur Next.
-
Définissez les données à importer et le format d'encodage.
Sous l'onglet Upload File, configurez les paramètres suivants et cliquez sur Next.
Paramètre
Description
Select File
Cliquez sur Browse pour charger le fichier de données à importer. Seuls les fichiers portant l'extension .txt, .csv ou .log sont pris en charge. Sélectionnez le fichier de données accommodations ou zipcode précédemment téléchargé.
Delimiter
Caractère utilisé pour séparer les entrées de données. Pour cet exemple, sélectionnez SEMICOLON.
RemarqueVous pouvez également choisir l'option située à droite de la liste déroulante afin de définir un délimiteur personnalisé selon vos besoins métier.
Original Encoding
Pour cet exemple, sélectionnez UTF-8.
First Line as Header
Par défaut, cette option n'est pas sélectionnée. Activez-la si la première ligne de vos données doit servir d'en-tête pour la table Hologres.
-
Confirmez la configuration.
Sous l'onglet Import Overview, examinez les informations d'importation affichées sur la page Upload. Celle-ci présente un résumé incluant le nom de la tâche, la base de données cible, le schéma et la table. Après vérification, cliquez sur Execute pour lancer l'importation.
-
Vérifiez le résultat de l'exécution.
Une fois la tâche terminée, le système indique si l'exécution a réussi dans l'étape Import Overview. En cas d'échec, consultez la cause de l'erreur pour résoudre le problème, puis tentez à nouveau l'importation.
Vous pouvez aussi exécuter des instructions SQL dans l'éditeur pour connaître le nombre d'entrées ou afficher le détail des données dans la table Hologres cible :
-
Vérification du nombre d'entrées
La table accommodations contient 22 248 lignes, tandis que la table zipcode en compte 190.
SELECT COUNT(*) FROM accommodations; -- Query the number of rows in the accommodations table. SELECT COUNT(*) FROM zipcode; -- Query the number of rows in the zipcode table. -
Interrogation détaillée des données
SELECT * FROM accommodations; -- Query the rows in the accommodations table. SELECT * FROM zipcode; -- Query the rows in the zipcode table.
-
Étape 3 : Utiliser les fonctions spatiales pour interroger les données
Une fois les tables Hologres nécessaires créées et les exemples de données spatiales importés, vous pouvez exploiter les fonctions spatiales pour interroger ces données. Les exemples suivants sont fournis à titre indicatif. Pour plus de détails sur la syntaxe des fonctions spatiales, reportez-vous à PostGIS pour l'analyse d'informations géographiques.
-
Comptage des lignes de la table accommodations dont l'identifiant du système de référence spatiale (SRID) vaut 4326.
-
Exemple de code :
SELECT COUNT(*) FROM public.accommodations WHERE ST_SRID(shape) = 4326; -
Résultat retourné :
count ------- 22248 (1 row)
-
-
Utilisation du format WKT (Well-Known Text) pour rechercher des objets géométriques répondant à des critères précis. Cet exemple permet de vérifier si les codes postaux de la table Hologres zipcodes sont stockés selon le système géodésique mondial WGS84, identifié par le SRID 4326.
RemarqueSeules les données spatiales appartenant au même système de référence peuvent être mises en relation.
-
Exemple de code :
SELECT ogc_field ,spatial_name ,spatial_type ,ST_SRID(wkb_geometry) ,ST_AsText(wkb_geometry) FROM public.zipcode ORDER BY spatial_name ; -
Résultat retourné :
ogc_field spatial_name spatial_type st_srid st_astext --------------------------------------------------------------- 0 10115 Polygon 4326 POLYGON((...)) 4 10117 Polygon 4326 POLYGON((...)) 8 10119 Polygon 4326 POLYGON((...)) ... (190 rows returned)
-
-
Recours au format GeoJSON pour obtenir la surface, sa taille et le nombre de points la composant pour le quartier Mitte à Berlin, avec un SRID fixé à 10117.
-
Exemple de code :
SELECT ogc_field ,spatial_name ,spatial_type ,ST_AsGeoJSON(wkb_geometry) ,ST_Dimension(wkb_geometry) ,ST_NPoints(wkb_geometry) FROM public.zipcode WHERE spatial_name = '10117' ; -
Résultat retourné :
ogc_field spatial_name spatial_type st_dimension st_npoint ----------------------------------------------------------------------------------------------- 4 10117 {"type":"Polygon", "coordinates":[[[...]]]} 2 331
-
-
Dénombrement des hébergements situés à moins de 500 mètres de la porte de Brandebourg, avec un SRID de 4326.
-
Exemple de code :
SELECT COUNT(*) FROM public.accommodations WHERE ST_DistanceSphere(shape, ST_GeomFromText('POINT(13.377704 52.516431)', 4326)) < 500 ; -
Résultat retourné :
count ------- 29 (1 row)
-
-
Estimation approximative de l'emplacement de la porte de Brandebourg à partir des hébergements situés à proximité.
-
Exemple de code :
WITH poi(loc) AS ( SELECT st_astext(shape) FROM accommodations WHERE name LIKE '%brandenburg gate%' ) SELECT COUNT(*) FROM accommodations a ,poi p WHERE ST_DistanceSphere(a.shape, ST_GeomFromText(p.loc, 4326)) < 500 ; -
Résultat retourné :
count ------- 60 (1 row)
-
-
Récupération des informations détaillées sur tous les hébergements autour de la porte de Brandebourg, classés par prix décroissant.
-
Exemple de code :
SELECT name ,price ,ST_AsText(shape) FROM public.accommodations WHERE ST_DistanceSphere(shape, ST_GeomFromText('POINT(13.377704 52.516431)', 4326)) < 500 ORDER BY price DESC ; -
Résultat retourné :
name | price | st_astext ----------------------------------------------------+-------+------------------------------------------ DUPLEX APARTMENT/PENTHOUSE in 5* LOCATION! 7583 | 300 | POINT(13.3826510209548 52.5159819722552) DUPLEX-PENTHOUSE IN FIRST LOCATION! 7582 | 300 | POINT(13.3799997083855 52.5135918444834) Luxury Apartment in Berlin Mitte with View | 259 | POINT(13.3835653528534 52.516360156825) BIG APT 4 BLNCTY-CNTR 43-H6 | 240 | POINT(13.3800222998777 52.5134224506894) BIG APARTMENT-PRIME LOCATION-BEST PRICE! B0303 | 240 | POINT(13.379745196599 52.5162648947249) BIG APARTMENT IN BRILLIANT LOCATION-CTY CENTRE B53 | 240 | POINT(13.381383105167 52.5157082721072) SONYCENTER: lux apartment - 3room/2bath. WIFI | 235 | POINT(13.3743158954191 52.5125308432819) CENTRE APARTMENT FOR 6 | 8853 | 220 | POINT(13.3819039478615 52.5134866767369) BIG APARTMENT FOR 6 - BEST LOCATION 8863 | 209 | POINT(13.3830430841658 52.5147824286783) 3 ROOMS ONE AMAZING EXPERIENCE! 8762 | 190 | POINT(13.3819898503053 52.5144190764637) AAA LOCATION IN THE CENTRE H681 | 170 | POINT(13.3821787206534 52.5129769242004) H672 Nice Apartment in CENTRAL LOCATION! | 170 | POINT(13.3803137710339 52.5132386929089) "Best View -best location!" | 170 | POINT(13.3799551247135 52.5147888483851) H652 Best Location for 4! | 170 | POINT(13.3805705422409 52.5143845784482) H651 FIT´s for Four in a 5* Location! | 150 | POINT(13.3822063502184 52.5134994650996) NEXT TO ATTRACTIONS! H252 | 110 | POINT(13.3823616629115 52.5136258446666) CTY Centre Students Home| G4 | 101 | POINT(13.3808081476226 52.5130957830586) Room for two with private shower / WC | 99 | POINT(13.3786877948382 52.5208018292043) StudentsHome CityCentre Mitte 91-0703 | 95 | POINT(13.3810390515141 52.5142363781923) FIRST LOCATION - FAIR PRICE K621 | 80 | POINT(13.3823909855061 52.5131554670458) LONG STAY FOR EXPATS/STUDENTS- CITY CENTRE | K921 | 75 | POINT(13.380320945399 52.512364557598) Nice4Students! City Centre 8732 | 68 | POINT(13.3810147526683 52.5136623602892) Comfy Room in the heart of Berlin | 59 | POINT(13.3813167311819 52.5127345388756) FO(U)R STUDENTS HOME-Best centre Location! | 57 | POINT(13.380850032042 52.5131726958513) Berlin Center Brandenburg Gate !!! | 55 | POINT(13.3849641540689 52.5163902851474) !!! BERLIN CENTER BRANDENBURG GATE | 55 | POINT(13.379997730927 52.5127577639174) Superb Double Bedroom in Central Berlin | 52 | POINT(13.3792991992688 52.5156572293422) OMG! That’s so Berlin! | 49 | POINT(13.3754883007165 52.5153487677272) Apartment in Berlin's old city center | 49 | POINT(13.3821761577766 52.514037240604) (29 rows)
-
-
Obtention des détails concernant l'hébergement le plus cher et son code postal associé.
-
Exemple de code :
SELECT a.price ,a.name ,ST_AsText(a.shape) ,z.spatial_name ,ST_AsText(z.wkb_geometry) FROM accommodations a ,zipcode z WHERE price = 9000 AND ST_Within(a.shape, z.wkb_geometry) ; -
Résultat retourné :
price name st_astext spatial_name st_astext ------------------------------------------------------------------------------------------------------------------------------------------------- 9000 Ueber den Dächern Berlins Zentrum POINT(13.334436985013 52.4979779501538) 10777 POLYGON((13.3318284987227 52.4956021172799,...
-
-
Identification des hébergements populaires à Berlin, regroupés par code postal et triés selon le volume de réservations.
-
Exemple de code :
SELECT z.spatial_name AS zip ,COUNT(*) AS numAccommodations FROM public.accommodations a ,public.zipcode z WHERE ST_Within(a.shape, z.wkb_geometry) GROUP BY zip ORDER BY numAccommodations DESC ; -
Résultat retourné :
zip numaccommodations ---------------------------- 10245 872 10247 832 10437 733 10115 664 ... (187 rows returned)
-