使用.csv和active-record-postgis-adapter填充地理列

时间:2016-05-12 09:38:22

标签: ruby-on-rails database postgresql csv postgis

我正在尝试使用.csv文件填充我的位置列(这是一个PostGIS地理列)来获取lon / lat值,并使用active-record-postgis-adapter来查询数据库使用Ruby代码。

我已经有一个简短的SQL代码可以填充我的列,但我正在使用db中的lon / lat值(而不是.csv文件)

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

如何从.csv的每一行获取lon / lat值并将其放在位置列中?

1 个答案:

答案 0 :(得分:1)

我不是百分百肯定,但我认为你不能避免先用你的csv数据填充一个临时表,然后将lat / lng复制并转换成点来填充你的表。

因此,SQL中的wole进程将是:

-- 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; 

如果您有其他专栏,则需要调整此过程。