In meinem PostgreSQL 9.3 + PostGIS 2.1.5 habe ich eine Tabelle PLACE
mit einer Spalte coordinates
des Typs Geometry(Point,26910)
.Ordnen Sie ein PostGIS Geometrie Punktfeld mit Hibernate auf Spring Boot
Ich möchte es auf Place
Einheit in meiner Spring Boot 1.1.9 Web-Anwendung, die Hibernate 4.0.0 + verwendet. Place
ist mit einem REST-Repository verfügbar.
Leider wenn ich GET http://localhost:8080/mywebapp/places
Ich erhalte dieses seltsame JSON Antwort:
{
"_embedded" : {
"venues" : [ {
"id" : 1,
"coordinates" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
und so weiter indefinetely ...! Frühlings-Protokoll hilft nicht ..
ich mit dieser Arbeit application.properties:
spring.jpa.database-platform=org.hibernate.spatial.dialect.postgis.PostgisDialect
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:postgresql://192.168.1.123/mywebapp
spring.datasource.username=postgres
spring.datasource.password=mypwd
spring.datasource.driverClassName=org.postgresql.Driver
Zunächst einmal ist es in Ordnung, database-platform
zu verwenden, anstatt database
? Und vielleicht muss ich folgende Einstellungen anstelle der oben genannten verwenden?
spring.datasource.url=jdbc:postgresql_postGIS://192.168.1.123/mywebapp
spring.datasource.driverClassName=org.postgis.DriverWrapper
Auf jeden Fall mein Unternehmen so etwas wie dieses:
enthält@Entity
public class Place {
@Id
public int id;
@Column(columnDefinition="Geometry")
@Type(type="org.hibernate.spatial.GeometryType") //"org.hibernatespatial.GeometryUserType" seems to be for older versions of Hibernate Spatial
public com.vividsolutions.jts.geom.Point coordinates;
}
Mein pom.xml diese relevanten Teil:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.3-1102-jdbc41</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-spatial</artifactId>
<version>4.3</version><!-- compatible with Hibernate 4.3.x -->
<exclusions>
<exclusion>
<artifactId>postgresql</artifactId>
<groupId>postgresql</groupId>
</exclusion>
</exclusions>
</dependency>
Ein bisschen seltsam Konfiguration, ich habe es im Internet zu finden, Es ist das, das am besten für jetzt funktioniert.
Ich hoffe, dass mir jemand mit diesem Geheimnis helfen konnte. :)
Ich stelle fest, dass die Ausgabe Breite und Länge von Ihrem Serializer ausgetauscht werden. ist das erwartet? Dieser Code erklärt 'double lat = value.getY();' und 'double lon = value.getX();' danke – randytan
@randytan Ich habe diesen Code vor langer Zeit verwendet, aber ich erinnere mich, dass Breite und Länge wo in der richtigen Reihenfolge. Wo siehst du sie getauscht? – bluish
Wenn Sie 'POINT (AB)' senden und 'sys.out' an Ihre Variable' jsonValue = String.format ("POINT (% s% s)", lat, lon); 'Sie können sehen, dass es tatsächlich geschrieben wird 'PUNKT (BA)'. Ich tausche einfach den Code 'value.getY()' und 'value.getX()', um die Position zu korrigieren. Vielen Dank – randytan