2016-05-12 7 views
0

Ich versuche, meine Lage Spalte zu füllen (das ist eine PostGIS geographische Spalte) unter Verwendung einer CSV-Datei lon/lat Werte zu erhalten und aktiv -record-postgis-adapter zum Abfragen der Datenbank mit Ruby-Code.geografische Spalte einer CSV und aktiven Rekord-postgis-Adapter

Ich habe bereits einen kurzen SQL-Code, der meine Spalte funktioniert zu füllen, aber ich bin mit lon/lat Werten aus der db (und nicht der CSV-Datei)

ActiveRecord::Base.connection.execute("UPDATE my_table SET location = ST_SetSRID(ST_MakePoint(my_table.longitude, my_table.latitude), 4326)::geography") 

Wie kann ich das lon nehmen/lat Werte aus jeder Zeile der .csv und setzen Sie es in die Position Spalte?

Antwort

1

Ich bin nicht 100% sicher, aber ich denke, Sie können nicht vermeiden, zunächst eine Staging-Tabelle mit Ihren CSV-Daten zu füllen, und dann kopieren und transformieren die lat/lng in Punkte, um Ihre Tabelle zu füllen.

der wole Prozess in SQL So wäre:

-- Create table for staging your data 
CREATE TABLE public.staging 
(
    lat double precision, 
    lng double precision 
); 

-- Copy data from CSV into staging - adapt the delimiter 
COPY staging FROM '/abs/path/to/your/file.csv' WITH DELIMITER ';'; 

-- Transform and copy to your table 
INSERT INTO my_table (location) 
    SELECT ST_SetSRID(ST_MakePoint(lng, lat), 4326)::geography 
    FROM staging; 

-- If not needed any more, drop staging table 
DROP TABLE staging; 

Und Sie müssen diesen Prozess anzupassen, wenn Sie andere Spalten haben.

Verwandte Themen