Вы ничего не делаете неправильно. После the same steps as the PPyGIS basic example, я получаю то же самое hex-encoded EWKB, как показано в вопросе (010100 ...), который обычно ожидается. Возможно, это работало с более старой версией PPyGIS/Psycopg? Это не сегодня.
Пакет не соответствует действительности для регистрации в качестве адаптера для типов PostGIS, поэтому мой совет заключается в том, чтобы не использовать пакет. Кроме того, вам не нужны дополнительные пакеты для использования PostGIS из Psycopg2.
Вот нормальный подход для чтения точек/записи, без каких-либо дополнительных пакетов:
# Assuming PostGIS 2.x, use a typmod
cursor.execute('CREATE TEMP TABLE test (geom geometry(PointZ,4326));')
# Longyearbyen, 78.22°N 15.65°E, altitude 10 m
cursor.execute('''\
INSERT INTO test (geom)
VALUES(ST_SetSRID(ST_MakePoint(%s, %s, %s), 4326));
''', (15.65, 78.22, 10.0))
cursor.execute('''\
SELECT ST_Y(geom) AS latitude, ST_X(geom) AS longitude, ST_Z(geom) AS altitude
FROM test;
''')
print(cursor.fetchone()) # (78.22, 15.65, 10.0)
cursor.execute('SELECT ST_AsText(geom) FROM test;')
print(cursor.fetchone()[0]) # POINT Z (15.65 78.22 10)
cursor.execute('SELECT ST_AsLatLonText(geom) FROM test;')
print(cursor.fetchone()[0]) # 78°13'12.000"N 15°39'0.000"E
Если вы хотите геометрический объект на стороне клиента, чтобы сделать больше работы с реальной геометрией, рассмотреть возможность использования стройных, которые могут быть сопряжены с использованием ВКБ данных:
from shapely.wkb import loads
cursor.execute('SELECT geom FROM test;')
pt = loads(cursor.fetchone()[0], hex=True)
print(pt) # POINT Z (15.65 78.22 10)
То, что вы вернулись это хорошо знают двоичную (ВКБ) представление точки. Попробуйте выполнить cursor.execute ('SELECT ST_X (geometry) из test'), чтобы увидеть разницу или cursor.execute ('SELECT ST_AsText (geometry) from test') –