【问题标题】:Fill geographical column using a .csv and active-record-postgis-adapter使用 .csv 和 active-record-postgis-adapter 填充地理列
【发布时间】:2016-05-12 09:38:22
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我不能 100% 确定,但我认为您无法避免先用 csv 数据填充临时表,然后将 lat/lng 复制并转换为点以填充表。

    所以,SQL 中的整个过程是:

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

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

    【讨论】:

      猜你喜欢
      • 2016-09-01
      • 2020-06-09
      • 1970-01-01
      • 2022-12-16
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      相关资源
      最近更新 更多