当前位置:首页 > 站长知识 > 数据库 > 正文内容

使用GDAL库的ogr2ogr将GeoJSON数据导入到PostgreSql中

2024-11-30数据库37

数据下载

数据下载地址:https://datav.aliyun.com/portal/school/atlas/area_selector

我这里下载全国所有城市的数据进行导入

下载安装GDAL

以下是安装 ogr2ogr(GDAL 工具集的一部分)的步骤,适用于 Windows、macOS 和 Linux 系统。

Windows系统安装GDAL

下载 GDAL:

下载 GDAL:

  • 访问 GISInternals 或 OSGeo4W 下载 GDAL 安装包。

  • 选择适合你系统的版本(通常是 32 位或 64 位)。

安装:

  • 下载后,运行安装程序,并按照提示完成安装。

  • 确保选择安装命令行工具。

配置环境变量:

  • 右键点击“此电脑”或“我的电脑”,选择“属性”。

  • 点击“高级系统设置” > “环境变量”。

  • 在“系统变量”中找到 Path,点击“编辑”。

  • 添加 GDAL 的安装路径(例如:C:\Program Files\GDAL)。

验证安装:

  • 打开命令提示符,输入以下命令:

1
ogr2ogr --version

如果显示版本信息,说明安装成功。

macOS系统安装GDAL

使用 Homebrew 安装: 如果没有安装 Homebrew,可以先在终端执行以下命令安装:

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装 GDAL:

1
brew install gdal

验证安装: 在终端输入:

确认安装成功。

Linux系统安装GDAL

Debian/Ubuntu 系统:

打开终端,运行以下命令:

1
2
sudo apt update
sudo apt install gdal-bin

Red Hat/Fedora 系统:

使用以下命令:

1
sudo dnf install gdal

验证安装:

在终端输入:

1
ogr2ogr --version

如果显示版本信息,说明安装成功。

我这里使用的是Ubuntu系统,按照成功会有以下提示:

在PostgreSql中创建表

GeoJSON 数据包含多个坐标并且表示一个多边形(Polygon),需要相应地调整表设计以支持存储 Polygon 类型的几何数据。

1
2
3
4
5
6
7
8
9
10
CREATE TABLE geo_data (
    id SERIAL PRIMARY KEY,          -- 唯一标识符
    name VARCHAR(100),              -- 地物名称
    description TEXT,               -- 描述(可选)
    type VARCHAR(50),               -- GeoJSON 类型(例如 "Feature")
    geom GEOMETRY(Polygon, 4326),   -- 空间数据,使用 Polygon 类型
    properties JSONB,               -- 任意属性,使用 JSONB 存储
    created_at TIMESTAMP DEFAULT NOW(), -- 创建时间
    updated_at TIMESTAMP DEFAULT NOW()  -- 更新时间
);

字段说明

  • id: 唯一标识符,自动递增。

  • name: 地物名称。

  • description: 对地物的详细描述。

  • type: GeoJSON 对象的类型,通常是 “Feature”。

  • geom: 存储 Polygon 类型的地理数据,使用 PostGIS 的 GEOMETRY 类型,并指定坐标系(这里使用 WGS 84,EPSG:4326)。

  • properties: 使用 JSONB 类型存储与地物相关的其他任意属性。

  • created_at: 记录创建时间。

  • updated_at: 记录最后更新时间。

索引

为了提高对空间数据的查询性能,可以创建空间索引:

1
CREATE INDEX idx_geom ON geo_data USING GIST (geom);

GeoJSON 示例

GeoJSON 数据可能类似于以下结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
  "type": "Feature",
  "properties": {
    "name": "Example Polygon",
    "description": "A sample polygon feature."
  },
  "geometry": {
    "type": "Polygon",
    "coordinates": [
      [
        [102.0, 0.0],
        [103.0, 0.0],
        [103.0, 1.0],
        [102.0, 1.0],
        [102.0, 0.0]
      ]
    ]
  }
}

ogr2ogr导入数据到表中

1
ogr2ogr -f "PostgreSQL" PG:"host=localhost dbname=your_db user=your_user password=your_password" your_data.geojson -nln geo_data -overwrite
  • your_db:你的数据库名。

  • your_user:数据库用户名。

  • your_password:数据库密码。

  • your_data.geojson:你的 GeoJSON 文件名。

  • geo_data:目标表名。

导入完成后即可在表中查询到