3

I'm developing an application where I take a route from google maps, save it in postgresql/postgis. I'd like to take this route (LineString geometry) and send it back to Google Maps.

I already can save the map in the database, now I want to show the routes on a map.

On the client side I'm using JQuery (AJAX) + Google Maps Api. On the server side I'm using REST services with RestEasy.

I tried to work with Jackson to transform the Entity to JSON, but, the Jackson fails to transform geometric data in json. Does anyone know how to transform this spatial data into JSON?

My Entity:

public class Rota {
...
private LineString caminho;
public Rota() {
}
public Rota(Integer id, Usuario usuario, String descricao, LineString     lineString) {
    this.id = id;
    this.usuario = usuario;
    this.descricao = descricao;
    this.caminho = lineString;
}
// getters and setters
@Type(type = "org.hibernate.spatial.GeometryType")
public LineString getCaminho() {
    return caminho;
}
public void setCaminho(LineString caminho) {
    this.caminho = caminho;
}
// hashcode and equals method
}

My REST service:

@Inject
private RotaBC rotaBC;

@GET
@Path("/rotas/{idrota}")
@Produces("application/json")
public Rota show(@PathParam("id") String id) {
    return rotaBC.show(Integer.parseInt(id));
} 

The error:

15:05:16,447 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/sharecar].[default]] (http--0.0.0.0-8080-1) Servlet.service() for servlet default threw exception: java.lang.ClassNotFoundException: org.codehaus.jackson.map.JsonMappingException$Reference from [Module "org.codehaus.jackson.jackson-mapper-asl:main" from local module loader @1d332b (roots: /opt/demoiselle/server/jboss-7.1/modules)] ... at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:166) ... at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:446) at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112)

6
  • Out of curiosity, how are you saving the route from google as a spatial object?
    – djq
    Commented Jan 24, 2013 at 5:11
  • GeometryFactory gf = new GeometryFactory(); Coordinate c[] = new Coordinate[pontos.length]; String ap[]; for (int i = 0; i < c.length; i++) { ap = pontos[i].split(","); c[i] = new Coordinate(Double.parseDouble(ap[0]), Double.parseDouble(ap[1])); } Rota r = new Rota(id, usuario, descricao, gf.createLineString(c)); rotaBC.create(r); Commented Jan 25, 2013 at 19:08
  • By JavaScript I take the geometry add do this: var a = aPontos.toString().substring(1, aPontos.toString().length - 1).split('),('); after I send the var a by ajax/post. Commented Jan 25, 2013 at 19:10
  • github.com/lusabo/sharecar Commented Jan 25, 2013 at 19:11
  • What are you saving in your database?
    – djq
    Commented Jan 25, 2013 at 19:59

1 Answer 1

4

To get json (or geojson) from PostGIS there is the function ST_geojson() which will return a geometric object in geojson form.

4
  • I'm using PostgreSQL 8.4 Commented Jan 25, 2013 at 19:11
  • ST_GeoJson is a PostGIS function, not PostGreSQL
    – djq
    Commented Jan 25, 2013 at 19:58
  • I know, but, the PostGIS that PostgreSQL 8.4 uses does not have this function. Commented Jan 25, 2013 at 20:04
  • Are you sure? According to the docs it was introduced in Postgis 1.3.4 postgis.org/docs/ST_AsGeoJSON.html
    – djq
    Commented Jan 25, 2013 at 21:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.