Add 1000's Markers to android Googlemap - android

I am developing a GoogleMap based android application.
I need to display 1000's of Markers on the map.
Currently I retrieve the Latitude and Longitude for each marker from an SQLite database loader and add the markers in the public void onLoadFinished(final Loader loader, final Cursor cursor) method.
this approach gives a very bad user experience though, as the application does not respond while i add the Markers.
how can i add 1000's of markers to a googlemap and keep my application responsive?
as i have to add the markers to the map on the main UI thread.

One possible way is to only add Markers when they fall into visible region of the map.
You would actually have to move your calls to addMarker from onLoadFinished to onCameraChange and in onLoadFinished only create a list of data needed to create these Markers. In the simplest form this might be List<MarkerOptions>.
Android Maps Extensions mentioned by Lalit Poptani in the comments above can handle that for you even if you don't want to use clustering. You simply leave your code like it is and only make a call like
googleMap.setClustering(new ClusteringSettings().enabled(false).addMarkersDynamically(true));
after replacing Google Maps Android API v2 with this extensions lib.

You can use Spatial Lite provider with geoserver to provide WMS maps.
In android you can set a tile provider to consuming such tile maps.

Related

How do I add markers to a Mapbox map outside of a Mapbox event?

All the examples I've seen for adding a marker to the map show the marker being added in the "onMapReady" callback or the "onMapClick" callback. I have an app that periodically finds the user's latitude and longitude and I want to add a marker to the map when the lat and lng updates. This happens outside of the previously mentioned callbacks. How would I do that? I need access to the Style object of the map but it's only accesible inside the callbacks.
The reason these callbacks (in particular onMapReady) are used in all the examples is to ensure that the mapboxMap objects's style has been loaded by the time you attempt to modify it - if it isn't there is the potential for some asynchronous weirdness as the map renders.
I would recommend you still include the logic for adding the periodic lat/lon coordinates as markers within the onMapReady callback.
⚠️ Disclaimer: I currently work for Mapbox ⚠️

Is it OK to show google map API without actually showing a map?

I would like to use google map API to get a map canvas to put objects on it, but not showing the map, by using the maptype NONE.
Am I allowed to do that in an Android app using v2 and distribute it?
This is what I want to do:
#Override
public void onMapReady(GoogleMap map) {
map.moveCamera(CameraUpdateFactory.newLatLngZoom(
new LatLng(-18.142, 178.431), 2));
// Other supported types include: MAP_TYPE_NORMAL,
// MAP_TYPE_TERRAIN, MAP_TYPE_HYBRID and MAP_TYPE_SATELLITE
map.setMapType(GoogleMap.MAP_TYPE_NONE);
}
I want to set map.setMapType(GoogleMap.MAP_TYPE_NONE); and then add various markers to the map, including my current position
Added a picture to show what I want to achieve.
As mentioned in Google documentation it's forbidden. More over - From what you are saying it seems that you want use gmaps capabilities to get data and calculations but actually display some thing else. I really don't think it's good idea. However - if the issue is making geo calculations, consider to use 3'rd party open source libs for this. For example http://www.gavaghan.org/blog/free-source-code/geodesy-library-vincentys-formula-java/

Is there a way to determine a user's current map view area?

Is there a way to determine a user's current map view area, whether in Google or Apple Map?
I'm in the process of designing a geolocation app, and want to show the names of locations near the user. I could use distance from user as the parameter, but want to see if there's a way to only show the names in the current map area that's being viewed instead. I've done a decent search but haven't found any method.
Thanks!
There's an object called VisibleRegion in the GoogleMap that gives you this information (Google Maps V2 for Android). You get this from the GoogleMap object with the following code
VisibleRegion region = getMap().getProjection().getVisibleRegion();
I called getMap() to get the GoogleMap object because I was in the context of a MapFragment...not sure what your implementation is.
http://developer.android.com/reference/com/google/android/gms/maps/model/VisibleRegion.html

Quadtree on android maps utils

I'm developing a android application with google maps v2 that draw polygons on the google maps. But now i have to identify a click on a certain polygon and popup a window.
I found this useful library on github
This library has the method containsLocation implemented. This method receives a LatLng (from click on the map) and a List (the polygon). This is fine but if i have 1 million polygon in the map i cant iterate all and test if a certain LatLng belongs to a certain Polygon. I remember that i can use a quadtree to get more performance and this library also implements a quadtree but it uses point. What is the best way of doing this? May i have to reimplement this quadtree for a quadtree of LatLng ? Or in each click i have to convert this click to a point and search on a point quadtree?
Regards
you cannot use a Point- Quadtree, you need an Object-Quadtree for your Polygons. An object quadree uses the bounding box of the polygon or any object for adding into the tree.
you dont need to consider latLong, use x,y with x= longitude, and y = Latitude.
Consider reading Hanan Sammet: Foundations of multidimensional data structures.
I think you need to implement a quadtree that stores the polygons, then query the tree to see which polygon (if any) contains the LatLng. If you search around I'm sure you can find a decent implementation.

Android maps V2 Driving instructions in textview

Im developing a map app in which gps detects my current location and places a marker.Using spinner I get nearby places based on category.What I need is,When I longclick the marker of spinner,Using intent it should show the step by Step navigation instructions in a new page also it should draw route ie polyline from my location to the touched location.
I used http://wptrafficanalyzer.in/blog/showing-nearby-places-and-place-details-using-google-places-api-and-google-maps-android-api-v2/ code for abvove purpose.
Please Help..Thanks in advance.
You can take a look at this blog post I wrote on drawing the navigation on the map:
Google Maps V2 for Android: Draw Driving Direction on Map
For adding the Step by Step navigation I guess you would need to change the parsing method a bit in order to get this info from the JSON file you receive.

Categories

Resources