Loading google maps outside of display area - android

I'm using google map in my android application to show the current location of the user. I'm using "animateCamera" api to move the map when ever user location get changed.
Issue:
When the user moves in a speed of more than 30km/hour or if the internet connection is poor, while moving the map new area is not getting loaded immediately, only grey tile is getting displayed.
Please help me to achieve any of the solution below.
How to load the nearby area of the map while displaying current location(Right now the map fragment gets loaded only to the display area of mobile).
(or)
Download the offline map for 1 km radius of current location.
Thanks in Advance.

You can use Tile Overlays with Url for tile http://mt1.google.com/vt/lyrs=[MAP_KIND]&x=[TILE_X]&y=[TILE_Y]&z=[ZOOM_LEVEL] e.g.:
http://mt1.google.com/vt/lyrs=m&x=1465&y=949&z=11
for getting map tiles and create the cache. But read carefully p. 10.5.d (and others) of Google Maps APIs Terms of Service:
b) No caching or storage. You will not pre-fetch, cache, index, or
store any Content to be used outside the Service, except that you may
store limited amounts of Content solely for the purpose of improving
the performance of your Maps API Implementation due to network latency
(and not for the purpose of preventing Google from accurately tracking
usage), and only if such storage:
i. is temporary (and in no event more than 30 calendar days);
ii. is secure;
iii. does not manipulate or aggregate any part of the Content or Service; and
iv. does not modify attribution in any way.

Related

how to save map tile by lat long bounds for offline use?

I have a routing application that I want to put offline map of cities of my country for download, so that users of their city will download that map and use it as a offline.
The process of storing the map is as follows to allow the user to select a bound (the northest latlng and the southest latlng) and the zoom value and download favorite map from Google.
Like is said in this post:
You will need to provide the map area download to app users, save it somewhere in the app folder and then use the map offline. In another case, it would work only if they had a saved area already.
I guess that in your case, as the user would need internet connection it can use the API directly, it is just a pré-requirement.

Get total "Areas/Zones" in which I am currently in, based on Current Location

