简要熟悉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_GeomFromTextST_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米以内的所有地理空间数据。





 


 

posted @   余生请多指教ANT  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2022-02-14 springboot项目远程调试
点击右上角即可分享
微信分享提示