【问题标题】:PostGIS Conversion IssuesPostGIS 转换问题
【发布时间】:2012-07-04 09:25:55
【问题描述】:

我在使用 PostGIS (1.5.4) 数据时遇到问题。可能是我对这项技术不够熟悉,无法看到明显的情况(我是一名拥有近 4 小时经验的普通专家),但我遇到了一个我无法通过 Google 解决的错误。

我有一个包含多边形数据的表(是的,我检查过;列类型是几何,而不是多边形——Postgres 本机类型)。当我尝试对表运行查询以查找哪个形状包含特定问题时,就会出现问题。

我正在使用以下查询:

SELECT * 
FROM geo_shape 
WHERE ST_Contains(geoshp_polygon, POINT(-97.4388046000, 38.1112251000));

我收到的错误是“错误:函数 st_contains(geometry, point) 不存在”。我尝试使用 CAST() 函数,但得到“错误:无法将类型几何转换为多边形”。我猜这个问题与数据的存储方式有关——PGAdmin 将其显示为十六进制数据。我凭直觉尝试使用 ST_GeomFromHEXEWKB(),但收到“错误:函数 st_geomfromhexewkb(geometry) 不存在”。

我对这里的问题很困惑,所以任何想法都将不胜感激。

【问题讨论】:

    标签: postgresql postgis


    【解决方案1】:

    st_contains 需要一个 geom,geom 作为参数...

    试试这个...

    SELECT * FROM geo_shape 
    WHERE ST_Contains(geoshp_polygon,
          GeomFromText('POINT(-97.4388046000 38.1112251000)'));
    

    编辑更正,点数据中的问题。 ST_geomfromtext 会起作用,有点好奇有什么区别

    【讨论】:

    • 两个问题:你的意思是ST_GeomFromText,你有一个解析错误 - 无效几何。
    • 这实际上对我有用 - 解析错误来自 POINT 数据中的逗号,并且由于某种原因,该函数可以在前面有或没有 ST_ 的情况下工作。谢谢!
    【解决方案2】:

    您不能将 PostgreSQL 的 geometric data types 与 PostGIS 的几何类型混合,这就是您看到该错误的原因。我建议使用PostGIS's geometry contstructors 之一来提供帮助:

    SELECT * 
    FROM geo_shape 
    WHERE ST_Contains(geoshp_polygon,
                      ST_SetSRID(ST_MakePoint(-97.4388046000, 38.1112251000),4326);
    

    或者一个非常快速的文本方式是拼凑well-known text

    SELECT 'SRID=4326;POINT(-97.4388046000 38.1112251000)'::geometry AS geom;
    

    (这将输出几何类型的 WKB)。

    【讨论】:

    • 由于某种原因,这一直给我一个错误,指出“对具有不同 SRID 的两个几何图形进行操作”。不确定这是因为“geometry_columns”表不正确还是什么原因。
    • 这是一个有用的错误,因为您的空间参考 (SRID) 必须匹配。在geometry_columns表中找到geo_shape.geoshp_polygon的SRID,或者使用ST_SRID直接查询。如果您需要从一个空间参考转换到另一个空间参考(例如,WGS84 到 NAD83 UTM10N),请使用ST_Transform
    猜你喜欢
    • 1970-01-01
    • 2013-06-24
    • 2023-03-04
    • 2011-06-05
    • 2013-08-06
    • 2012-07-21
    • 2023-03-18
    • 2020-07-30
    • 2019-04-09
    相关资源
    最近更新 更多