как сохранить geojson (в javascript) в геометрию (MultiPolygon, 4326) в PostGIS с Hibernate

Я работаю над проектом jsf (версия 2.2). У меня есть объект geoJson в javascript. С другой стороны у меня столбец с типом геометрии (MultiPolygon, 4326) в PostGIS. Я использую Hibernate 4.3.8 и Postgresql 9.3.

Определение столбца геометрии в классе модели

@Type(type="org.hibernate.spatial.GeometryType")
@Column(name="geom")
private Polygon geom;

Я также включил в свой проект Hibernate Spatial 4.x и могу получить доступ к строке geojson в управляемом компоненте. Но я не знаю, как мне вставить этот геоджсон в свою базу данных. Вероятно, мне нужно проанализировать geojson и создать объект многоугольника из координат geojson и перейти к моей базе данных. Но мне это не удалось. Как это сделать?

Заранее спасибо.


person Haktan Aydın    schedule 16.03.2015    source источник
comment
Вы можете использовать ST_GeomFromGeoJSON для чтения строки GeoJSON как геометрии.   -  person Mike T    schedule 17.03.2015
comment
Спасибо, Майк за ответ, попробую. Но что вы думаете о передаче db этой геометрии?   -  person Haktan Aydın    schedule 17.03.2015


Ответы (3)


Взгляните на проект geojson-jackson. Думаю, это то, что вы ищете (пока не тестирую, но выглядит неплохо).

Удачи!!

person jmvivo    schedule 17.03.2015

Вам, в отличие от этого, не потребуется обработка db над этим полем, так почему бы просто не сохранить внутри db как String / BLOB.

person Paul Verest II    schedule 27.03.2015
comment
Спасибо @Paul за ответ. Я не должен сохранять это как String / BLOB, потому что у меня есть wms-сервер на другой стороне, и я хочу поделиться с ним своей геометрией. Если я сохраню геометрию как String, wms-сервер не сможет принять ее как значение geom. - person Haktan Aydın; 27.03.2015

Вероятно, мне нужно разобрать geojson и создать объект многоугольника из координат geojson.

Вам не обязательно этого делать, база данных может сделать это за вас, и высоки шансы, что это будет быстрее, чем вы. Просто создайте геометрию из GeoJSON. В своей базе данных используйте следующую функцию:

geometry ST_GeomFromGeoJSON(text geomjson);

Это дает EWKB-геометрию, которую можно сохранить в БД, перепроецировать, переформатировать и т. Д. Параметром является GeoJSON в виде строки.

Я понятия не имею, как вы можете запустить эту функцию базы данных с помощью hibernate-space, но должна быть возможность напрямую выполнять sql-запросы. Однако будьте осторожны, это может привести к ошибкам SQL-инъекции.

P.S .: Я вообще не рекомендую использовать Object-Relational-Mappers в контексте пространственных приложений, а точнее из-за таких недоступностей.

person Mathias Vonende    schedule 31.03.2015