Mehr

So finden Sie einen Punkt auf einer Linienfolge und in einem Bereich von 10 Metern

So finden Sie einen Punkt auf einer Linienfolge und in einem Bereich von 10 Metern


Ich habe eine Linienfolge, die im Diagramm angezeigt wird, und ich habe einen Punkt, der sich einige Zeit auf der Linienfolge oder außerhalb der Linienfolge befindet, aber in Reichweite, der eine rote Linie ist und manchmal außerhalb der Reichweite außerhalb der Route im räumlichen mysql-index

MEIN Projekt ist das, wie Sie sehen können, dass der Bus Nr. 26 außerhalb der Route ist. Wie kann ich also den Bus außerhalb der Route bekommen?

Ich denke, es gibt zwei Dinge, dies zu tun

  1. Linienfolge in ein Polygon mit Bereich umwandeln und Punkt in einem Polygon finden.
  2. Punkt in Polygon umwandeln und prüfen, ob Linienzug das Polygon schneidet.

Also sag wie kann ich das machen do

meine Datenbankstruktur ist

'id', 'int(11)', 'NO', 'PRI', NULL, 'auto_increment"route_name', 'varchar(45)', 'YES',", NULL,"from_id', 'varchar(45 .) )', 'YES',", NULL,"to_id', 'varchar(45)', 'YES',", NULL,"line_string', 'geometry', 'NO', 'MUL', NULL,"

Sie können das Polygon mit Puffer erstellen.

Beachten Sie, dass die Entfernung in den Einheiten des von Ihnen verwendeten Koordinatenreferenzsystems angegeben ist (was wahrscheinlich Grad ist, da Sie den Breiten- und Längengrad angegeben haben). Wenn Sie also einen 10-Meter-Puffer wünschen, müssen Sie ihn wahrscheinlich projizieren (oder bereit sein, eine Ungenauigkeit in der Puffergröße zu akzeptieren, wenn Sie nur 10 Meter in Grad umrechnen möchten). Sie können die Projektion in mysql nicht durchführen - das ist nicht so schlau. Andere Datenbanken (z.B. Spatialite oder Postgis) können dies mit ST_Transform. Die Ungenauigkeit beim Versuch, dies in Grad zu tun, hängt davon ab, wie viele Breiten- und Längengrade 10 m für Ihren Arbeitsort haben.

Sobald Sie das haben, können Sie ST_Disjoint ausführen, um alle Punkte auszuwählen, die sich nicht innerhalb eines Polygons befinden.


So lesen Sie eine räumliche Adresse des United States National Grid (USNG)

Grid Zone Bezeichnung für eine weltweit eindeutige Adresse.

100.000-Meter-Quadrat-Kennzeichnung für regionale Gebiete.

Gitterkoordinaten für lokale Bereiche.

Dieses Format ermöglicht das Abschneiden einer räumlichen Adresse (oder ein anderer Begriff könnte abgekürzt). Zum Beispiel könnte ein stationärer Briefkopf für das Innenministerium die Adresse wie folgt darstellen:

1849 C Street NW, Washington, DC 20006

USNG: 18SUJ22850705 (NAD 83)

Eine vollständige räumliche USNG-Adresse bietet einen einzigartigen Wert und ist für die Verwendung mit GPS-Empfängern und geografischen Informationssystemen (GIS) erforderlich. Die USNG-Raumadresse aus dem obigen stationären Briefkopf ist für den Schwerpunkt des Gebäudes. Auf der anderen Seite könnte ein Mitarbeiter des Innenministeriums jemandem, der aus der Umgebung zu Besuch kommt, sagen: "Der Eingang unseres südlichen Besuchers befindet sich in der 1849 C Street NW, im Raster 22850694." Eine andere räumliche Adresse könnte den Eingang des Besuchers Nord identifizieren, und ein anderer Satz könnte die Laderampe für Lieferfahrzeuge identifizieren.

Lokaler Bereich, der Gitterkoordinaten liest. Gitterkoordinaten werden verwendet, um einen bestimmten Ort innerhalb eines lokalen Gebiets (innerhalb eines Gebiets von 100 mal 100 Kilometer) zu definieren. Koordinaten werden entlang der Seiten einer Karte geschrieben, die bestimmte Rasterlinien bezeichnen. (Diese Gitterlinien basieren auf UTM-Werten.) Die beiden größeren Zahlen kennzeichnen eine Gitterlinie und werden als Hauptziffern wie unten abgebildet.

Um Koordinatenwerte zu zeichnen, immer rechts lesen, dann hoch. Koordinaten werden immer als gerade Zahl von Ziffern angegeben, damit Sie wissen, wo Sie die Ost- und Nordkoordinaten trennen müssen. Dadurch können Sie innerhalb eines lokalen Bereichs auf den von Ihnen gewünschten Genauigkeitsgrad abkürzen. Gitterkoordinaten werden verwendet, um Punktmerkmale wie eine Nachbarschaft, ein Fußballfeld, ein bestimmtes Haus oder sogar einen Parkplatz zu definieren. Diese erfordern unterschiedliche Granularität. Beispielsweise

4 Stellen - 2306 - lokalisiert einen Punkt mit einer Genauigkeit von 1.000 Metern (ein Gebiet in Nachbarschaftsgröße).

6 Ziffern - 234064 - lokalisiert einen Punkt mit einer Genauigkeit von 100 Metern (ein Bereich von der Größe eines Fußballfelds).

8 Ziffern - 23480647 - lokalisiert einen Punkt mit einer Genauigkeit von 10 Metern (der Größe eines bescheidenen Hauses).

10 Stellen - 2348306479 - lokalisiert einen Punkt mit einer Genauigkeit von 1 Meter (innerhalb eines Parkplatzes).

Im folgenden Beispiel wird das Washington Monument so beschrieben, dass es sich im Raster 23480647 befindet (denken Sie an 2348 / 0647). Lesen Sie rechts bis zur Rasterlinie 23 (mit den Hauptziffern). Zählen Sie dann die Gitterlinien bis zur Linie 06. Dieser Schnittpunkt ist als Gitter 2306 bekannt. Dieser vierstellige Wert würde die Position auf 1.000 Meter genau angeben. Direkt in Metern von der Linie 23 entfernt finden wir das Washington Monument weitere 480 Meter östlich. Die komplette Lockerungskomponente ist 23480. In Metern von der Gitterlinie 06 liegt das Monument weitere 470 Meter nördlich. Die vollständige Hochwertkomponente ist 05470. Wir lassen die 1-Meter-Ebenenwerte (in diesem Fall als 0s angezeigt) fallen und kombinieren die Rechts- und Hochwertkomponenten, die Gitterkoordinate wird als achtstelliger Wert (bis auf 10 Meter) angegeben als :

Regionalbereich 100.000-Meter-Quadrat-Identifizierung.Die USNG unterteilt die Welt weiter in 100.000-Meter-Quadrate und identifiziert diese mit zwei Buchstabenwerten. Die folgende Abbildung zeigt den Bereich Washington, DC. In der Raumadresse für das Washington Monument (18SUJ23480647) können Sie sehen, dass das Denkmal auf dem 100.000 Meter mal 100.000 Meter großen Quadrat fällt UJ. (Hinweis: Das gelb-rote Quadrat umreißt eine Größe von 100 km x 100 km OrtsbereichUmgebung von Washington, DC.)

Während das USNG als alphanumerisches Referenzsystem für das UTM-Koordinatensystem bezeichnet wird, ist es eigentlich viel mehr. Das Beschriftungsschema für die 100.000-Meter-Quadrat-Identifikation ist so konzipiert, dass sich jede Zwei-Buchstaben-Kombination nicht wiederholt, sondern alle 18° Längengrad und ein ähnlicher Breitenbereich. Somit liefert jedes Präfix aus zwei Buchstaben zu einer Gitterkoordinate einen eindeutigen Wert innerhalb eines sehr großen Bereichs. Im Fall des Washington Monuments unter UJ23480647 ist sein Standort eindeutig innerhalb eines Gebiets festgelegt, das den größten Teil der Ostküste der Vereinigten Staaten abdeckt, wie unten dargestellt.

