I'm currently developing an app for Android which uses google map service. Because users will be able to see thousands of markers I would like to load only those which are currently within the map bounds (i.e. when user look at specific map tile). I know how to do it with javascript/html. However, Android doesn't seem to provide any similar methods such as containsLatLng(latlng) or getBounds (I only found getLatitudeSpan and getLongitudeSpan, but don't know how can I use them in order to achieve the similar effect).
Can anyone give me some hint on that? I would greatly appreciate any help or at least pointing myself in the right direction.
Where are those place-marks coming from? If they are coming from a web service, check if the web service supports spatial queries. If its a basic point in extent (rectangular envelope) you could do something like this:
Note: (xmin, ymin -> xmax, ymax) are the bounds of your rectangle (extent).
This is something very simple. You can even use the Google Maps Data API to store your place-marks and that has a mechanism to execute spatial queries.
If your data is on Google App Engine, then you could use GeoPt based queries or you could roll your own spatial index. Check out http://code.google.com/p/geomodel/
I'm doing something similar to yourself but I'm using a server. The reason I'm doing so is for computational reasons. When the application first starts a HTTP request is sent to a php script which contains a MySQL query. The php script recieves the users current lat / long and gives back in a JSON all points within 1KM of the current location. The application then parses that JSON into a local MySQL database and does stuff with it.
To send the HTTP request and parse the JSON into a database I'm doing the following..
For this to work all you need is a short php file which takes the Lat / lng Something like...
That'll take in the values and print results in JSON.
//edit: To get the lat / lng in the first place I'm using the GPS.
Hope this helps.
You could use getMapCenter and just add or subtract the latitude span or longitude span (divided by 2 of course) to find the bounds.
The answer would depend on where your markers are coming from. Are they stored within the Android device itself or are they coming from a web server? Either way, if you need to represent thousands of locations symultaneously you might need to implement some form of clustering, which can be done on the client or on the server, if markers come from the web.
See, for example this server side clusterer (2 different versions):
http://maps.forum.nu/server_side_clusterer
http://maps.forum.nu/server_side_clusterer/index2.php
or a client side clusterer:
http://gmaps-utility-library.googlecode.com/svn/trunk/markerclusterer/1.0/
Another alternative would be to use custom tiles, (like Google does), but depending on your exact needs it may be overkill.