Я пытаюсь прочитать столбец геометрии PostGIS и сохранить его как byte[]
Java byte[]
с помощью спящего режима.
Насколько я знаю, я должен хранить его на Java так, как он представлен в psql
.
Мне удается написать его и даже увидеть его в psql
но когда я прочитал его с помощью wkbreader, я получаю следующую ошибку:
com.vividsolutions.jts.io.ParseException: Неизвестный тип WKB 48
PostGIS экспортирует ST_AsBinary
функцию или (если вы хотите сохранить SRID) ST_AsEWKB
.
Вы должны сохранить результаты этой функции, а не пытаться отобразить представление отображения, а затем загрузить с помощью ST_GeomFromWKB
или ST_GeomFromEWKB
(в зависимости от того, вы использовали форму AsBinary или AsewKB на выходе).
Я видел, что эта ошибка была решена путем обновления версии драйвера JDBC. Я могу читать геометрию PostGIS в JTS со следующим:
Запрос:
SELECT ST_AsBinary(geom) FROM mytable;
Код:
// myWKBReader is a JTS WKBReader
// myResultSet is a JDBC ResultSet
Geometry geom = myWKBReader.read(myResultSet.getBytes("st_asbinary"));
POM:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.2-1003-jdbc4</version>
</dependency>
Запустите эту команду как Postgres
ALTER DATABASE table SET bytea_output TO 'escape';
затем перезапустите Postgres.