Come iniziare con l'analisi spaziale

Per iniziare ad analizzare i dati spaziali, occorre innanzitutto caricare i dati spaziali in un database.

Caricamento dei dati spaziali

Creare una tabella con una colonna geometria come colonna VARCHAR. Ad esempio, il comando seguente crea una tabella adatta al caricamento di dati puntuali:
CREATE TABLE PointData (PointID integer, the_geom varchar(200));
Per inserire un punto nella tabella, si devono impartire comandi simili ai seguenti:
INSERT INTO PointData VALUES (1, inza..ST_Point(3423, 4356));
INSERT INTO PointData VALUES (1, inza..ST_WKTToSQL('Point (3423 4356)'));

Si noti che è necessario uno solo di questi comandi INSERT per inserire il punto nella tabella PointData. Eseguendo entrambi i comandi INSERT si ottengono due punti con lo stesso PointID. La colonna the_geom può essere utilizzata ovunque il tipo di dato ST_Geometry (o la sottoclasse ST_Point) sia mostrato nelle funzioni dell'API spaziale.

Il comando seguente visualizza il tipo di geometria dei dati nella colonna_geom:
SELECT inza..ST_GeometryType(the_geom) FROM PointData;

ST_GEOMETRYTYPE
---------------------
ST_Point
ST_Point
Per creare una tabella contenente poligoni, eseguire il seguente comando:
CREATE TABLE Polys (PolyID integer, the_geom varchar(200));
Per aggiungere poligoni alla tabella, si impartiscono comandi simili ai seguenti, che specificano i punti che sono i vertici di due poligoni quadrati:
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))'));
Con i poligoni definiti nella tabella Polys, è possibile eseguire interrogazioni di base punto-poligono unendole tramite la funzione ST_Intersects(), come segue:
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

Rappresentazione dei dati spaziali

Quando si crea un oggetto geometrico o si caricano dati territoriali esistenti nel database, i dati vengono memorizzati in un formato interno. Di conseguenza, se si utilizza una query standard " SELECT * FROM <table> per visualizzare i dati spaziali, i dati restituiti non sono leggibili. Per visualizzare i dati in forma leggibile, utilizzare le funzioni di conversione spaziale.

Ad esempio, i comandi seguenti creano una piccola tabella denominata 'geoms e aggiungono un oggetto poligono e un oggetto linea alla tabella:
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)'));
Per visualizzare i dati in 'geoms in forma leggibile, utilizzare una delle funzioni di conversione spaziale:
  • Per rendere i dati territoriali come testo, utilizzare 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)
  • Per visualizzare i dati spaziali in Keyhole Markup Language (KML), utilizzare 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>

Come vengono archiviati i dati territoriali

Il tipo di dati delle colonne che memorizzano i dati spaziali dipende dal tipo di cartuccia utilizzata:
Spaziale
I dati spaziali vengono salvati in una colonna VARCHAR.
ESRI spaziale
I dati spaziali vengono salvati in una colonna ST_GEOMETRY.
Nota: sebbene i dati territoriali siano memorizzati come dati di caratteri, il loro formato interno può essere danneggiato se si tenta di manipolarli utilizzando funzioni o operatori di stringa non spaziali.

Ogni colonna ha una dimensione massima di 64.000 byte e una riga del database ha una dimensione massima di 65.535 byte. Sebbene la maggior parte degli oggetti geometrici possa essere definita completamente all'interno di un singolo campo da 64.000 byte, alcuni, come un poligono con molti vertici o una linea o un multipunto con molti punti. potrebbe richiedere più spazio.

In genere, un poligono che ha un solo anello (quello esterno) e che utilizza le coordinate XY per i vertici può avere fino a 3990 vertici prima di raggiungere il limite di dimensione della colonna. Il numero massimo di vertici che possono stare in una colonna diminuisce se un poligono ha anelli interni (cioè buchi) o se i suoi vertici usano coordinate XYZ, XYM o XYZM.

Caricamento di dati spaziali da altri database

Quando si caricano dati spaziali da altri database, è possibile che alcune geometrie siano troppo grandi per essere memorizzate in una singola colonna. È anche possibile che i dati contengano tipi di geometria non semplici o utilizzino caratteri o altri valori non supportati dalle funzioni di caricamento.

L'applicazione Feature Manipulation Engine (FME) Workbench, un prodotto di Safe Software Inc, aiuta a preparare i set di dati e a caricarli nel database Netezza Performance Server. Ad esempio, FME Workbench può aiutarvi nei seguenti modi:
  • Può rilevare poligoni con più di 3990 vertici e intraprendere un'azione specificata dall'utente, ad esempio tagliare la geometria in geometrie più piccole, saltare e ignorare la geometria, interrompere il processo di caricamento o generalizzare (o smussare) la geometria per renderla abbastanza piccola da rientrare nel campo di destinazione.
  • Può rilevare geometrie non semplici, che sono supportate dalla cartuccia ESRI Spatial, ma non dalla cartuccia Spatial. Può filtrarli o tamponarli in modo da poterli trasformare in seguito in geometrie semplici.
  • È in grado di caricare dati spaziali binari, rilevando ed eliminando i valori binari noti che non sono supportati dalle funzioni di caricamento.
