我试着把原始的道路数据分成几段。首先,我创建了路段桌子。然后呢我使用shapely将roads表的内容转换成一系列连接的路段。你知道吗
对于每条道路,我首先将道路的名称和几何图形加载到内存中。你知道吗
这里的代码工作正常。你知道吗
我得到了这条路的线形几何体,我想在它与另一条路接触或交叉的每一点上进行分割。为此,我尝试为这条路建立一个交叉道路列表。你知道吗
crossroads = []
cursor.execute("SELECT ST_AsText(centerline) FROM ROADS" +
"WHERE ST_Touches(roads.centerline, " +
"ST_GeomFromText(%s)) OR ST_Crosses(" +
"roads.centerline, ST_GeomFromText(%s))",
(wkt, wkt))
for row in cursor:
crossroad = shapely.wkt.loads(row[0])
crossroads.append(crossroad)
但错误如下:
---------------------------------------------------------------------------
ProgrammingError Traceback (most recent call last)
<ipython-input-9-0d71c4db883b> in <module>()
4 "ST_GeomFromText(%s)) OR ST_Crosses(" +
5 "roads.centerline, ST_GeomFromText(%s))",
----> 6 (wkt, wkt))
ProgrammingError: syntax error at or near "."
LINE 1: ...sText(centerline) FROM ROADSWHERE ST_Touches(roads.centerlin...
当我编辑代码如下:
crossroads = []
cursor.execute("SELECT ST_AsText(centerline) FROM ROADS WHERE ST_Touches(roads.centerline, " +
"ST_GeomFromText(%s)) OR ST_Crosses(" +
"roads.centerline, ST_GeomFromText(%s))",
(wkt, wkt))
for row in cursor:
crossroad = shapely.wkt.loads(row[0])
crossroads.append(crossroad)
以下错误:
---------------------------------------------------------------------------
InternalError Traceback (most recent call last)
<ipython-input-5-b50bc9a8488c> in <module>()
3 "ST_GeomFromText(%s)) OR ST_Crosses(" +
4 "roads.centerline, ST_GeomFromText(%s))",
----> 5 (wkt, wkt))
6 for row in cursor:
7 crossroad = shapely.wkt.loads(row[0])
InternalError: current transaction is aborted, commands ignored until end of transaction block
第一个错误是因为“ROADSWHERE”之间没有空格,第二个内部错误是因为事务需要回滚,即
conn.rollback()
。你知道吗首先,WKB是一种在PostGIS和Shapely之间传输几何图形的快速无损方法。您可以从具有
.wkb_hex
属性的shapely几何体和PostGIS中获得这一点,而无需做任何特殊的操作。其次,我发现最好使用三重引号编写SQL表达式,如下所示:最后,我不确定它是否有用,但是为了更好地理解谓词操作符(如“touch”和“crosss”)是如何工作的,您可能需要查看DE-9IM。可以使用ST_Relate生成自定义谓词,而不是调用两个不同的谓词。你知道吗
相关问题 更多 >
编程相关推荐