【问题标题】:How to cast latitude, longitude coordinates as postgres geography type如何将纬度,经度坐标转换为postgis地理类型
【发布时间】:2016-03-21 21:59:09
【问题描述】:

我的表格有两个用于纬度和经度坐标的浮点列。

我想使用 PostGIS 的ST_DWithin 来查找距离给定点一定距离内的所有记录。

ST_DWithin 的签名期望前两个参数是几何或地理数据类型,所以我很确定解决方案是将 lat/lng 坐标转换为地理,但我无法让它工作。

以下是不起作用的

SELECT * 
FROM stops 
WHERE ST_DWithin( ST_GeogFromText('SRID=4326;POINT(-77.09 38.89)'),
                  ST_GeogFromText('SRID=4326;POINT(' || stops.lng || ' ' || stops.lat || ')'), 10000.0)

我收到此错误:

错误:函数 st_geogfromtext(unknown) 不存在

第 1 行:SELECT * FROM 停止 WHERE ST_DWithin( ST_GeogFromText('SRID=...

我做错了什么?

【问题讨论】:

  • 您需要删除浮动列并将它们替换为geography column
  • 我认为这个问题更适合 GIS SE 社区 (gis.stackexchange.com)。
  • @GilbertLeBlanc 你是说没有办法将 lat,lng 浮点数转换为 Geography 吗?
  • @MartinValgur 我的问题完全与编程有关。 GIS 的描述为a question and answer site for cartographers, geographers and GIS professionals。看不出这怎么比 S.O. 更合适
  • 是的,SO 将是正确的地方问。但事实证明,这个问题是一种误解。

标签: sql postgresql postgis


【解决方案1】:

哎呀。

原来的原始语法(上图)实际上是正确的。但是我在安装 PostGIS 之后错过了一个关键步骤:

psql -d <DATABASE_NAME_HERE> -c "CREATE EXTENSION postgis";

事实证明,您必须在每个数据库上启用它才能正常工作。 是函数无法识别的原因。

由于这方面的资源并不多,我将留下这个问题,以防它对其他人有用。

【讨论】:

    【解决方案2】:

    Gilbert Le Blanc 的link 中的一个示例似乎包含在函数调用期间进行强制转换的方法:

    SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geography, 
        'POINT(-21.96 64.15)':: geography);
    

    你能适应你的用例吗?

    【讨论】:

      猜你喜欢
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 2017-07-02
      • 2020-02-23
      • 1970-01-01
      相关资源
      最近更新 更多