Thread: [Jts-topo-suite-user] SpatiaLite - JTS - OpenGL ES
Brought to you by:
dr_jts
From: Darius M. <dar...@rw...> - 2013-02-18 12:40:33
|
Hello JTSers, the general task in my diploma thesis is to query and display map data on Android using OpenGL. Therefore, I thought of using SQLite with its R*Tree spatial index together with SpatiaLite and JTS. I need to display the geometries via OpenGL. OpenGL needs to have the geometry vertices converted into FloatBuffers wrapping float arrays. And since it is OpenGL ES 2.0 on Android, there is missing the GL_POLYGON mode for rendering polygons, instead I have to triangulate the geometries. What would probably be a good way to do this? Reading in the SpatiaLite geometry with JTS' WKBReader, then converting them into float[]? SELECT AsBinary(geometry) FROM ways then Geometry geometry = new WKBReader().read(stmt.column_bytes(0)); JTS has the AWT Shape conversion classes. To my knowledge there is no direct way to use them with OpenGL ES on Android. Do you think this would be a good starting point for me to adjust the code to create the mentioned float arrays/FloatBuffers? By the way, the buffers can be created as FloatBuffers directly or as ByteBuffers first, maybe that's a somehow relevant information since the geometry is in a binary format already. So it's possible to do this: ByteBuffer vertexByteBuffer = ByteBuffer.allocateDirect(points.length); // points is a byte[] vertexByteBuffer.put(points); FloatBuffer vertexBuffer = vertexByteBuffer.asFloatBuffer().asReadOnlyBuffer(); As well as this: ByteBuffer vertexByteBuffer = ByteBuffer.allocateDirect(4 * points.length); // points is a float[] FloatBuffer vertexBuffer = vertexByteBuffer.asFloatBuffer(); vertexBuffer.put(points); vertexBuffer = vertexBuffer.asReadOnlyBuffer(); Thanks and best regards, Darius |
From: Felix O. <obe@IVV-AACHEN.DE> - 2013-02-19 15:09:08
|
Since you only want it for display, perhaps creating a CoordinateSequence implementation that is based on OpenGL FloatBuffers might be a good idea. If you then derive a SpatiaLite blob reader from WKBReader you can facilitate the chain SpatiaLite-blob -> WkbGeometry -> JTSGeometry -> FloatBuffers to SpatiaLite-blob -> FloatBuffers Hth FObermaier > > Hello JTSers, > > the general task in my diploma thesis is to query and display map data on > Android using OpenGL. Therefore, I thought of using SQLite with its R*Tree > spatial index together with SpatiaLite and JTS. I need to display the > geometries via OpenGL. OpenGL needs to have the geometry vertices > converted into FloatBuffers wrapping float arrays. And since it is OpenGL ES > 2.0 on Android, there is missing the GL_POLYGON mode for rendering > polygons, instead I have to triangulate the geometries. > > What would probably be a good way to do this? Reading in the SpatiaLite > geometry with JTS' WKBReader, then converting them into float[]? > > SELECT AsBinary(geometry) FROM ways > > then > > Geometry geometry = new > WKBReader().read(stmt.column_bytes(0)); > > > JTS has the AWT Shape conversion classes. To my knowledge there is no > direct way to use them with OpenGL ES on Android. Do you think this would > be a good starting point for me to adjust the code to create the mentioned > float arrays/FloatBuffers? > > By the way, the buffers can be created as FloatBuffers directly or as > ByteBuffers first, maybe that's a somehow relevant information since the > geometry is in a binary format already. > So it's possible to do this: > > ByteBuffer vertexByteBuffer = > ByteBuffer.allocateDirect(points.length); // points is a byte[] > vertexByteBuffer.put(points); > FloatBuffer vertexBuffer = > vertexByteBuffer.asFloatBuffer().asReadOnlyBuffer(); > > As well as this: > > ByteBuffer vertexByteBuffer = ByteBuffer.allocateDirect(4 * > points.length); // points is a float[] > FloatBuffer vertexBuffer = vertexByteBuffer.asFloatBuffer(); > vertexBuffer.put(points); > vertexBuffer = vertexBuffer.asReadOnlyBuffer(); > > Thanks and best regards, > Darius > > > > ------------------------------ > > Message: 2 > Date: Tue, 19 Feb 2013 12:53:55 +1100 > From: Keith Woodward <kei...@ho...> > Subject: Re: [Jts-topo-suite-user] SpatiaLite - JTS - OpenGL ES > To: "jts...@li..." > <jts...@li...> > Message-ID: <COL...@ph...l> > Content-Type: text/plain; charset="iso-8859-1" > > > Hi Darius,Your thesis sounds very interesting. I am not a JTS expert but I can > recommend some forums to you for getting help related to openGL ES and > android. One is java-gaming.org which has an android sub-forum: > http://www.java-gaming.org/boards/java-on-mobile- > devices/69/view.htmlAnother is libGDX which is a library that you might > consider using or procuring ideas from which handles the tricks of openGL ES: > http://libgdx.badlogicgames.com/ Best regards,Keith > > > Date: Mon, 18 Feb 2013 13:40:22 +0100 > > From: dar...@rw... > > To: jts...@li... > > Subject: [Jts-topo-suite-user] SpatiaLite - JTS - OpenGL ES > > > > Hello JTSers, > > > > the general task in my diploma thesis is to query and display map data > > on Android using OpenGL. Therefore, I thought of using SQLite with its > > R*Tree spatial index together with SpatiaLite and JTS. I need to > > display the geometries via OpenGL. OpenGL needs to have the geometry > > vertices converted into FloatBuffers wrapping float arrays. And since > > it is OpenGL ES 2.0 on Android, there is missing the GL_POLYGON mode > > for rendering polygons, instead I have to triangulate the geometries. > > > > What would probably be a good way to do this? Reading in the > > SpatiaLite geometry with JTS' WKBReader, then converting them into > float[]? > > > > SELECT AsBinary(geometry) FROM ways > > > > then > > > > Geometry geometry = new > WKBReader().read(stmt.column_bytes(0)); > > > > > > JTS has the AWT Shape conversion classes. To my knowledge there is no > > direct way to use them with OpenGL ES on Android. Do you think this > > would be a good starting point for me to adjust the code to create the > > mentioned float arrays/FloatBuffers? > > > > By the way, the buffers can be created as FloatBuffers directly or as > > ByteBuffers first, maybe that's a somehow relevant information since > > the geometry is in a binary format already. > > So it's possible to do this: > > > > ByteBuffer vertexByteBuffer = > ByteBuffer.allocateDirect(points.length); // points is a byte[] > > vertexByteBuffer.put(points); > > FloatBuffer vertexBuffer = > > vertexByteBuffer.asFloatBuffer().asReadOnlyBuffer(); > > > > As well as this: > > > > ByteBuffer vertexByteBuffer = ByteBuffer.allocateDirect(4 * > points.length); // points is a float[] > > FloatBuffer vertexBuffer = vertexByteBuffer.asFloatBuffer(); > > vertexBuffer.put(points); > > vertexBuffer = vertexBuffer.asReadOnlyBuffer(); > > > > Thanks and best regards, > > Darius > > > > ---------------------------------------------------------------------- > > -------- The Go Parallel Website, sponsored by Intel - in partnership > > with Geeknet, is your hub for all things parallel software > > development, from weekly thought leadership blogs to news, videos, > > case studies, tutorials, tech docs, whitepapers, evaluation guides, > > and opinion stories. Check out the most recent posts - join the > > conversation now. http://goparallel.sourceforge.net/ > > _______________________________________________ > > Jts-topo-suite-user mailing list > > Jts...@li... > > https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user > > -------------- next part -------------- > An HTML attachment was scrubbed... > > ------------------------------ > > Message: 3 > Date: Tue, 19 Feb 2013 15:18:30 +0100 > From: Darius Malecki <dar...@rw...> > Subject: Re: [Jts-topo-suite-user] SpatiaLite - JTS - OpenGL ES > To: jts...@li... > Message-ID: <512...@rw...> > Content-Type: text/plain; charset="iso-8859-1" > > Hi Keith, > > thank you, I will take a look at libGDX, because for now I'm writing the > rendering code on my own. > > What I still don't understand is how to create the geometry column in the > database. For the beginning I wrote a basic OpenStreetMap SAX importer > some time ago and filled the tables in database (nodes, node_tags, ways, > way_nodes, way_tags, relations, relation_members, relation_tags). Of > course, that's only the original data without a spatial index and fetching the > data takes some time. Now, I have to use a spatial index and therefore had > to decide between a runtime generated one (e.g. with JTS) and an already > persisted index in the database. The R*Tree index from SQLite/SpatiaLite > seems the better solution to me and I already compiled the SpatiaLite lib for > Android. Also, there are the two helper programs *spatialite_osm_raw* and > *spatialite_osm_map* for importing OSM data into SpatiaLite, but here > comes the confusion. > *spatialite_osm_map* creates a database ment for GIS applications with > tables like 'ln_highway' for linestrings and 'pg_amenity' for polygons, but I > can't use this, because it drops all OSM tags, which one needs for Styled > Maps. *spatialite_osm_raw* creates exactly the same tables that my first > SAX importer does, with only the *nodes* table having OGC geometry data. > So, how to get the LineStrings and Polygons from that? Do I have to create > this data myself after filling the database? Could anyone give me a hint how > to do this? > > Best regards, > Darius > > > > Am 19.02.2013 02:53, schrieb Keith Woodward: > > Hi Darius, > > Your thesis sounds very interesting. I am not a JTS expert but I can > > recommend some forums to you for getting help related to openGL ES and > > android. > > One is java-gaming.org which has an android > > sub-forum: > > http://www.java-gaming.org/boards/java-on-mobile- > devices/69/view.html > > Another is libGDX which is a library that you might consider using or > > procuring ideas from which handles the tricks of openGL > > ES: http://libgdx.badlogicgames.com/ > > Best regards, > > Keith > > > > > Date: Mon, 18 Feb 2013 13:40:22 +0100 > > > From: dar...@rw... > > > To: jts...@li... > > > Subject: [Jts-topo-suite-user] SpatiaLite - JTS - OpenGL ES > > > > > > Hello JTSers, > > > > > > the general task in my diploma thesis is to query and display map > > > data on Android using OpenGL. Therefore, I thought of using SQLite > > > with its R*Tree spatial index together with SpatiaLite and JTS. I > > > need to > > display > > > the geometries via OpenGL. OpenGL needs to have the geometry > > > vertices converted into FloatBuffers wrapping float arrays. And > > > since it is OpenGL ES 2.0 on Android, there is missing the > > > GL_POLYGON mode for rendering polygons, instead I have to triangulate > the geometries. > > > > > > What would probably be a good way to do this? Reading in the > > > SpatiaLite geometry with JTS' WKBReader, then converting them into > float[]? > > > > > > SELECT AsBinary(geometry) FROM ways > > > > > > then > > > > > > Geometry geometry = new WKBReader().read(stmt.column_bytes(0)); > > > > > > > > > JTS has the AWT Shape conversion classes. To my knowledge there is > > > no direct way to use them with OpenGL ES on Android. Do you think > > > this would be a good starting point for me to adjust the code to > > > create the mentioned float arrays/FloatBuffers? > > > > > > By the way, the buffers can be created as FloatBuffers directly or > > > as ByteBuffers first, maybe that's a somehow relevant information > > > since > > the > > > geometry is in a binary format already. > > > So it's possible to do this: > > > > > > ByteBuffer vertexByteBuffer = > > ByteBuffer.allocateDirect(points.length); // points is a byte[] > > > vertexByteBuffer.put(points); > > > FloatBuffer vertexBuffer = > > vertexByteBuffer.asFloatBuffer().asReadOnlyBuffer(); > > > > > > As well as this: > > > > > > ByteBuffer vertexByteBuffer = ByteBuffer.allocateDirect(4 * > > points.length); // points is a float[] > > > FloatBuffer vertexBuffer = vertexByteBuffer.asFloatBuffer(); > > > vertexBuffer.put(points); vertexBuffer = > > > vertexBuffer.asReadOnlyBuffer(); > > > > > > Thanks and best regards, > > > Darius > > > > > > > > ---------------------------------------------------------------------- > > -------- > > > The Go Parallel Website, sponsored by Intel - in partnership with > > Geeknet, > > > is your hub for all things parallel software development, from > > weekly thought > > > leadership blogs to news, videos, case studies, tutorials, tech > > > docs, whitepapers, evaluation guides, and opinion stories. Check out > > > the most recent posts - join the conversation now. > > http://goparallel.sourceforge.net/ > > > _______________________________________________ > > > Jts-topo-suite-user mailing list > > > Jts...@li... > > > https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user > > > > > > ---------------------------------------------------------------------- > > -------- Everyone hates slow websites. So do we. > > Make your web apps faster with AppDynamics Download AppDynamics Lite > > for free today: > > http://p.sf.net/sfu/appdyn_d2d_feb > > > > > > _______________________________________________ > > Jts-topo-suite-user mailing list > > Jts...@li... > > https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user > > -------------- next part -------------- > An HTML attachment was scrubbed... > > ------------------------------ > > ------------------------------------------------------------------------------ > Everyone hates slow websites. So do we. > Make your web apps faster with AppDynamics Download AppDynamics Lite > for free today: > http://p.sf.net/sfu/appdyn_d2d_feb > > ------------------------------ > > _______________________________________________ > Jts-topo-suite-user mailing list > Jts...@li... > https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user > > > End of Jts-topo-suite-user Digest, Vol 38, Issue 6 > ************************************************** |
From: Keith W. <kei...@ho...> - 2013-02-19 01:54:06
|
Hi Darius,Your thesis sounds very interesting. I am not a JTS expert but I can recommend some forums to you for getting help related to openGL ES and android. One is java-gaming.org which has an android sub-forum: http://www.java-gaming.org/boards/java-on-mobile-devices/69/view.htmlAnother is libGDX which is a library that you might consider using or procuring ideas from which handles the tricks of openGL ES: http://libgdx.badlogicgames.com/ Best regards,Keith > Date: Mon, 18 Feb 2013 13:40:22 +0100 > From: dar...@rw... > To: jts...@li... > Subject: [Jts-topo-suite-user] SpatiaLite - JTS - OpenGL ES > > Hello JTSers, > > the general task in my diploma thesis is to query and display map data > on Android using OpenGL. Therefore, I thought of using SQLite with its > R*Tree spatial index together with SpatiaLite and JTS. I need to display > the geometries via OpenGL. OpenGL needs to have the geometry vertices > converted into FloatBuffers wrapping float arrays. And since it is > OpenGL ES 2.0 on Android, there is missing the GL_POLYGON mode for > rendering polygons, instead I have to triangulate the geometries. > > What would probably be a good way to do this? Reading in the SpatiaLite > geometry with JTS' WKBReader, then converting them into float[]? > > SELECT AsBinary(geometry) FROM ways > > then > > Geometry geometry = new WKBReader().read(stmt.column_bytes(0)); > > > JTS has the AWT Shape conversion classes. To my knowledge there is no > direct way to use them with OpenGL ES on Android. Do you think this > would be a good starting point for me to adjust the code to create the > mentioned float arrays/FloatBuffers? > > By the way, the buffers can be created as FloatBuffers directly or as > ByteBuffers first, maybe that's a somehow relevant information since the > geometry is in a binary format already. > So it's possible to do this: > > ByteBuffer vertexByteBuffer = ByteBuffer.allocateDirect(points.length); // points is a byte[] > vertexByteBuffer.put(points); > FloatBuffer vertexBuffer = vertexByteBuffer.asFloatBuffer().asReadOnlyBuffer(); > > As well as this: > > ByteBuffer vertexByteBuffer = ByteBuffer.allocateDirect(4 * points.length); // points is a float[] > FloatBuffer vertexBuffer = vertexByteBuffer.asFloatBuffer(); > vertexBuffer.put(points); > vertexBuffer = vertexBuffer.asReadOnlyBuffer(); > > Thanks and best regards, > Darius > > ------------------------------------------------------------------------------ > The Go Parallel Website, sponsored by Intel - in partnership with Geeknet, > is your hub for all things parallel software development, from weekly thought > leadership blogs to news, videos, case studies, tutorials, tech docs, > whitepapers, evaluation guides, and opinion stories. Check out the most > recent posts - join the conversation now. http://goparallel.sourceforge.net/ > _______________________________________________ > Jts-topo-suite-user mailing list > Jts...@li... > https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user |
From: Darius M. <dar...@rw...> - 2013-02-19 14:18:51
|
Hi Keith, thank you, I will take a look at libGDX, because for now I'm writing the rendering code on my own. What I still don't understand is how to create the geometry column in the database. For the beginning I wrote a basic OpenStreetMap SAX importer some time ago and filled the tables in database (nodes, node_tags, ways, way_nodes, way_tags, relations, relation_members, relation_tags). Of course, that's only the original data without a spatial index and fetching the data takes some time. Now, I have to use a spatial index and therefore had to decide between a runtime generated one (e.g. with JTS) and an already persisted index in the database. The R*Tree index from SQLite/SpatiaLite seems the better solution to me and I already compiled the SpatiaLite lib for Android. Also, there are the two helper programs *spatialite_osm_raw* and *spatialite_osm_map* for importing OSM data into SpatiaLite, but here comes the confusion. *spatialite_osm_map* creates a database ment for GIS applications with tables like 'ln_highway' for linestrings and 'pg_amenity' for polygons, but I can't use this, because it drops all OSM tags, which one needs for Styled Maps. *spatialite_osm_raw* creates exactly the same tables that my first SAX importer does, with only the *nodes* table having OGC geometry data. So, how to get the LineStrings and Polygons from that? Do I have to create this data myself after filling the database? Could anyone give me a hint how to do this? Best regards, Darius Am 19.02.2013 02:53, schrieb Keith Woodward: > Hi Darius, > Your thesis sounds very interesting. I am not a JTS expert but I can > recommend some forums to you for getting help related to openGL ES and > android. > One is java-gaming.org which has an android > sub-forum: http://www.java-gaming.org/boards/java-on-mobile-devices/69/view.html > Another is libGDX which is a library that you might consider using or > procuring ideas from which handles the tricks of openGL > ES: http://libgdx.badlogicgames.com/ > Best regards, > Keith > > > Date: Mon, 18 Feb 2013 13:40:22 +0100 > > From: dar...@rw... > > To: jts...@li... > > Subject: [Jts-topo-suite-user] SpatiaLite - JTS - OpenGL ES > > > > Hello JTSers, > > > > the general task in my diploma thesis is to query and display map data > > on Android using OpenGL. Therefore, I thought of using SQLite with its > > R*Tree spatial index together with SpatiaLite and JTS. I need to > display > > the geometries via OpenGL. OpenGL needs to have the geometry vertices > > converted into FloatBuffers wrapping float arrays. And since it is > > OpenGL ES 2.0 on Android, there is missing the GL_POLYGON mode for > > rendering polygons, instead I have to triangulate the geometries. > > > > What would probably be a good way to do this? Reading in the SpatiaLite > > geometry with JTS' WKBReader, then converting them into float[]? > > > > SELECT AsBinary(geometry) FROM ways > > > > then > > > > Geometry geometry = new WKBReader().read(stmt.column_bytes(0)); > > > > > > JTS has the AWT Shape conversion classes. To my knowledge there is no > > direct way to use them with OpenGL ES on Android. Do you think this > > would be a good starting point for me to adjust the code to create the > > mentioned float arrays/FloatBuffers? > > > > By the way, the buffers can be created as FloatBuffers directly or as > > ByteBuffers first, maybe that's a somehow relevant information since > the > > geometry is in a binary format already. > > So it's possible to do this: > > > > ByteBuffer vertexByteBuffer = > ByteBuffer.allocateDirect(points.length); // points is a byte[] > > vertexByteBuffer.put(points); > > FloatBuffer vertexBuffer = > vertexByteBuffer.asFloatBuffer().asReadOnlyBuffer(); > > > > As well as this: > > > > ByteBuffer vertexByteBuffer = ByteBuffer.allocateDirect(4 * > points.length); // points is a float[] > > FloatBuffer vertexBuffer = vertexByteBuffer.asFloatBuffer(); > > vertexBuffer.put(points); > > vertexBuffer = vertexBuffer.asReadOnlyBuffer(); > > > > Thanks and best regards, > > Darius > > > > > ------------------------------------------------------------------------------ > > The Go Parallel Website, sponsored by Intel - in partnership with > Geeknet, > > is your hub for all things parallel software development, from > weekly thought > > leadership blogs to news, videos, case studies, tutorials, tech docs, > > whitepapers, evaluation guides, and opinion stories. Check out the most > > recent posts - join the conversation now. > http://goparallel.sourceforge.net/ > > _______________________________________________ > > Jts-topo-suite-user mailing list > > Jts...@li... > > https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user > > > ------------------------------------------------------------------------------ > Everyone hates slow websites. So do we. > Make your web apps faster with AppDynamics > Download AppDynamics Lite for free today: > http://p.sf.net/sfu/appdyn_d2d_feb > > > _______________________________________________ > Jts-topo-suite-user mailing list > Jts...@li... > https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user |