使用 psycopg2 在 python 中将多边形顶点设为 lat/lon
Polygon vertices to lat/lon in python using psycopg2
我正在尝试使用 psychopg2
获取多面体所有顶点的点以下代码成功执行...
cur = conn.cursor()
cur.execute("""SELECT ST_DumpPoints(ST_AsText(geom)) from dry_overlay""")
rows = cur.fetchall()
print "\nShow me the databases:\n"
for row in rows:
print " ", row[0]
但它产生的输出如下所示:
("{1,1,1}",0101000000F3071C3FF0E04241C729FC3E2C735A41)
("{1,1,2}",01010000009C700A93FFDF4241DA0BBD6283725A41)
("{1,1,3}",01010000001BC9122701E04241C2D848ED2C735A41)
("{1,1,4}",0101000000325487970FE04241FF279CE92C735A41)
("{1,1,5}",0101000000B188A3F06FE042414A73142B2C735A41)
("{1,1,6}",0101000000F3071C3FF0E04241C729FC3E2C735A41)
("{1,1,1}",010100000019D5589E634D4341B7E69817C2875A41)
("{1,1,2}",010100000042AEF52E2E4D43418CD52A53C1875A41)
("{1,1,3}",01010000006D4CBA551F4D43411EBEF35CC1875A41)
("{1,1,4}",0101000000D92F2F601F4D43413AD9BADAB9875A41)
("{1,1,5}",0101000000AF1860920F4D43410E00CDDBB9875A41)
我知道第二个元素是 WKT,但是如何将其转换为 lat/long 坐标?我以为 ST_AsText()
会执行此功能
PPyGIS 函数 ppygis.Geometry.read_ewkb(...)
可以帮到你。
是的,ST_AsText是你需要的功能,但是在另一个地方:
SELECT ST_Astext((ST_DumpPoints(geom)).geom) from dry_overlay;
最好使用ST_X和ST_Y,这样你就不必解析文本了:
SELECT ST_x(geom), ST_y(geom) FROM (
SELECT (St_DumpPoints(geom)).geom from dry_overlay
) as foo;
您可以使用优秀 shapely
包中的 wkb
模块来加载和操作几何体:
from shapely import geometry, wkb
test_geom = geometry.Point(0, 0)
test_wkb_hex = wkb.dumps(test_geom, hex=True)
print(test_wkb_hex) # prints: '010100000000000000000000000000000000000000'
my_geom = wkb.loads(test_wkb_hex, hex=True)
print(my_geom) # prints: POINT (0 0)
对于您的情况,只需在您的回复中使用 wkb.loads(record_geom, hex=True)
方法。
然后您可以使用 shapely
的 geometry
模块来提取您的顶点或执行任何其他数量的任务。
例如,my_geom.coords.xy
将 return x
、y
坐标数组。
我正在尝试使用 psychopg2
获取多面体所有顶点的点以下代码成功执行...
cur = conn.cursor()
cur.execute("""SELECT ST_DumpPoints(ST_AsText(geom)) from dry_overlay""")
rows = cur.fetchall()
print "\nShow me the databases:\n"
for row in rows:
print " ", row[0]
但它产生的输出如下所示:
("{1,1,1}",0101000000F3071C3FF0E04241C729FC3E2C735A41)
("{1,1,2}",01010000009C700A93FFDF4241DA0BBD6283725A41)
("{1,1,3}",01010000001BC9122701E04241C2D848ED2C735A41)
("{1,1,4}",0101000000325487970FE04241FF279CE92C735A41)
("{1,1,5}",0101000000B188A3F06FE042414A73142B2C735A41)
("{1,1,6}",0101000000F3071C3FF0E04241C729FC3E2C735A41)
("{1,1,1}",010100000019D5589E634D4341B7E69817C2875A41)
("{1,1,2}",010100000042AEF52E2E4D43418CD52A53C1875A41)
("{1,1,3}",01010000006D4CBA551F4D43411EBEF35CC1875A41)
("{1,1,4}",0101000000D92F2F601F4D43413AD9BADAB9875A41)
("{1,1,5}",0101000000AF1860920F4D43410E00CDDBB9875A41)
我知道第二个元素是 WKT,但是如何将其转换为 lat/long 坐标?我以为 ST_AsText()
会执行此功能
PPyGIS 函数 ppygis.Geometry.read_ewkb(...)
可以帮到你。
是的,ST_AsText是你需要的功能,但是在另一个地方:
SELECT ST_Astext((ST_DumpPoints(geom)).geom) from dry_overlay;
最好使用ST_X和ST_Y,这样你就不必解析文本了:
SELECT ST_x(geom), ST_y(geom) FROM (
SELECT (St_DumpPoints(geom)).geom from dry_overlay
) as foo;
您可以使用优秀 shapely
包中的 wkb
模块来加载和操作几何体:
from shapely import geometry, wkb
test_geom = geometry.Point(0, 0)
test_wkb_hex = wkb.dumps(test_geom, hex=True)
print(test_wkb_hex) # prints: '010100000000000000000000000000000000000000'
my_geom = wkb.loads(test_wkb_hex, hex=True)
print(my_geom) # prints: POINT (0 0)
对于您的情况,只需在您的回复中使用 wkb.loads(record_geom, hex=True)
方法。
然后您可以使用 shapely
的 geometry
模块来提取您的顶点或执行任何其他数量的任务。
例如,my_geom.coords.xy
将 return x
、y
坐标数组。