S'initier à l'analyse spatiale

Pour commencer à analyser vos données spatiales, vous devez d'abord les charger dans une base de données.

Chargement des données spatiales

Créer une table avec une colonne géométrie en tant que colonne VARCHAR. Par exemple, la commande suivante crée un tableau adapté au chargement de données ponctuelles :
CREATE TABLE PointData (PointID integer, the_geom varchar(200));
Pour insérer un point dans le tableau, émettez des commandes similaires aux commandes suivantes :
INSERT INTO PointData VALUES (1, inza..ST_Point(3423, 4356));
INSERT INTO PointData VALUES (1, inza..ST_WKTToSQL('Point (3423 4356)'));

Notez qu'une seule de ces commandes INSERT est nécessaire pour insérer le point dans la table PointData L'exécution des deux commandes INSERT donne deux points avec le même PointID. La colonne the_geom peut être utilisée partout où le type de données ST_Geometry (ou la sous-classe ST_Point) apparaît dans les fonctions de l'API spatiale.

La commande suivante affiche le type de géométrie des données de la colonne the_geom :
SELECT inza..ST_GeometryType(the_geom) FROM PointData;

ST_GEOMETRYTYPE
---------------------
ST_Point
ST_Point
Pour créer un tableau contenant des polygones, exécutez la commande suivante :
CREATE TABLE Polys (PolyID integer, the_geom varchar(200));
Pour ajouter des polygones à la table, émettez des commandes similaires aux commandes suivantes, qui spécifient des points qui sont les sommets de deux polygones carrés :
INSERT INTO Polys VALUES (1, inza..ST_WKTToSQL('Polygon ((1000 1000, 1000 5000, 4000 5000, 4000 1000, 1000 1000))'));
INSERT INTO Polys VALUES (2, inza..ST_WKTToSQL('Polygon ((100 100, 100 500, 400 500, 400 100, 100 100))'));
Avec les polygones définis dans la table Polys, vous pouvez effectuer des requêtes point dans polygone en utilisant la fonction ST_Intersects(), comme suit :
SELECT PointID, PolyID FROM PointData AS a, Polys AS b WHERE inza..ST_Intersects(a.the_geom, b.the_geom);

 POINTID | POLYID
---------+--------
       1 |      1
       1 |      1

Représentation des données spatiales

Lorsque vous créez un objet géométrique ou que vous chargez des données spatiales existantes dans la base de données, les données sont stockées dans un format interne. Par conséquent, si vous utilisez une requête standard " SELECT * FROM <table> pour visualiser des données spatiales, les données renvoyées sont illisibles. Pour afficher les données sous une forme lisible, utilisez les fonctions de conversion spatiale.

Par exemple, les commandes suivantes créent un petit tableau nommé " geoms et y ajoutent un polygone et un objet "linestring" :
CREATE TABLE geoms (PolyID INTEGER, the_geom VARCHAR(64000));
INSERT INTO geoms VALUES (1, inza..ST_WKTtoSQL('Polygon ((1 1, 1 4, 3.5 2.5, 6 4, 6 1, 1 1))'));
INSERT INTO geoms VALUES (2, inza..ST_WKTtoSQL('Linestring (1 1, 1 4, 6 4, 6 1)'));
Pour afficher les données du " geoms sous une forme lisible, utilisez l'une des fonctions de conversion spatiale :
  • Pour restituer les données spatiales sous forme de texte, utilisez ST_AsText::
    SELECT inza..ST_AsText(the_geom) FROM geoms;
    
    ST_ASTEXT
    ---------------------------------------------------------------------
    POLYGON ((1 1, 1 4, 3.5 2.5, 6 4, 6 1, 1 1))
    LINESTRING (1 1, 1 4, 6 4, 6 1)
  • Pour restituer les données spatiales en Keyhole Markup Language (KML), utilisez ST_AsKML::
    SELECT inza..ST_AsKML(the_geom) FROM geoms;
    ST_ASKML 
    ---------------------------------------------------------------------
    <LineString><coordinates>1,1 1,4 6,4 6,1</coordinates></LineString>
    <Polygon><outerBoundaryIs><LinearRing><coordinates>1,1 1,4 3.5,2.5 6,4 6,1 1,1</coordinates></LinearRing></outerBoundaryIs></Polygon>

