如何高效实现数据库IO操作,提升数据读写效率?
摘要:layout: default title: "第9章:数据读写——数据库 IO" 第9章:数据读写——数据库 IO 在企业级 GIS 应用和大规模空间数据管理中,空间数据库是不可或缺的基
第9章:数据读写——数据库 IO
在企业级 GIS 应用和大规模空间数据管理中,空间数据库是不可或缺的基础设施。GeoPandas 提供了与 PostGIS、Spatialite 等空间数据库的无缝集成,支持直接从数据库读取空间数据,也支持将处理结果写回数据库。本章将详细介绍 GeoPandas 的数据库 IO 功能。
9.1 空间数据库概述
9.1.1 什么是空间数据库
空间数据库是在传统关系型数据库的基础上,添加了空间数据类型和空间查询功能的数据库系统。它能够存储、索引和查询地理空间数据。
9.1.2 常见空间数据库
数据库
说明
空间扩展
开源
PostgreSQL + PostGIS
最强大的开源空间数据库
PostGIS
✅
SQLite + Spatialite
轻量级嵌入式空间数据库
SpatiaLite
✅
MySQL
内置基本空间功能
内置
✅
Oracle Spatial
企业级空间数据库
Oracle Spatial
❌
SQL Server
微软空间数据库
内置
❌
DuckDB + Spatial
新兴的分析型空间数据库
Spatial 扩展
✅
9.1.3 PostGIS 简介
PostGIS 是 PostgreSQL 数据库的空间扩展,是目前最功能完善、使用最广泛的开源空间数据库。
PostGIS 的核心能力:
存储和索引各种几何类型(点、线、面、多几何等)
空间关系查询(包含、相交、邻近等)
空间分析函数(缓冲区、叠加、最近邻等)
坐标系转换
拓扑分析
栅格数据支持
3D 和 4D 几何支持
-- PostGIS 基本操作示例
-- 创建空间表
CREATE TABLE cities (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
population INTEGER,
geom GEOMETRY(Point, 4326)
);
-- 创建空间索引
CREATE INDEX idx_cities_geom ON cities USING GIST (geom);
-- 插入数据
INSERT INTO cities (name, population, geom)
VALUES ('北京', 21710000, ST_SetSRID(ST_MakePoint(116.407, 39.904), 4326));
-- 空间查询
SELECT name, population
FROM cities
WHERE ST_DWithin(
geom,
ST_SetSRID(ST_MakePoint(116.4, 39.9), 4326),
0.1
);
9.1.4 Spatialite 简介
Spatialite 是 SQLite 的空间扩展,是一个轻量级的嵌入式空间数据库,无需安装服务器即可使用。
# Spatialite 的优势:
# - 零配置,单文件数据库
# - 无需安装数据库服务器
# - 适合桌面应用和小型项目
# - 可用于测试和原型开发
9.2 数据库连接配置
9.2.1 SQLAlchemy Engine
GeoPandas 使用 SQLAlchemy 作为数据库连接的抽象层。首先需要创建一个数据库引擎(Engine)。
