简要熟悉PostGis空间距离功能使用
现在城市规划,物流,地图导航,用的是什么数据库?
来看看别人用的是什么
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 以下是城市规划、物流、地图导航领域常用的数据库: ### 城市规划领域 - **地理信息系统(GIS)数据库**:如ArcGIS、QGIS、PostGIS等,能集成空间位置信息,用于土地利用分析、城市设施布局规划等,直观展示城市地理要素分布,支持空间分析,辅助规划决策。 - **关系型数据库**:如Oracle、MySQL、SQL Server等,可存储和管理城市规划中的结构化数据,如人口统计数据、经济指标数据、建筑物属性数据等,通过建立表结构和关系,实现数据的高效存储和查询,支持事务处理和数据一致性维护。 - **空间数据库**:如Oracle Spatial、SQL Server Spatial等,可高效存储和检索城市的空间数据,支持复杂的空间查询和分析操作,为城市规划中的选址分析、交通网络规划等提供技术支持。 ### 物流领域 - **关系型数据库**:MySQL、Oracle、SQL Server等被广泛用于存储订单、客户、库存、运输等物流业务中的结构化数据,支持SQL语言,可进行复杂的查询、统计和事务处理,确保数据的一致性和完整性。 - **NoSQL数据库**:如MongoDB、Redis等,以其高扩展性、灵活性和快速读写性能,适用于存储物流中的非结构化或半结构化数据,如物流轨迹数据、车辆监控数据等。 - **分布式数据库**:如Hadoop、Cassandra等,可在多个节点上存储和处理海量物流数据,具有高可扩展性和容错性,能应对物流业务中产生的大量数据的存储和分析需求。 ### 地图导航领域 - **地理信息系统(GIS)数据库**:是地图导航的核心,存储道路、地形、建筑等大规模地理信息,支持路径规划、地理编码等复杂空间分析和计算功能,常见的有ArcGIS、QGIS、PostGIS等。 - **空间数据库**:用于处理多维空间数据,通过空间索引提高空间数据查询效率,常见的有Oracle Spatial、SQL Server Spatial、MongoDB等。 - **矢量和栅格数据库**:矢量数据库用于存储点、线、面等几何图形数据,适用于表示道路等地理对象;栅格数据库用于存储由像素组成的图像数据,适用于表示地形等地理现象,常见的矢量数据库有Shapefile、GeoJSON等,栅格数据库有GeoTIFF、HDF等。 - **NoSQL数据库**:因其高并发和快速读写性能,适用于存储和管理地图导航中的动态数据,如交通状况、用户位置等,常见的有MongoDB、Cassandra、Redis等。 |
看到没,地理位置和导航上又实用的前例,所以肯定具备空间距离的计算
CREATE TABLE spatial_table(
id serial primary key,
name varchar(100),
geom geometry(Point, 4326)
);
其中包含一个名为geom
的空间字段,用于存储Point类型的地理空间数据。4326
是SRID(空间参考标识符),表示使用WGS 84坐标系
插入空间数据
可以使用ST_GeomFromText
或ST_SetSRID
等函数将WKT(Well-Known Text)格式的地理空间数据插入到表中。
INSERT INTO spatial_table(name, geom)
VALUES ('Point A', ST_GeomFromText('POINT(116.40 39.90)', 4326));
PostGIS查询地理空间数据
1. 查询指定范围内的地理空间数据
我们可以使用&&
操作符或ST_Intersects
函数来查询指定范围内的地理空间数据。
INSERT INTO spatial_table (name, geom)
VALUES ('一个地点', ST_GeomFromText('POINT(116.4074 39.9042)', 4326));
INSERT INTO spatial_table (name, geom)
VALUES ('Point B', ST_GeomFromText('POINT(116.5 39.8)', 4326));
INSERT INTO spatial_table (name, geom)
VALUES ('Point C', ST_GeomFromText('POINT(116.5 40.0)', 4326));
INSERT INTO spatial_table (name, geom)
VALUES ('Point D', ST_GeomFromText('POINT(116.3 40.0)', 4326));
INSERT INTO spatial_table (name, geom)
VALUES ('Point E', ST_GeomFromText('POINT(116.3 39.8)', 4326));
SELECT * FROM spatial_table WHERE ST_Intersects(geom, ST_GeomFromText('POLYGON((116.3 39.8, 116.5 39.8, 116.5 40.0, 116.3 40.0, 116.3 39.8))', 4326));
2. 计算地理空间数据之间的距离
我们可以使用ST_Distance
函数来计算两个地理空间数据之间的距离。
SELECT ST_Distance(a.geom, b.geom) AS distance
FROM spatial_table a, spatial_table b
WHERE a.id = 1 AND b.id = 2;
3. 对地理空间数据进行缓冲区分析
SELECT * FROM spatial_table WHERE ST_DWithin(geom, ST_GeomFromText('POINT(116.4 39.9)', 4326), 1000);
在上面的示例中,我们查询了与点(116.4, 39.9)
距离在1000米以内的所有地理空间数据。
本文来自博客园,作者:余生请多指教ANT,转载请注明原文链接:https://www.cnblogs.com/wangbiaohistory/p/18715377
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2022-02-14 springboot项目远程调试