In dieser praktischen Einführung können Sie mit einigen der räumlichen Funktionen in SQL Anywhere experimentieren. Hierzu lesen Sie zunächst eine ESRI-Formdatei in Ihre Beispieldatenbank (demo.db) ein, sodass Sie gültige räumliche Daten für die Übung zur Verfügung haben.
Die praktische Einführung ist in folgende Teile unterteilt:
Dieser Teil der praktischen Einführung zeigt, wie Sie die sa_describe_shapefile-Systemprozedur verwenden, um zahlreiche vordefinierte Maßeinheiten und räumliche Bezugssysteme zu installieren, die Sie später in dieser praktischen Einführung benötigen werden.
Starten Sie mit Interactive SQL die Beispieldatenbank (demo.db) als Benutzer DBA oder als Mitglied der SYS_SPATIAL_ADMIN_ROLE-Gruppe.
Die Beispieldatenbank befindet sich im Verzeichnis /samples/. Weitere Informationen zum Standardspeicherort des Verzeichnisses /samples/ finden Sie unter SQLANYSAMP12-Umgebungsvariable.
Führen Sie die folgende Anweisung aus:
CALL sa_install_feature( 'st_geometry_predefined_srs' ); |
Die Anweisung installiert die vordefinierten Maßeinheiten und räumlichen Bezugssysteme.
Siehe auch: sa_install_feature-Systemprozedur und CREATE SPATIAL REFERENCE SYSTEM-Anweisung.
Mit der folgenden Abfrage können Sie ermitteln, welche Maßeinheiten in der Datenbank installiert sind:
SELECT * FROM SYSUNITOFMEASURE; |
Siehe auch: SYSUNITOFMEASURE-Systemansicht.
Welche räumlichen Bezugssysteme in der Datenbank installiert sind, können Sie im Ordner Räumliche Bezugssysteme überprüfen oder indem Sie folgende Abfrage ausführen:
SELECT * FROM SYSSPATIALREFERENCESYSTEM; |
Siehe auch: SYSSPATIALREFERENCESYSTEM-Systemansicht.
In diesem Teil der praktischen Einführung laden Sie eine ESRI-Formdatei von der US Census-Website ( www2.census.gov) herunter. Die heruntergeladene Formdatei enthält die 5-stelligen PLZ-Informationen, die bei der Volkszählung 2002 tabellarisch
gesammelt wurden. Jede PLZ-Region wird als Polygon oder Multipolygon behandelt.
Erstellen Sie ein lokales Verzeichnis mit dem Namen c:\temp\massdata.
Gehen Sie zur URL http://www2.census.gov/cgi-bin/shapefiles2009/national-files
Wählen Sie auf der rechten Seite in der Dropdown-Liste State- and County-based Shapefiles (Staats- und Landkreis-basierte Formdateien) Massachusetts aus und klicken Sie dann auf Submit.
Wählen Sie auf der linken Seite 5-Digit ZIP Code Tabulation Area (2002) (5-stelliger PLZ-Tabellenbereich (2002)) und klicken Sie dann auf Download Selected Files (Ausgewählte Dateien herunterladen).
Wenn Sie dazu aufgefordert werden, speichern Sie die ZIP-Datei, multiple_tiger_files.zip in c:\temp\massdata und extrahieren Sie ihren Inhalt. Damit erstellen Sie ein Unterverzeichnis namens 25_MASSACHUSETTS, das eine andere ZIP-Datei namens tl_2009_25_zcta5.zip enthält.
Extrahieren Sie den Inhalt von tl_2009_25_zcta5.zip nach C:\temp\massdata.
Dadurch werden fünf Dateien entpackt, einschließlich einer ESRI-Formdatei (.shp), die Sie verwenden werden, um die räumlichen Daten in die Datenbank zu laden.
Dieser Teil der praktischen Einführung zeigt, wie Sie ermitteln, welche Spalten in der ESRI-Formdatei enthalten sind, und wie Sie diese Informationen verwenden, um eine Tabelle zu erstellen, in die Sie die Daten einlesen.
Da die räumlichen Daten einem spezifischen räumlichen Bezugssystems zugeordnet sind, müssen Sie sie beim Einlesen der Daten in die Datenbank in dasselbe räumliche Bezugssystem einlesen oder zumindest in eines mit der gleichen Definition. Um die Informationen des räumlichen Bezugssystems für die ESRI-Formdatei zu ermitteln, öffnen Sie die Projektdatei c:\temp\massdata\tl_2009_25_zcta5.prj in einem Texteditor. Diese Datei enthält die benötigten Informationen über das räumliche Bezugssystem.
GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",
SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]] |
Die Zeichenfolge GCS_North_American_1983 ist der Name des räumlichen Bezugssystems, dem die Daten zugeordnet ist.
Eine kurze Abfrage der Ansicht SYSSPATIALREFERENCESYSTEM, SELECT * FROM SYSSPATIALREFERENCESYSTEM WHERE srs_name='GCS_North_American_1983';
, zeigt, dass dieser Name nicht in der Liste der vordefinierten räumlichen Bezugssysteme enthalten ist. Sie können jedoch
eine Abfrage für ein räumliches Bezugssystem mit derselben Definition erstellen und dieses stattdessen verwenden.
SELECT * FROM SYSSPATIALREFERENCESYSTEM WHERE definition LIKE '%1983%' AND definition LIKE 'GEOGCS%'; |
Die Abfrage gibt ein einziges räumliches Bezugssystem, NAD83, mit der SRID 4269 zurück. Es hat dieselbe Definition und kann die Daten aufnehmen.
Als nächstes erstellen Sie eine Tabelle, in die Sie die räumlichen Daten einlesen werden. Hierzu müssen Sie zunächst die Spalten in der ESRI-Formdatei ermitteln. Folgende Anweisung gibt eine Beschreibung der Spalten zurück. Sie formatiert zudem die Ausgabe, wodurch die Ergebnismenge für die Aufnahme in eine CREATE TABLE-Anweisung vorbereitet wird. Beachten Sie die Verwendung von SRID im vorigen Schritt beim Aufruf der Systemprozedur sa_describe_shapefile:
SELECT name || ' ' || domain_name_with_size || ', ' FROM sa_describe_shapefile('C:\temp\massdata\tl_2009_25_zcta5.shp', 4269) ORDER BY column_number; |
Wählen Sie alle Zeilen in der Ergebnismenge aus, klicken Sie mit der rechten Maustaste und wählen Sie dann Daten kopieren » Zellen.
Entfernen Sie im oberen Fensterausschnitt in Interactive SQL die ausgeführte SELECT-Anweisung und geben Sie CREATE TABLE Massdata( ein. Anschließend fügen Sie die kopierten Zellen ein.
Ändern Sie die Definition für die Spalte record_number in PRIMARY KEY (d.h., ändern Sie record_number int,
in record_number int PRIMARY KEY,
).
Ändern Sie den Spaltennamen ZCTA5CE in ZIP.
In der letzten Spalte der Liste entfernen Sie die nachgestellten Kommas und fügen eine schließende eckige Klammer hinzu, gefolgt von einem Semikolon.
Die CREATE TABLE-Anweisung sollte wie folgt aussehen:
CREATE TABLE Massdata( record_number int PRIMARY KEY, geometry ST_Geometry(SRID=4269), ZIP varchar(5), CLASSFP varchar(2), MTFCC varchar(5), FUNCSTAT varchar(1), ALAND bigint, AWATER bigint, INTPTLAT varchar(11), INTPTLON varchar(12) ); |
Führen Sie die CREATE TABLE-Anweisung aus, um die Tabelle zu erstellen.
Lesen Sie die räumlichen Daten aus der ESRI-Formdatei mit folgender Anweisung in Massdata ein. Dieser Vorgang kann mehrere Minuten dauern.
LOAD TABLE Massdata USING FILE 'C:\temp\massdata\tl_2009_25_zcta5.shp' FORMAT SHAPEFILE; |
Die beiden Spalten INTPTLON und INTPTLAT in der Massdata-Tabelle stellen die X- und Y-Koordinaten für den Mittelpunkt der PLZ-Region dar. In diesem Schritt kombinieren Sie die Werte in eine ST_Point-Spalte namens CenterPoint. Jeder Wert in der Spalte CenterPoint (in WKT) ist der Mittelpunkt der PLZ-Region, die in der Geometriespalte angegeben ist. Diese Spalte wird in einigen Beispielen dieser praktischen Einführung weiter unten nützlich sein.
Führen Sie zur Erstellung der Spalte folgende Anweisung aus:
ALTER TABLE Massdata ADD CenterPoint AS ST_Point(SRID=4269) COMPUTE( new ST_Point( CAST( INTPTLON AS DOUBLE ), CAST( INTPTLAT AS DOUBLE ), 4269 ) ); |
Sie können die Daten anzeigen, indem Sie folgende Abfrage in Interactive SQL ausführen:
SELECT * FROM Massdata; |
Jede Zeile in den Ergebnissen gibt eine PLZ-Region an: Massdata.geometry enthält die Forminformationen der PLZ-Region als Polygon (ein Bereich) oder Multipolygon (zwei oder mehr nicht zusammenhängende Bereiche).
Um eine einzelne Geometrie (eine PLZ-Region) als Form anzuzeigen, doppelklicken Sie auf einen beliebigen Wert in Massdata.geometry und klicken Sie im Fenster Wert von Spalte auf die Registerkarte Räumliche Vorschau.
Wenn Sie in einer Fehlermeldung darauf hingewiesen werden, dass der Wert zu lang ist oder dass Sie einen Primärschlüssel in die Ergebnisse einbeziehen müssen, liegt das daran, dass der Wert für die Anzeige in Interactive SQL gekürzt wurde. Um dies zu beheben, können Sie die Abfrage ändern und eine Primärschlüsselspalte in die Ergebnisse einbeziehen oder die Einstellung Kürzungslänge anpassen. Wenn Sie den Primärschlüssel nicht bei jeder Abfrage einer Geometrie für die Anzeige in Interactive SQL einbeziehen wollen, wird die Einstellung der Kürzungslänge empfohlen.
Zum Ändern der Einstellung Kürzungslänge für Interactive SQL klicken Sie auf Extras » Optionen » SQL Anywhere und legen Sie Kürzungslänge auf einen hohen Wert fest, z. B. auf 100000.
Um den gesamten Datensatz als eine einzige Form anzuzeigen, klicken Sie auf Extras » Spatial Viewer, um den Spatial Viewer von SQL Anywhere zu öffnen, und führen Sie folgende Abfrage aus:
SELECT geometry FROM Massdata UNION ALL SELECT centerpoint FROM Massdata; |
Dieser Teil der praktischen Einführung zeigt, wie Sie mit einigen der räumlichen Methoden Daten in einem bestimmten Kontext abfragen können.
Die Abfragen werden in einer oder beiden SpatialContacts-Tabellen ausgeführt, die Namen und Kontaktinformationen für Personen enthalten, von denen viele in Massachusetts leben, und in der von Ihnen erstellten Massdata-Tabelle. Es wird auch gezeigt, wie Abstände berechnet werden. Hierfür müssen Sie Maßeinheiten in die Datenbank einfügen.
In den folgenden Schritten verwenden Sie den PLZ-Bereich 01775.
Erstellen Sie eine Variable namens @Mass_01775
, um die zugehörige Geometrie zu speichern.
CREATE VARIABLE @Mass_01775 ST_Geometry; SELECT geometry INTO @Mass_01775 FROM Massdata WHERE ZIP = '01775'; |
Sie möchten z. B. alle Kontakte in SpatialContacts im PLZ-Bereich 01775 und den umgebenden PLZ-Bereichen suchen. Hierzu können Sie die ST_Intersects-Methode verwenden, die Geometrien zurückgibt, die sich mit der angegebenen Geometrie überschneiden oder mit ihr übereinstimmen. Die entsprechende Anweisung sieht folgendermaßen aus:
SELECT c.Surname, c.GivenName, c.Street, c.City, c.PostalCode, z.geometry FROM Massdata z, SpatialContacts c WHERE c.PostalCode = z.ZIP AND z.geometry.ST_Intersects( @Mass_01775 ) = 1; |
Siehe auch: ST_Intersects-Methode für den ST_Geometry-Datentyp
Alle Zeilen in Massdata.geometry sind demselben räumlichen Bezugssystem (SRID 4269) zugeordnet, da der Geometriespalte bei der Erstellung die SRID 4269 zugeordnet wurde und Daten in sie eingelesen wurden.
Es ist jedoch auch möglich, eine nicht deklarierte ST_Geometry-Spalte zu erstellen (d. h. ohne Zuweisung einer SRID). Dies kann erforderlich sein, wenn Sie planen, in einer einzelnen Spalte räumliche Daten zu speichern, denen unterschiedliche räumliche Bezugssysteme zugeordnet sind. Wenn diese Werte bearbeitet werden, wird jeweils das räumliche Bezugssystem verwendet, das dem betreffenden Wert zugeordnet ist.
Wenn eine Spalte nicht deklariert wird, besteht die Gefahr, dass der Datenbankserver die Änderung eines räumlichen Bezugssystems zulässt, das den Daten in der nicht deklarierten Spalte zugeordnet ist.
Wenn die Spalte eine deklarierte SRID hat, erlaubt der Datenbankserver es nicht, das räumliche Bezugssystem, das den Daten zugeordnet ist, zu verändern. Sie müssen die Daten zuerst aus der Spalte auslesen und dann kürzen, das räumliche Bezugssystem ändern und dann die Daten erneut einlesen.
Mit der Methode ST_SRID können Sie die SRID ermitteln, die Werten einer Spalte zugeordnet ist, und zwar unabhängig davon, ob diese deklariert ist. Beispiel: Folgende Anweisung zeigt die SRID, die den einzelnen Zeilen in der Spalte Massdata.geometry zugeordnet ist:
SELECT geometry.ST_SRID() FROM Massdata; |
Siehe auch: ST_SRID-Methode für den ST_Geometry-Datentyp
Mit der ST_CoveredBy-Methode können Sie prüfen, ob eine Geometrie vollständig in einer anderen Geometrie enthalten ist. Beispiel: Massdata.CenterPoint (ST_Point-Typ) enthält die Breitengrad-/Längengrad-Koordinaten des Mittelpunkts des PLZ-Bereichs, während Massdata.geometry das Polygon enthält, das den PLZ-Bereich darstellt. Sie können schnell prüfen, ob ein CenterPoint-Wert außerhalb des PLZ-Bereichs liegt, indem Sie folgende Abfrage ausführen:
SELECT * FROM Massdata WHERE NOT(CenterPoint.ST_CoveredBy(geometry) = 1); |
Es werden keine Zeilen zurückgegeben. Dies zeigt an, dass alle CenterPoint-Werte innerhalb ihrer in Massdata.geometry zugeordneten Geometrien liegen. Diese Prüfung stellt natürlich nicht sicher, dass es sich um die tatsächlichen Mittelpunkte handelt. Sie müssten die Daten auf ein räumliches Bezugssystem für die plane Erddarstellung projizieren und die CenterPoint-Werte mit der ST_Centroid-Methode prüfen. Weitere Hinweise zum Projizieren von Daten in ein anderes räumliches Bezugssystem finden Sie unter Teil 6: Räumliche Daten projizieren.
Siehe auch: ST_CoveredBy-Methode für den ST_Geometry-Datentyp
Mit der Methode ST_Distance können Sie den Abstand zwischen zwei Mittelpunkten der PLZ-Bereiche messen. Sie möchten z. B. die Liste aller Postleitzahlen innerhalb von 100 Meilen vom PLZ-Bereich 01775. Sie könnten die folgende Anweisung ausführen:
SELECT c.PostalCode, c.City, z.CenterPoint.ST_Distance( ( SELECT CenterPoint FROM Massdata WHERE ZIP = '01775' ), 'Statute mile' ) dist, z.CenterPoint FROM Massdata z, SpatialContacts c WHERE c.PostalCode = z.ZIP AND dist <= 100 ORDER BY dist; |
Siehe auch: ST_Distance-Methode für den ST_Geometry-Datentyp
Wenn die Kenntnis der genauen Entfernung nicht von Bedeutung ist, können Sie statt dessen die Abfrage unter Verwendung der ST_WithinDistance-Methode erstellen, die bei bestimmten Datensätzen eine bessere Performance bietet (insbesondere bei großen Geometrien):
SELECT c.PostalCode, c.City, z.CenterPoint FROM Massdata z, SpatialContacts c WHERE c.PostalCode = z.ZIP AND z.CenterPoint.ST_WithinDistance( ( SELECT CenterPoint FROM Massdata WHERE ZIP = '01775' ), 100, 'Statute mile' ) = 1 ORDER BY c.PostalCode; |
Siehe auch: ST_WithinDistance-Methode für den ST_Geometry-Datentyp.
Sie können Geometrien in das SVG-Format zur Anzeige in Interactive SQL oder in einer SVG-kompatiblen Anwendung exportieren. In der folgenden Prozedur erstellen Sie ein SVG-Dokument, um ein Multipolygon in WKT anzuzeigen.
Führen Sie folgende Anweisung in Interactive SQL aus, um eine Variable mit einer Beispielgeometrie zu erstellen:
CREATE OR REPLACE VARIABLE @svg_geom ST_Polygon = (NEW ST_Polygon('Polygon ((1 1, 5 1, 5 5, 1 5, 1 1), (2 2, 2 3, 3 3, 3 2, 2 2))')); |
Führen Sie folgende SELECT-Anweisung in Interactive SQL aus, um die ST_AsSVG-Methode aufzurufen:
SELECT @svg_geom.ST_AsSVG() AS svg; |
Die Ergebnismenge hat eine einzelne Zeile, die sich in einem SVG-Bild befindet. Sie können das Bild mit der Funktion SVG-Vorschau in Interactive SQL anzeigen. Hierzu doppelklicken Sie auf die Ergebniszeile und wählen Sie die Registerkarte SVG-Vorschau.
Wenn Sie einen Fehler erhalten, der darauf hinweist, dass der vollständige Wert nicht aus der Datenbank gelesen werden konnte, müssen Sie die Einstellung Kürzungslänge für Interactive SQL ändern. Hierzu klicken Sie in Interactive SQL auf Extras » Optionen » SQL Anywhere und setzen Kürzungslänge auf einen hohen Wert, z. B. 100000. Führen Sie die Abfrage nochmals aus und sehen Sie sich die Geometrie an.
Der letzte Schritt zeigte, wie ein SVG-Bild in Interactive SQL in der Vorschau angezeigt wird. Es kann jedoch sinnvoller sein, das resultierende SVG-Bild in eine Datei zu schreiben, sodass es von einer externen Anwendung gelesen werden kann. Hierzu können Sie die xp_write_file-Systemprozedur oder die WRITE_CLIENT_FILE-Funktion [Zeichenfolge] verwenden, um in eine Datei des Datenbankservers oder des Clientcomputers zu schreiben. In diesem Beispiel wird die OUTPUT-Anweisung [Interactive SQL] verwendet.
Führen Sie in Interactive SQL folgende SELECT-Anweisung aus, um die ST_AsSVG-Methode aufzurufen und die Geometrie in eine Datei namens myPolygon.svg auszugeben.
SELECT @svg_geom.ST_AsSVG(); OUTPUT TO 'c:\\myPolygon.svg' QUOTE '' ESCAPES OFF FORMAT TEXT |
Sie müssen die Klauseln QUOTE ''
und ESCAPES OFF
einbeziehen, da Zeilenvorschubzeichen und einfache Anführungszeichen sonst zur Beibehaltung von Leerzeichen in den XML-Code
eingefügt werden, wodurch eine ungültige SVG-Datei ausgegeben würde.
Öffnen Sie die SVG-Datei in einem Webbrowser oder in einer Anwendung, die die Anzeige von SVG-Bildern unterstützt. Alternativ dazu können Sie die SVG-Datei auch in einem Texteditor öffnen, um den XML-Code für die Geometrie anzuzeigen.
Die ST_AsSVG-Methode generiert aus einer einzelnen Geometrie ein SVG-Bild. In manchen Fällen soll ein SVG-Bild mit allen Formen in einer Gruppe generiert werden. Die ST_AsSVGAggr-Methode ist eine Aggregatfunktion, die mehrere Geometrien in einem einzigen SVG-Bild kombiniert. Erstellen Sie zunächst eine Variable, um das SVG-Bild zu speichern, und generieren Sie sie mit der ST_AsSVGAggr-Methode.
CREATE OR REPLACE VARIABLE @svg XML; SELECT ST_Geometry::ST_AsSVGAggr( geometry, 'attribute=fill="black"' ) INTO @svg FROM Massdata; |
Die Variable @svg
enthält nun ein SVG-Bild, das alle PLZ-Regionen in der Massdata-Tabelle darstellt. 'attribute=fill="black"'
gibt die Füllfarbe an, die für das generierte Bild verwendet wird. Wenn keine Farbe angegeben wird, verwendet der Datenbankserver
eine willkürliche Füllfarbe. Nachdem die Variable mit dem gewünschten SVG-Bild erstellt wurde, kann sie in eine Datei zur
Anzeige in anderen Anwendungen geschrieben werden. Führen Sie folgende Anweisung aus, um das SVG-Bild in eine Datei auf dem
Datenbankserver zu schreiben.
CALL xp_write_file( 'c:\\temp\\Massdata.svg', @svg ); |
Die Funktion WRITE_CLIENT_FILE könnte auch verwendet werden, um eine Datei für die Clientanwendung zu schreiben. Hierbei könnten weitere Schritte erforderlich sein, um sicherzustellen, dass entsprechende Berechtigungen aktiviert sind. Wenn Sie das SVG-Bild in einer Anwendung öffnen, das SVG-Daten unterstützt, sollte folgendes Bild angezeigt werden.
Das Bild ist nicht einheitlich schwarz. Es sind kleine Lücken zwischen den Grenzen aneinander grenzender PLZ-Regionen zu erkennen. Dies sind weiße Linien zwischen den Geometrien, die charakteristisch dafür sind, wie das SVG-Bild gerendert wird. In den Daten sind nicht tatsächlich Lücken vorhanden. Breitere weiße Linien sind Flüsse und Seen.
Siehe auch:
Dieser Teil der praktischen Einführung zeigt, wie Sie Daten in einem räumlichen Bezugssystem mit planer Erddarstellung projizieren, sodass Sie die Bereichs- und Abstandsmessungen berechnen können.
Die räumlichen Werte in Massdata wurden SRID 4269 (räumliches Bezugssystem NAD83) zugeordnet, als Sie die Daten aus der ESRI-Formdatei in die Datenbank eingelesen haben. SRID 4269 ist ein räumliches Bezugssystem mit gewölbter Erddarstellung. Bestimmte Berechnungen, wie die des Bereichs von Geometrien und einiger räumlicher Prädikate, werden im Modell der gewölbten Erddarstellung jedoch nicht unterstützt. Wenn Ihre Daten derzeit einem räumlichen Bezugssystem mit gewölbter Erddarstellung zugeordnet sind, können Sie eine neue Spalte für räumliche Daten erstellen, die die Werte in ein räumliches Bezugssystem mit planer Erddarstellung projiziert, und dann die Berechnungen mit dieser Spalte durchführen.
Zur Messung des Bereichs der Polygone, die die PLZ-Bereiche darstellen, müssen Sie die Daten in Massdata.geometry in ein räumliches Bezugssystem mit planer Erddarstellung projizieren.
Zur Auswahl einer geeigneten SRID für die Projektion der Daten in Massdata.geometry fragen Sie die Systemansicht SYSSPATIALREFERENCESYSTEM folgendermaßen nach einer SRID ab, die das Wort Massachusetts enthält:
SELECT * FROM SYSSPATIALREFERENCESYSTEM WHERE srs_name LIKE '%massachusetts%'; |
Diese Abfrage gibt mehrere SRIDs zur Verwendung mit den Massachusetts-Daten zurück. Für diese praktische Einführung wird 3586 verwendet.
Sie müssen nun die Spalte Massdata.geometry_flat erstellen, in die Sie die Geometrien in 3586 mit der ST_Transform-Methode projizieren werden.
ALTER TABLE Massdata ADD proj_geometry AS ST_Geometry(SRID=3586) COMPUTE( geometry.ST_Transform( 3586 ) ); |
Siehe auch: ST_Transform-Methode für den ST_Geometry-Datentyp
Sie können den Bereich mit Massdata.proj_geometry berechnen. Führen Sie z. B. folgende Anweisung aus:
SELECT zip, proj_geometry.ST_ToMultiPolygon().ST_Area('Statute Mile') AS area FROM Massdata ORDER BY area DESC; |
ST_Area wird nur zwischen Punktgeometrien, aber nicht in räumlichen Bezugssystemen mit gewölbter Erddarstellung unterstützt.
Um die Wirkung zu sehen, die die Projektion in ein anderes räumliches Bezugssystem auf die Abstandsberechnungen hat, können Sie mit folgender Abfrage den Abstand zwischen den Mittelpunkten der Postleitzahlen mit dem Modell mit gewölbter Erddarstellung (präziser) sowie mit dem Modell mit planer Erddarstellung berechnen. Beide Modelle sind für diese Daten brauchbar, da die Projektion für den Datensatz geeignet ist.
SELECT M1.zip, M2.zip, M1.CenterPoint.ST_Distance( M2.CenterPoint, 'Statute Mile' ) dist_round_earth, M1.CenterPoint.ST_Transform( 3586 ).ST_Distance( M2.CenterPoint.ST_Transform( 3586 ), 'Statute Mile' ) dist_flat_earth FROM Massdata M1, Massdata M2 WHERE M1.ZIP = '01775' ORDER BY dist_round_earth DESC; |
Angenommen, Sie möchten PLZ-Bereiche suchen, die an den PLZ-Bereich von 01775 angrenzen. Hierzu verwenden Sie die ST_Touches-Methode. Die ST_Touches-Methode vergleicht die Geometrien, um festzustellen, ob eine Geometrie eine andere berührt, ohne sie zu überlappen. Beachten Sie, dass die Ergebnisse für ST_Touches die Zeile für die Postleitzahl 01775 nicht einbezieht (im Gegensatz zur ST_Intersects-Methode).
DROP VARIABLE @Mass_01775; CREATE VARIABLE @Mass_01775 ST_Geometry; SELECT geometry INTO @Mass_01775 FROM Massdata WHERE ZIP = '01775'; SELECT record_number, proj_geometry FROM Massdata WHERE proj_geometry.ST_Touches( @Mass_01775.ST_Transform( 3586 ) ) = 1; |
Siehe auch: ST_Touches-Methode für den ST_Geometry-Datentyp
Mit der Methode ST_UnionAggr können Sie eine Geometrie zurückgeben, die die Vereinigung einer Gruppe von PLZ-Bereichen darstellt. Beispiel: Sie möchten eine Geometrie erstellen, die die Vereinigung der benachbarten PLZ-Bereiche des PLZ-Bereichs 01775 darstellt, unter Ausschluss von 01775 selbst.
In Interactive SQL klicken Sie auf Extras » Spatial Viewer und führen folgende Abfrage aus:
SELECT ST_Geometry::ST_UnionAggr(proj_geometry) FROM Massdata WHERE proj_geometry.ST_Touches( @Mass_01775.ST_Transform( 3586 ) ) = 1; |
Doppelklicken Sie auf das Ergebnis, um es anzuzeigen.
Wenn Sie einen Fehler erhalten, der darauf hinweist, dass die vollständige Spalte nicht aus der Datenbank gelesen werden konnte, erhöhen Sie die Einstellung Kürzungslänge für Interactive SQL. Hierzu klicken Sie in Interactive SQL auf Extras » Optionen » SQL Anywhere und setzen Sie Kürzungslänge auf einen höheren Wert. Führen Sie die Abfrage nochmals aus und sehen Sie sich die Geometrie an.
Siehe auch: ST_UnionAggr-Methode für Typ ST_Geometry.
Stellen Sie den Originalzustand der Beispieldatenbank (demo.db) mit den Schritten unter Die Beispieldatenbank neu erstellen (demo.db) wieder her.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |