PostgreSQL和PostGIS学习笔记

发布时间:2026/11/6 17:54:42

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/10/28 22:52:18

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

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

2026/11/2 3:10:33

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

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

2026/11/3 19:02:05

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

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

2026/11/7 12:09:15

2019电工证还是ic卡吗电子证书怎么考

2019电工证还是ic卡吗电子证书怎么考 工地太忙根本没时间复习考试,这是很多一线施工人员的真实写照。特别是电工证这类必须持证上岗的特种作业证书,一旦过期或不符合要求,直接影响工资发放和岗位资格。很多人还在纠结:…

2026/11/7 12:09:15

电工证怎么考报考要求 郑州报考避坑指南

电工证怎么考报考要求 郑州报考避坑指南 你现在找工作连门都进不去,公司要的是能干活、有证的人,而你连个电工证都没有,这不就是卡在门口的拦路虎?尤其是在郑州这样的城市,各行各业对特种作业证要求越来越严, 电工证怎么考报考要求…

2026/11/7 12:09:15

黄埭考电工证2026河南最新政策下该怎么准备

黄埭考电工证2026河南最新政策下该怎么准备 实操考试心里没底怕挂科?黄埭考电工证的人可不少,但每次考试都有不少人因为准备不充分而失利。2026河南最新政策已经落地,考试内容、流程、标准都发生了变化,很多新手对这些新变化一知半解,生怕自己考…

2026/11/7 12:09:15

查电工证白伟实操考试心里没底怕挂科?含金量怎么保障

查电工证白伟实操考试心里没底怕挂科?含金量怎么保障 实操考试心里没底怕挂科,这是很多准备报考电工证的朋友最真实的声音。特别是像查电工证白伟这样需要参加实操考试的考生,对考试内容和流程一知半解,很容易因为紧张或准备不足而挂科。电工证的…

2026/11/7 12:04:14

盐城电工证怎么复审?官方报名入口在这里,别再走弯路

盐城电工证怎么复审?官方报名入口在这里,别再走弯路 证书过期了不知道怎么复审延期,你不是一个人。很多电工在证书快到期或者到期后才发现,复审流程和材料并不是那么清晰,甚至有些地方还存在信息不透明的情况。特别是在盐城,很多电工朋友在复审过程中遇…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/6 10:49:01

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/7 0:03:08

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科 实操考试心里没底怕挂科?你不是一个人。特别是在郑州这样的城市,很多施工企业负责人和一线作业人员在报考电工证和钳工证时都面临着同样的困惑。到底该考哪个证?哪个更适合自己?哪个证书…

2026/11/7 0:03:08

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱?

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱? 之前考的证在外省能不能转过来?这个问题我遇到太多了,今天就拿广西电工证办理流程来具体说说,别再走弯路了。广西电工证的报考、复审、继续教育这些环节,如果你不了解,真的会吃大亏,尤其对于从…

2026/11/7 0:03:08

电气电工证都有哪些保姆级教程

电气电工证都有哪些保姆级教程 你是不是正愁不知道去哪报名,怕被中介坑?别急,这篇保姆级教程专为河南初次报考人员准备,帮你搞清楚 电气电工证都有哪些 ,以及如何避开那些坑。 电气电工证都有哪些?别被五花八门的证书搞懵了…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/6 10:49:01

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