我正在尝试使用.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值并将其放在位置列中?
答案 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;
如果您有其他专栏,则需要调整此过程。