发布时间:2026/7/18 5:42:54
PostgreSQL和PostGIS学习笔记 一、建空间数据库# 1.创建普通关系型数据库 CREATE DATABASE gisdb; # 2.连接数据库 /c gisdb; # 3.启用 PostGIS 扩展模块(以下为postgis不同的扩张模块) CREATE EXTENSION postgis; # 拓扑扩展 CREATE EXTENSION postgis_topology; # 地址解析扩展 CREATE EXTENSION postgis_tiger_geocoder;二、建空间表# 创建点表 CREATE TABLE sample_point ( id SERIAL PRIMARY KEY, name VARCHAR(100), soil_moisture NUMERIC(5,3), # Point:表示集合类型4326:World Geodetic System 1984(坐标系 SRID) geom geometry(Point,4326) ); #创建线表 CREATE TABLE road ( id SERIAL PRIMARY KEY, road_name VARCHAR(100), geom geometry(LineString,4326) );三、插入空间数据插入点数据 INSERT INTO sample_point ( name, soil_moisture, geom ) VALUES ( 样点1, 0.23, ST_SetSRID( ST_Point(116.4,39.9), 4326 ) ); 插入线数据 INSERT INTO road ( road_name, geom ) VALUES ( 测试道路, ST_GeomFromText( LINESTRING( 116.4 39.9, 116.5 39.95, 116.6 40.0 ), 4326 ) );四、创建索引# 索引的目的是让距离查询、范围查询、相交查询等的性能提升几十倍到上千倍。 # 索引提高查询的速度但是降低删改查的速度所以索引要建在经常被查询的字段上。 CREATE INDEX idx_sample_geom ON sample_point USING GIST(geom); # 联合索引最左匹配原则 CREATE INDEX idx_sat_time ON soil_sample( satellite, sample_time );四、修改空间数据UPDATE sample_point SET geom ST_SetSRID( ST_Point(116.5,40.0), 4326 ) WHERE id 1; # WKT格式 UPDATE sample_point SET geom ST_GeomFromText( POINT(116.5 40.0), 4326 ) WHERE id 1; # 修改四边形 UPDATE satellite_image SET geom ST_GeomFromText( POLYGON(( 120.71 29.9278, -- TopLeft: 经度 纬度 126.376 30.0674, -- TopRight 125.162 24.6759, -- BottomRight 119.86 24.5777, -- BottomLeft 120.71 29.9278 -- TopLeft: 闭合点 )), 4326 ) WHERE id 4;五、空间查询六、缓冲区# 1.查找时临时生成缓冲区 CREATE TABLE sample_point( id SERIAL PRIMARY KEY, name VARCHAR(50), geom geometry(Point,4326) ); SELECT id, ST_Buffer(geom,100) AS buffer_geom FROM sample_point; # 2.创建缓冲区表 CREATE TABLE camera_buffer( id SERIAL PRIMARY KEY, camera_id INT, geom geometry(Polygon,3857) ); INSERT INTO camera_buffer( camera_id, geom ) SELECT id, ST_Buffer( ST_Transform(geom,3857), 100 ) FROM camera; # 注:这里将4326转换成了3857因为4326 经纬度单位是度;3857 Web Mercator单位是米。 # 3.给表新增缓冲区字段 ALTER TABLE sample_point ADD COLUMN buffer_geom geometry(Polygon,3857); UPDATE sample_point SET buffer_geom ST_Buffer( ST_Transform(geom,3857), 100 ); # 查询缓冲区内的对象 # 查询样点100米范围内的道路 SELECT r.* FROM road r, sample_point s WHERE ST_Intersects( r.geom, ST_Buffer( ST_Transform(s.geom,3857), 100 ) );七、相交# 查询两个面相交 SELECT ST_Intersects( geom1, geom2 ); # 查询点在面内包括点在面上 SELECT ST_Intersects( district.geom, sample_point.geom );八、距离计算# 1.两点间的距离 SELECT ST_Distance( ST_Transform( ST_SetSRID( ST_Point(116.4,39.9), 4326 ), 3857 ), ST_Transform( ST_SetSRID( ST_Point(116.5,39.95), 4326 ), 3857 ) ); # 2.使用 geography推荐计算真实地球距离 SELECT ST_Distance( ST_SetSRID( ST_Point(116.4,39.9), 4326 )::geography, ST_SetSRID( ST_Point(116.5,39.95), 4326 )::geography ); # 3.计算表中两个对象的距离 CREATE TABLE sample_point( id SERIAL PRIMARY KEY, geom geometry(Point,4326) ); SELECT a.id, b.id, ST_Distance( a.geom::geography, b.geom::geography ) AS distance_m FROM sample_point a, sample_point b WHERE a.id 1 AND b.id 2; # 4.查询最近的对象 # 查询距离样点最近的摄像头 SELECT id, ST_Distance( geom::geography, ST_SetSRID( ST_Point(116.4,39.9), 4326 )::geography ) AS distance FROM camera ORDER BY distance # 只取第一条记录 LIMIT 1; # 5.查询 100 米内的对象 SELECT * FROM sample_point WHERE ST_DWithin( geom::geography, ST_SetSRID( ST_Point(116.4,39.9), 4326 )::geography, 100 );九、GeoJson互转# 1.GeoJSON 点转 SQL INSERT INTO sample_point(name, geom) VALUES ( 样点1, ST_SetSRID( ST_GeomFromGeoJSON({ type: Point, coordinates: [116.4, 39.9] }), 4326 ) ); #2.表字段中的 GeoJSON 转换 CREATE TABLE geojson_temp( id SERIAL PRIMARY KEY, name VARCHAR(100), geojson TEXT ); CREATE TABLE sample_point( id SERIAL PRIMARY KEY, name VARCHAR(100), geom geometry(Point,4326) ); INSERT INTO sample_point(name, geom) SELECT name, ST_SetSRID( ST_GeomFromGeoJSON(geojson), 4326 ) FROM geojson_temp; # 3.PostGIS 转 GeoJson SELECT id, name, ST_AsGeoJSON(geom) AS geojson FROM sample_point;PostGis方法总结# ST_SetSRID():给几何对象贴坐标系标签. # ST_Transform():修改坐标. # ST_Buffer():创建缓冲区. # ST_Distance():计算距离. # ST_Point():创建对象. # ST_GeomFromText():从字符串创建对象. # ST_Intersects():判断是否相交. # ST_Contains():判断点是否在面内. # ST_Touches():判断是否接触。 # ST_Overlaps():判断是否重叠。 # ST_Transform():平移. # ST_Rotate():旋转. # ST_Scale():缩小。 # ST_Area():面积. # ST_Perimeter():周长. # ST_Length():线长度. # ST_GeomFromGeoJSON():把 GeoJSON转成 PostGIS

