Inhaltsverzeichnis- 1. Datentyp
- 1. Was sind MySQL-Geodaten?
- 2. Was ist GeoJSON
- 3. Formatieren räumlicher Datentypen (Konvertieren von Geometrie in GeoJSON)
- 2. Räumliche Analyse
- 1. Generieren Sie eine Pufferzone basierend auf Punkt und Radius
- 3. Bestimmen Sie die Stadt, in der sich der Punkt befindet
- 4. Häufig verwendete räumliche Funktionen
Vorwort: Vor nicht allzu langer Zeit haben wir ein kartenbezogenes Backend-Projekt entwickelt, das einige Punkt-Linien-Oberflächen-Speicher-, Abfrage- und Analysevorgänge erforderte. Daher haben wir die räumlichen Funktionen von MySQL gründlich untersucht und sie im Projekt angewendet. MySQL bietet einen dedizierten Typ „Geometrie“ (der alle räumlichen Strukturen unterstützt) für die Speicherung und Verarbeitung räumlicher Daten sowie die unterteilten Typen Point , LineString “, Polygon , MultiPoint , MultiLineString , MultiPolygon “ usw. Wir haben etwas über räumliche Funktionen gelernt und können diesen Typ für die Speicherung von Längen- und Breitengraden und zur Routenspeicherung verwenden und verwandte räumliche Funktionen für Analysen nutzen. Alle folgenden Datenbankvorgänge basieren auf MySQL5.7.20 . 1. Datentyp 1. Was sind MySQL-Geodaten?- MySQL stellt den Datentyp
geometry zum Speichern von Koordinateninformationen bereit. Der Geometrietyp unterstützt die folgenden drei Arten der Datenspeicherung:
Es gibt auch Typen wie MULTIPOINT (mehrere Punkte), MULTILINESTRING (mehrere Linien), MULTIPOLYGON (mehrere Facetten), GEOMETRYCOLLECTION (Sammlung, die Punkte, Linien und Flächen enthalten kann)
2. Was ist GeoJSON GeoJSON ist ein Format zum Kodieren verschiedener geografischer Datenstrukturen. Ein GeoJSON-Objekt kann eine Geometrie, ein Feature oder eine Sammlung von Features darstellen. GeoJSON unterstützt die folgenden Geometrietypen: Punkt, Linie, Polygon, Multipunkt, Multilinie, Multipolygon und Geometriesammlung. Ein Feature in GeoJSON enthält ein Geometrieobjekt und andere Eigenschaften, und eine Feature-Sammlung stellt einen Satz von Features dar. Eine vollständige GeoJSON-Datenstruktur ist immer ein Objekt (in der JSON-Terminologie). In GeoJSON bestehen Objekte aus Sammlungen von Name/Wert-Paaren, auch Mitglieder genannt. Der Name jedes Mitglieds ist immer eine Zeichenfolge. Der Wert eines Mitglieds ist entweder eine Zeichenfolge, eine Zahl, ein Objekt, ein Array oder eine der folgenden Literalkonstanten: „ true “, „ false “ und „ null “. Ein Array besteht aus den Elementen, deren Werte oben genannt sind.

Um der komplexen geografischen Umgebung und dem Kartengeschäft gerecht zu werden, gibt es neben einfachen Punkten, Linien und Flächen auch Mehrfachpunkte ( MultiPoint ), Mehrfachlinien ( MultiLineString ), Mehrfachpolygone ( MultiPolygon ), Geometriesammlungen ( GeometryCollection ) usw. Wer mit JSON vertraut ist, kann sich schnell mit geojson vertraut machen und es anwenden.
3. Formatieren räumlicher Datentypen (Konvertieren von Geometrie in GeoJSON) Die in der Datenbank gespeicherten räumlichen Daten werden durch Visualisierungstools im Klartextformat angezeigt, wie im obigen Beispiel gezeigt. Die Struktur ist für den Client nicht einfach zu analysieren, daher bietet MySQL mehrere räumliche Funktionen zum Analysieren und Formatieren räumlicher Daten. geojson ist das Standardformat zum Anzeigen räumlicher GIS-Daten. Sowohl das Front-End-Kartenframework als auch das Back-End-Framework für die räumliche Analyse unterstützen geojson Format.

