首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编程错误:无法将类型记录转换为几何图形

编程错误:无法将类型记录转换为几何图形
EN

Stack Overflow用户
提问于 2016-06-21 12:14:47
回答 1查看 968关注 0票数 0

我有一个查询,它从一行字符串中找到最近的POI。查询如下:

代码语言:javascript
复制
import psycopg2

conn = psycopg2.connect("dbname=TestGIS user=postgis")
cur = conn.cursor()

cur.execute("SELECT poi.name,poi.city,ST_AsTEXT(poi.the_geog),
            ST_AsText(ST_ClosestPoint(road.the_geog::geometry, poi.the_geog::geometry)),
            ST_Distance_Sphere(ST_ClosestPoint(road.the_geog::geometry, poi.the_geog::geometry), poi.the_geog::geometry)/1000 
            AS Distance FROM road, poi WHERE road.id = 123 AND
            ST_DWithin(road.the_geog, poi.the_geog, 1000.0) ORDER BY
            ST_LineLocatePoint(road.the_geog::geometry, poi.the_geog::geometry), 
            ST_Distance(road.the_geog, poi.the_geog);")

现在我想要执行相同的查询,但是在同一个查询中提供了linestring(road)。就像这样:

代码语言:javascript
复制
cur.execute("
    SELECT
        poi.name,poi.city,ST_AsTEXT(poi.the_geog),
        ST_AsText(ST_ClosestPoint(road::geometry, poi.the_geog::geometry)),
        ST_Distance_Sphere(ST_ClosestPoint(road::geometry, poi.the_geog::geometry), poi.the_geog::geometry)/1000 AS Distance
    FROM (
        SELECT ST_GeographyFromText(
            'SRID=4326;LINESTRING(85.280194 23.296728,85.281572 23.297479)'
            )
        ) AS road, poi
    WHERE
        ST_DWithin(road, poi.the_geog, 1000.0) ORDER BY
        ST_LineLocatePoint(road::geometry, poi.the_geog::geometry), 
        ST_Distance(road, poi.the_geog);
")

但我发现了一个错误:

代码语言:javascript
复制
psycopg2.ProgrammingError: cannot cast type record to geometry
LINE 1: ...sTEXT(poi.the_geog),ST_AsText(ST_ClosestPoint(road::geometry...

有人能告诉我我做错了什么吗?

更新:表如下:

代码语言:javascript
复制
cur.execute("CREATE TABLE poi(gid serial PRIMARY KEY, name varchar, city varchar, the_geog geography(POINT,4326) );")
cur.execute('''INSERT INTO poi (gid, name, city, the_geog) VALUES (%s,%s, %s,ST_GeogFromText(%s))''',(int(count),row[0],row[1],coordinates))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-21 12:41:40

给该列一个别名,以便您可以引用它:

代码语言:javascript
复制
FROM (
    SELECT ST_GeographyFromText(
        'SRID=4326;LINESTRING(85.280194 23.296728,85.281572 23.297479)'
    ) as road
) AS road
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37944141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档