Mehr

PostGis: Geometrie aus UTM-Text


Ich habe einfache Daten in einer Postgresql-Tabelle, die wie folgt aussieht:

╔════╦═══════╦═════════════╦══════════════╦═══════ ═══╦═════════════════╗ ║ id ║ index ║ Rechtswert ║ Hochwert ║ utm_zone ║ utm_zone_letter ║ ║╠════╬═══════╬═ ════════════╬══════════════╬══════════╬═══════════ ══════╣ ║ 1 ║ 1 ║ 233410.0000 ║ 1024701.0000 ║ 38 ║ N ║ ║ 1 ║ 2 ║ 213310.0000 ║ 1167201.0000 ║ 36 ║ N ║ ║ 2 ║ 1 ║ 213310.0000 ║ 1167201.0000 ║ 31 ║ B ║ ║ 2 ║ 2 213310.0000 ║ 1167201.0000 ║ 31 ║ B ║ ╚════╩═══════╩═════════════╩═════════════ ═╩══════════╩═════════════════╝

Hinweis: Koordinaten sind nicht echt, sondern von Hand eingegeben

Wie Sie sehen können, sind dies UTM-Koordinaten, die jedoch in einfachen db-Typfeldern gespeichert sind.
Ich möchte diese letzten 4 Spalten in eine vom Typ Geometry für PostGis konvertieren.
Zu so etwas:

╔════╦══════════════════════╗ ║ id ║ Geometrie ║ ╠════╬══════════ ║ 1 ║ 02347237427342342347 ║ ║ 2 ║ 27584872345646325863 ║ ╚════╩═════════════════════ ═╝

Ich habe eine ähnliche Abfrage verwendet:

