Nel mio PostgreSQL 9.3 + PostGIS 2.1.5 ho una tabella con una colonna coordinates
di tipo Geometry(Point,26910)
.Mappare un campo punto geometria PostGIS con Hibernate su Spring Boot
Desidero mapparlo all'entità Place
nell'applicazione Web Spring Boot 1.1.9, che utilizza Hibernate 4.0.0 +. Place
è disponibile con un repository REST.
Purtroppo quando ho GET http://localhost:8080/mywebapp/places
ricevo questa risposta JSON strana:
{
"_embedded" : {
"venues" : [ {
"id" : 1,
"coordinates" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
e così via indefinetely ...! log molla non aiuta ..
Sto lavorando con questa 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
Prima di tutto, è ok per utilizzare al posto di database-platform
database
? E forse devo usare le seguenti impostazioni al posto di quanto sopra?
spring.datasource.url=jdbc:postgresql_postGIS://192.168.1.123/mywebapp
spring.datasource.driverClassName=org.postgis.DriverWrapper
Comunque il mio soggetto è qualcosa di simile:
@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;
}
mio pom.xml contiene questa parte rilevante:
<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>
Una strana configurazione di bit, l'ho trovato su internet, è quello che funziona meglio per ora.
Spero che qualcuno possa aiutarmi con questo mistero. :)
Si noti che la latitudine e la longitudine di uscita dal Serializer vengono scambiate. è previsto? Questo codice lo spiega 'double lat = value.getX();' e 'double lon = value.getX();' grazie – randytan
@randytan Ho usato questo codice molto tempo fa, ma ricordo che latitudine e longitudine dove nel giusto ordine. Dove li vedi scambiati? – bluish
Se si invia 'POINT (AB)' e si esegue 'sys.out' alla variabile' jsonValue = String.format ("POINT (% s% s)", lat, lon); 'si può vedere che in realtà è stato scritto per 'POINT (BA)'. Ho appena scambiato il codice 'value.getY()' e 'value.getX()' per correggere la posizione. Grazie – randytan