当前位置: 首页 > news >正文

GIS 中的 SQLAlchemy:空间数据与数据库之间的桥梁

利用 SQLAlchemy 在现代应用程序中无缝集成地理空间数据导言

地理信息系统(GIS)在管理城市规划、环境监测和导航系统等各种应用的空间数据方面发挥着至关重要的作用。虽然 PostGIS 或 SpatiaLite 等专业地理空间数据库在处理空间数据方面非常出色,但开发人员往往需要一个抽象层来简化与这些数据库的交互。这就是强大的 Python SQL 工具包和对象关系映射(ORM)库 SQLAlchemy 的用武之地。

本文将探讨 SQLAlchemy 在 GIS 中的作用、与空间数据库的集成以及如何简化地理空间应用程序开发。

用于 GIS 的 SQLAlchemy 的主要功能

数据库抽象 SQLAlchemy 提供了与各种数据库交互的一致接口,包括具有空间扩展功能的数据库(如 PostgreSQL 的 PostGIS、SQLite 的 SpatiaLite)。

用于空间数据的 ORM SQLAlchemy 的 ORM 通过将数据库记录映射到 Python 对象,简化了空间表的工作,从而使地理空间数据的操作更加容易。

支持空间查询 结合 GeoAlchemy2 等库,SQLAlchemy 可以处理空间数据类型并执行空间查询,如交叉、距离计算和边界框搜索。

可扩展性 SQLAlchemy 支持自定义数据类型,可无缝集成几何体、点、多边形和 LineString 等空间数据类型。

在 GIS 中使用 SQLAlchemy 的工作流程示例

1.设置环境

pip install sqlalchemy psycopg2 geoalchemy2

下面是一个定义 LandParcel 模型的示例,该模型将空间数据存储在支持 PostGIS 的 PostgreSQL 数据库中:

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from geoalchemy2 import GeometryBase = declarative_base()class LandParcel(Base):__tablename__ = 'land_parcels'id = Column(Integer, primary_key=True)name = Column(String, nullable=False)geom = Column(Geometry('POLYGON'))# Database connection
engine = create_engine('postgresql://user:password@localhost:5432/gis_db')
Base.metadata.create_all(engine)

3.插入空间数据

在数据库中插入一个新地块:       

from sqlalchemy.orm import sessionmaker
from shapely.geometry import Polygon
from geoalchemy2.shape import from_shapeSession = sessionmaker(bind=engine)
session = Session()polygon = Polygon([(-73.997, 40.748), (-73.994, 40.748), (-73.994, 40.745), (-73.997, 40.745), (-73.997, 40.748)])
land_parcel = LandParcel(name='Parcel 1', geom=from_shape(polygon, srid=4326))session.add(land_parcel)
session.commit()

4.执行空间查询

执行空间查询,查找与给定几何图形相交的所有地块:

from geoalchemy2.functions import ST_Intersects
from sqlalchemy import selectquery = select(LandParcel).where(ST_Intersects(LandParcel.geom, 'SRID=4326;POLYGON((-73.996 40.749, -73.993 40.749, -73.993 40.746, -73.996 40.746, -73.996 40.749))'))
result = session.execute(query)for parcel in result:print(parcel.name)

SQLAlchemy 与其他 GIS 工具的比较

在 GIS 中使用 SQLAlchemy 的好处

简化开发 SQLAlchemy 抽象了复杂的 SQL,使空间数据库的交互变得更容易。跨数据库兼容性 无需担心特定数据库的语法或实施细节,即可开发 GIS 应用程序。高效的空间查询 利用 GeoAlchemy2 的空间功能,以最小的工作量执行复杂的空间查询。可扩展性 SQLAlchemy 可在生产环境中处理大规模地理空间数据和复杂操作。

http://www.lryc.cn/news/528530.html

相关文章:

  • python:斐索实验(Fizeau experiment)
  • MySQL查询优化(三):深度解读 MySQL客户端和服务端协议
  • vue3相关知识点
  • 基于springboot+vue的流浪动物救助系统的设计与实现
  • MySQL(单表访问)
  • UE5.3 C++ CDO的初步理解
  • SpringBoot 中的测试jar包knife4j(实现效果非常简单)
  • Java Web 开发基础介绍
  • Android Studio:视图绑定的岁月变迁(2/100)
  • LabVIEW春节快乐
  • rewrite规则
  • Android车机DIY开发之学习篇(七)NDK交叉工具构建
  • 【初/高中生讲机器学习】0. 本专栏 “食用” 指南——写在一周年之际⭐
  • 虚幻基础11:坐标计算旋转计算
  • Rust:Rhai脚本编程示例
  • 关于el-table翻页后序号列递增的组件封装
  • 【深度学习】softmax回归
  • 设计模式-建造者模式、原型模式
  • 【Redis】List 类型的介绍和常用命令
  • 三个不推荐使用的线程池
  • mybatis(78/134)
  • Progressive Pretext Task Learning for Human Trajectory Prediction | 文献翻译
  • 54.数字翻译成字符串的可能性|Marscode AI刷题
  • 【数据结构】_链表经典算法OJ(力扣版)
  • 【Linux】统计文本中每行指定位置出现的字符串的次数
  • 【赵渝强老师】K8s中Pod探针的ExecAction
  • 商品信息管理自动化测试
  • Redis实战(黑马点评)——redis存储地理信息、位图、HyperLogLog 用法
  • 判断1到100之间有多少个素数,并输出所有的素数。
  • JAVA:利用 Content Negotiation 实现多样式响应格式的技术指南