Weltweit einzigartige Werte Grid-Zonen-Bezeichnungen. Ausgehend von einem lokalen Gebiet durch regionale Gebiete ist die letzte Definitionsebene einer räumlichen Adresse die Grid Zone Designation. Die Welt ist in 60 UTM-Zonen unterteilt, die jeweils 6° Längengrad breit sind. Das Nummerierungsschema für diese beginnt bei 180° Länge und zählt nach Osten. Die angrenzenden USA werden von den Zonen 10 bis 19 abgedeckt. In nördlicher Richtung ist die Welt in 8° Breitengrade unterteilt. Die angrenzenden USA werden zum Beispiel von den Gürteln R, S, T und U bedeckt. Somit fällt das Gebiet von Washington DC in die Grid Zone Designation 18S, wie unten dargestellt. Dieses Präfix identifiziert eine eindeutige US-amerikanische National Grid-Raumadresse für das Washington Monument auf dem gesamten Planeten. Diese vollständige und eindeutige räumliche Adresse ist für GPS-Empfänger erforderlich.

Zur Überprüfung sehen wir, dass eine vollständige US-amerikanische National Grid-Raumadresse drei Teile enthält, während wir zu einem eindeutigen Standort aufschlüsseln:

Bezeichnung der Netzzone (d. h. 18S).

100.000-Meter-Quadrat-Identifikation (d. h. UJ).

Gitterkoordinaten einer geraden Anzahl von Ziffern im Bereich von 2 bis 10 (d. h. 23480647 In diesem Fall identifizieren acht Ziffern einen Ort von der Größe eines bescheidenen Hauses). Beim Plotten von Koordinaten liest man immer richtig, dann nach oben.

Eine räumliche Adresse wird normalerweise als eine einzelne Wertekette geschrieben. Beachten Sie, wie das horizontale Datum (NAD 83) aufgenommen wurde:


4 Antworten 4

Aus diesen Zauberflächendiagrammen und den Regeln zur Bestimmung des genauen Radius in Quadraten können Sie extrapolieren.

Unabhängig von der Form des Bereichs wählst du den Punkt aus, an dem der Zauberspruch entsteht, aber ansonsten kontrollierst du nicht, welche Kreaturen oder Objekte der Zauberspruch betrifft. Der Ausgangspunkt eines Zauberspruchs ist immer ein Gitterschnittpunkt. Um zu bestimmen, ob sich eine bestimmte Kreatur im Wirkungsbereich eines Zaubers befindet, zähle die Entfernung vom Ursprungspunkt in Quadraten, genauso wie du es beim Bewegen eines Charakters oder beim Bestimmen der Reichweite für einen Fernkampfangriff tust. Der einzige Unterschied besteht darin, dass Sie nicht von der Mitte eines Quadrats bis zur Mitte des nächsten zählen, sondern von Kreuzung zu Kreuzung.

Sie können diagonal über ein Quadrat zählen, aber denken Sie daran, dass jede zweite Diagonale als 2 Distanzquadrate zählt. Befindet sich die äußerste Kante eines Quadrats im Wirkungsbereich des Zauberspruchs, befindet sich alles innerhalb dieses Quadrats innerhalb des Wirkungsbereichs des Zauberspruchs. Wenn der Wirkungsbereich des Zauberspruchs jedoch nur den nahen Rand eines Feldes berührt, bleibt alles innerhalb dieses Feldes vom Zauber unberührt.

(Das Diagramm und der Text stammen von Pathfinder, aber diese Regeln haben sich seit 3.5 nicht geändert.)


So finden Sie einen Punkt auf einem Linienzug und in einer Entfernung von 10 Metern - Geographische Informationssysteme

Implementierung des GeoSPARQL 1.0-Standards mit Apache Jena für SPARQL-Abfragen oder -API.

