PostGIS如何快速定位一个坐标点的三级行政归属?

发布于 2022-09-13 00:57:38 字数 419 浏览 30 评论 0

PostGIS数据库中有区县表(qx)、街道表(jd)、社区表(sq)三张表,分别存放区、街道、社区的地理数据(polygon或multipolygon,其中街道表和社区表有的地理数据是空值),三者关系如图 ( 下级表存放了上级表对应的ID ) 。
image.png
目标是查找给定坐标点对应的三级行政归属。比如给定坐标 P1=POINT(111.12840242385864 27.115157896031524)一条查询语句找出该点属于哪个区哪个街道哪个社区,区、街道、社区的归属找到几个就返回几个,这里说明一下为什么要求一条语句,因为多个语句的话存在多次查询指令,前后端之间网络IO将消耗大量时间。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

厌倦 2022-09-20 00:57:38

经过不断搜索与尝试,成功实现一句话查询,使用的子查询解决问题,具体代码在下面。但是这个查法的不足之处是没有充分利用三表之间的关系:先查点所在区县,再查此区县下的街道,再查此街道下的社区,提高查询速度。
查询代码:

SELECT
    "qx"."name",
    ( SELECT "jd".name FROM "jd" WHERE ST_Contains ( "jd".geometry, ST_GeomFromText ( 'POINT(111.12840242385864 27.115157896031524)' ) ) ),
    ( SELECT "sq"."name" FROM "sq" WHERE ST_Contains ( "sq".geometry, ST_GeomFromText ( 'POINT(111.12840242385864 27.115157896031524)' ) )) 
FROM
    "qx" 
WHERE
    ST_Contains ( "qx".geometry, ST_GeomFromText ( 'POINT(111.12840242385864 27.115157896031524)' ) );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文