--erzeugt Polygon mit falscher SRID :( SELECT z.id, ST_Polygon(z.geom, 3395) geom FROM ( --fügt den ersten Punkt der Linie am Ende hinzu, um sie zu schließen (von ST_Polygon angefordert) SELECT l.id id, ST_AddPoint (g.geom, ST_StartPoint(g.geom)) geom FROM ( -- gruppiert Punkte nach ID und erstellt offene Liniengeometrie aus jeder Gruppe SELECT t.id id, ST_MakeLine(t.strPoints) geom FROM ( --creates POINT(x ,y) Text aus Koordinaten SELECT g.id id, g.index idx, 'POINT(' || g.easting ||"|| g.northing || ')' strPoints FROM data g ORDER BY g.index ) t GRUPPE NACH t.id HAVING count(t.strPoints) > 2 ) g ) z wobei ST_IsValid(z.geom)

Dies verwendet jedoch nicht utm_zone und utm_zone_letter und Punkte und Linien werden ohne SRID-Wert erstellt. Das Erstellen von Polygonen aus solchen Werten und das Angeben einiger SRID führt zu schlechten Ergebnissen. Da für Punkte und Linien keine SRID festgelegt ist, kann ich die DB-Funktion utmzone (geometry) nicht verwenden, da die Geometrie SRID erfordert.

Ich habe mir ST_Transform, ST_FromText und andere Funktionen angesehen, konnte aber keine finden, bei der ich die UTM-Zonennummer und den Buchstaben angeben kann, um einen Geometrietypwert zu erstellen.
Das Erstellen von Punkten ohne Angabe von SRID führt zu schlechten Ergebnissen - Punkte fallen auf Pinguine in der Antarktis, was falsch ist.

Können Sie mir sagen, wie ich diese Daten in korrekte Geometriewerte mit der richtigen SRID-Angabe umwandeln kann?


Sie können die Informationen hier verwenden, um eine SRID zu generieren - im Allgemeinen fügen Sie die Zonennummer zu 32600 (im Norden) und 32700 im Süden hinzu. Dies funktioniert, wenn Sie WGS84 als geografisches Koordinatenbezugssystem verwenden können.

Der utm_zone_letter identifiziert das Breitenband. Wenn sich die Daten immer auf der Nordhalbkugel befinden, können Sie sie ignorieren und 32600 + utm_zone als bekannte ID verwenden. Wenn sich die Daten in beiden Hemisphären befinden, müssen Sie die Buchstaben überprüfen, um zu bestimmen, welche Hemisphäre. 'CDEFGHJKLM' liegt auf der Südhalbkugel und 'NPQRSTUVWX' liegt auf der Nordhalbkugel. A und B liegen unter 80 Süd und Y und Z über 84 Nord.


Ich denke, Sie sollten diese Funktion verwenden können (von hier aus):

-- Funktion: utmzone (Geometrie) -- DROP FUNCTION utmzone (Geometrie); -- Verwendung: WÄHLEN ST_Transform(the_geom, utmzone(ST_Centroid(the_geom))) FROM sometable; FUNKTION ERSTELLEN ODER ERSETZEN utmzone(geometry) RETURNS integer AS $BODY$ DECLARE geomgeog Geometrie; Zonen-Int; pref int; BEGIN geomgeog:= ST_Transform($1.4326); WENN (ST_Y(geomgeog))>0 THEN pref:=32600; ELSE pref:=32700; ENDE WENN; zone:=floor((ST_X(geomgeog)+180)/6)+1; RÜCKKEHR zone+pref; ENDE; $BODY$ SPRACHE 'plpgsql' UNVERÄNDERLICHE KOSTEN 100;

Sie müssen die UTM-Zone in einen EPSG-Code übersetzen, verwenden SieST_FromTextum ein Geometrieobjekt in dieser Projektion zu erstellen, und verwenden Sie dannST_Transformum Ihr Geometrieobjekt in die SRID umzuwandeln, die Sie für die gesamte Tabelle verwenden.

Ich habe es nicht ausprobiert, aber dieser Link enthält eine Beschreibung, wie Sie programmgesteuert von Breiten-/Längengrad in UTM-Zone konvertieren. Ich gehe davon aus, dass es nicht allzu schwierig wäre, die Berechnung umzukehren.


Kein räumlicher Operator gefunden, der einer Nicht-Postgis-Tabelle beitritt

Ich versuche, zwei Tabellen in derselben Datenbank, aber unterschiedlichen Schemas zu verbinden.

Einer hat eine PostGis-Geometriespalte und der andere nur 'x' und 'y' utm-Koordinaten.

Mein Wissen über GIS und räumliche Datenbanken ist fast nicht vorhanden, aber durch googeln und Überprüfen der Dokumentation konnte ich überprüfen, ob diese Koordinaten in der gegebenen Geometrie liegen, aber ** wenn ich versuche, die Tabellen nach diesen Kriterien zu verbinden, wird der folgende Fehler ausgegeben:

Die ganze Abfrage lautet wie folgt:

oder ändern Sie einfach die Bedingung in isContained = false

Ich bin mir nicht sicher, ob ich die Konvertierung richtig mache (ich weiß, dass unsere UTM-Koordinaten in der 31N-Zone liegen, aber ich weiß nicht, wo ich das angeben kann). Aber was mich hängen lässt, ist die Tatsache, dass ich diesen Wert (noch-egal, ob er richtig ist oder nicht) in der Projektion eines ganzen Cross-Joins erhalten kann, aber es funktioniert nicht in der Auswahl.

Aber wenn ich versuche, diese Bedingung wie zuvor gezeigt zu ändern, bekomme ich das Kein räumlicher Operator gefunden Error.

Ich habe nach Nullen gesucht in x und ja Spalten, aber es gibt keine.

Wie auch immer, CTE wählt, soweit ich weiß, alle Zeilen aus. Unabhängig davon, ob diese Konvertierung für jede Zeile funktioniert oder nicht, hätte sie entweder ausgelöst, wenn ich endlich versuche, diese Spalten auszuwählen oder nicht.

Aus meinem PostgreSQL-Hintergrundwissen sieht es für mich unlogisch aus (Ich habe Fehler vermieden, indem ich nicht interessante problematische Spalten zuvor mehrmals im Voraus verworfen habe. Aber jetzt scheint diese Strategie nicht zu funktionieren und ich verstehe nicht warum).

SCHLUSSBEMERKUNG: Gerade habe ich versucht:

Es ist meine Schuld, dass ich dies noch nicht getan habe (PostGis-Objekte befinden sich in Geogps und ich erstelle die Abfragen mit dem postgresql-Benutzer - Normalerweise lasse ich Abfragen zuerst funktionieren und weise dann dem Benutzer, der sie in der Produktion verwendet, Berechtigungen zu -. Deshalb Ich präfixiere Tabellen immer mit dem Schemanamen).

ABER ** Ich frage mich immer noch, warum es mit 'not isContained' und nicht mit 'isContained' funktioniert.


2 Antworten 2

Wenn Sie über Milliarden von Zeilen verfügen, verwenden Sie die Tabellenvererbung, um sowohl die Leistung Ihrer Abfragen als auch den Datenladeprozess zu beschleunigen.

Wie im Kommentar erwähnt, teilen Sie Ihre Eingabedaten zuerst in einen kleineren Datensatz auf. Sie erstellen zuerst eine übergeordnete Tabelle und dann so viele untergeordnete Tabellen, wie Ihre Eingabedateien sind. Im Beispiel habe ich als Tabellenname "landmarks_child_1" verwendet. Die anderen Tabellen können benannt werden, z. B. Landmarks_child_2 , Landmarks_child_3 usw.

Erstellen und füllen Sie nun die untergeordnete Tabelle "landmarks_child_1". Wiederholen Sie diesen Schritt für alle anderen untergeordneten Tabellen.

Wenn Sie UTM-Koordinaten anstelle von weltweitem Long/Lag haben, ändern Sie einfach das srid. D.h. in Peking würdest du das srid 32650 . verwenden

Jetzt haben Sie Daten in Ihrer Datenbank und können Daten anfordern.

Beispielabfrage

In dieser Beispielabfrage frage ich alle Punkte im Umkreis von 100 Metern um die Koordinaten 116.32015799999, 40.004775000971 (Beijin, China) und zwischen den Zeitstempeln 2016-01-01 01:00:00 und 2016-01-01 02:00:00 ( eine Stunde).

Wenn Sie UTM-Koordinaten haben, verwenden Sie einfach ST_SetSrid() und wandeln Sie nicht in Geographie um.

Warum Erbschaft?

Vor allem wegen der besseren Leistung. Wenn Sie über viele Millionen Zeilen verfügen, werden Ihre Abfragen mithilfe der Vererbung schneller, da Sie eine Milliarde Zeilen in einer einzigen Tabelle speichern würden. Sie können die übergeordnete Tabelle abfragen und erhalten Ergebnisse aus allen untergeordneten Tabellen (gemäß Ihrer WHERE-Klausel).

Sie müssen nicht wissen, in welcher untergeordneten Tabelle sich Ihre Daten physisch befinden. Die Tabellenvererbung übernimmt dies für Sie. (weitere Infos: siehe Vererbung)

WICHTIG Die Koordinaten in Postgis sind Längengrad/Breitengrad, auch x/y. In Google Map und der meisten Karten-Web-API werden die Koordinaten in umgekehrter Reihenfolge ausgedrückt: Breitengrad/Längengrad (y/x). Verwenden Sie die richtige Reihenfolge!


Mdhntd

SCOTUS - Kann der Kongress Marbury v. Madison per Gesetz außer Kraft setzen?

Wie kreist man bestimmte Einträge einer Matrix zusammen?

Gibt es eine grundlegende Liste von Möglichkeiten, wie ein Schurke mit niedrigem Level einen Vorteil für einen Schleichangriff erzielen kann?

Wie lange könnten britische Oppositionsparteien Neuwahlen verhindern?

Ich habe ein Wort aus einer Quelle geändert, wie zitiere ich es richtig?

Warum hat Thor nicht den Allmächtigen Speer anstelle von Stormbreaker verwendet?

2,5-jährige Tochter weigert sich, Medikamente einzunehmen

Ausreißen bei der Plattenherstellung mit einer Oberfräse

Sind das bestimmte und das unbestimmte Integral eigentlich zwei verschiedene Dinge? Wo ist der Fehler in meinem Verständnis?

Erwartungswert bis zum Erfolg?

Fehler "Nicht genügend RAM" in PIC16F877a

Verwendung der in Wodka getränkten Früchte

Anzahl der Flugzeuge, die in einer Fluggesellschaft betrieben werden sollen

Matrizen obere dreieckige Ausrichtung

War Robin Hoods Standpunkt ethisch einwandfrei?

Zwei verschiedene Farben in einem Illustrator-Strich/-Linie

Sind Bildlaufleisten 2019 tot?

Gab es Länder, die sich selbst aus der Existenz gewählt haben?

Meine Lieblingsfarbe ist Blau was ist deine Lieblingsfarbe?

Warum sind einige Mac-Apps nicht im AppStore verfügbar?

Was war der erste LISP-Compiler?

PostGIS: Räumliche Analyse der Punktschicht SRID 4326 mit UTM-Gitter

Transformieren von SRID 900913 in 4326 mit PostGisSo finden Sie die Zeile mit einem Shapefile mit einem Breiten-/Längenpunkt in meiner PostGIS-GeometriespalteST_Distance verwendet keinen Index für räumliche AbfragenKonvertieren von EPSG:4326 in UTM in PostGISUTM-Koordinaten von Netzbeschriftungspunkten nicht korrekt in Google Earth UTMGet ST_SummaryStats from Raster Table using geoJSON polygonConvert XY (SRID 4326) to UTM in Spatialite gibt NULL'UPDATE 0'-Ergebnisse für die ST_Within-Abfrage zurück - Lokalisieren von Punkten innerhalb von PolygonenShanon-Diversitätsindex in QGISZählen Sie Punkte aus zwei Tabellen in Polygonen mit PostgreSQL/PostGIS

Ich habe eine PostGIS-Tabelle mit den Punkten SRID 4326 (Long/Lat) und muss eine Analyse mit einem UTM-Gitter 10x10 km durchführen. Ich habe das Raster in einer Tabelle SRID 32628, also habe ich die Punktetabelle mit dem Befehl ST_Transform auf SRID 32628 projiziert.

Jetzt muss ich Punkte innerhalb der Gitterzellen zählen, aber ich bekomme nur "0"-Werte in der Zählung, als ob sie sich nicht überlappen würden (aber sie tun es!). Ich habe mehrere Kombinationen von Abfragen ausprobiert, basierend auf

Was ist daran falsch? Projektionsprobleme, Abfragesyntax oder beides? Wie kann es behoben werden?

count(point.geom) sollte count(points.geom) sein. Dein Code funktioniert bei mir

Überprüfen Sie, ob die neu projizierten Koordinaten im gültigen Bereich für die ausgewählte UTM-Zone liegen

Bitte bearbeiten Sie die Frage, um anzugeben, welche Ergebnisse Sie erhalten.

@JGH ja, zumindest einige der neu projizierten Koordinaten liegen innerhalb des gültigen Bereichs für die ausgewählte UTM-Zone. Aber Sie haben Recht, ich werde nach einem anderen Srid suchen, der den gesamten Bereich abdeckt.

@BERA Ich habe meine Frage bearbeitet, da es kein Problem mit dem Namen ist (ich habe es überprüft). Wenn die Abfrage funktioniert, ist es dann ein Problem mit der Projektion?

Ich habe eine PostGIS-Tabelle mit den Punkten SRID 4326 (Long/Lat) und muss eine Analyse mit einem UTM-Gitter 10x10 km durchführen. Ich habe das Raster in einer Tabelle SRID 32628, also habe ich die Punktetabelle mit dem Befehl ST_Transform auf SRID 32628 projiziert.

Jetzt muss ich Punkte innerhalb der Gitterzellen zählen, aber ich bekomme nur "0"-Werte in der Zählung, als ob sie sich nicht überlappen würden (aber sie tun es!). Ich habe mehrere Kombinationen von Abfragen ausprobiert, basierend auf

Was ist daran falsch? Projektionsprobleme, Abfragesyntax oder beides? Wie kann es behoben werden?

count(point.geom) sollte count(points.geom) sein. Dein Code funktioniert bei mir

Überprüfen Sie, ob die neu projizierten Koordinaten im gültigen Bereich für die ausgewählte UTM-Zone liegen

Bitte bearbeiten Sie die Frage, um anzugeben, welche Ergebnisse Sie erhalten.

@JGH ja, zumindest einige der neu projizierten Koordinaten liegen innerhalb des gültigen Bereichs für die ausgewählte UTM-Zone. Aber Sie haben Recht, ich werde nach einem anderen Srid suchen, der den gesamten Bereich abdeckt.

@BERA Ich habe meine Frage bearbeitet, da es kein Problem mit dem Namen ist (ich habe es überprüft). Wenn die Abfrage funktioniert, ist es dann ein Problem mit der Projektion?

Ich habe eine PostGIS-Tabelle mit den Punkten SRID 4326 (Long/Lat) und muss eine Analyse mit einem UTM-Gitter 10x10 km durchführen. Ich habe das Raster in einer Tabelle SRID 32628, also habe ich die Punktetabelle mit dem Befehl ST_Transform auf SRID 32628 projiziert.

Jetzt muss ich Punkte innerhalb der Gitterzellen zählen, aber ich bekomme nur "0"-Werte in der Zählung, als ob sie sich nicht überlappen würden (aber sie tun es!). Ich habe mehrere Kombinationen von Abfragen ausprobiert, basierend auf

Was ist daran falsch? Projektionsprobleme, Abfragesyntax oder beides? Wie kann es behoben werden?

Ich habe eine PostGIS-Tabelle mit den Punkten SRID 4326 (Long/Lat) und muss eine Analyse mit einem UTM-Gitter 10x10 km durchführen. Ich habe das Raster in einer Tabelle SRID 32628, also habe ich die Punktetabelle mit dem Befehl ST_Transform auf SRID 32628 projiziert.

Jetzt muss ich Punkte innerhalb der Gitterzellen zählen, aber ich bekomme nur "0"-Werte in der Zählung, als ob sie sich nicht überlappen würden (aber sie tun es!). Ich habe mehrere Kombinationen von Abfragen ausprobiert, basierend auf

Was ist daran falsch? Projektionsprobleme, Abfragesyntax oder beides? Wie kann es behoben werden?

count(point.geom) sollte count(points.geom) sein. Dein Code funktioniert bei mir

Überprüfen Sie, ob die neu projizierten Koordinaten im gültigen Bereich für die ausgewählte UTM-Zone liegen

Bitte bearbeiten Sie die Frage, um anzugeben, welche Ergebnisse Sie erhalten.

@JGH ja, zumindest einige der neu projizierten Koordinaten liegen innerhalb des gültigen Bereichs für die ausgewählte UTM-Zone. Aber Sie haben Recht, ich werde nach einem anderen Srid suchen, der den gesamten Bereich abdeckt.

@BERA Ich habe meine Frage bearbeitet, da es kein Problem mit dem Namen ist (ich habe es überprüft). Wenn die Abfrage funktioniert, ist es dann ein Problem mit der Projektion?

count(point.geom) sollte count(points.geom) sein. Dein Code funktioniert bei mir

Überprüfen Sie, ob die neu projizierten Koordinaten im gültigen Bereich für die ausgewählte UTM-Zone liegen

Bitte bearbeiten Sie die Frage, um anzugeben, welche Ergebnisse Sie erhalten.

@JGH ja, zumindest einige der neu projizierten Koordinaten liegen innerhalb des gültigen Bereichs für die ausgewählte UTM-Zone. Aber Sie haben Recht, ich werde nach einem anderen Srid suchen, der den gesamten Bereich abdeckt.

@BERA Ich habe meine Frage bearbeitet, da es kein Problem mit dem Namen ist (ich habe es überprüft). Wenn die Abfrage funktioniert, ist es dann ein Problem mit der Projektion?

count(point.geom) sollte count(points.geom) sein. Dein Code funktioniert bei mir

count(point.geom) sollte count(points.geom) sein. Dein Code funktioniert bei mir

Überprüfen Sie, ob die neu projizierten Koordinaten im gültigen Bereich für die ausgewählte UTM-Zone liegen

Überprüfen Sie, ob die neu projizierten Koordinaten im gültigen Bereich für die ausgewählte UTM-Zone liegen

Bitte bearbeiten Sie die Frage, um anzugeben, welche Ergebnisse Sie erhalten.

Bitte bearbeiten Sie die Frage, um anzugeben, welche Ergebnisse Sie erhalten.

@JGH ja, zumindest einige der neu projizierten Koordinaten liegen innerhalb des gültigen Bereichs für die ausgewählte UTM-Zone. Aber Sie haben Recht, ich werde nach einem anderen Srid suchen, der den gesamten Bereich abdeckt.

@JGH ja, zumindest einige der neu projizierten Koordinaten liegen innerhalb des gültigen Bereichs für die ausgewählte UTM-Zone. Aber Sie haben Recht, ich werde nach einem anderen Srid suchen, der den gesamten Bereich abdeckt.

@BERA Ich habe meine Frage bearbeitet, da es kein Problem mit dem Namen ist (ich habe es überprüft). Wenn die Abfrage funktioniert, ist es dann ein Problem mit der Projektion?

@BERA Ich habe meine Frage bearbeitet, da es kein Problem mit dem Namen ist (ich habe es überprüft). Wenn die Abfrage funktioniert, ist es dann ein Problem mit der Projektion?


Mdhntd

Gibt es einen tatsächlichen Sicherheitsvorteil durch die Beschränkung ausländischer IPs?

Manager manipuliert meine Blätter, was hat er davon?

Ist diese Anpassung des Lucky-Meisterstücks zu schwach?

Zeichnen Sie einen unregelmäßigen Kreis in Latex

Mein Reisepass wurde bei der Durchreise über die Türkei in ein anderes Schengen-Land mit einem Ausreisestempel versehen. War das ein Fehler?

Geben Haushaltsbacköfen Wärme nach außen ab?

Was ist der Ursprung der Trope “Kleriker können Wasser schaffen”?

Was kann ich eigentlich mit einer hohen Kreditwürdigkeit machen?

Was ist der Zweck der Autokorrelation?

Kann ein Druide Wild Shaped wie ein Pferd Horseshoes of Speed ​​verwenden?

Leere Unterordner löschen, übergeordneten Ordner behalten

Wie kann ich überprüfen, ob ein Elternteil mehr als 1 Kind hat?

Ist es sicher, ein blinkendes USB-Laufwerk zu entfernen, nachdem es „sicher“ ausgeworfen wurde?

Wie bestimmen Sie, welche Darstellung einer Funktion für die Newton-Methode verwendet werden soll?

Ist Zack Morriss „Zeitstopp“-Fähigkeit in „Saved By the Bell“ eine übernatürliche Fähigkeit?

Nebenfiguren in der Charakterstudienliteratur

Wie kann ich meinen Mitmenschen vermitteln, dass ich mich vom ständigen Geben loslösen möchte?

Wie werden Herrscher durch Kriege reich?

(Wie lange) Soll ich meine neuen Kollegen verwöhnen?

Carrolls Interpretation der 1-Formen

Soll die Paginierung beim Ändern der Reihenfolge zurückgesetzt werden?

Kann ich Knoblauch zur Lagerung in Nelken trennen?

Geometrie aus Breite/Länge in Tabelle mit PostGIS erstellen?

Durchqueren eines PostGIS-TabellenbaumsPostGIS - Geometrie oder Geographie findet Punkte innerhalb der Entfernung in MeternDatentyp jeder Spalte aus der PostGIS-Tabelle abrufen?Warum fällt die Erde über einer Geodäte schneller ab als erwartet, wenn von Breiten-/Längen- in kartesische Koordinaten konvertiert wird?PostGis: Geometrie von UTM-TextSo fügen Sie Google Maps API Lat/Long in PostgreSQL ein Postgis GEOMETRY(GEOMETRY, 4326)Informationen für die Geometriespalte hinzufügenpgAdmin III SQL Erstellen eines PunktsErstellen einer neuen PostGIS-Tabelle mit Datensätzen + Geometrien aus einer anderen Tabelle?

Ich habe eine Tabelle mit über 800.000 Datensätzen, einschließlich einer Lat- und einer langen Spalte. Die Datenquelle hat keine Geometrien erstellt, also habe ich mich umgesehen, wie das geht. Ich weiß, dass es ST_MakePoint(x,y,SRID) gibt, aber die gesamte Dokumentation und andere Threads zeigen, wie einzelne Punkte erstellt werden. Wie erstelle ich den Geometrietyp mit diesen Spalten?

Meinst du Linien aus diesen Punkten erstellen? Denn Punkte sind Geometrie, genau wie Linien und Polygone. Wenn Sie also Linien aus diesen Punkten erstellen möchten, lesen Sie diesen aktuellen Blogbeitrag von Paul Ramsey: blog.cleverelephant.ca/2015/03/making-lines-from-points.html

– DPSRäumlich
4. Mai '15 um 16:29

Nee. Ich meinte, sie in Geometrietypen zu konvertieren, die in räumlichen Abfragen verwendet werden. Meine Frage scheint jedoch beantwortet zu sein, also danke!

Ich habe eine Tabelle mit über 800.000 Datensätzen, einschließlich einer Lat- und einer langen Spalte. Die Datenquelle hat keine Geometrien erstellt, also habe ich mich umgesehen, wie das geht. Ich weiß, dass es ST_MakePoint(x,y,SRID) gibt, aber die gesamte Dokumentation und andere Threads zeigen, wie einzelne Punkte erstellt werden. Wie erstelle ich den Geometrietyp mit diesen Spalten?

Meinst du Linien aus diesen Punkten erstellen? Denn Punkte sind Geometrie, genau wie Linien und Polygone. Wenn Sie also Linien aus diesen Punkten erstellen möchten, lesen Sie diesen aktuellen Blogbeitrag von Paul Ramsey: blog.cleverelephant.ca/2015/03/making-lines-from-points.html

– DPSRäumlich
4. Mai '15 um 16:29

Nee. Ich meinte, sie in Geometrietypen zu konvertieren, die in räumlichen Abfragen verwendet werden. Meine Frage scheint jedoch beantwortet zu sein, also danke!

Ich habe eine Tabelle mit über 800.000 Datensätzen, einschließlich einer Lat- und einer langen Spalte. Die Datenquelle hat keine Geometrien erstellt, also habe ich mich umgesehen, wie das geht. Ich weiß, dass es ST_MakePoint(x,y,SRID) gibt, aber die gesamte Dokumentation und andere Threads zeigen, wie einzelne Punkte erstellt werden. Wie erstelle ich den Geometrietyp mit diesen Spalten?

Ich habe eine Tabelle mit über 800.000 Datensätzen, einschließlich einer Lat- und einer langen Spalte. Die Datenquelle hat keine Geometrien erstellt, also habe ich mich umgesehen, wie das geht. Ich weiß, dass es ST_MakePoint(x,y,SRID) gibt, aber die gesamte Dokumentation und andere Threads zeigen, wie einzelne Punkte erstellt werden. Wie erstelle ich den Geometrietyp mit diesen Spalten?

Meinst du Linien aus diesen Punkten erstellen? Denn Punkte sind Geometrie, genau wie Linien und Polygone. Wenn Sie also Linien aus diesen Punkten erstellen möchten, lesen Sie diesen aktuellen Blogbeitrag von Paul Ramsey: blog.cleverelephant.ca/2015/03/making-lines-from-points.html

– DPSRäumlich
4. Mai '15 um 16:29

Nee. Ich meinte, sie in Geometrietypen zu konvertieren, die in räumlichen Abfragen verwendet werden. Meine Frage scheint jedoch beantwortet zu sein, also danke!

Meinst du Linien aus diesen Punkten erstellen? Denn Punkte sind Geometrie, genau wie Linien und Polygone. Wenn Sie also Linien aus diesen Punkten erstellen möchten, lesen Sie diesen aktuellen Blogbeitrag von Paul Ramsey: blog.cleverelephant.ca/2015/03/making-lines-from-points.html

– DPSRäumlich
4. Mai '15 um 16:29

Nee. Ich meinte, sie in Geometrietypen zu konvertieren, die in räumlichen Abfragen verwendet werden. Meine Frage scheint jedoch beantwortet zu sein, also danke!

Meinst du Linien aus diesen Punkten erstellen? Denn Punkte sind Geometrie, genau wie Linien und Polygone. Wenn Sie also Linien aus diesen Punkten erstellen möchten, lesen Sie diesen aktuellen Blogbeitrag von Paul Ramsey: blog.cleverelephant.ca/2015/03/making-lines-from-points.html

– DPSRäumlich
4. Mai '15 um 16:29

Meinst du Linien aus diesen Punkten erstellen? Denn Punkte sind Geometrie, genau wie Linien und Polygone. Wenn Sie also Linien aus diesen Punkten erstellen möchten, lesen Sie diesen aktuellen Blogbeitrag von Paul Ramsey: blog.cleverelephant.ca/2015/03/making-lines-from-points.html

– DPSRäumlich
4. Mai '15 um 16:29

Nee. Ich meinte, sie in Geometrietypen zu konvertieren, die in räumlichen Abfragen verwendet werden. Meine Frage scheint jedoch beantwortet zu sein, also danke!

Nee. Ich meinte, sie in Geometrietypen zu konvertieren, die in räumlichen Abfragen verwendet werden. Meine Frage scheint jedoch beantwortet zu sein, also danke!


He traducido el Manual PostGIS von Paul Ramsey para facilitar su uso a los usuarios de
lengua castellana. Agradecería que me comunicasen las erratas y comentarios a
[E-Mail geschützt]

indice de contenido
Handbuch PostGIS. 1
1.Objekte GIS. 4
1.1.Forma CANONICA vs. ESTANDAR. 4
2. Usar el estándar OpenGIS. 5
2.1. SPATIAL_REF_SYS. 5
2.2. GEOMETRY_COLUMNS. 6
2.3. Crear una tabla espacial. 7
3. Cargar datos GIS und die Basis von datos Espacial. 8
4. Recuperar-Daten-GIS. 9
5. Construir-Indizes. 11
5.1. Indizes GIST. 12
5.2. Usar-Indizes. 13
6. Clients Java (JDBC). 13
7. Referenzen PostGIS. 16

PostGIS: Es ist eine Erweiterung des Datenbanksystems für objektrelationale PostgreSQL-Daten.
Permite el uso de objetos GIS (Geographische Informationssysteme). PostGIS incluye soporte para
Indices GiST-basados ​​und R-Tree, y funciones basics para el analyse de objetos GIS.

Esta creado por Refractions Research Inc, como un proyecto de investigación de

tecnologías de bases de datos espaciales. Esta publicado bajo licencia GNU.

Con PostGIS podemos usar todos los objetos que aparecen en la especificación OpenGIS

como puntos,lineas, polígonos, multilíneas, multipuntos und colecciones geométricas.

Lose objetos GIS soportados por PostGIS son de características simples definidas por
OpenGIS. Actualmente PostGIS soporta las características y el API de representación de la
spezifische OpenGIS pero no tiene varios de los operadores de comparación y convolución
de esta spezifisch.

Ejemplos de la repración en modo texto:

POLYGON(((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0))

MEHRPUNKT(0 0 0,1 2 1)
MULTILINESTRING((0 0 0,1 1 0,1 2 1),(2 3 1,3 2 1,5 4 1))
MULTIPOLYGON((((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)),(( -

1 -1 0,-1 -2 0,-2 -2 0,-2 -1 0,-1 -1 0)))

GEOMETRIESAMMLUNG(POINT(2 3 9),LINESTRING((2 3 4,3 4 5))

En los ejemplos se pueden ver características con coordenadas de 2D y 3D (ambas son
Permitidas von PostGIS). Podemos usar las funciones force_2d() und force_3d() para convertir
una característica a 3d oder 2d.

1.1.Forma CANONICA vs. ESTANDAR.

OpenGIS definiert dos formas de representar los jetos espaciales:

1. (WKT)Bekannter Text como los ejemplos anteriores.
2. (WKB) Bekannte Binärdatei.

Las dos formas guardan información del tipo de objeto y sus coordenadas.

Además la especificación OpenGIS requiere que los objetos incluyan el identificador del
sistema de referencia espacial(SRID).El SRID es requerido cuando insertamos un objeto
espacial en la base de datos.
Beispiel:

IN RAUMDATENBANK (THE_GEOM,THE_NAME) EINFÜGEN
WERTE(GeometryFromText('POINT(-126.4 45.32)',312),'Un Lugar')

Die Funktion GeometryFromText erfordert eine SRID-Nummer.
En PostgreSQL tenemos la representación en forma canónica, es una representación en

modo texto. Esta representación es distinta al estándar openGIS.
Unterschiede:

Illustration 1. Darstellungsunterschiede zwischen PostgreSQL und OpenGIS.

2. Usar el estándar OpenGIS.

Las especificación para SQL de Characteristics Simples de OpenGIS Define tipos de objetos
GIS estándar, los cuales son manipulados por funciones, y un conjunto de tablas de meta-
Daten.

Hay 2 tablas de meta-datas en la especificación OpenGIS:

Contiene un identificador numérico y una descripción textual de el sistema de coordenadas
espacial de la base de datos.
Como se definiere la tabla:

CREATE TALBE SPATIAL_REF_SYS(

SRID INTEGER NICHT NULL PRIMÄRSCHLÜSSEL,
AUTH_NAME VARCHAR(256),
AUTH_SRID INTEGER,
SRTEXT-VARCHAR(2048),
PROJ4TEXT VARCHAR(2048)
)

Las columnas de las tablas son la siguientes:

SRID: Valor entero que identifica el sistema de referencia espacial.

AUTH_NAME: El nombre del estándar para el sistema de referencia. Por

AUTH_SRID: El identificador según el estándar AUTH_NAME. En el

ejemplo anterior es el id según EPSG.
SRTEXT: Una Bekannter Text
Referenzen besonders. Beispiel: WKT para SRS.

Vertretung para el sistema de

PROJCS["NAD83/UTM Zone 10N",
GEOGCS["NAD83",DATUM["North_American_Datum_1983",
SPHEROID[“GRS 1980”,6378137,298.257222101]],
PRIMEM["Greenwich",0],EINHEIT["Grad",0.0174532925199433]
],
PROJEKTION["Quer_Mercator"],
PARAMETER["Latitude_of_origin",0],
PARAMETER["zentraler_meridian",-123],
PARAMETER["scale_factor",0.9996],
PARAMETER[“false_easting”,500000],

Para una lista de las representaciones WKT de EPSG ir a
http://www.opengis.org/techno/interop/EPSG2WKT.TXT.

PROJ4TEXT: Proj4 es una librería que usa PostGIS para transformar
Koordinaten. Esta columna contiene una cadena con definición de las
Coordenadas de Proj4 für ein SRID-Dado.

+proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +Einheiten=m

CREATE TABLE GEOMETRY_COLUMNS(
F_TABLE_CATALOG VARCHAR(256) NICHT NULL,
F_TABLE_SCHEMA VARCHAR(256) NICHT NULL,
F_TABLE_NAME VARCHAR(256) NICHT NULL,

F_GEOMETRY_COLUMN VARCHAR(256) NICHT NULL,
COORD_DIMENSION INTEGER NICHT NULL,
SRID INTEGER NICHT NULL,
TYPE VARCHAR(30) NICHT NULL

Descripción de cada una de las columnas:

Gesamtsumme auszeichnen
Spalte geometrisch.

la tabla de características que contiene la

Nombre de la columna geométrica und la tabla de características.

Dimensionen spezieller Spalten (2D oder 3D).

Es una clave foránea que referencia SPATIAL_REF_SYS.

Tipo
besonders. PUNKT, LINESTRING, POLYGON,
MULTYPOINT, GEOMETRIESAMMLUNG. Para un tipo heterogeno
debo usar el tipo GEOMETRIE.

2.3. Crear una tabla espacial

Para crear una tabla con datos espaciales realizamos dos pasos:

1. Creamos una tabla keine besondere.

Beispiel: CREATE TABLE CALLES_GEOM(ID int4,NAME varchar(25))

Kolumne (campo)
AddGeometryColumn von OpenGIS.

Beispiel: SELECT AddGeometryColum('calles_db','calles_geom','geom',423, 'LINESTRING',2)

Ejemplos de creación de tablas con columnas geometrisch:

1) TABELLE PARQUES ERSTELLEN(PARQUE_ID int4,PARQUE_NOMBRE varchar(128),PARQUE_FECHA

Datum)
2) SELECT AddGeometryColumn( 'parque_db', 'parque', 'parque_geom', 128, 'MULTIPOLYGON' , 2 )

Calles: El tipo de dato espacial es genérico (GEOMETRIE).

1) CREATE TABLE CALLES(CALLE_ID int4,CALLE_NOMBRE varchar(128))
2)SELECT AddGeometryColumn('calles_db','calles','calles_geom',-1,'GEOMETRY',3)

3. Cargar datos GIS und die Basis von datos Espacial.

Hay dos formas de cargar datos und las tablas de nuestra base de datos. Usando el lenguaje

SQL oder usando un cargador de archivos de figuras.

Si podemos convertir los datos que vamos ha insertar en unpresentación textual.
Verwenden Sie das SQL-Format, das eine Methode zum Einfügen von Daten in PostGIS ist.
Podemos crear un archivo de texto lleno de sentencias INSERT y cargarlo con
con SQL-Monitor.
Beispiel:

START
INSERT INTO CALLES_GEOM(ID,GEOM,NAME) VALUES (1, GeometryFromText
('LINESTRING(191232 243118,191108 243242)',-1),'Jeff Rd')
INSERT INTO CALLES_GEOM(ID,GEOM,NAME) VALUES (1, GeometryFromText
('LINESTRING(189141 244158,189265 244817)',-1),'Geordie Rd')
INSERT INTO CALLES_GEOM(ID,GEOM,NAME) VALUES (1, GeometryFromText
('LINESTRING(192783 228138,192612 229814)',-1),'Paul St')
INSERT INTO CALLES_GEOM(ID,GEOM,NAME) VALUES (1, GeometryFromText
('LINESTRING(189412 252431,189631 259122)',-1),'Graeme Ave')
INSERT INTO CALLES_GEOM(ID,GEOM,NAME) VALUES (1, GeometryFromText
('LINESTRING(190131 224148,190871 228134)',-1),'Phil Tce')

INSERT INTO CALLES_GEOM(ID,GEOM,NAME) VALUES (1, GeometryFromText
('LINESTRING(198231 263418,198213 268322)',-1),'Dave Cres')
ENDE

El archivo puede cargar en la base de datos usando „psql“:
psql -d [base de datos] -f calles.sql

El cargador de datos „shp2pgsql“ convierte archivos de figuras ESRI a SQL para
su inserción en a base de datos PostGIS/PostgreSQL. El cargador tiene varios
modos de operación que se seleccionan con los parámetros desde linea de


Open-Source-GIS:

Open-Source-Geographische Informationssysteme (GIS). Es gibt eine Vielzahl von GIS-Anwendungen, Werkzeugen und Daten, um die Kartierung von Erddaten (und manchmal auch von anderen Planeten) zu unterstützen.

Verwandte YoLinux-Tutorials:

Digitale Kartierungssysteme haben verschiedene Formen, um eine Lösung für Uber- und Lyft-Apps zur Standortanzeige, GPS-Anwendungen zur Anzeige von Standort und Richtung, Tiefbauanwendungen zur Unterstützung beim Bau von Straßen und Brücken, Flugplanung, Landnutzungsmanagement (Landwirtschaft), meteorologische Datenanzeige und wissenschaftliche Datenanzeige, um nur einige zu nennen. Die Komponenten von GIS-Systemen sind aus der Bildungs- und Regierungsforschung entstanden und daher gibt es eine starke Open Source-Präsenz.

Sie können in 2D- oder 3D-Kartenvisualisierungsanwendungen und Webanwendungen mit Frontend- und Backend-Komponenten kategorisiert werden. GIS-Anwendungen werden in der Regel aus der Notwendigkeit heraus als Client-Server-Softwaresystem ausgeführt. Die Serverkomponente ist aufgrund der enormen Größe der Daten (Bilder, Höhen, Vektoren, wissenschaftliche Daten usw.) erforderlich, die auf Computern mit angemessenen Ressourcen lokalisiert werden müssen. Die Client-Komponente wird durch das Bedürfnis nach Mobilität (GPS und Führung), Sichtbarkeit (in 2D oder 3D) benötigt und bei Bedarf in ein Gerät eingebettet.


PostGis: Geometrie aus UTM-Text - Geographische Informationssysteme

Es ist sehr üblich, Daten zu haben, bei denen die Koordinaten "Geographie" oder "Breite/Länge" sind.

Im Gegensatz zu Koordinaten in Mercator, UTM oder Stateplane sind geografische Koordinaten keine kartesischen Koordinaten. Geografische Koordinaten stellen keine lineare Entfernung von einem Ursprung dar, wie sie auf einer Ebene aufgetragen ist. Vielmehr sind diese Kugelkoordinaten beschreiben Winkelkoordinaten auf einem Globus. In Kugelkoordinaten wird ein Punkt durch den Drehwinkel von einem Bezugsmeridian (Längengrad) und den Winkel vom Äquator (Breitengrad) angegeben.

Sie können geografische Koordinaten als ungefähre kartesische Koordinaten behandeln und weiterhin räumliche Berechnungen durchführen. Entfernungs-, Längen- und Flächenmessungen sind jedoch unsinnig. Since spherical coordinates measure angular distance, the units are in "degrees." Further, the approximate results from indexes and true/false tests like intersects and contains can become terribly wrong. The distance between points get larger as problem areas like the poles or the international dateline are approached.

For example, here are the coordinates of Los Angeles and Paris.

The following calculates the distance between Los Angeles and Paris using the standard PostGIS Cartesian ST_Distance_(geometry, geometry). Note that the SRID of 4326 declares a geographic spatial reference system.

Aha! 121! But, what does that mean?

The units for spatial reference 4326 are degrees. So our answer is 121 degrees. But (again), what does that mean?

On a sphere, the size of one "degree square" is quite variable, becoming smaller as you move away from the equator. Think of the meridians (vertical lines) on the globe getting closer to each other as you go towards the poles. So, a distance of 121 degrees doesn't bedeuten anything. It is a nonsense number.

In order to calculate a meaningful distance, we must treat geographic coordinates not as approximate Cartesian coordinates but rather as true spherical coordinates. We must measure the distances between points as true paths over a sphere -- a portion of a great circle.

Starting with version 1.5, PostGIS provides this functionality through the geography type.

Different spatial databases have different approaches for "handling geographics"

  • Oracle attempts to paper over the differences by transparently doing geographic calculations when the SRID is geographic.
  • SQL Server uses two spatial types, "STGeometry" for Cartesian data and "STGeography" for geographics.
  • Informix Spatial is a pure Cartesian extension to Informix, while Informix Geodetic is a pure geographic extension.
  • Similar to SQL Server, PostGIS uses two types, "geometry" and "geography".

Using the geography instead of geometry type, let's try again to measure the distance between Los Angeles and Paris. Instead of ST_GeometryFromText (text), we will use ST_GeographyFromText (text).

A big number! All return values from geography calculations are in meters, so our answer is 9124km.

Older versions of PostGIS supported very basic calculations over the sphere using the ST_Distance_Spheroid (point, point, measurement)` function. However, ST_Distance_Spheroid is substantially limited. The function only works on points and provides no support for indexing across the poles or international dateline.

The need to support non-point geometries becomes very clear when posing a question like "How close will a flight from Los Angeles to Paris come to Iceland?"

Working with geographic coordinates on a Cartesian plane (the purple line) yields a sehr wrong answer indeed! Using great circle routes (the red lines) gives the right answer. If we convert our LAX-CDG flight into a line string and calculate the distance to a point in Iceland using geography we'll get the right answer (recall) in meters.

So the closest approach to Iceland (as measured from its international airport) on the LAX-CDG route is a relatively small 502km.

The Cartesian approach to handling geographic coordinates breaks down entirely for features that cross the international dateline. The shortest great-circle route from Los Angeles to Tokyo crosses the Pacific Ocean. The shortest Cartesian route crosses the Atlantic and Indian Oceans.

In order to load geometry data into a geography table, the geometry first needs to be projected into EPSG:4326 (longitude/latitude), then it needs to be changed into geography. The ST_Transform (geometry,srid)` function converts coordinates to geographics and the Geography (geometry) function "casts" them from geometry to geography.

Building a spatial index on a geography table is exactly the same as for geometry:

The difference is under the covers: the geography index will correctly handle queries that cover the poles or the international date-line, while the geometry one will not.

There are only a small number of native functions for the geography type(postGIS 2.5):

    - Returns the area of the surface if it is a Polygon or MultiPolygon. For geometry, a 2D Cartesian area is determined with units specified by the SRID. For geography, area is determined on a curved surface with units in square meters. - Return the Well-Known Binary (WKB) representation of the geometry/geography without SRID meta data. - Return the Well-Known Text (WKT) representation of the geometry with SRID meta data. - Return the geometry as a GML version 2 or 3 element. - Return the geometry as a GeoJSON element. - Return the geometry as a KML element. Several variants. Default version=2, default maxdecimaldigits=15 - Returns a Geometry in SVG path data given a geometry or geography object. - Return the Well-Known Text (WKT) representation of the geometry/geography without SRID metadata. - Returns the north-based azimuth as the angle in radians measured clockwise from the vertical on pointA to pointB. - (T)Returns a geometry covering all points within a given distancefrom the input geometry. - Returns the geometric center of a geometry. - Returns 1 (TRUE) if no point in Geometry/Geography A is outside Geometry/Geography B - Returns 1 (TRUE) if no point in Geometry B is outside Geometry A - Returns true if the geometries are within the specified distance of one another. For geometry units are in those of spatial reference and for geography units are in meters and measurement is defaulted to use_spheroid=true (measure around spheroid), for faster check, use_spheroid=false to measure along sphere. - For geometry type returns the 2D Cartesian distance between two geometries in projected units (based on spatial reference system). For geography type defaults to return minimum geodesic distance between two geographies in meters. - Return a specified geography value from Well-Known Text representation or extended (WKT). - Creates a geography instance from a Well-Known Binary geometry representation (WKB) or extended Well Known Binary (EWKB). - Return a specified geography value from Well-Known Text representation or extended (WKT) - EWKT. - Returns TRUE if the coordinates and coordinate order geometry/geography A are the same as the coordinates and coordinate order of geometry/geography B. - (T)Returns a geometry that represents the shared portion of geomA and geomB. - Returns TRUE if the Geometries/Geography "spatially intersect in 2D" - (share any portion of space) and FALSE if they don't (they are Disjoint). For geography -- tolerance is 0.00001 meters (so any points that close are considered to intersect) - Returns the 2D length of the geometry if it is a LineString or MultiLineString. geometry are in units of spatial reference and geography are in meters (default spheroid) - Return the length measurement of the boundary of an ST_Surface or ST_MultiSurface geometry or geography. (Polygon, MultiPolygon). geometry measurement is in units of spatial reference and geography is in meters. - Returns a POINT projected from a start point using a distance in meters and bearing (azimuth) in radians. - Return a modified geometry/geography having no segment longer than the given distance. - Returns a text summary of the contents of the geometry. - Returns the 2D distance between A and B. - Returns TRUE if A's 2D bounding box intersects B's 2D bounding box.

Creating a Geography Table

The SQL for creating a new table with a geography column is much like that for creating a geometry table. However, geography includes the ability to specify the object type directly at the time of table creation. Beispielsweise:

In the table definition, the GEOGRAPHY(Point) specifies our airport data type as points. The new geography fields don't get registered in the geometry_columns view. Instead, they are registered in a view called geography_columns .

Some columns were omitted from the above output.

While the basic functions for geography types can handle many use cases, there are times when you might need access to other functions only supported by the geometry type. Fortunately, you can convert objects back and forth from geography to geometry.

The PostgreSQL syntax convention for casting is to append ::typename to the end of the value you wish to cast. So, 2::text with convert a numeric two to a text string '2'. And 'POINT(0 0)'::geometry will convert the text representation of point into a geometry point.

The ST_X_(point) function only supports the geometry type. How can we read the X coordinate from our geographies?

By appending ::geometry to our geography value, we convert the object to a geometry with an SRID of 4326. From there we can use as many geometry functions as strike our fancy. But, remember -- now that our object is a geometry, the coordinates will be interpretted as Cartesian coordinates, not spherical ones.

Geographics are universally accepted coordinates -- everyone understands what latitude/longitude mean, but very few people understand what UTM coordinates mean. Why not use geography all the time?

  • First, as noted earlier, there are far fewer functions available (right now) that directly support the geography type. You may spend a lot of time working around geography type limitations.
  • Second, the calculations on a sphere are computationally far more expensive than Cartesian calculations. For example, the Cartesian formula for distance (Pythagoras) involves one call to sqrt(). The spherical formula for distance (Haversine) involves two sqrt() calls, an arctan() call, four sin() calls and two cos() calls. Trigonometric functions are very costly, and spherical calculations involve a lot of them.

If your data is geographically compact (contained within a state, county or city), use the geometry type with a Cartesian projection that makes sense with your data. See the http://spatialreference.org site and type in the name of your region for a selection of possible reference systems.

If you need to measure distance with a dataset that is geographically dispersed (covering much of the world), use the geography type. The application complexity you save by working in geography will offset any performance issues. And casting to geometry can offset most functionality limitations.

  • The buffer and intersection functions are actually wrappers on top of a cast to geometry, and are not carried out natively in spherical coordinates. As a result, they may fail to return correct results for objects with very large extents that cannot be cleanly converted to a planar representation.
  • For example, the ST_Buffer (geography,distance) function transforms the geography object into a "best" projection, buffers it, and then transforms it back to geographics. If there is no "best" projection (the object is too large), the operation can fail or return a malformed buffer.

Visualizing Geography Data

An easy way to view correctly the shortest path (line) between global airports is accessing the Great Circle Mapper website.

But, to vizualize correctly this global data using a GIS is another history. You must be alert for some details, principally related to the projection used.

Add some basemap (QuickMapServices QGIS Plugin) to the view to help you to visualize the airports data.

The construction of the linear feature that presents the LAX-CDG air route was performed in some steps:

  1. Two queries were used to acquire the geography features of LAX and CDG airports
  2. Casting of airport geography features to geometry type, as the spatial function ST_MakeLine (geometry, geometry) only works with geometry data and doesn't support geography data.
  3. Generation of a geometry linear feature from two geometry points features representing LAX and CDG airports.
  4. Casting of the geometry linear feature to geography linear feature.

Note that the LAX-CDG route, despite being in geography data format, presents a straight line as if the data were geometry.

This is because QGIS creates this "line" from the computational path between the two airports.

To solve this visualization "problem", it is necessary to "segmentize" the line-type geographic data by vertices that represent the path drawn between airports.

In this case, we will use the ST_Segmentize spatial function (geography geog, float max_segment_length), which has support for geography data, with line segmentation in vertices with 10m spacing between them.

Be aware that this procedure works to visualize linear geography features in GIS, but it´s not a good practice to calculate the distance between these points as you can see in the results of the query below, where the calculated distance is different for each approach:

North Korea's Hwasong-14 intercontinental ballistic missile has an estimated maximum range of 10,000 km.

Let´s assume a buffer built from Pyongyang City(North Korea Capital).

We can view the maximum range of this missile using the SQL instruction below:

But, as you can see in the figure above, any planimetric projection, (3857, for example) doesn't support the geography data representation.

To solve this, we have to change the view projection to SRID 3571: WGS 84 / North Pole LAEA Bering Sea

If we try to make a buffer from Pyongyang City using geometry data, the wrong choice, we have the result below:

As we are working with geometry data, the buffer radius parameters must be inputed as decimal degrees. In this case, at this latitude, 10,000 km is around 125 decimal degrees.

ST_Distance (geometry, geometry): For geometry type Returns the 2-dimensional Cartesian minimum distance (based on spatial ref) between two geometries in projected units. For geography type defaults to return spheroidal minimum distance between two geographies in meters.

ST_GeographyFromText (text): Returns a specified geography value from Well-Known Text representation or extended (WKT).

ST_Transform (geometry, srid): Returns a new geometry with its coordinates transformed to the SRID referenced by the integer parameter.

ST_X (point): Returns the X coordinate of the point, or NULL if not available. Input must be a point.


Final Answer

View attached explanation and answer. Let me know if you have any questions.please find the attached files

UAVs
Student’s Name
University Affiliation
Course Name and Number
Instructor’s Name
Assignment Due Date

2
An unmanned aerial vehicle (UAV) is an aircraft known as a drone without a pilot on

board (Molko, 2012). They are usually equipped with live feed cameras with high definition and
radar, all valuable for the consistent surveillance of a particular area. They are smaller than
airplanes and, therefore, harder to spot. Law enforcement uses their live-feed cameras to provide
management and provide evidence during a crime investigation. Drones have various other
capabilities, such as interception technology with the cellphone, to provide information such as
location and activity in a specific area. Drones are sometimes fitted with lethal weapons
whenever they fly over a crime-infested place or track a dangerous criminal.
Various agencies use drones, including the law enforcement agency, to chase suspects,
map, and survey the cities. According to Herwitz et al. (2004), Agricultural agencies also use
drones to collect data on crops covering an extensive area. Construction agencies also use drones
to map areas under construction to monitor progress and pick out situations and problems that
might cause accidents. The use of drones brings the aspect of privacy and security to individuals
and a state in general.
In 2012, the Federal Aviation Administration (FAA) Modernization and Reform Act
advocated for the increase of UAVs in the airspace system of America (Thompson, 2013).
However, several other amendments have occurred, and now the fourth Amendment approves a
license for the flight of UAVs. According to the National Conference of State Legislators, over
twenty states have passed legislation on the flying of drones (Hudson Jr, 2015). Most states are
considering the laws to safeguard individual privacy. Tennessee and Idaho have forbidden using
drones over private property unless carrying out manned investigations to collect
evidence. These States also permit individuals to sue agencies breaking these laws. In my
opinion, the need for a search warrant depends on the case at hand. A search warrant is needed

when flying a drone over private property to identify criminal activities. One of the human rights
of an American citizen is the right to privacy. Without a warrant, it will violate that right,
primarily if no evidence is found on the property. Therefore, a warranty would be necessary for
such a scenario. However, if law enforcement must search a suspect's property, then a warrant
should not be essentia.


Projections Support¶

Coordinate reference systems (CRS) are encapsulated by QgsCoordinateReferenceSystem class. Instances of this class can be created by several different ways:

QGIS uses three different IDs for every reference system:

  • PostgisCrsId — IDs used within PostGIS databases.
  • InternalCrsId — IDs internally used in QGIS database.
  • EpsgCrsId — IDs assigned by the EPSG organization

If not specified otherwise in second parameter, PostGIS SRID is used by default.

specify CRS by its well-known text (WKT)

create invalid CRS and then use one of the create*() functions to initialize it. In following example we use Proj4 string to initialize the projection

It’s wise to check whether creation (i.e. lookup in the database) of the CRS has been successful: isValid() must return True .

Note that for initialization of spatial reference systems QGIS needs to look up appropriate values in its internal database srs.db . Thus in case you create an independent application you need to set paths correctly with QgsApplication.setPrefixPath() otherwise it will fail to find the database. If you are running the commands from QGIS python console or developing a plugin you do not care: everything is already set up for you.

Accessing spatial reference system information