GeoServer and Android – Creating a Native App

androidgeoservermobile

I am involved in a bigger university mobile application project and my task is to design and develop a mobile module regarding map and location-based services in a native Android application.

Shortly my part of app should display different kind of info on a georeferenced map (Google Map or Openstreetmap) based on Oracle data:

  • Shortest path to reach a certain event from a certain location
  • Different layers with domain information to the event (like parking places around it, bus lines ecc. )
  • GetFeatureInfo option

I am new in this kind of topic and I would like to ask you an architectural question regarding it.

I thought about using Geoserver to define layers, styles, datasets etc., and WMS protocol to generate the map over a website using HTML 5, OpenLayers, and jQuery-mobile.

But how can I accomplish this in a native android app?

Building a webpage where I display the map using HTML 5, OpenLayers and jQuery-mobile to interact with Geoserver and then using the Webviews in Android to display the webpage in my app? Would be this a possible solution? Possible drawbacks?

What are the alternatives using Geoserver?

Best Answer

You may want to check out our university (University of South Florida)'s "OpenTripPlanner for Android" open-source project:

https://github.com/CUTR-at-USF/OpenTripPlanner-for-Android/wiki

This is a native Android app that uses a REST API to access the main server-side open-source OpenTripPlanner project (created primarly by TriMet in Portland and OpenPlans), which does the actual multimodal (bike/transit/walk) trip planning:

https://github.com/openplans/OpenTripPlanner/wiki

The planned trip is then passed back to the Android app and displayed on the screen.

This is a slightly different server-side approach that's entirely implemented in Java and runs in a Java application server such as Tomcat, instead of utilizing a spatial database server such as Oracle spatial.

There are two steps to getting a running server:

  1. Use the OTP GraphBuilder application to build a graph object (a file) from several data sources (inclduing OpenStreetMap) that contains a serialized set of Java objects that represent the graph topology and rules for traversing the graph.
  2. Start the Tomcat server, which loads the graph object from disk into memory, deserializes the graph, and is then ready to serve trip planning requests.

There are performance/scalability benefits of having the entire graph in memory for routing, instead of having to hit a hard disk where the Oracle database is presumably located. I don't know if Oracle is a hard requirement for your project, but if not you might want to consider basing your application off of OpenTripPlanner (OTP).

The OTP Android app is available on Google Play:

https://play.google.com/store/apps/details?id=edu.usf.cutr.opentripplanner.android

And here's our OpenTripPlanner server instance running in Tampa, FL, that it sends the REST requests to (this is the normal web browser view):

http://opentripplanner.usf.edu/

Here's a sample REST API request that would be sent from the app to the server (note the "/opentripplanner-api-webapp/" addition to the below URL to give you the REST API instead of the normal web interface). If you open this in your browser, you should see the XML-encoded trip planned from the lat/long "fromPlace" to the lat/long "toPlace" encoded in the URL:

http://opentripplanner.usf.edu/opentripplanner-api-webapp/ws/plan?fromPlace=28.066788,-82.410104&toPlace=28.059324,-82.415394&mode=TRANSIT,WALK&min=QUICK&maxWalkDistance=840&time=2:49%20pm&date=10/24/2012&arr=Depart&itinID=1&wheelchair=false

Here's the defintion of the OTP REST API that will tell you what each XML element in the response means:

http://www.opentripplanner.org/apidoc/