Comment les données spatiales sont-elles stockées ?

Le type de données des colonnes qui stockent les données spatiales dépend du type de cartouche utilisé :
Spatiale
Les données spatiales sont enregistrées dans une colonne VARCHAR.
Spatial ESRI
Les données spatiales sont enregistrées dans une colonne ST_GEOMETRY.
Remarque : bien que les données spatiales soient stockées sous forme de données de caractères, leur format interne peut être altéré si vous tentez de les manipuler à l'aide de fonctions ou d'opérateurs de chaînes de caractères non spatiales.

Chaque colonne a une taille maximale de 64 000 octets et une ligne de la base de données a une taille maximale de 65 535 octets. Bien que la plupart des objets géométriques puissent être définis entièrement dans un seul champ de 64 000 octets, certains, tels qu'un polygone avec de nombreux sommets, une ligne ou un multipoint avec de nombreux points, peuvent être définis dans un seul champ de 64 000 octets. peut nécessiter plus d'espace.

Typiquement, un polygone qui a un seul anneau (son anneau extérieur) et qui utilise des coordonnées XY pour les sommets peut avoir jusqu'à 3990 sommets avant d'atteindre la limite de taille de la colonne. Le nombre maximal de sommets pouvant se trouver dans une colonne diminue si un polygone possède des anneaux intérieurs (c'est-à-dire des trous) ou si ses sommets utilisent des coordonnées XYZ, XYM ou XYZM.

Chargement de données spatiales à partir d'autres bases de données

Lors du chargement de données spatiales à partir d'autres bases de données, il est possible que certaines géométries soient trop grandes pour être stockées dans une seule colonne. Il est également possible que les données contiennent des types géométriques non simples, ou qu'elles utilisent des caractères ou d'autres valeurs qui ne sont pas pris en charge par les fonctions de chargement.

L'application Feature Manipulation Engine (FME) Workbench, qui est un produit de Safe Software Inc, aide à préparer les ensembles de données et à les charger dans la base de données Netezza Performance Server. Par exemple, FME Workbench peut vous aider de la manière suivante :
  • Il peut détecter les polygones ayant plus de 3990 sommets et prendre une mesure spécifiée par l'utilisateur, comme découper la géométrie en géométries plus petites, sauter et ignorer la géométrie, interrompre le processus de chargement ou généraliser (ou lisser) la géométrie pour la rendre suffisamment petite pour qu'elle tienne dans le champ cible.
  • Il peut détecter des géométries non simples, qui sont prises en charge par la cartouche ESRI Spatial, mais pas par la cartouche Spatial. Il peut soit les filtrer, soit les mettre en mémoire tampon afin de les transformer ultérieurement en géométries simples.
  • Il peut charger des données spatiales binaires tout en détectant et en échappant les valeurs binaires connues qui ne sont pas prises en charge par les fonctions de chargement.
Pour plus d'informations sur l'application FME Workbench, reportez-vous à la documentation fournie par Safe Software Inc.

Utilisation des fonctions spatiales dans les bases de données utilisateur

Lorsque la cartouche ESRI Spatial ou Spatial est installée, toutes les fonctions spatiales et les procédures stockées sont enregistrées par défaut dans la base de données INZA. Toutefois, vous pouvez également enregistrer les fonctions spatiales et les procédures stockées dans les bases de données utilisateur. Cela vous permet de disposer de plusieurs versions des fonctions spatiales dans un système de célibataires, par exemple à des fins de test.

Pour enregistrer les fonctions spatiales et les procédures stockées en vue de leur utilisation dans une base de données utilisateur, procédez comme suit :
  1. Créez la nouvelle base de données d'utilisateurs en entrant la commande suivante, où " newdb représente le nom de la base de données d'utilisateurs que vous souhaitez créer.
    % nzsql -c "create database newdb;"
     CREATE DATABASE
  2. Enregistrez nzspatial en entrant la commande suivante :
    % nzcm -d newdb -r nzspatial
  3. Exécutez le script create_inza_db.sh en entrant la commande suivante :
    % /nz/export/ae/utilities/bin/create_inza_db.sh newdb
Dans la base de données utilisateur, les fonctions spatiales et les procédures stockées sont enregistrées comme suit :
  • Dans le schéma INZA, lorsque la fonction de prise en charge complète du schéma Netezza Performance Server est activée
  • Dans le schéma par défaut, lorsque la fonction Netezza Performance Server de prise en charge du schéma complet est désactivée

Mise à jour de la cartouche Spatial vers la cartouche Spatial ESRI

Vous pouvez utiliser le script 'convert.sh pour vous aider à migrer les données du format binaire bien connu (WKB) utilisé par la cartouche Spatial (nzspatial) vers le format binaire ESRI utilisé par la cartouche ESRI Spatial (nzspatial_esri).

Note : Il est fortement recommandé de sauvegarder votre base de données avant de migrer vos données.

Le script utilise la fonction ST_CONVERT, il n'est donc pas nécessaire d'appeler cette fonction séparément. Le script se trouve dans '/nz/export/ae/products/netezza/nzspatial_esri/<version>/scripts/convert.sh.

Le script 'convert.sh convertit une table avec une colonne VARCHAR contenant des données géométriques WKB en une nouvelle table avec une colonne ST_GEOMETRY contenant des données géométriques binaires ESRI. Les noms des colonnes restent inchangés. Le script normalise également les deux SRID non standard dans la base de données binaire bien connue (WKB) :
  • Le SRID 1111 est converti en SRID que vous spécifiez (4269 est la valeur par défaut).
  • L'ISRD 1234 est converti en l'ISRD que vous avez spécifié (27700 est la valeur par défaut).
La nouvelle table peut se trouver dans la même base de données ou dans une base de données différente.
Vous devez exécuter le script " convert.sh en tant qu'utilisateur nz. Avant de pouvoir exécuter le script, les conditions suivantes doivent être remplies :
  • il existe des fonctions spatiales.
  • les fonctions nzspatial_esri existent.
  • La base de données de destination est initialisée par l'INA.
Syntaxe

commande convert.sh

Lire le diagramme syntaxiqueSauter le diagramme syntaxique visuel convert.sh <nzspatial db><nzspatial table><geometry column> <nzspatial function database><nzspatial_esri function database><nzspatial_esri db><nzspatial_esri table><new sphere srid><new sphere srid>
Tableau 1. Paramètres du script convert.sh
Paramètre Descriptif
<nzspatial db> Nom de la base de données source contenant les données de la table nzspatial.
<nzspatial table> Le nom de la table source contenant les données nzspatial.
<geometry column> Le nom de la colonne géométrique.
<nzspatial function database> Le nom de la base de données contenant les fonctions nzspatial.
<nzspatial_esri function database> Le nom de la base de données contenant les fonctions nzspatial_esri.
<nzspatial_esri db> Nom de la base de données de destination contenant les données de la table nzspatial_esri nouvellement créée. La valeur par défaut est la base de données source.
<nzspatial_esri table> Le nom de la table de destination contenant les données nzspatial_esri nouvellement créées. La valeur par défaut est un nom de la forme <nzspatial_table>_tmp.
<new sphere srid> Le SRID à attribuer aux données nzspatial_esri nouvellement créées et précédemment attribuées au SRID 1111 (Spherical). La valeur par défaut est 4269.
<new cartesian srid> Le SRID à attribuer aux données nzspatial_esri nouvellement créées qui était précédemment attribué au SRID 1234 (cartésien). La valeur par défaut est 27700.