将 PostGIS 几何类型作为 Shapely 的几何类型导入 Python?
Importing a PostGIS geometry type into Python as a geometry type from Shapely?
所以我遇到了这样一种情况,我有大量的断开路线的线串,我需要使用 Shapely 的 LineMerge 或 Union 或 PostGIS 将它们联合在一起 ST_Union。
我现在的想法是使用 Shapely 将 Linestrings 作为几何类型导入。使用 Shapely 联合或合并它们,然后导出回数据库中的结果 table。
但是,PostGIS 数据库中的几何类型只是一堆乱码。喜欢...
01020000020e61000....
如何使用 Shapely 将其从数据库转换为 Python 几何类型,进行一些操作,然后将其导出回数据库?
目前这是我的代码,它现在只是从数据库中导入那个 geom 对象字符串并抛出错误,因为它不是几何类型。
def create_shortest_route_geom(shortest_routes):
conn = connect_to_database()
cur = conn.cursor()
shortest_route_geoms = []
for route in shortest_routes:
source = str(int(route[1]))
target = str(int(route[2]))
query = 'SELECT the_geom FROM public.ways WHERE target_osm = ' + target + ' AND source_osm = ' + source + ' OR target_osm = ' + source + ' AND source_osm = ' + target + ';'
cur.execute(query)
total_geom = cur.fetchone()
for index, node in enumerate(route):
try:
source = str(int(node))
target = str(int(route[index + 1]))
query = 'SELECT the_geom FROM public.ways WHERE target_osm = ' + target + ' AND source_osm = ' + source + ' OR target_osm = ' + source + ' AND source_osm = ' + target + ';'
cur.execute(query)
geom = cur.fetchone()
query = "SELECT ST_Union("+str(geom[0])+","+str(total_geom[0])+")"
cur.execute(query)
total_geom = cur.fetchone()
except IndexError:
print "Last element"
shortest_route_geoms.insert(total_geom)
return shortest_route_geoms
Shapely already has libraries for this specific problem.
PostGIS 将几何图形存储为十六进制值。使用 Shapely 的加载函数以 hex=True 的参数加载它。
具体...
geom = shapely.wkb.loads(hex_geom[0], hex=True)
不要使用 PostGIS ST_Union,因为您必须一遍又一遍地转储和加载才能工作。 Shapely 也配置了 linemerge
所以我遇到了这样一种情况,我有大量的断开路线的线串,我需要使用 Shapely 的 LineMerge 或 Union 或 PostGIS 将它们联合在一起 ST_Union。
我现在的想法是使用 Shapely 将 Linestrings 作为几何类型导入。使用 Shapely 联合或合并它们,然后导出回数据库中的结果 table。
但是,PostGIS 数据库中的几何类型只是一堆乱码。喜欢...
01020000020e61000....
如何使用 Shapely 将其从数据库转换为 Python 几何类型,进行一些操作,然后将其导出回数据库?
目前这是我的代码,它现在只是从数据库中导入那个 geom 对象字符串并抛出错误,因为它不是几何类型。
def create_shortest_route_geom(shortest_routes):
conn = connect_to_database()
cur = conn.cursor()
shortest_route_geoms = []
for route in shortest_routes:
source = str(int(route[1]))
target = str(int(route[2]))
query = 'SELECT the_geom FROM public.ways WHERE target_osm = ' + target + ' AND source_osm = ' + source + ' OR target_osm = ' + source + ' AND source_osm = ' + target + ';'
cur.execute(query)
total_geom = cur.fetchone()
for index, node in enumerate(route):
try:
source = str(int(node))
target = str(int(route[index + 1]))
query = 'SELECT the_geom FROM public.ways WHERE target_osm = ' + target + ' AND source_osm = ' + source + ' OR target_osm = ' + source + ' AND source_osm = ' + target + ';'
cur.execute(query)
geom = cur.fetchone()
query = "SELECT ST_Union("+str(geom[0])+","+str(total_geom[0])+")"
cur.execute(query)
total_geom = cur.fetchone()
except IndexError:
print "Last element"
shortest_route_geoms.insert(total_geom)
return shortest_route_geoms
Shapely already has libraries for this specific problem.
PostGIS 将几何图形存储为十六进制值。使用 Shapely 的加载函数以 hex=True 的参数加载它。
具体...
geom = shapely.wkb.loads(hex_geom[0], hex=True)
不要使用 PostGIS ST_Union,因为您必须一遍又一遍地转储和加载才能工作。 Shapely 也配置了 linemerge