Diese Implementierung folgt dem 11-052r4 OGC GeoSPARQL-Standard (http://www.opengeospatial.org/standards/geosparql). Die Implementierung ist reines Java und erfordert keine Einrichtung oder Konfiguration von relationalen Datenbanken und raumbezogenen Erweiterungen von Drittanbietern.

Es implementiert die sechs im GeoSPARQL-Dokument beschriebenen Konformitätsklassen:

  • Kern
  • Topologie-Vokabular
  • Geometrieerweiterung
  • Geometrie Topologie
  • RDFS-Entailment-Erweiterung
  • Erweiterung zum Umschreiben von Abfragen

Die Serialisierungen WKT (wie in 11-052r4 beschrieben) und GML 2.0 Simple Features Profile (10-100r3) werden unterstützt. Zusätzliche Serialisierungen können implementiert werden, indem io.github.galbiston.geosparql_jena.implementation.datatype.GeometryDatatype erweitert und beim org.apache.jena.datatypes.TypeMapper von Apache Jena registriert wird.

Alle drei räumlichen Beziehungsfamilien werden unterstützt: Einfache Funktion, Egenhofer und RCC8.

Die Indizierung und Zwischenspeicherung von räumlichen Objekten und Beziehungen wird durchgeführt auf Nachfrage während der Abfrageausführung. Daher sollten die Einrichtungsverzögerungen minimal sein.

Ein Benchmarking der Umsetzung mit Strabon und dem Parlament hat ergeben, dass sie vergleichbar oder schneller ist. Das verwendete Benchmarking war die Geographica-Abfrage und der Datensatz (http://geographica.di.uoa.gr/). Die Veröffentlichung der Benchmarking-Ergebnisse ist in Vorbereitung.

Die folgenden zusätzlichen Funktionen werden ebenfalls bereitgestellt:

  • Geometrieeigenschaften werden automatisch berechnet und müssen nicht im Dataset bestätigt werden.
  • Die Konvertierung zwischen EPSG-Raum-/Koordinaten-Bezugssystemen wird automatisch angewendet. Daher können gemischte Datensätze oder Abfragen angewendet werden. Dies ist auf die lokale Installation des Apache SIS EPSG-Datensatzes angewiesen, siehe Schlüsselabhängigkeiten.
  • Maßeinheiten werden automatisch in die entsprechenden Einheiten für das Koordinatenbezugssystem umgewandelt.
  • Geometrie-, Transformations- und räumliche Beziehungsergebnisse werden in persistenten und konfigurierbaren, zeitlich begrenzten Caches gespeichert, um die Reaktionszeiten zu verbessern und Neuberechnungen zu reduzieren.
  • Datensatzkonvertierung zwischen Serialisierungen und räumlichen/Koordinatenbezugssystemen. Es können auch tabellarische Daten geladen werden, siehe RDF-Tabellen-Projekt (https://github.com/galbiston/rdf-tables).
  • Der Einfachheit halber wurden Funktionen zum Testen von Geometrieeigenschaften direkt an Geometrieliteralen hinzugefügt.

GeoSPARQL Jena kann als Bibliothek mit Maven etc. von Maven Central aus aufgerufen werden.

Ein HTTP-Server (SPARQL-Endpunkt) mit Apache Jenas Fuseki ist über das GeoSPARQL Fuseki-Projekt verfügbar (https://github.com/galbiston/geosparql-fuseki).

SPARQL-Abfragekonfiguration

Die Verwendung der Bibliothek für SPARQL-Abfragen erfordert eine Codezeile. Die gesamte Indizierung und Zwischenspeicherung erfolgt während der Abfrageausführung, sodass es bei der Initialisierung zu minimalen Verzögerungen kommen sollte. Dadurch werden die Eigenschaftsfunktionen bei der ARQ-Abfrage-Engine registriert und die Indizes für zeitlich begrenztes Caching verwendet.

Dort sind drei Indizes die unabhängig konfiguriert oder abgeschaltet werden können. Diese Indizes behalten Sie Daten bei, die bei der Ausführung einer Abfrage möglicherweise erneut benötigt werden, zwischen verschiedenen Abfragen jedoch möglicherweise nicht erforderlich sind. Daher nimmt die Speichernutzung während der Abfrageausführung zu und geht dann zurück, wenn die Daten nicht wiederverwendet werden. All die Indizes unterstützen die Parallelität und können auf eine maximale Größe eingestellt werden oder die Kapazität nach Bedarf erhöhen.

  • Geometrie-Literal: Geometrieobjekte nach Deserialisierung aus Geometry Literal .
  • Geometrietransformation: Geometrieobjekte, die aus Koordinatentransformationen zwischen räumlichen Bezugssystemen resultieren.
  • Abfrage umschreiben: Ergebnisse räumlicher Beziehungen zwischen räumlichen Objekten aus Feature und Geometrie.

Tests haben ergeben, dass sich die Dauer der Abfragevervollständigung mithilfe der Indizes um bis zu 20 % verbessert. Das Indizes kann nach Größe, Aufbewahrungsdauer und Häufigkeit der Bereinigung konfiguriert werden.

Grundkonfiguration mit Standardwerten: GeoSPARQLConfig.setupMemoryIndex()

Indizes mit maximalen Größen: GeoSPARQLConfig.setupMemoryIndexSize(50000, 50000, 50000)

Indizes zum Entfernen von nicht verwendeten Objekten nach 5 Sekunden: GeoSPARQLConfig.setupMemoryIndexExpiry(5000, 5000, 5000)

Kein Index-Setup (Umschreiben der Abfrage wird noch durchgeführt, aber die Ergebnisse werden nicht gespeichert): GeoSPARQLConfig.setupNoIndex()

Keine Indizes und kein Umschreiben von Abfragen: GeoSPARQLConfig.setupNoIndex(false)

Zurücksetzen von Indizes und anderen gespeicherten Daten: GeoSPARQLConfig.reset()

In io.github.galbiston.geosparql_jena.configuration.GeoSPARQLConfig werden verschiedene Konfigurationsmethoden bereitgestellt. Das Caching häufig verwendeter, aber kleiner Datenmengen wird auch in mehreren Register, z.B. Koordinatenbezugssysteme und mathematische Transformationen.

Abfragen von Datensätzen und Modellen mit SPARQL

Die Einrichtung von GeoSPARQL Jena muss nur einmal in einer Anwendung durchgeführt werden. Nach der Einrichtung erfolgt die Abfrage mit den Standardabfragemethoden von Apache Jena.

So fragen Sie ein Modell mit GeoSPARQL oder Standard-SPARQL ab:

Weitere Informationen zur SPARQL-Abfrage mit Apache Jena finden Sie auf deren Website (https://jena.apache.org/tutorials/sparql.html). Wenn Ihr Datensatz von Ihrer Anwendung getrennt sein und über HTTP aufgerufen werden muss, benötigen Sie wahrscheinlich das GeoSPARQL Fuseki-Projekt (https://github.com/galbiston/geosparql-fuseki). Die GeoSPARQL-Funktionalität muss in der Anwendung oder dem Fuseki-Server eingerichtet werden, auf dem sich der Datensatz befindet.

es ist empfohlen dass hasDefaultGeometry-Eigenschaften im Dataset enthalten sind, um auf alle Funktionen zuzugreifen. es ist notwendig dass SpatialObject-Klassen im Datensatz behauptet oder abgeleitet werden (d. h. ein Reasoner mit dem GeoSPARQL-Schema wird angewendet). Methoden zur Aufbereitung eines Datensatzes finden Sie in io.github.galbiston.geosparql_jena.configuration.GeoSPARQLOperations .

Die Bibliothek kann als API in Java verwendet werden. Die Hauptklasse zur Behandlung von Geometrien und deren räumlichen Beziehungen ist der GeometryWrapper . Dies kann durch Analysieren der String-Darstellung einer Geometrie unter Verwendung des entsprechenden Datentyps (z. B. WKT oder GML) erreicht werden. Alternativ kann ein Literal mit der Methode GeometryWrapper.extract() und registrierten Datentypen automatisch extrahiert werden. Die GeometryWrapperFactory kann verwendet werden, um direkt einen GeometryWrapper zu erstellen. Es gibt Überschneidungen zwischen räumlichen Beziehungsfamilien, sodass wiederholte Methoden nicht angegeben werden.

Parsen eines Geometrieliterals : GeometryWrapper GeometrieWrapper = WKTDatatype.INSTANCE.parse("POINT(1 1)")

Auszug aus einem Jenaer Literal: GeometryWrapper GeometrieWrapper = GeometryWrapper.extract(geometryLiteral)

Aus einer JTS-Geometrie erstellen: GeometryWrappergeometrieWrapper = GeometryWrapperFactory.createGeometry(geometry, srsURI,geometrieDatatypeURI)

Aus einer JTS-Punktgeometrie erstellen: GeometryWrapper GeometrieWrapper = GeometryWrapperFactory.createPoint(coordinate, srsURI, GeometrieDatatypeURI)

Konvertieren von CRS/SRS: GeometryWrapper otherGeometryWrapper = GeometrieWrapper.convertCRS("http://www.opengis.net/def/crs/EPSG/0/27700")

Räumliche Beziehung: boolean isCrossing = GeometrieWrapper.crosses(otherGeometryWrapper)

DE-9IM Schnittmuster: boolean isRelated = GeometrieWrapper.relate(otherGeometryWrapper, "TFFFTFFFT")

Geometrieeigenschaft: boolean isEmpty = GeometrieWrapper.isEmpty()

Der GeoSPARQL-Standard gibt an, dass WKT-Geometrie-Literale ohne SRS-URI standardmäßig auf CRS84 http://www.opengis.net/def/crs/OGC/1.3/CRS84 gesetzt werden.

Der OGC GeoSPARQL-Standard unterstützt die Darstellung und Abfrage von Geodaten im Semantic Web. GeoSPARQL definiert ein Vokabular zur Darstellung von Geodaten in RDF und definiert eine Erweiterung der SPARQL-Abfragesprache zur Verarbeitung von Geodaten. Darüber hinaus ist GeoSPARQL so konzipiert, dass es Systeme auf der Grundlage qualitativer räumlicher Überlegungen und Systeme basierend auf quantitativen räumlichen Berechnungen unterstützt.

Der GeoSPARQL-Standard basiert auf dem OGC Simple Features-Standard (http://www.opengeospatial.org/standards/sfa), der in relationalen Datenbanken verwendet wird. Für die Verwendung mit RDF und SPARQL wurden Modifikationen und Erweiterungen vorgenommen. Der Simple Features-Standard und als Erweiterung GeoSPARQL vereinfachen Berechnungen für die euklidische Ebenengeometrie. Daher sind Datensätze, die ein geographisches räumliches/Koordinaten-Bezugssystem verwenden, die auf Breiten- und Längengraden auf einem Ellipsoid basieren, z.B. WGS84, wird ein kleiner Fehler eingeführt. Dieser Fehler wurde aufgrund der vereinfachten Berechnung, die er bietet, als akzeptabel erachtet.

Ein Java-Framework zum Erstellen von Semantic Web- und Linked Data-Anwendungen. Das Framework bietet Standardkonformität für RDF und SPARQL und umfasst Erweiterungen für persistenten Speicher (TDB) und HTTP-Server (Fuseki).

Apache SIS/SIS_DATA-Umgebungsvariable

Apache Spatial Information System (SIS) ist eine kostenlose Java-Sprachbibliothek für die Entwicklung von Geodatenanwendungen. SIS stellt Datenstrukturen für geografische Merkmale und zugehörige Metadaten zusammen mit Methoden zur Manipulation dieser Datenstrukturen bereit. Die Bibliothek ist eine Implementierung von GeoAPI 3.0-Schnittstellen und kann für Desktop- oder Serveranwendungen verwendet werden.

Eine Teilmenge der EPSG-Raum-/Koordinaten-Bezugssysteme ist standardmäßig enthalten. Der vollständige EPSG-Datensatz wird nicht verteilt, da die EPSG-Nutzungsbedingungen nicht mit der Apache-Lizenz kompatibel sind. Es stehen mehrere Optionen zur Verfügung, um den EPSG-Datensatz einzuschließen, indem die Umgebungsvariable SIS_DATA (http://sis.apache.org/epsg.html) festgelegt wird.

Ein eingebetteter EPSG-Datensatz kann in eine Gradle-Anwendung eingebunden werden, indem die folgende Abhängigkeit zu build.gradle hinzugefügt wird:

Die JTS Topology Suite ist eine Java-Bibliothek zum Erstellen und Bearbeiten von Vektorgeometrie.

Im Folgenden sind Implementierungspunkte aufgeführt, die während der Verwendung nützlich sein können.

Für den GeoSPARQL v1.0-Standard (v1.0.1 - http://schemas.opengis.net/geosparql/1.0/geosparql_vocab_all.rdf) wurde ein RDF/XML-Schema veröffentlicht. Dies kann auf Jena-Modelle (https://jena.apache.org/documentation/inference/) angewendet werden, um RDFS- und OWL-Inferenzen auf einem GeoSPARQL-konformen Datensatz bereitzustellen. Das veröffentlichte Schema entspricht jedoch nicht dem Standard.

Die Eigenschaft hasDefaultGeometry fehlt im Schema und stattdessen wird die Eigenschaft defaultGeometry angegeben.

Dies verhindert, dass die RDFS-Inferenz korrekt ausgeführt wird und wurde an den OGC Standards Tracker gemeldet. Eine korrigierte Version des Schemas ist im Ordner Resources verfügbar.

Der GeoSPARQL- und der Simple Features-Standard definieren beide die DE-9IM-Schnittmuster für die drei räumlichen Beziehungsfamilien. Diese Muster stimmen jedoch nicht immer mit den Mustern überein, die von der JTS-Bibliothek für bestimmte Beziehungen angegeben werden.

GeoSPARQL/Simple Features verwenden beispielsweise TFFFTFFFT gleich Beziehungen in Einfache Funktion, Egenhofer und RCC8. Dies führt jedoch nicht zu dem normalerweise erwarteten Ergebnis beim Vergleich eines Paars von Punktgeometrien. Der Standard für einfache Features besagt, dass die Grenze eines Punktes leer ist. Daher wäre auch der Grenzschnittpunkt zweier Punkte leer, so dass ein negatives Vergleichsergebnis erhalten wird.

JTS und andere Bibliotheken verwenden das alternative Schnittmuster von T*F**FFF* . Dies ist eine Kombination aus innerhalb und enthält Beziehungen und liefert die erwarteten Ergebnisse für alle Geometrietypen.

Die von JTS verwendeten räumlichen Beziehungen wurden als die Erweiterung Spatial:equals Filter- und Eigenschaftsfunktionen implementiert. Ein Benutzer kann auch seine eigenen DE-9IM-Schnittmuster bereitstellen, indem er die Filterfunktion geof:relate verwendet.

Räumliche Beziehungen und Geometrieformen/-typen

Die räumlichen Beziehungen für die drei räumlichen Familien gelten nicht für alle Kombinationen der Geometrieformen ( Point , LineString , Polygon ) und ihrer Sammlungen ( MultiPoint , MultiLineString , MultiPolygon ). Daher liefern einige Abfragen möglicherweise nicht alle Ergebnisse, die anfänglich erwartet werden können.

  • In einigen Beziehungen kann es nur zu Ergebnissen kommen, wenn eine Sammlung von Formen verwendet wird, z. zwei Multipunkte können sich überlappen, zwei Punkte jedoch nicht.
  • Eine Relation darf nur für eine Kombination gelten, nicht aber für ihre Gegenseitigkeit, z.B. eine Linie kann ein Polygon kreuzen, aber ein Polygon darf eine Linie nicht kreuzen.
  • Das RCC8 Familie gilt nur für Polygon- und MultiPolygon-Typen.

Weitere Informationen finden Sie auf den Seiten 8-10 des GeoSPARQL-Standards 11-052r4.

Die drei gleich Beziehungen (sfEquals, ehEquals und rccEquals) verwenden räumliche Gleichheit und nicht lexikalische Gleichheit. Daher sind einige Vergleiche, die diese Beziehungen verwenden, möglicherweise nicht wie erwartet.

Die JTS-Beschreibung von sfEquals ist:

  • True, wenn zwei Geometrien mindestens einen gemeinsamen Punkt haben und kein Punkt einer der Geometrien außerhalb der anderen Geometrie liegt.

Daher geben zwei leere Geometrien false zurück, da sie räumlich nicht gleich sind. Formen, die sich in der Anzahl der Punkte unterscheiden, aber die gleiche Geometrie haben, sind gleich und geben true zurück.

z.B. LINESTRING (0 0, 0 10) und LINESTRING (0 0, 0 5, 0 10) sind räumlich gleich.

Die Query Rewrite Extension bietet eine einfachere Abfragesyntax. Feature und Geometrie können in räumlichen Beziehungen verwendet werden, ohne dass die Beziehungen im Dataset bestätigt werden müssen. Dies bedeutet auch, dass das Geometrieliteral nicht in der Abfrage angegeben werden muss. Im Fall von Features erfordert dies die Verwendung der hasDefaultGeometry-Eigenschaft im Dataset.

Es sind Methoden verfügbar, um die hasDefaultGeometry-Eigenschaft auf jede Geometry mit einer einzelnen hasGeometry-Eigenschaft anzuwenden, siehe io.github.galbiston.geosparql_jena.configuration.GeoSPARQLOperations .

Abhängig von der räumlichen Beziehung können Abfragen das angegebene Feature und die angegebene Geometrie in den Ergebnissen enthalten. z.B. FeatureA ist in einer Abfrage für ein Dataset gebunden, das nur FeatureA und GeometryA enthält. Die Ergebnisse FeatureA und GeometryA werden anstatt keine Ergebnisse zurückgegeben. Daher kann in einigen Fällen eine Filterung mit FILTER(!sameTerm(?subj, ?obj)) usw. erforderlich sein. Die Funktion zum erneuten Schreiben von Abfragen kann in der Bibliothekskonfiguration ausgeschaltet werden, siehe io.github.galbiston.geosparql_jena.configuration.GeoSPARQLConfig .

Jedem Datensatz wird ein Query Rewrite Index zugewiesen, um die Ergebnisse früherer Tests zu speichern. Es besteht die Möglichkeit, dass Beziehungen in einer Abfrage mehrmals getestet werden (d. h. Feature-Feature, Feature-Geometrie, Geometrie-Geometrie, Geometrie-Feature). Daher ist es sinnvoll, die Ergebnisse zumindest für kurze Zeit aufzubewahren.

Durchlaufen aller Kombinationen von räumlichen Beziehungen für einen Datensatz mit data nein Geometrie-Literale ergeben 27nein^2 wahre/falsche Ergebnisse (die Bestätigung der wahren Ergebnisaussagen in einem Datensatz wäre eine Teilmenge). Die Steuerung erfolgt auf Datensatzbasis, um die Wahl zu ermöglichen, wann und wie die Speicherung von Neuschreibergebnissen angewendet wird, z. Speichern Sie alle gefundenen Ergebnisse in einem kleinen Datensatz, aber bei Bedarf für einen großen Datensatz.

Dieser Index kann auf globaler und individueller Dataset-Basis für die maximale Größe und Dauer konfiguriert werden, bis nicht verwendete Elemente entfernt werden. Das Umschreiben von Abfragen kann unabhängig von den Indizes eingeschaltet werden, d. h. das Umschreiben von Abfragen kann durchgeführt werden, aber ein Index ist so konfiguriert, dass das Ergebnis nicht gespeichert wird.

Methoden zum Konvertieren von Datensätzen zwischen Serialisierungen und räumlichen/Koordinatenbezugssystemen sind verfügbar in: io.github.galbiston.geosparql_jena.configuration.GeoSPARQLOperations

Die folgende Liste zeigt einige der Operationen, die ausgeführt werden können. Nachdem diese Operationen durchgeführt wurden, können sie in eine Datei serialisiert oder in einer Jenaer TDB gespeichert werden, um eine erneute Verarbeitung zu vermeiden.

Laden Sie ein Jenaer Modell aus einer Datei: Model dataModel = RDFDataMgr.loadModel("data.ttl")

Konvertieren von Feature-GeometryLiteral in die GeoSPARQL Feature-Geometry-GeometryLiteral-Struktur: Modell geosparqlModel = GeoSPARQLOperations.convertGeometryStructure(dataModel)

Konvertieren von Feature-Lat, Feature-Lon Geo-Prädikaten in die GeoSPARQL Feature-Geometry-GeometryLiteral-Struktur, mit der Option zum Entfernen von Geo-Prädikaten: Model geosparqlModel = GeoSPARQLOperations.convertGeoPredicates(dataModel, true)

Setzen Sie zusätzliche hasDefaultGeometry-Anweisungen für einzelne hasGeometry-Tripels fest, die beim Umschreiben von Abfragen verwendet werden: GeoSPARQLOperations.applyDefaultGeometry(geosparqlModel)

Konvertieren von Geometrieliteralen in das räumliche Bezugssystem WGS84 und den WKT-Datentyp: Model model = GeoSPARQLOperations.convert(geosparqlModel, "http://www.opengis.net/def/crs/EPSG/0/4326", "http://www .opengis.net/ont/geosparql#wktLiteral")

Wenden Sie das GeoSPARQL-Schema mit RDFS-Inferencing an und bestätigen Sie zusätzliche Anweisungen im Modell: GeoSPARQLOperations.applyInferencing(model)

Wenden Sie häufig verwendete GeoSPARQL-Präfixe für URIs auf das Modell an: GeoSPARQLOperations.applyPrefixes(model)

Räumlichen Index für ein Modell innerhalb eines Datasets für räumliche Abfragen erstellen: Dataset-Dataset = SpatialIndex.wrapModel(model)

Andere Operationen sind verfügbar und können auf ein Dataset angewendet werden, das mehrere Modelle und in einigen Fällen Dateien und Ordner enthält. Diese Operationen nicht Konfigurieren und Einrichten der GeoSPARQL-Funktionen oder -Indizes, die für die Abfrage erforderlich sind.

Ein räumlicher Index kann erstellt werden, um die Suche in einem Datensatz zu verbessern. Es wird erwartet, dass der räumliche Index für den Datensatz eindeutig ist und nicht zwischen Datensätzen geteilt werden sollte. Einmal erstellt, können dem Räumlichen Index keine weiteren Elemente hinzugefügt werden.

Ein Räumlicher Index ist für die jena-räumlichen Eigenschaftsfunktionen erforderlich und für die GeoSPARQL-Räumlichen Beziehungen optional. Für einen räumlichen Index kann nur ein einzelner SRS verwendet werden und es wird empfohlen, Datensätze in einen einzelnen SRS zu konvertieren, siehe GeoSPARQLOperations .

Das Einrichten eines räumlichen Index kann über io.github.galbiston.geosparql_jena.configuration.GeoSPARQLConfig erfolgen. Weitere Methoden zum Erstellen, Laden und Speichern von räumlichen Indizes finden Sie in io.github.galbiston.geosparql_jena.spatial.SpatialIndex .

Räumliche/Koordinaten-Bezugssysteme verwenden verschiedene Messsysteme zur Definition von Entfernungen. Diese können über eine URI-Kennung entweder als URL oder URN angegeben werden, wobei die Konvertierung bei Bedarf automatisch erfolgt. Es sollte beachtet werden, dass räumliche Bezugssysteme inhärente Fehler aufweisen und dass zwischen verschiedenen Systemen eine gewisse Variation der Werte auftreten kann.

Die folgende Tabelle enthält einige Beispiele für unterstützte Einheiten (zusätzliche Einheiten können der UnitsRegistry mithilfe der javax.measure.Unit-API hinzugefügt werden. Diese URI befinden sich alle im Namespace http://www.opengis.net/def/uom/ OGC/1.0/ und verwenden hier die Präfixeinheiten .

URI Beschreibung
Einheiten:Kilometer oder Einheiten:Kilometer Kilometer
Einheiten:Meter oder Einheiten:Meter Meter
Einheiten:Meile oder Einheiten:StatutMile Meilen
Einheiten: Grad Abschlüsse
Einheiten: Radiant Radiant

Eine vollständige Liste der Standardeinheiten finden Sie in io.github.galbiston.geosparql_jena.implementation.vocabulary.Unit_URI .

Geography Markup Language Support (GML)

Das unterstützte GML-Profil ist das GML 2.0 Simple Features Profile (10-100r3), ein Profil von GML 3.2.1 (07-036r1). Das Profil schränkt die in GML 3.2.1 erlaubten Geometrieformen auf eine Untermenge ein, siehe 10-100r3 Seite 22. Das Profil unterstützt Punkte-, Linien- und Polygonformen, die in WKT verwendet werden. Es sind auch zusätzliche Formserialisierungen im Profil verfügbar, die in WKT oder JTS nicht vorhanden sind, um vereinfachte Darstellungen bereitzustellen, die ansonsten LineStrings oder Polygons verwenden würden. Kurven können durch LineStringSegment, Arc, Circle und CircleByCenterPoint beschrieben werden. Oberflächen können ähnlich wie Polygone oder mithilfe von Kurven geformt werden. Diese zusätzlichen Shapes können als Teil eines Datasets oder einer Abfrage gelesen werden, werden jedoch nicht erzeugt, wenn das SRS des Shapes transformiert wird. Stattdessen wird eine LineString- oder Polygon-Darstellung erzeugt.

Details der GML-Struktur für diese Formen finden Sie in den Schemata GeometriePrimitives.xsd, GeometrieBasic0d1d.xsd, GeometrieBasic2d.xsd und GeometrieAggregates.xsd.

Die Kennzeichnung der Sammlungen ist wie folgt:

Sammlung Geometrie
MultiPoint Punkt
MultiCurve LineString, Kurve
MultiSurface Polygon, Fläche
MultiGeometry Punkt, Linienfolge, Kurve, Polygon, Fläche

Apache Jena Spatial Functions/WGS84 Geo-Prädikate

Das jena-spatial-Modul enthält mehrere SPARQL-Funktionen zum Abfragen von Datensätzen mit den WGS84 Geo-Prädikaten für Breitengrad ( http://www.w3.org/2003/01/geo/wgs84_pos#lat ) und Längengrad ( http://www.w3 .org/2003/01/geo/wgs84_pos#long ). Diese jena-räumlichen Funktionen werden sowohl für Geo-Prädikate als auch für Geometrie-Literale, d. h. einen GeoSPARQL-Datensatz, unterstützt. Es wurden zusätzliche SPARQL-Filterfunktionen bereitgestellt, um Geo-Prädikatseigenschaften in WKT-Strings umzuwandeln und Großkreis- und Euklidische Distanzen zu berechnen.

Die Geo-Prädikatsform der räumlichen Darstellung ist auf „Punkt“-Formen im räumlichen/Koordinaten-Bezugssystem WGS84 beschränkt. Die Geo-Prädikate sind Eigenschaften des Features und verwenden nicht die Eigenschaften und die Struktur des GeoSPARQL-Standards, einschließlich Geometry Literals. Es sind Methoden verfügbar, um Datensätze von Geo-Prädikaten in die GeoSPARQL-Struktur zu konvertieren, siehe: io.github.galbiston.geosparql_jena.configuration.GeoSPARQLOperationsOperation

Die zuvor beschriebenen räumlichen Beziehungen und das Umschreiben von Abfragen von GeoSPARQL wurden für Geo-Prädikate implementiert. Für Punkt-zu-Punkt-Beziehungen sind jedoch nur bestimmte räumliche Beziehungen gültig. Weitere Informationen finden Sie auf den Seiten 8-10 des GeoSPARQL-Standards 11-052r4.

Geoprädikate können in Abfragen in Geometrieliterale konvertiert und dann mit den GeoSPARQL-Filterfunktionen verwendet werden.

Alternativ können mehr Formen, Beziehungen und räumliche Bezugssysteme verwendet werden, indem der Datensatz in die GeoSPARQL-Struktur konvertiert wird.

Datasets können ohne Interferenz sowohl Geo-Prädikate als auch Geometrieliterale enthalten. Ein Dataset, das beide Typen enthält, untersucht jedoch nur Features mit Geometrieliteralen auf räumliche Beziehungen, d. h. die Prüfung auf Geo-Prädikate ist ein Fallback, wenn keine Geometrieliterale gefunden werden. Daher ist es nicht Es wird empfohlen, neue Geo-Prädikateigenschaften einzufügen, nachdem ein Dataset in eine GeoSPARQL-Struktur konvertiert wurde (es sei denn, die entsprechenden Geometrie- und Geometrieliterale sind enthalten).

Diese Filterfunktionen sind im Namensraum http://jena.apache.org/function/spatial# verfügbar und verwenden hier das Präfix SpatialF .

Funktionsname Beschreibung
?wktString SpatialF:ConvertLatLon(?lat, ?lon) Konvertiert Lat- und Lon-Double-Werte in WKT-String eines Point mit WGS84 SRS.
?wktString SpatialF:convertLatLonBox(?latMin, ?lonMin, ?latMax, ?lonMax) Konvertiert Lat- und Lon-Double-Werte in WKT-String eines Polygons, das eine Box mit WGS84 SRS bildet.
?boolesch räumlichF:gleich(?geomLit1, ?geomLit2) Stimmt, wenn geomLit1 ist räumlich gleich geomLit2.
?boolesch räumlichF:in der Nähe(?geomLit1, ?geomLit2, ?Distanz, ?EinheitenURI) Stimmt, wenn geomLit1 ist innerhalb Entfernung von geomLit2 den Abstand nutzen Einheiten.
?boolesch räumlichF:innerhalb des Kreises(?geomLit1, ?geomLit2, ?Distanz, ?EinheitenURI) Stimmt, wenn geomLit1 ist innerhalb Entfernung von geomLit2 den Abstand nutzen Einheiten.
?Radiant räumlichF:Winkel(?x1, ?y1, ?x2, ?y2) Winkel im Uhrzeigersinn von der y-Achse von Punkt(x1,y1) zu Punkt (x2,y2) im Bogenmaß von 0 bis 2π.
?Grad? räumlichF:angleDeg(?x, ?y1, ?x2, ?y2) Winkel im Uhrzeigersinn von der y-Achse von Punkt(x1,y1) zu Punkt (x2,y2) in 0 bis 360 Grad.
?Distanz räumlichF:Entfernung(?geomLit1, ?geomLit2, ?EinheitenURI) Abstand zwischen zwei Geometrieliteralen in Abstand Einheiten. Wählt die Entfernungsmessung basierend auf dem SRS-Typ. Great Circle distance for Geographic SRS and Euclidean otherwise.
?radians spatialF:azimuth(?lat1, ?lon1, ?lat2, ?lon2) Forward azimuth clockwise from North between two Lat/Lon Points in 0 to 2π radians.
?degrees spatialF:azimuthDeg(?lat1, ?lon1, ?lat2, ?lon2) Forward azimuth clockwise from North between two Lat/Lon Points in 0 to 360 degrees.
?distance spatialF:greatCircle(?lat1, ?lon1, ?lat2, ?lon2, ?unitsURI) Great Circle distance (Vincenty formula) between two Lat/Lon Points in distance units.
?distance spatialF:greatCircleGeom(?geomLit1, ?geomLit2, ?unitsURI) Great Circle distance (Vincenty formula) between two Geometry Literals in distance units. Use http://www.opengis.net/def/function/geosparql/distance from GeoSPARQL standard for Euclidean distance.
?geomLit2 spatialF:transform(?geomLit1, ?datatypeURI, ?srsURI) Transform Geometry Literal by Datatype and SRS.
?geomLit2 spatialF:transformDatatype(?geomLit1, ?datatypeURI) Transform Geometry Literal by Datatype.
?geomLit2 spatialF:transformSRS(?geomLit1, ?srsURI) Transform Geometry Literal by SRS.

These property functions are available in the http://jena.apache.org/spatial# namespace and here use the prefix spatial . This is the same namespace as the jena-spatial functions utilise and these form direct replacements. The subject Feature may be bound, to test the pattern is true, or unbound, to find all cases the pattern is true. These property functions require a Spatial Index to be setup for the dataset.

The optional ?limit parameter restricts the number of results returned. The default value is -1 which returns all results. No guarantee is given for ordering of results. The optional ?unitsURI parameter specifies the units of a distance. The default value is kilometres through the string or resource http://www.opengis.net/def/uom/OGC/1.0/kilometre .

The spatial:equals property function behaves the same way as the main GeoSPARQL property functions. Either, both or neither of the subject and object can be bound. A Spatial Index is nicht required for the dataset with the spatial:equals property function.

Function Name Beschreibung
?spatialObject1 spatial:equals ?spatialObject2 Find spatialObjects (i.e. features oder geometries) that are spatially equal.
?feature spatial:intersectBox(?latMin ?lonMin ?latMax ?lonMax [ ?limit]) Find features that intersect the provided box, up to the Grenze.
?feature spatial:intersectBoxGeom(?geomLit1 ?geomLit2 [ ?limit]) Find features that intersect the provided box, up to the Grenze.
?feature spatial:withinBox(?latMin ?lonMin ?latMax ?lonMax [ ?limit]) Find features that intersect the provided box, up to the Grenze.
?feature spatial:withinBoxGeom(?geomLit1 ?geomLit2 [ ?limit]) Find features that are within the provided box, up to the Grenze.
?feature spatial:nearby(?lat ?lon ?radius [ ?unitsURI [ ?limit]]) Find features that are within radius of the Entfernung units, up to the Grenze.
?feature spatial:nearbyGeom(?geomLit ?radius [ ?unitsURI [ ?limit]]) Find features that are within radius of the Entfernung units, up to the Grenze.
?feature spatial:withinCircle(?lat ?lon ?radius [ ?unitsURI [ ?limit]]) Find features that are within radius of the Entfernung units, up to the Grenze.
?feature spatial:withinCircleGeom(?geomLit ?radius [ ?unitsURI [ ?limit]]) Find features that are within radius of the Entfernung units, up to the Grenze.

The Cardinal Functions find all Features that are present in the specified direction. In Geographic spatial reference systems (SRS), e.g. WGS84 and CRS84, the East/West directions wrap around. Therefore, a search is made from the shape's edge for up to half the range of the SRS (i.e. 180 degrees in WGS84) and will continue across the East/West boundary if necessary. In other SRS, e.g. Projected onto a flat plane, the East/West check is made from the shape's edge to the farthest limit of the SRS range, i.e. there is no wrap around.

Cardinal Function Name Beschreibung
?feature spatial:north(?lat ?lon [ ?limit]) Find features that are North of the Lat/Lon point (point to +90 degrees), up to the Grenze.
?feature spatial:northGeom(?geomLit [ ?limit]) Find features that are North of the Geometry Literal, up to the Grenze.
?feature spatial:south(?lat ?lon [ ?limit]) Find features that are South of the Lat/Lon point (point to -90 degrees), up to the Grenze.
?feature spatial:southGeom(?geomLit [ ?limit]) Find features that are South of the Geometry Literal, up to the Grenze.
?feature spatial:east(?lat ?lon [ ?limit]) Find features that are East of the Lat/Lon point (point plus 180 degrees longitude, wrapping round), up to the Grenze.
?feature spatial:eastGeom(?geomLit [ ?limit]) Find features that are East of the Geometry Literal, up to the Grenze.
?feature spatial:west(?lat ?lon [ ?limit]) Find features that are West of the Lat/Lon point (point minus 180 degrees longitude, wrapping round), up to the Grenze.
?feature spatial:westGeom(?geomLit [ ?limit]) Find features that are West of the Geometry Literal, up to the Grenze.

Geometry Property Filter Functions

The GeoSPARQL standard provides a set of properties related to geometries, see Section 8.4. These are applied on the Geometry resource and are automatically determined if not asserted in the data. However, it may be necessary to retrieve the properties of a Geometry Literal directly without an associated Geometry resource. Filter functions to do this have been included as part of the http://www.opengis.net/def/function/geosparql/ namespace as a minor variation to the GeoSPARQL standard. The relevant functions using the geof prefix are:

Geometry Property Filter Function Name Beschreibung
?integer geof:dimension(?geometryLiteral) Topological dimension, e.g. 0 for Point, 1 for LineString and 2 for Polygon.
?integer geof:coordinateDimension(?geometryLiteral) Coordinate dimension, e.g. 2 for XY coordinates and 4 for XYZM coordinates.
?integer geof:spatialDimension(?geometryLiteral) Spatial dimension, e.g. 2 for XY coordinates and 3 for XYZM coordinates.
?boolean geof:isEmpty(?geometryLiteral) True, if geometry is empty.
?boolean geof:isSimple(?geometryLiteral) True, if geometry is simple.
?boolean geof:isValid(?geometryLiteral) True, if geometry is topologically valid.

A dataset that follows the GeoSPARQL Feature-Geometry-GeometryLiteral can have simpler SPARQL queries without needing to use these functions by taking advantage of the Query Rewriting functionality. The geof:isValid filter function and geo:isValid property for a Geometry resource are not part of the GeoSPARQL standard but have been included as a minor variation.

The following individuals have made contributions to this project:

Why Use This Implementation?

There are several implementations of the GeoSPARQL standard. The conformance and completeness of these implementations is difficult to ascertain and varies between features.

However, the following may be of interest when considering whether to use this implementation based on reviewing several alternatives.

This Implementation Other Implementations
Implements all six components of the GeoSPARQL standard. Generally partially implement the Geometry Topology and Geometry Extensions. Do not implement the Query Rewrite Extension.
Pure Java and does not require a supporting relational database. Configuration requires a single line of code (although Apache SIS may need some setting up, see above). Require setting up a database, configuring a geospatial extension and setting environment variables.
Uses Apache Jena, which conforms to the W3C standards for RDF and SPARQL. New versions of the standards will quickly feed through. Not fully RDF and SPARQL compliant, e.g. RDFS/OWL inferencing or SPARQL syntax. Adding your own schema may not produce inferences.
Automatically determines geometry properties and handles mixed cases of units or coordinate reference systems. The GeoSPARQL standard suggests this approach but does not require it. Tend to produce errors or no results in these situations.
Performs indexing and caching on-demand which reduces set-up time and only performs calculations that are required. Perform indexing in the data loading phase and initialisation phase, which can lead to lengthy delays (even on relatively small datasets).
Uses JTS which does not truncate coordinate precision and applies spatial equality. May truncate coordinate precision and apply lexical equality, which is quicker but does not comply with the GeoSPARQL standard.


10. Interval and Ratio Levels

Interval und ratio are the two highest levels of measurement in Stevens' original system. Unlike nominal- and ordinal-level data, which are qualitative in nature, interval- and ratio-level data are quantitative. Examples of interval level data include temperature and year. Examples of ratio level data include distance and area (e.g., acreage). The scales are similar in so far as units of measurement are arbitrary (Celsius versus Fahrenheit, Gregorian versus Islamic calendar, English versus metric units). The scales differ in that the zero point is arbitrary on interval scales, but not on ratio scales. For instance, zero degrees Fahrenheit and zero degrees Celsius are different temperatures, and neither indicates the absence of temperature. Zero meters and zero feet mean exactly the same thing, however. An implication of this difference is that a quantity of 20 measured at the ratio scale is twice the value of 10, a relation that does not hold true for quantities measured at the interval level (20 degrees is not twice as warm as 10 degrees).

Because interval and ratio level data represent positions along continuous number lines, rather than members of discrete categories, they are also amenable to analysis using inferential statistical techniques. Correlation and regression, for example, are commonly used to evaluate relationships between two or more data variables. Such techniques enable analysts to infer not only the form of a relationship between two quantitative data sets, but also the strength of the relationship.


4.5. Building Indexes

Indexes are what make using a spatial database for large data sets possible. Without indexing, any search for a feature would require a "sequential scan" of every record in the database. Indexing speeds up searching by organizing the data into a search tree which can be quickly traversed to find a particular record. PostgreSQL supports three kinds of indexes by default: B-Tree indexes, R-Tree indexes, and GiST indexes.

B-Trees are used for data which can be sorted along one axis for example, numbers, letters, dates. GIS data cannot be rationally sorted along one axis (which is greater, (0,0) or (0,1) or (1,0)?) so B-Tree indexing is of no use for us.

R-Trees break up data into rectangles, and sub-rectangles, and sub-sub rectangles, etc. R-Trees are used by some spatial databases to index GIS data, but the PostgreSQL R-Tree implementation is not as robust as the GiST implementation.

GiST (Generalized Search Trees) indexes break up data into "things to one side", "things which overlap", "things which are inside" and can be used on a wide range of data-types, including GIS data. PostGIS uses an R-Tree index implemented on top of GiST to index GIS data.

4.5.1. GiST Indexes

GiST stands for "Generalized Search Tree" and is a generic form of indexing. In addition to GIS indexing, GiST is used to speed up searches on all kinds of irregular data structures (integer arrays, spectral data, etc) which are not amenable to normal B-Tree indexing.

Once a GIS data table exceeds a few thousand rows, you will want to build an index to speed up spatial searches of the data (unless all your searches are based on attributes, in which case you'll want to build a normal index on the attribute fields).

The syntax for building a GiST index on a "geometry" column is as follows:

Building a spatial index is a computationally intensive exercise: on tables of around 1 million rows, on a 300MHz Solaris machine, we have found building a GiST index takes about 1 hour. After building an index, it is important to force PostgreSQL to collect table statistics, which are used to optimize query plans:

GiST indexes have two advantages over R-Tree indexes in PostgreSQL. Firstly, GiST indexes are "null safe", meaning they can index columns which include null values. Secondly, GiST indexes support the concept of "lossiness" which is important when dealing with GIS objects larger than the PostgreSQL 8K page size. Lossiness allows PostgreSQL to store only the "important" part of an object in an index -- in the case of GIS objects, just the bounding box. GIS objects larger than 8K will cause R-Tree indexes to fail in the process of being built.

4.5.2. Using Indexes

Ordinarily, indexes invisibly speed up data access: once the index is built, the query planner transparently decides when to use index information to speed up a query plan. Unfortunately, the PostgreSQL query planner does not optimize the use of GiST indexes well, so sometimes searches which should use a spatial index instead default to a sequence scan of the whole table.

If you find your spatial indexes are not being used (or your attribute indexes, for that matter) there are a couple things you can do:

Firstly, make sure statistics are gathered about the number and distributions of values in a table, to provide the query planner with better information to make decisions around index usage. For PostgreSQL 7.4 installations and below this is done by running update_geometry_stats([table_name, column_name]) (compute distribution) and VACUUM ANALYZE [table_name] [column_name] (compute number of values). Starting with PostgreSQL 8.0 running VACUUM ANALYZE will do both operations. You should regularly vacuum your databases anyways -- many PostgreSQL DBAs have VACUUM run as an off-peak cron job on a regular basis.

If vacuuming does not work, you can force the planner to use the index information by using the SET ENABLE_SEQSCAN=OFF command. You should only use this command sparingly, and only on spatially indexed queries: generally speaking, the planner knows better than you do about when to use normal B-Tree indexes. Once you have run your query, you should consider setting ENABLE_SEQSCAN back on, so that other queries will utilize the planner as normal.

As of version 0.6, it should not be necessary to force the planner to use the index with ENABLE_SEQSCAN .

If you find the planner wrong about the cost of sequential vs index scans try reducing the value of random_page_cost in postgresql.conf or using SET random_page_cost=#. Default value for the parameter is 4, try setting it to 1 or 2. Decrementing the value makes the planner more inclined of using Index scans.


Apache Jena Spatial Functions/WGS84 Geo Predicates

The jena-spatial module contains several SPARQL functions for querying datasets using the WGS84 Geo predicates for latitude ( http://www.w3.org/2003/01/geo/wgs84_pos#lat ) and longitude ( http://www.w3.org/2003/01/geo/wgs84_pos#long ). These jena-spatial functions are supported for both Geo predicates and Geometry Literals, i.e. a GeoSPARQL dataset. Additional SPARQL filter functions have been provided to convert Geo predicate properties into WKT strings and calculate Great Circle and Euclidean distances. The jena-spatial functions require setting up a Spatial Index for the target Dataset, e.g. GeoSPARQLConfig.setupSpatialIndex(dataset) , see Spatial Index section.

Supported Features

The Geo predicate form of spatial representation is restricted to only &lsquoPoint&rsquo shapes in the WGS84 spatial/coordinate reference system. The Geo predicates are properties of the Feature and do not use the properties and structure of the GeoSPARQL standard, including Geometry Literals. Methods are available to convert datasets from Geo predicates to GeoSPARQL structure, see: org.apache.jena.geosparql.configuration.GeoSPARQLOperations

The spatial relations and query re-writing of GeoSPARQL outlined previously has been implemented for Geo predicates. However, only certain spatial relations are valid for Point to Point relationships. Refer to pages 8-10 of 11-052r4 GeoSPARQL standard for more details.

Geo predicates can be converted to Geometry Literals in query and then used with the GeoSPARQL filter functions.

Alternatively, utilising more shapes, relations and spatial reference systems can be achieved by converting the dataset to the GeoSPARQL structure.

Datasets can contain both Geo predicates and Geometry Literals without interference. However, a dataset containing both types will only examine those Features which have Geometry Literals for spatial relations, i.e. the check for Geo predicates is a fallback when Geometry Literals aren&rsquot found. Therefore, it is nicht recommended to insert new Geo predicate properties after a dataset has been converted to GeoSPARQL structure (unless corresponding Geometry and Geometry Literals are included).

Filter Functions

These filter functions are available in the http://jena.apache.org/function/spatial# namespace and here use the prefix spatialF .

Function Name Beschreibung
?wktString spatialF:convertLatLon(?lat, ?lon) Converts Lat and Lon double values into WKT string of a Point with WGS84 SRS.
?wktString spatialF:convertLatLonBox(?latMin, ?lonMin, ?latMax, ?lonMax) Converts Lat and Lon double values into WKT string of a Polygon forming a box with WGS84 SRS.
?boolean spatialF:equals(?geomLit1, ?geomLit2) True, if geomLit1 is spatially equal to geomLit2.
?boolean spatialF:nearby(?geomLit1, ?geomLit2, ?distance, ?unitsURI) True, if geomLit1 is within Entfernung von geomLit2 using the distance units.
?boolean spatialF:withinCircle(?geomLit1, ?geomLit2, ?distance, ?unitsURI) True, if geomLit1 is within Entfernung von geomLit2 using the distance units.
?radians spatialF:angle(?x1, ?y1, ?x2, ?y2) Angle clockwise from y-axis from Point(x1,y1) to Point (x2,y2) in 0 to 2π radians.
?degrees spatialF:angleDeg(?x, ?y1, ?x2, ?y2) Angle clockwise from y-axis from Point(x1,y1) to Point (x2,y2) in 0 to 360 degrees.
?distance spatialF:distance(?geomLit1, ?geomLit2, ?unitsURI) Distance between two Geometry Literals in distance units. Chooses distance measure based on SRS type. Great Circle distance for Geographic SRS and Euclidean otherwise.
?radians spatialF:azimuth(?lat1, ?lon1, ?lat2, ?lon2) Forward azimuth clockwise from North between two Lat/Lon Points in 0 to 2π radians.
?degrees spatialF:azimuthDeg(?lat1, ?lon1, ?lat2, ?lon2) Forward azimuth clockwise from North between two Lat/Lon Points in 0 to 360 degrees.
?distance spatialF:greatCircle(?lat1, ?lon1, ?lat2, ?lon2, ?unitsURI) Great Circle distance (Vincenty formula) between two Lat/Lon Points in distance units.
?distance spatialF:greatCircleGeom(?geomLit1, ?geomLit2, ?unitsURI) Great Circle distance (Vincenty formula) between two Geometry Literals in distance units. Use http://www.opengis.net/def/function/geosparql/distance from GeoSPARQL standard for Euclidean distance.
?geomLit2 spatialF:transform(?geomLit1, ?datatypeURI, ?srsURI) Transform Geometry Literal by Datatype and SRS.
?geomLit2 spatialF:transformDatatype(?geomLit1, ?datatypeURI) Transform Geometry Literal by Datatype.
?geomLit2 spatialF:transformSRS(?geomLit1, ?srsURI) Transform Geometry Literal by SRS.

Property Functions

These property functions are available in the http://jena.apache.org/spatial# namespace and here use the prefix spatial . This is the same namespace as the jena-spatial functions utilise and these form direct replacements. The subject Feature may be bound, to test the pattern is true, or unbound, to find all cases the pattern is true. These property functions require a Spatial Index to be setup for the dataset.

The optional ?limit parameter restricts the number of results returned. The default value is -1 which returns all results. No guarantee is given for ordering of results. The optional ?unitsURI parameter specifies the units of a distance. The default value is kilometres through the string or resource http://www.opengis.net/def/uom/OGC/1.0/kilometre .

The spatial:equals property function behaves the same way as the main GeoSPARQL property functions. Either, both or neither of the subject and object can be bound. A Spatial Index is nicht required for the dataset with the spatial:equals property function.

Function Name Beschreibung
?spatialObject1 spatial:equals ?spatialObject2 Find spatialObjects (i.e. features oder geometries) that are spatially equal.
?feature spatial:intersectBox(?latMin ?lonMin ?latMax ?lonMax [ ?limit]) Find features that intersect the provided box, up to the Grenze.
?feature spatial:intersectBoxGeom(?geomLit1 ?geomLit2 [ ?limit]) Find features that intersect the provided box, up to the Grenze.
?feature spatial:withinBox(?latMin ?lonMin ?latMax ?lonMax [ ?limit]) Find features that intersect the provided box, up to the Grenze.
?feature spatial:withinBoxGeom(?geomLit1 ?geomLit2 [ ?limit]) Find features that are within the provided box, up to the Grenze.
?feature spatial:nearby(?lat ?lon ?radius [ ?unitsURI [ ?limit]]) Find features that are within radius of the Entfernung units, up to the Grenze.
?feature spatial:nearbyGeom(?geomLit ?radius [ ?unitsURI [ ?limit]]) Find features that are within radius of the Entfernung units, up to the Grenze.
?feature spatial:withinCircle(?lat ?lon ?radius [ ?unitsURI [ ?limit]]) Find features that are within radius of the Entfernung units, up to the Grenze.
?feature spatial:withinCircleGeom(?geomLit ?radius [ ?unitsURI [ ?limit]]) Find features that are within radius of the Entfernung units, up to the Grenze.

The Cardinal Functions find all Features that are present in the specified direction. In Geographic spatial reference systems (SRS), e.g. WGS84 and CRS84, the East/West directions wrap around. Therefore, a search is made from the shape&rsquos edge for up to half the range of the SRS (i.e. 180 degrees in WGS84) and will continue across the East/West boundary if necessary. In other SRS, e.g. Projected onto a flat plane, the East/West check is made from the shape&rsquos edge to the farthest limit of the SRS range, i.e. there is no wrap around.

Cardinal Function Name Beschreibung
?feature spatial:north(?lat ?lon [ ?limit]) Find features that are North of the Lat/Lon point (point to +90 degrees), up to the Grenze.
?feature spatial:northGeom(?geomLit [ ?limit]) Find features that are North of the Geometry Literal, up to the Grenze.
?feature spatial:south(?lat ?lon [ ?limit]) Find features that are South of the Lat/Lon point (point to -90 degrees), up to the Grenze.
?feature spatial:southGeom(?geomLit [ ?limit]) Find features that are South of the Geometry Literal, up to the Grenze.
?feature spatial:east(?lat ?lon [ ?limit]) Find features that are East of the Lat/Lon point (point plus 180 degrees longitude, wrapping round), up to the Grenze.
?feature spatial:eastGeom(?geomLit [ ?limit]) Find features that are East of the Geometry Literal, up to the Grenze.
?feature spatial:west(?lat ?lon [ ?limit]) Find features that are West of the Lat/Lon point (point minus 180 degrees longitude, wrapping round), up to the Grenze.
?feature spatial:westGeom(?geomLit [ ?limit]) Find features that are West of the Geometry Literal, up to the Grenze.


Plans and surveys

There are many types of plans you can search for online.

Historical survey plans and field notes are held at Public Record Office Victoria.

Parish plans define the positions and dimensions of all Crown allotments within a parish. You can search and view parish plans online through LANDATA or an authorised information broker.

Plans of subdivision depict the break-up of a piece freehold land, showing parcels of land (commonly called lots) that can be sold separately.

If you know the plan of subdivision number, you can easily search for a plan online for a fee through LANDATA® or an authorised information broker.

Survey plans and abstracts of field records are certified by licensed surveyors and show a summary of information used by a surveyor to establish the boundaries and dimensions of a piece of land.

These plans commonly show reference marks, building boundaries, fencing and measurement notations.


As far as off-the-shelf solutions go, many commercial 802.11 networking infrastructures support triangulation of both host computers and "rogue" APs by comparing the signal strength of the source among all the APs that can see the signal. I've used trapeze wireless systems that import autocad maps that include things like building materials (to compensate for different signal attenuations from drywall vs brick vs steel reinforced concrete). It then draws a picture that has all stations and APs. I believe cisco and aruba have similar tools.

You can't do it with one or even two observing stations, but you could probably do it with a mobile observing station and GPS. I'm not sure what software there is to do such a thing but the usual suspects such as netstumbler may well support such a feature.

You can do some basic Radio Direction Finding to locate the signal.

At 2.4 GHz it is easy to come across antennas with small beamwidths. Sweeping one around while watching the signal strength should give you a good idea of what direction the AP is in.

Do that from a few physically separated locations and you will have the beginnings of a triangulation. It doesn't have to be super accurate to get a good idea of where the transmitter is located.

The faster your signal strength indicator, the better. On a radio with an analog meter, it's amazing how fast you can "walk down" a transmitter with a modest yagi antenna.

By itself, there is no way to get that information from a wifi signal. Google, however, has indexed wifi access points with their locations. So they are able to tell where you are based on the wifi AP you are connected to. In a case like that, it is possible to get a location based on wifi.

If you've got an android phone try OpenSignalMaps, click on the wifi/cells toggle on the bottom left to see the wifi info. Shows the positions of wifi routers on a map.

I would like to point your attention to the following project and software:

The ghetto way of doing the same, is to use a directional antenna with netstumbler, or something that shows signal strength. Find the maximum strength with the directional antenna, mark the angle, and try again from another point or two. Triangulate, and you'll know the location of the access point.

Or spend your weekend building some insane tripod location thingy :).

Sometimes if you plug the gateway IP into an IP to Location database you get decent results. You might need to use traceroute to find the first IP that isn't one of the RFC1918 private networks IPs.

As mentioned you can use radio direction finding to locate the signal. That works by taking multiple antennas and doing an operation called beam forming by timing variance to get the general direction. It's also possible to do a timing triangulation if you have three receivers that can all pick up the signal and you know the exact location of each.

The military uses radio direction finding most of the time from mobile units. They log position, signal strength, and cut bearing and a computer lays these on a map over time and you'll get a good idea of the transmitter location.

Another method used is basically the old warm/cold game. You have a unit that logs position and signal strength and walk around until you find it. The nicer units will overlay a map to give you a general idea where to go but over a bit of time you'll get the location.


A big business built around a tough job

For local logistics companies and the Government of Nepal, Everest is big business. A typical spot on a commercial team costs anywhere from $40,000 to $100,000 depending on the level of service and the expertise of the outfitter. The Ministry of Tourism reported collecting $5.2 million in 2018 permit fees.

The industry is built on the backs of a small cadre of professional Nepalese guides who work together each spring to prepare the route with fixed ropes and ladders, stock each camp with essentials like tents, stoves, bottled oxygen, and food, and then patiently coach their foreign guests up to the summit. Although historically it was the Sherpas—the Tibetan tribe of people who live closest to the mountain—who were hired by expeditions to carry loads of supplies up the mountain, today there are multiple ethnic groups who find employment on the mountain, leading to the less-catchy moniker of “high-altitude mountain worker.” For a typical three-to-four-month Everest expedition, most earn between $2,500 and $5,000. In recent years, thanks to educational opportunities like the Khumbu Climbing Center, Nepalese guides have begun to receive training and certifications to international standards.


Schau das Video: NXT Linienfolger