Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用psycopg2将多边形顶点转换为lat/lon_Python_Postgis_Psycopg2 - Fatal编程技术网

在python中使用psycopg2将多边形顶点转换为lat/lon

在python中使用psycopg2将多边形顶点转换为lat/lon,python,postgis,psycopg2,Python,Postgis,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] 但它产生的输出如下所示: (

我正在尝试使用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.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.loadsrecord_geom,hex=True方法

然后,可以使用shapely的几何体模块提取顶点或执行任何其他任务


例如,my_geom.coords.xy将返回坐标的x,y数组。

谢谢!这在服务器上相当快。