相关新闻

2026/7/18 5:42:54

AURIX TC397XM在智能驾驶中的安全与实时处理实践

1. AURIX TC397XM在智能驾驶领域的核心定位AURIX TC397XM微控制器作为英飞凌旗舰级车规芯片,其设计初衷直指自动驾驶系统最严苛的安全与性能需求。这款六核处理器采用TriCore™架构,每个内核运行频率高达300MHz,并集成DSP指令集,在…

2026/7/18 5:37:53

DDR SDRAM技术解析:从原理到应用实践

1. DDR SDRAM技术概述DDR SDRAM(Double Data Rate Synchronous Dynamic Random-Access Memory)是现代计算机系统中最为核心的内存技术之一。作为SDRAM技术的进化版本,DDR通过在时钟信号的上升沿和下降沿都传输数据,实现了在不提高…

2026/7/18 5:37:53

Coze3.0多Agent协作:零基础构建可视化Agent操作系统

1. 项目概述:Coze3.0不是“又一个聊天机器人”,而是面向真实工作流的Agent操作系统Coze3.0发布当天,我盯着控制台里那个标着“多Agent协作”的新按钮看了三分钟——它没写一行代码,没配一个API密钥,却让一个原本需要4人…

2026/7/18 6:47:56

高频电流趋肤效应原理与工程应用解析

1. 趋肤效应现象初探第一次在实验室用示波器观察高频电流波形时,我注意到一个奇怪现象:当频率超过1MHz后,铜导线中心区域的电流密度明显下降,而表面区域的电流却异常活跃。这种电流"挤"在导体表面的现象,就是…

2026/7/18 6:47:56

LangChain+通义千问快速搭建开源聊天机器人指南

1. 项目概述:用LangChain通义千问打造聊天机器人最近在折腾LangChain框架时,发现结合通义千问(Qwen)大模型可以快速搭建个性化的聊天机器人。这个方案最大的优势在于完全开源免费,不需要自己训练模型,利用现…

2026/7/18 6:47:56

Next.js路由系统:文件系统约定与高级模式解析

1. Next.js 路由系统的设计哲学Next.js 的路由系统之所以让初学者感到"奇怪",本质上是因为它采用了一套与传统 React 路由完全不同的设计范式。这套系统基于文件系统的约定式路由(Convention-based Routing),通过目录结…

2026/7/18 6:47:56

HALL传感器在FOC控制中的应用与STM32实现

1. HALL传感器在FOC控制中的核心作用在永磁同步电机(PMSM)的磁场定向控制(FOC)系统中,转子位置检测是决定控制精度的关键环节。HALL传感器作为低成本位置检测方案,其工作原理基于霍尔效应——当导体中有电流…

2026/7/18 6:47:56

小米嵌入式面试指南:从RTOS到Linux内核的深度技术考察

想拿小米嵌入式 offer?很多同学在准备校招面试时容易陷入误区,要么死磕 STM32 外设配置,要么狂背八股文概念。但根据牛客网最新面经反馈,小米嵌入式面试的重点已经完全不同——面试官更关注你是否理解嵌入式系统在真实产品中的运行…

2026/7/18 6:42:56

全球芯片产业格局与选型指南

1. 全球芯片产业格局概述半导体芯片作为现代科技产业的基石,已经渗透到从消费电子到工业控制、从通信设备到汽车电子的各个领域。2023年全球半导体市场规模预计达到6000亿美元,其中集成电路占比超过80%。这个高度集中的行业呈现明显的梯队分布特征&#…

2026/7/17 5:59:06

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

2026/7/17 1:21:45

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境随着新能源汽车行业的快速发展,充电通信协议的标准化和测试验证变得尤为重要。GB/T 27930-2023作为中国智能充电协议的最新版本,对充电机与电动汽车之间的通信提出了更严格…

2026/7/17 7:39:19

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统无法识别RTL8852BE Wi-Fi 6网卡而烦恼吗?&#x1f…

2026/7/18 0:00:24

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/17 14:59:44

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…