2011-01-09 2 views
6

Ich habe eine Datei im CSV-Format, die einige Daten wie folgt hat: Feld ID | Datenkachel | Datenbeschreibung | Länge | BreiteVerwenden von PostGIS mit einer vorhandenen Datentabelle, die Dezimal-Koordinaten hat

Ich habe PostgreSQL und PostGIS bereits installiert und möchte PostGIS verwenden, um eine Abfrage zu erstellen, die alle Datensätze (aus der obigen Tabelle), die sich in der angegebenen Entfernung von einem Lat/Long-Speicherort befinden.

Das Problem ist, dass ich nicht weiß, wie ich anfangen soll. Importieren Sie einfach meine CSV-Datei in die PostgreSQL-Datenbank und verwenden Sie PostgreSQL- und PostGIS-Funktionen, sobald ich die CSV-Datei in eine PostgreSQL-Tabelle umgewandelt habe?

Gibt es zusätzliche Schritte, damit die Tabelle mit den PostGIS-Funktionen funktioniert?

Was wären die richtigen Schritte, um dies zu tun? Ich schätze deine Hilfe sehr!

Antwort

8

Um mit PostGIS arbeiten zu können, müssen Sie diese Skripte in Ihre Arbeitsdatenbank importieren.

Sobald Sie diesen Schritt getan, Ihren Tisch einrichten und fügen Sie die PostGIS Spalte es

SELECT AddGeometryColumn('yourtable', 'columnname', 4269, 'POINT', 2); 

Die letzten drei Werte sind SRID, die Art und das Maß. Ich nehme an, das ist was du willst. Sie müssen wahrscheinlich die SRID anpassen, aber das sollte in Ordnung sein.

Sie können in Ihrem Import/Update eingestellt/was auch immer Sie die Geometrie wie

ST_Transform(ST_PointFromText('POINT(-85.45899 32.1337)', 4326)); 

Diese Abfrage geschrieben werden kann in Ihrem UPDATE oder INSERT-Skript für die Daten hinzuzufügen, gewählt haben.

+0

Danke! Das ist genau das was ich gesucht habe. Ich könnte wahrscheinlich ein kleines Python-Skript machen, das durch die Tabelle geht und diese Dezimalkoordinaten in Punkte umwandelt. – avatar

+0

Würde so etwas funktionieren? UPDATE mytable SET geometrycolumn = ST_Transform (ST_PointFromText ('POINT (-85.45899 32.1337)', 4326)) wobei column1 = 'data1' und column2 = 'data2'; – avatar

+0

@itgorilla Ich kenne die PostGIS-Referenz nicht auswendig, aber warum nicht, probier sie einfach;) – DrColossos

2

Dies ist eine lustige Frage :-)

Wissen Sie, welches Koordinatensystem die lat lons in sind?

Ich stelle diese Frage, weil es relevant ist, wie Sie die Daten speichern.

Sie müssen zusätzlich zu den Spalten in der CSV-Datei, die ein PostGIS-Geometrieobjekt vom Typ POINT enthalten, eine Spalte erstellen.

Ich würde dann die CSV-Daten in die Standardspalten in der Tabelle importieren und dann eine SQL-Aktualisierung ausführen, um die POINT-Daten von jedem Datensatz zu erstellen und diese in der erstellten Geometriespalte zu speichern.

An diesem Punkt sollten Sie in der Lage sein, die PostGIS-Funktionen zu verwenden, um auf Abfragen der Daten zuzugreifen und diese zu prädizieren.

Dies ist alles Art von Meta, was ich oben sage, weil es Feinheiten in Bezug auf die verwendeten Daten gibt. Sie müssen das räumliche Referenzierungssystem kennen, das anfangs mit den Daten verwendet wird.

+0

Die lat langen sind in Dezimal. – avatar

+0

Nicht sicher, ob das die richtige Frage ist, aber wie konvertiere ich die Lat/Long Dezimal-Tabellen in einen POINT? Ich bin mir nicht sicher, ob PostgreSQL nur durch Ausführen des SQL-Updates weiß, dass ich zwei Felder für lat und long habe und sie in einen POINT umwandle. – avatar

+1

Rechts die Lat lang sind in Dezimal, aber sie sind relativ zu einem bestimmten Sphäroid (d. H. Koordinatensystem WGS84 oder NAD83 zum Beispiel). Wenn Sie das Update durchführen, müssen Sie ein Update mit einer Unterauswahl durchführen, um die reinen Lat/Lon-Daten in das entsprechende PostGIS POINT-Objekt zu konvertieren. Sie müssen auf die Dokumentation zur Vorgehensweise verweisen. –

7

Ich musste nur die gleiche Aufgabe lösen und tat so etwas wie Dr.Colossos Lösung ... Sie sind wahrscheinlich damit fertig, aber ich wollte nur hinzufügen, falls jemand dieses Problem googelt (wie ich) : Es gibt keine Notwendigkeit, ein Skript zu schreiben, um eine Geometrie aus dem lat/lon Felder zu generieren, können Sie eine einfache verkettete Zeichenfolge verwenden:

+0

Du bist Lebensretter! – icefex

Verwandte Themen