【问题标题】:Get the intersection of points (lat,long) and a specific area获取点(纬度,经度)和特定区域的交点
【发布时间】:2017-08-04 08:08:58
【问题描述】:

我最近将 PostgresPostgis 放在一起,但我似乎无法弄清楚什么是正确的语法。

问题:我需要某个区域内的点的 id 列表。 latlonbigint 类型的两列,cluj.the_geompolygon

link_geometry:link_id |纬度|经度

cluj: the_geom

SELECT link_id 
FROM rou_country_20656215.link_geometry r, cluj 
WHERE ST_Intersects(ST_PointFromText((CAST(r.lon AS float)/100000, CAST(r.lat AS float)/100000), 4326), cluj.the_geom)

我收到以下错误消息:

我提到我无权修改表格。

【问题讨论】:

    标签: postgresql geometry gis postgis latitude-longitude


    【解决方案1】:

    两个CAST 表达式周围的括号以及它们之间的逗号导致该表达式被解释为记录。那必须是一个字符串。假设您的纬度和经度值是文本(隐含在您的代码中),那么这应该会产生您需要的那种表达式:

    SELECT link_id 
    FROM rou_country_20656215.link_geometry r, cluj 
    WHERE 
        ST_Intersects(
            ST_PointFromText(cast(cast(r.lon AS float)/100000 as text) 
                || cast(cast(r.lat AS float)/100000 as text)), 4326)), 
                cluj.the_geom);
    

    【讨论】:

      【解决方案2】:

      最后我已经像这样解决了,除了记录解释我错过了设置 SRID。

      SELECT link_id,
      FROM rou_country_20656215.rdf_link_geometry r, rou_country_20656215.cluj c
      WHERE ST_Intersects(
                 ST_SetSRID(
                    ST_MakePoint(CAST(r.lon AS float)/10^5, CAST(r.lat AS float)/10^5),4326),c.the_geom)
      

      【讨论】:

        猜你喜欢
        • 2021-04-16
        • 2022-08-21
        • 2021-10-10
        • 1970-01-01
        • 2012-03-21
        • 1970-01-01
        • 2019-11-05
        • 2011-06-21
        • 1970-01-01
        相关资源
        最近更新 更多