Let us suppose we have three hotels:
Hotel A (popular in 1 km radius), Hotel B (popular in 2 km radius) and Hotel C (popular in 4 km radius). A car enters and is at some position. These Hotels (or any other place) is added by us and is custom.
Problem is I want to find the hotels which have popularity/influence at my current location.
And I want it to do totally with the help of Google Maps. Is it feasible ? on Android (optional)? Please ELI5.
Google Maps API has a function called computeDistanceBetween. It "returns the distance, in meters, between two latitude/longitude coordinates". Circle has the Center and Radius properties. So you need to calculate the distance between the center of a circle and you current location. If it's less than the radius of the circle, than it means your current location is within the circle.
Simplifying is key
Although I understand your objective (get a list of all hotels near you) I believe your explanation threw many people off guard. You don't need to triangulate positions and calculate radius of circles - not with Google Maps APIs and Services.
All you need to know is if you want a solution for front-end, back-end, or mobile
Google Maps Places API Web Service (back-end)
The Places API has a very useful feature called "Places Nearby". To quote the documentation of this feature:
A Nearby Search lets you search for places within a specified area.
You can refine your search request by supplying keywords or specifying
the type of place you are searching for.
Which looks exactly like what you need, right ?
To make a request from a server to the Places API Web Service looking for nearby places, you can do the following:
https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670522,151.1957362&radius=500&type=restaurant&name=cruise&key=YOUR_API_KEY
Do remember to change the key=YOUR_API_KEY to a valid key field. The example showed will look for restaurants in a radius of 500 meters around the location of -33.8670522,151.1957362.
There are a lot of parameters to this and you can read more about this in the following documentation
https://developers.google.com/places/web-service/search
Google Maps JavaScript API with Places Library (front-end)
If you however don't have a central server or service to make requests for you, making the clients send the requests directly is also an option.
In this case, there is the JavaScript API. The JavaScript API is a client-side friendly API that re-uses some of the Web Service's features.
In this case, you can use the JavaScript API in conjunction with the Places Library for it. According to the documentation, this API allows you to do "Nearby Search Requests":
A Nearby Search lets you search for places within a specified area by
keyword or type
An example of such a request can be seen in a live example in the following link https://developers.google.com/maps/documentation/javascript/examples/place-search
You can read more about the parameters and usage of this API and this library in the following documentation https://developers.google.com/maps/documentation/javascript/places#place_search_requests
Google Maps Android API (mobile)
From the picture you added, I assume your app will be to "use on the go" (perhaps a mobile app), or something similar.
In this scenario, using a web-server or a website could be cumbersome, as by the time you have a response from it, the car is already in another position !
To aid you in this, there is also the Android API. To use it you need to:
Download and Install Android Studio
Add Google Play Services Package (contains APIs you will use)
You can read more about this process here https://developers.google.com/maps/documentation/android-api/start
As for code and examples, I strongly suggest you check out this GitHub repository of samples
https://github.com/googlemaps/android-samples
Our Hotels may not show up on Google Maps
Unless your DeLorean takes you back to the latter half of the 19th century, or you are stuck in an island with hundreds of Meerkats, poisonous pools and a tiger wondering if he should eat you or not, Google Maps will pretty much always show you some hotels where you can spend the night.
PS: kudos++ if someone gets my references :P
Adding Hotels and Places to Google Maps APIs and Services
If this is still not enough however, there is still a way you can fix it. You can add Hotels addresses and Places to Google Maps by using one for the two following methods:
Send Feedback
Use Maps Maker
Send Feedback
The "Send Feedback" feature allows you to send feedback to Google's data teams for review. Once approved, the data is added to Google's database and will be available to all Google's customers. You can do this by following the steps described here https://support.google.com/maps/answer/3094045?co=GENIE.Platform%3DDesktop&hl=en
Please do note however that the review process for your feedback will take some time, so don't expect anything instantaneous !
Use Maps Maker
Alternatively, you can use Maps Maker. This tool allows you to do edits and add information to our Services in a more streamlined manner.
At first, your edits and suggestions will still be reviewed, and it will usually take less than two weeks to get something approved.
However, with time, as more and more of you suggestiogns are approved, you gain reputation, and when you have a lot of reputation, your suggestions will be pretty much automatically added.
Before using it however, make sure you have a look at the list of supported countries.
Also, if language is important, you may want to consider it as well, by checking the list of supported languages.
I really don't want to add anything to Google Maps
Sometimes the whole business is data itself, so giving it out freely is not an option.
In these cases, you will have you own database, which your services will have to check.
In cases like this a custom solution for your system is needed, but in order to suggest a few more ideas, more information is needed.
Hope it helps !
Your approach should use fast approximate calculations without relying on apis, and then api usage can be used to enhance user experience.
You know the coordinates of the car.
You know the coordinates of each of the hotels.
Assign a popularity weight to each hotel based on your criteria or data you have. e.g a hotel having more user reviews or transactions or bookings will have higher influence, or if you want to personalize, a hotel which suits the loggedin user's budget preferences ( based on past data or settings ) will have higher influence. Lets call this popularity value p1,p2..p3 etc.
Find all hotels that lie within a threshold range, say 5kms within current position of the car. This can be done using a geospatial query in any major storage database ( for example if your hotel points are stored in MySQL, or mongodb ), or if you are using a hotel data api, get the nearby hotels,or all hotels of that city, and prune them based on distance from car's current location.
For linear distance between the car C, and the hotels H1, H2... use Haversine formula , this will give you distance between the Car and any hotel along the Earths curvature. ( Actual road distance might vary, as roads are directions aren't straight and involve turns etc). But this will give you a fast approximation of distances D1 between C & H1, D2 between C & H2 etc...
Now decay the popularity score P1...PN of each hotel based on distance between the Car C and the hotel H. For example if hotel H1 has popularity score P1= 90, and hotel H2 has popularity score P2=90, but C <---> H1 distance is 10kms, and C<--->H2 distance is 2kms,
then H2 will have more influence on the current location compared to H1.
A simple formula can be LocationInfluence = PopularityScore/ log(Distance), you can optimize this based on your use case.
Now for the most influential hotels H1,H2,H3... use DistanceMatrix api to find actual driving distance, you can also use google maps directions api for Android or Javascript to show driving directions to the user, from location till the hotel.

What's the best way to update a GoogleMap map with markers that come from the server?

I'm currntly working on a project that uses Google Maps API for Android. In my MapActivity, I have to distribute all the marker that are in the polygon for the current visible area. My problem is, to get the coordinates from the server, I run a new thread with AsyncTask everytime the user moves the camera, but as it runs off the UI thread, when I get the result from AsyncTask using MyTask.execute(params).get();, my map gets really lagged and slow and eventually crashes my app. So, what's the best way to do what I want without crashing the app?
Thanks in advance!
The Too Many Markers! article would greatly help you with your concern. You can check out the Viewport Marker Management section of the article. Basically its just showing the Markers that are in the user's current viewable area. As the user pans/zooms it subsequent request to the server to retrieve new markers, other markers that are not in view are removed.

Tracking a users position and showing it on the map for all other users - Android

I was searching for hours, but I can't find an answer on this topic. I have managed to set up an application which shows my position, tracks it and updates my marker whenever my position changes.
I would like to do the same for all other users (for finding friends), but I don't understand the right way this has to be done.
Should I upload each users Lat and Lng to a server, then downloading it while placing markers on the map? This way I may not get fast location updates, or does the Google Map Api contain some tools to achieve this in the right way?
I would really appreciate some help.
E.
UPDATE
After doing some more resources, I realised that an online database is the way to go for this task.
Steps I made to read save and retrieve users positions:
Create an online (mysql) database
in my android project I have implemented: GooglePlayServicesClient.ConnectionCallbacks,GooglePlayServicesClient.OnConnectionFailedListener. But most important is LocationListener - to receive the current location coordinates each time the user changes position.
I then uploaded the coordinates using the HttpUrlConnection via POST method, and adding them to the database using php.
back in the app I create a new instance of the GoogleMap class, and the same way as I have uploaded I download all other users coordinates via HttpUrlConnection, iterate over the JSON response and placing markers on the map in the same time.
Everything works like it should, there may be other ways but I think this is the most straight forward solution. Hope this small guide will help.

Android google map - best practice for updating data

In my application I integrated google map. When the map is opened its getting my current location and getting the peoples locations around me from remote server (with a radius of 5000m). Now what if the user moves the map like left, right, up whatever... I want to take the new locations from server which suits to the map at that moment. But I don't know the best practice for that. I can not possible send a query of each single touch (move) right?
if you need to show makers outside of your radius then you will have to use the maps OnCameraChangeListener and when that fires is when the map has stopped moving so then you know it is time to get new data

Categories

Resources