Beispiel: Vorbereiten von Beispieldaten 
Funktionsanwendungsbeispiele 1. Fragen Sie die Informationen der meteorologischen Überwachungspunkte von Luteng ab und verarbeiten Sie die Geometrie in das GeoJSON-Format SQL ausführen:
Wählen Sie ID, Punktname, ST_ASGEOJSON (Punktgeom) als GeoJSON vom meteorologischen Punkt, wobei ID = 1 ist.
Abfrageergebnisse: 
2. Fügen Sie neue Punktinformationen hinzu. Die vom Client übermittelte Punktgeometriezeichenfolge muss mit der Funktion ST_GEOMFROMTEXT verarbeitet werden, bevor sie eingefügt werden kann. Andernfalls wird ein Fehler gemeldet. Der Kunde übermittelt die Punktinformationen
{
"Punktname": "Überwachungspunkt der Xinshuai-Gruppe",
"Geotext": "Punkt (117.420671499 40.194914201)"}
}
Fehlerbeispiel:
einfügen in meteorologischer_Punkt(Punktname, Punktgeom) Werte("Xinshuai Group Monitoring Point", "POINT(117.420671499 40.194914201)")
Fehler 1416 - Aus den Daten, die Sie an das Feld GEOMETRY gesendet haben, kann kein Geometrieobjekt abgerufen werden.
Korrektes Einfügen von SQL:
einfügen in meteorologischer_Punkt(Punktname, Punktgeom) Werte("Xinshuai Group Monitoring Point", ST_GEOMFROMTEXT("POINT(117.420671499 40.194914201)"))
3. Neue Punkte hinzufügen. Das vom Client übermittelte Punktformat ist im GeoJSON-Format. Es muss vor dem Einfügen mit der Funktion ST_GeomFromGeoJSON verarbeitet werden. Der Kunde übermittelt die Punktinformationen
{
"point_name":"Überwachungspunkt für zivile Sprengstoffunternehmen",
"geojson":"{"Typ": "Punkt", "Koordinaten": [117.410671499, 40.1549142015]}"}
}
SQL einfügen
einfügen in meteorological_point(point_name, point_geom) Werte("Minbao Company Monitoring Point", ST_GeomFromGeoJSON("{\"type\": \"Point\", \"coordinates\": [117.410671499, 40.1549142015]}"))
Zusammenfassung der räumlichen Datenformatierung
Die Speicherung mysql geometry Geometriedaten erfordert vor der Speicherung eine Funktionsverarbeitung des geometry oder geojson , andernfalls wird ein Fehler gemeldet. Verwenden Sie bei der Abfrage die Formatierungsfunktion, um sie in geojson zu konvertieren, um die serverseitige Übertragung und die clientseitige Framework-Analyse zu erleichtern
2. Räumliche Analyse Im vorherigen Abschnitt haben wir die Speicherung räumlicher Funktionen, die Formatierung von Abfragen und verwandte Vorgänge vorgestellt und etwas über räumliche Datenstrukturen und GeoJSON gelernt. Dieser Abschnitt stellt die Anwendung räumlicher Datenverarbeitungsfunktionen vor.
1. Generieren Sie eine Pufferzone basierend auf Punkt und Radius 
Puffer ist eine sehr häufige Funktion in Kartenfunktionen. Erstens kann damit der Abdeckungsbereich eines bestimmten Bereichs von Punkten, Linien und Flächen angezeigt werden. Zweitens sind in einigen Analyseszenarien Standortkoordinateninformationen und Pufferradius bekannt, und ein Puffer wird als Abfragebedingung für die geografische Suche generiert.
Wählen Sie ST_ASGEOJSON (ST_BUFFER (ST_GeomFromGeoJSON ('${geojsonStr}'), ${radius}))
SQL-Interpretation Der Anrufer übergibt eine GeoJSON-Zeichenfolge und einen Radius (Meter). ST_GeomFromGeoJSON wird verwendet, um geojson Zeichenfolge in geometry in der Datenbank zu verarbeiten. ST_BUFFER(geometry , Radius) wird dann verwendet, um die Pufferraumdaten zu generieren. Die Funktion gibt dasselbe Format wie die Geometrie zurück, daher wird sie von einer ST_ASGEOJSON -Funktion umschlossen, um das zurückgegebene Ergebnis in GeoJSON zu verarbeiten, damit es vom Client einfach gelesen und gerendert werden kann.
Beispiel: - Es gibt eine Punkt-GeoJSON-Zeichenfolge „{"type": "Point", "coordinates": [117.410671499, 40.1549142015]}“ mit einem Pufferradius von 50 Metern (Hinweis: Der Parameter „Geographic Information“ und der Rückgabewert von ST_BUFFER() liegen alle im Mercator-Koordinatensystem. Wenn das GeoJSON nicht im Mercator-Koordinatensystem liegt, muss es mithilfe einer Tool-Klasse konvertiert werden.)
öffentliche Klasse MercatorUtils {
/**
* Punkt-GeoJSON in Mercator konvertieren*
* @param Punkt
* @zurückkehren
*/
öffentliches statisches JSON-Objekt Punkt2Mercator(JSON-Objekt Punkt) {
JSONArray xy = Punkt.getJSONArray(KOORDINATEN);
JSONArray mercator = lngLat2Mercator(xy.getDouble(0), xy.getDouble(1));
Punkt.put(KOORDINATEN, Mercator);
Rückgabepunkt;
}
/**
* Breiten- und Längengrad in Mercator umrechnen*/
öffentliches statisches JSONArray lngLat2Mercator(double lng, double lat) {
doppelte x = lng * 20037508,342789 / 180;
doppeltes y = Math.log(Math.tan((90 + lat) * M_PI / 360)) / (M_PI / 180);
y = y * 20037508,34789 / 180;
JSONArray xy = neues JSONArray();
xy.add(x);
xy.add(y);
gib xy zurück;
}
/**
* Daten des Mercator-Koordinatensystems in ein normales Koordinatensystem konvertieren*/
öffentliches statisches JSON-Objekt mercatorPolygon2Lnglat(JSON-Objekt Polygon) {
JSONArray-Koordinaten = Polygon.getJSONArray(KOORDINATEN);
JSONArray xy = Koordinaten.getJSONArray(0);
JSONArray ms = neues JSONArray();
für (int i = 0; i < xy.size(); i++) {
JSONArray p = xy.getJSONArray(i);
JSONArray m = mercator2lngLat(p.getDouble(0), p.getDouble(1));
ms.add(m);
}
JSONArray neueKoordinaten = neues JSONArray();
neueKoordinaten.add(ms);
polygon.put(KOORDINATEN, neueKoordinaten);
Rückgabepolygon;
}
}
Das konvertierte geojson kann als SQL des obigen Puffers verwendet werden, um räumliche Pufferdaten zu generieren. Die generierten Pufferdaten liegen ebenfalls im Mercator-Koordinatensystem vor und müssen mit mercatorPolygon2Lnglat verarbeitet werden, bevor sie an den Client zurückgegeben werden. Der Aufrufvorgang ist wie folgt: - Der Client übermittelt den Punkt
geojson und den Radius - Verwenden Sie die Mercator-Tool-Klasse, um Punkt
geojson in geojson im Mercator-Koordinatensystem zu konvertieren - Rufen Sie SQL auf, um einen Puffer zu generieren
- Der Rückgabewert wird mit Hilfe der Mercator-Toolklasse in
mercatorPolygon2Lnglat umgewandelt und an den Aufrufer zurückgegeben.
Zusammenfassung:
Oben wird beschrieben, wie Sie mit der mysql st_buffer einen Puffer generieren. Im tatsächlichen Betrieb ist dies nach meiner Anwendung in Forschung und Entwicklung möglich. In der tatsächlichen Entwicklung können Sie auch einige Toolkits verwenden, um die Puffergenerierung zu erreichen, z. B. Geotools ... 3. Bestimmen Sie die Stadt, in der sich der Punkt befindet- Bestimmen Sie die Stadt, in der sich der Punkt des Benutzers befindet – der Client übermittelt die Standortinformationen des Benutzers und bestimmt die Stadt, in der sich der Benutzer befindet (verwenden Sie ST_INTERSECTS(), um zu bestimmen, ob sich zwei Geometrien schneiden, und geben Sie 0 oder 1 zurück).
Wählen Sie ST_INTERSECTS(ST_GeomFromGeoJSON('${geoJsonStrA}'), ST_GeomFromGeoJSON('${geoJsonStrB}'))
SQL-Interpretation: Verwenden Sie die Formatierungsfunktion, um geojson in das von der Funktion unterstützte Geometrieformat zu verarbeiten, und verwenden Sie ST_INTERSECTS um eine Beurteilung vorzunehmen 4. Häufig verwendete räumliche Funktionen
Zusammenfassen:
MySQL bietet eine Vielzahl von Datentypen und Funktionen zum Speichern und Analysieren von räumlichen Daten. Das Erlernen solcher Funktionen kann uns helfen, geografische Informationen besser zu verarbeiten. Bevor Sie sie verwenden, müssen Sie das Koordinatensystem und geojson bezogene Kenntnisse verstehen, um Fallstricke zu vermeiden. Wenn Sie diesbezügliche Fragen haben, können Sie diese auch im Kommentarbereich kommunizieren. Wenn es Missverständnisse gibt, korrigieren Sie diese bitte. Dies ist das Ende dieses Artikels über MySQL-Raumdatenspeicherung und -Funktionen. Weitere relevante Inhalte zu MySQL-Raumdatenspeicherung und -Funktionen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:- Detaillierte Erklärung zum Erstellen gespeicherter Prozeduren und Funktionen in MySQL
- Detaillierte Erläuterung der gespeicherten Prozeduren und Funktionen von MySQL
- Einfaches Schreiben von gespeicherten MySQL-Prozeduren und -Funktionen
- Detaillierte Einführung in die gespeicherten MySQL-Funktionen
|