Я пытаюсь получить очки для всех вершин моих мультиполигонов, используя 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, но как можно преобразовать его в координаты широта / долгота? Я думал, что ST_AsText() выполнит эту функцию

2
the_darkside 12 Дек 2016 в 00:50

3 ответа

Лучший ответ

Да, 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;
1
Tommaso Di Bucchianico 12 Дек 2016 в 14:26

Вы можете использовать модуль wkb из превосходного пакета shapely для загрузки и управления геометрией:

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 вернет x, y массивы ваших координат.

1
songololo 12 Дек 2016 в 14:29

Функция PPyGIS ppygis.Geometry.read_ewkb(...) может помочь вам.

0
Maurice Meyer 11 Дек 2016 в 22:00