W moim PostgreSQL 9.3 + PostGIS 2.1.5 Mam tabelę PLACE
z kolumną coordinates
typu Geometry(Point,26910)
.Mapowanie pola punktu geometrii PostGIS z Hibernate na Spring Boot
Chcę zmapować go do jednostki Place
w mojej aplikacji internetowej Spring Boot 1.1.9, która używa Hibernacji 4.0.0 +. Place
jest dostępny z repozytorium REST.
Niestety kiedy GET http://localhost:8080/mywebapp/places
otrzymam tej dziwnej odpowiedzi JSON:
{
"_embedded" : {
"venues" : [ {
"id" : 1,
"coordinates" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
i tak dalej indefinetely ...! Wiosna dziennika nie pomaga ..
pracuję z tym 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
Przede wszystkim, to jest ok używać database-platform
zamiast database
? A może muszę użyć poniższych ustawień zamiast powyższych?
spring.datasource.url=jdbc:postgresql_postGIS://192.168.1.123/mywebapp
spring.datasource.driverClassName=org.postgis.DriverWrapper
Zresztą moja jednostka jest mniej więcej tak:
@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;
}
Moje pom.xml to odpowiednia część zawiera:
<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>
Trochę dziwne konfiguracja, znalazłem go w Internecie, to jest to, które na razie działa najlepiej.
Mam nadzieję, że ktoś może mi pomóc w tej tajemnicy. :)
Zauważam, że szerokość i długość wyjściowa wyjściowa z Serializera są zamieniane. czy to jest oczekiwane? Ten kod wyjaśnia "double lat = value.getY();" i "double lon = value.getX();" dzięki – randytan
@randytan Użyłem tego kodu dawno temu, ale pamiętam tę szerokość i długość geograficzną gdzie w odpowiedniej kolejności. Gdzie ich zamieniasz? – bluish
Jeśli wyślesz 'POINT (AB)' i zrobisz 'sys.out' do swojej zmiennej' jsonValue = String.format ("POINT (% s% s)", lat, lon); 'możesz zobaczyć, że jest on faktycznie zapisany do "PUNKT (BA)". Po prostu zamieniam kod 'value.getY()' oraz 'value.getX()', aby poprawić pozycję. Dzięki – randytan