1

I want to mark historical 'points of interest' across the globe on a mapping solution such as Google Maps (or something else).

I'll be getting an Android app created in which I want to be able to provide the users the ability to search for and locate the nearest such 'point of interests' around their current location.

  1. Should I be using Google Maps or something else like OSM?

  2. How should I be marking them on Google or elsewhere?

    (a) I want to be able to mark these places with pictures as well and

    (b) I want to store them at my end in a generic format as well, just in case!

  3. How should the Android app search for the closest such points?

  4. As I understand, Google Maps can show its own map overlaid with my data when I provide a KML file (http://code.google.com/apis/kml/documentation/kmlSearch.html). Can that be shown "within an Android app"? (ie, I know it can be shown on a webpage, but can it be shown in a native app?)

Steve
  • 1,857
  • 5
  • 32
  • 45
  • Depending on the popularity of the app, Google Maps may not be a good choice as they limit the amount of times your API key can generate maps. – MrZander Dec 07 '11 at 19:22

3 Answers3

2
  1. I will suggest google maps. Reason is google maps is updated often and part of the maps from osm is not as latest.

  2. Probably store this marking in your own datastore called point_of_interest. The info window is also a special kind of overlay for displaying content (usually text or images) within a popup balloon on top of a map at a given location. read here for more information.

  3. your android app should detect current user location and send the information such as latitude and longitude to your server. Hence the query to search for point of interest is done by the server and process the data and send back to user android app. For example, the query would be something like select * from point_of_interest where distance < 10km limit 5;

  4. yes, read this link

Jasonw
  • 5,054
  • 7
  • 43
  • 48
0

Ok, for an app I built for a customer, we had a similar requirement. Basically, I needed to display the locations of interest withing 200miles of my current location. The way this worked for me was that I took my current location and made a Web Services call to their servers where they did the Geographic calculation and returned a list of results to me.

I would have the Android app just use the MapView and then user Overlays to display icons on the map. The problem with displaying the items using kml is that they will not be clickable by the user so their will be no interactivity. If you do choose to do it with kml, there is some example code located in this project: https://github.com/sunlightlabs/congress

Kaediil
  • 5,465
  • 2
  • 21
  • 20
  • Hi - sorry for the delayed reply - can you help me understand how Overlays would work / look like please? – Steve Dec 08 '11 at 10:02
0
  1. I prefer google maps. Google maps SDK looks good and the sdk performs well. I don't know a SDK that has something like a OSMMapView that offers the same performance and features like google maps does (please correct me). But OSM can be as visual appealing as google maps. Cloudmade has tons of different styles for OSM data.

  2. If you want to display maps by google, you have to use the Maps Library that ships with the Android SDK.

    1. You can display any Views on top of the google maps. I.e. use mapviewballoons on github.

    2. If you have lots of POIs that you want to display you should definitely persist you data with a spatial index. So that nearest neighbour searches are fast. One solution would be to use sqlite R*Trees. I did not use them on android and they work not out of the box you have to build sqlite-android yourself (see this question). Or use Perst, or ...

      If you have few data, that fits into the phone memory you can use a Quadtree. This would be even faster than the db when searching it. You will find lots of examples when you google it. You could store the data as xml, json or even serialize the whole quadtree with the java Serializable interface.

  3. There are tons of possibillities this question is way too broad. Some random ideas:

    1. Create a server that responds to bounding box searches over HTTP and store the POIs in a Quadtree.

    2. Deliver all your POIs with the app. As database, xml, json or a serialized Quadtree.

  4. I don't have experience with kml on Android.

Community
  • 1
  • 1
thaussma
  • 9,756
  • 5
  • 44
  • 46