【问题标题】:Geopoints: From Single Coordinate to Bounds on map地理点:从单一坐标到地图上的边界
【发布时间】:2020-05-24 21:50:04
【问题描述】:

我试图弄清楚如何从单个给定坐标(纬度/经度)到最近的边界,该边界在地图上包含该坐标,例如街道或大海。 这里有两个例子可以让你更好地理解我的意思:

我已经尝试或想到的:

  1. 设置 Nominatim 服务器并通过 reverse-function 搜索给定坐标以获取该坐标的 bbox 和/或 geojson 多边形。 -> 这仅适用于给定坐标在 POI 内或例如直接在街道上时。
  2. 编写算法在所有 4 或 8 个方向 (n/e/s/w) 上行走,并在地图层/表面发生变化时“停止”(更改 = 停止该方向并标记边界点)李>
  3. 使用 TensorFlow 构建图像识别系统以检测不同颜色并“绘制”多边形。曾多次使用 TensorFlow,但这似乎是实现起来最棘手的解决方案(但在我目前的理解中是最精确的解决方案)

你们中有人有其他想法来解决这个问题吗?将不胜感激任何一种方法

干杯!

【问题讨论】:

    标签: postgresql postgis polygon geojson nominatim


    【解决方案1】:

    如果我的问题正确,您可能想先使用ST_Contains 选择给定点在其中的所有多边形,然后使用ST_Distance 计算到该点的距离。如果你ORDER BY 距离和LIMIT1 结果你会得到最近的多边形,例如

    数据样本

    CREATE TABLE t (gid int, geom geometry);
    INSERT INTO t VALUES 
    (1,'POLYGON((-4.47 54.26,-4.44 54.28,-4.41 54.24,-4.46 54.23,-4.47 54.26))'),
    (2,'POLYGON((-4.48 54.25,-4.40 54.25,-4.41 54.23,-4.48 54.23,-4.48 54.25))'),
    (3,'POLYGON((-4.53 54.23,-4.44 54.29,-4.38 54.22,-4.53 54.23))');
    

    查询

    SELECT gid,ST_AsText(geom) FROM t
    WHERE ST_Contains(geom,ST_MakePoint(-4.45, 54.25))
    ORDER BY ST_Distance(geom,ST_MakePoint(-4.45, 54.25))
    LIMIT 1;
    
     gid |                               st_astext                                
    -----+------------------------------------------------------------------------
       1 | POLYGON((-4.47 54.26,-4.44 54.28,-4.41 54.24,-4.46 54.23,-4.47 54.26))
    (1 Zeile)
    

    【讨论】:

    • 您好,感谢您的回答!这对我来说很有意义,但是在哪里可以将整个世界的道路/方式作为 geojson 线串/多边形?
    • 啊,从您的问题中我了解到您的数据库中已经有了几何图形:D 在这种情况下,请坚持使用 OpenStreetMaps 来获取道路。对于行政边界,我绝对推荐gadm.org。为什么你需要几何图形作为geojson?将大量几何图形导入 postgres 的最简单方法是恕我直言,使用形状文件。将它们导入数据库后,您可以将它们导出为您想要的任何格式:gml、geojson、kml、wkt 等。
    猜你喜欢
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 2011-09-12
    • 2019-08-13
    • 2019-07-07
    • 1970-01-01
    相关资源
    最近更新 更多