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
CREATE TABLE PointData (PointID integer, the_geom varchar(200));
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.
SELECT inza..ST_GeometryType(the_geom) FROM PointData;
ST_GEOMETRYTYPE
---------------------
ST_Point
ST_Point
CREATE TABLE Polys (PolyID integer, the_geom varchar(200));
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))'));
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.
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
- Spaziale
- I dati spaziali vengono salvati in una colonna VARCHAR.
- ESRI spaziale
- I dati spaziali vengono salvati in una colonna ST_GEOMETRY.
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.
- 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.
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.
- 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
- Registrate nzspatial immettendo il seguente comando:
% nzcm -d newdb -r nzspatial
- Eseguite lo script create_inza_db.sh immettendo il seguente comando:
% /nz/export/ae/utilities/bin/create_inza_db.sh newdb
- 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).
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.
- Il SRID 1111 viene convertito nel SRID specificato (4269 è il valore predefinito).
- Il SRID 1234 viene convertito nel SRID specificato (27700 è il valore predefinito).
- esistono funzioni nzspatial.
- esistono funzioni nzspatial_esri.
- Il database di destinazione è inizializzato INA.
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. |