Per ulteriori informazioni sull'applicazione FME Workbench, consultare la documentazione fornita da Safe Software Inc.

Utilizzo delle funzioni spaziali nei database utente

Quando viene installata la cartuccia Spatial o Spatial ESRI, tutte le funzioni spaziali e le stored procedure sono registrate per impostazione predefinita nel database INZA. Tuttavia, è possibile registrare le funzioni spaziali e le stored procedure anche nei database utente. In questo modo è possibile avere più di una versione delle funzioni spaziali disponibili in un sistema di single, ad esempio a scopo di test.

Per registrare le funzioni spaziali e le stored procedure da utilizzare in un database utente, procedere come segue:
  1. Creare il nuovo database utente immettendo il seguente comando, dove 'newdb rappresenta il nome del database utente che si desidera creare.
    % nzsql -c "create database newdb;"
     CREATE DATABASE
  2. Registrate nzspatial immettendo il seguente comando:
    % nzcm -d newdb -r nzspatial
  3. Eseguite lo script create_inza_db.sh immettendo il seguente comando:
    % /nz/export/ae/utilities/bin/create_inza_db.sh newdb
Nel database utente, le funzioni spaziali e le stored procedure sono registrate come segue:
  • Nello schema INZA, quando è abilitata la funzione Netezza Performance Server di supporto dello schema completo
  • Nello schema predefinito, quando lo schema completo supporta la funzionalità di Netezza Performance Server, la funzione è disabilitata

Aggiornamento dalla cartuccia Spatial alla cartuccia Spatial ESRI

Lo script " convert.sh aiuta a migrare i dati dal noto formato binario (WKB) utilizzato dalla cartuccia Spatial (nzspatial) al formato binario ESRI utilizzato dalla cartuccia Spatial ESRI (nzspatial_esri).

Nota: si consiglia vivamente di eseguire il backup del database prima di migrare i dati.

Lo script utilizza la funzione ST_CONVERT, pertanto non è necessario richiamarla separatamente. Lo script si trova in '/nz/export/ae/products/netezza/nzspatial_esri/<version>/scripts/convert.sh.

Lo script " convert.sh converte una tabella con una colonna VARCHAR contenente dati geometrici WKB in una nuova tabella con una colonna ST_GEOMETRY contenente dati geometrici binari ESRI. I nomi delle colonne rimangono invariati. Lo script normalizza anche i due SRID non standard nel database well known binary (WKB):
  • Il SRID 1111 viene convertito nel SRID specificato (4269 è il valore predefinito).
  • Il SRID 1234 viene convertito nel SRID specificato (27700 è il valore predefinito).
La nuova tabella può trovarsi nello stesso database o in un database diverso.
È necessario eseguire lo script 'convert.sh come utente nz. Prima di poter eseguire lo script, devono essere soddisfatte le seguenti condizioni:
  • esistono funzioni nzspatial.
  • esistono funzioni nzspatial_esri.
  • Il database di destinazione è inizializzato INA.
Sintassi

comando convert.sh

Leggere il diagramma di sintassiSaltare il diagramma di sintassi visiva convert.sh <nzspatial db><nzspatial table><geometry column> <nzspatial function database><database della funzione nzspatial_esri><nzspatial_esri db><nzspatial_esri table><new sphere srid><new sphere srid>
Tabella 1. Parametri dello script convert.sh
Parametro Descrizione
<nzspatial db> Il nome del database di origine contenente i dati della tabella nzspatial.
<nzspatial table> Il nome della tabella di origine contenente i dati nzspatial.
<geometry column> Il nome della colonna geometrica.
<nzspatial function database> Il nome del database contenente le funzioni di nzspatial.
<database della funzione nzspatial_esri> Il nome del database contenente le funzioni nzspatial_esri.
<nzspatial_esri db> Il nome del database di destinazione contenente i dati della tabella nzspatial_esri appena creata. L'impostazione predefinita è il database di origine.
<nzspatial_esri table> Il nome della tabella di destinazione contenente i dati nzspatial_esri appena creati. Il valore predefinito è un nome della forma <nzspatial_table>_tmp.
<new sphere srid> Il SRID da assegnare ai dati nzspatial_esri appena creati, precedentemente assegnati al SRID 1111 (Spherical). L'impostazione predefinita è 4269.
<new cartesian srid> Il SRID da assegnare ai dati nzspatial_esri appena creati, precedentemente assegnato al SRID 1234 (cartesiano). L'impostazione predefinita è 27700.