Like Nokia's OVI maps can be used offline, there must be some way of caching Google map tiles too. Any hints?
If you are trying to cache the tiles that Google serves, that may be a violation of Google's Terms of Service (unless, under certain circumstances, if you've purchased their enterprise Maps API Premier). That's why gmapcatcher has it crossed off their list. See http://code.google.com/p/gmapcatcher/issues/detail?id=210.
At the gmapcatcher URL above, you will also find a shell script that can download tiles (or so its author says).
There are also other projects that try to make Google Maps available offline:
http://code.google.com/p/ogmaps/
http://code.google.com/p/gmapoffline/
Lastly, if Google Earth can meet your needs, then you can use that. Offline usage of Google Earth requires a Google Earth Enterprise license according to http://www.google.com/permissions/geoguidelines.html.
Note that the preceding page also says: "You may not scrape or otherwise export Content from Google Maps or Earth or save it for offline use." So if you try to cache tiles, that will almost certainly be considered (by Google, anyway) a violation of the Terms of Service.
Unfortunately, I found this link which appears to indicate that we cannot cache these locally, therefore making this question moot.
http://support.google.com/enterprise/doc/gme/terms/maps_purchase_agreement.html
4.4 Cache Restrictions. Customer may not pre-fetch, retrieve, cache, index, or store any Content, or portion of the Services with the exception being Customer may store limited amounts of Content solely to improve the performance of the Customer Implementation due to network latency, and only if Customer does so temporarily, securely, and in a manner that (a) does not permit use of the Content outside of the Services; (b) is session-based only (once the browser is closed, any additional storage is prohibited); (c) does not manipulate or aggregate any Content or portion of the Services; (d) does not prevent Google from accurately tracking Page Views; and (e) does not modify or adjust attribution in any way.
So it appears we cannot use Google map tiles offline, legally.
update:
I found the terms of use from Google Map:
Section 10.5
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: is temporary (and in no event more
than 30 calendar days); is secure; does not manipulate or aggregate
any part of the Content or Service; and does not modify attribution in
any way.
It means we can cache for limited time actually
On http://www.google.com/earth/media/licensing.html there is a "Mobile" section containing :
Similar to our online terms, if you use our APIs or a mobile device’s native Google Maps implementation (such as on an Android-powered phone or iPhone), no special permission is required, but you must always keep the Google name visible. Offline caching of our content is never allowed.
You can use Open Street Map : you will find dozens of different layers and map types, and this is absolutely free. You can download all the map tiles you want. And of course, as anyone can enhance the map, it displays more information than Google's maps.
If you need help, you can ask the community which is also very active.
On Android platforms, Oruxmaps (http://www.oruxmaps.com) does a great job at caching all WMS sources. It is available in the play store.
I use it daily in remote areas without any connectivity, works like a charm.
Related
Apparently, using Google Mapping natively in Android (MapView with an API key etc.) doesn't work for users in China. However, recently maps.google.cn has become unblocked (Q1 2018: Websites blocked in mainland China)
Does anyone know of a way to adapt a native Android App to use maps.google.cn if the user is in China?
Does Google provide an alternative API key for this map server? If so, I haven't found it...
I've considered, on Locale detection, swapping out my MapView with a WebView showing maps.google.cn, but it seems a lot of hassle to get the same functionality and marker placement/selection etc. with JavaScript.
I've considered Baidu and Gaode, which provide mapping for China, but the API key registration isn't clear (or in a language I understand), seems to require a local phone number which I don't have, and I'm wary of signing up for stuff I can't read clearly. There are also coordinate conversion overheads - all in all, a bit of a pain.
I just saw this link
https://googleblog.blogspot.com/2015/11/navigate-and-search-real-world-online.html
and was wondering if there is a way with using this downloaded map in my own mapping application.
Like if I go to Google Maps, download the area, and then in my own app upload that area and use it as offline use.
Has anyone been able to do this or is Google ever going to allow this?
Is it possible?
Yes,it is possible, there are different ways to do it, here you can find one:
* TileProvider using local tiles
The problem is that
Google do not allow it.
On their terms and permissions about google maps API (http://www.google.com/permissions/geoguidelines.html) on "Using maps on the web or in applications" they mention:
"When using the Google Maps API, certain restrictions may apply. Google continually updates the imagery within Maps; thus, caching may result in stale or even impermissible imagery. You may also not mass download or use bulk feeds of any Content, including but not limited to extracting numerical latitude or longitude coordinates, geocoding, text-based directions, imagery, visible map data, or Places data (including business listings) for use in other applications."
On the hand, there are other maps providers that allow this practice. Some of them:
-Open street map:
-OSMDroid
-ESRI/Arcgis (arcgis is based on ESRI's cloud services)
is Google ever going to allow this?
Google maps introduced last month (November 2015) the offline mode, does not only download the map, but also the different locations (images, tiles, etc) within. Even if downloading just the maps is possible since 2012, maybe the introduction of offline features can change their perspective over their offline assets terms, but until they do not change their permissions agreement, it is just speculation.
I am currently developing an Android app which will show online maps relating to point of interests nearby the current location of end-users. I am using osmdroid, osmdroidbonuspack and MAPNIK as tile provider.
My main concern is the tiles providers' usage policy as I would like to avoid the "forbidden" responses when users start using the app. I don't expect to have too many users but just in case.
Checking the OSM (MAPNIK) usage policy, it says that it is not allow to use the maps in an app that is distributed without prior permission. I asked for that permission but in case I did not get it, I was thinking to use MAPQUEST maps so I registered in mapquest website to get a private key to be used in the app. The problem is that I don't see any way to add the MAPQUEST KEY when using osmdroid.
Summarising I have two questions:
What is the best tile provider in terms of usage policy to publish an android app?
In case to select MAPQUEST, how can I add a private key? Why does it not required to add a MAPQUEST key when using MAPQUESTOSM? Is completely open free?
Thank you very much,
Regards,
Since you're talking about OSM, I assume you are referring to MapQuest Open (OSM-based), not standard MapQuest (proprietary data).
MapQuest Open doesn't require a dev key for tile download. You just specify the base URL for MapQuest and you're ready to go. Details can be found on the OSM Wiki.
MapQuest has asked to be notified by devs who intend to deploy anything that might request larger volumes of tiles. For an app, this obviously depends on the user base. Back when I built MapQuest tile support into my own app, I notified them and asked if they needed anything else for me, and I was simply told to go ahead – no further steps required.
The tile usage policy wiki page already lists several alternative OSM tile providers. The best one depends on your specific requirements.
We have bulk uploaded our client's locations, and they are in the process of being verified by Google. Once that is done, we would like to use the data in our client's iOS and Android apps, as part of a Store Locator feature.
i.e. we want to lookup the exact verified business locations and associated details, by an id, as opposed to text search, which could potentially hit some other businesses, or previous listings of our client's locations (which are not the official and verified versions).
I have tried to look at both the Google Places API as well as Google Maps API, but I cannot find any mention of a group id or anything of this sort. I might be looking completely in the wrong direction, so thought it would be worth while trying SO.
So, to rephrase the question, is there an API endpoint to fetch a bulk uploaded list of locations (some 150 of them), to consume in an iOS and an Android native application. No code examples needed, just looking for a pointer to the correct Google product / API for this, if one exists.
PS> I am not familiar with Google Maps API for Work. We were hoping for a free route, but if that sorts out the use case, it's also acceptable.
Thanks!
I don't believe the Places API has the concept of a group ID that represents multiple place IDs. I think you will have to simply collect the individual Place IDs of your uploaded locations.
I hope this is not a naive question but is there any way to make an android application that uses a map without the use of google or the internet in general(as in not a google api)?Can a map be download from somewhere and merged offline in the code?I'm thinking in terms like having a street map,but not in your hand in this case.Thank you
Using google maps:
The google map application supports pre-caching, which does exactly what you want.
Now the bad news: it's not only impossible to do through the API (yet), it would also break the terms of service.
More details here:
Downloading/Caching Google Maps for Offline Use
TOS section 8:
License Restrictions. Except as expressly permitted under the Terms, or unless you have received prior written authorization from Google (or, as applicable, from the provider of particular Content), the license granted to you in Section 7 is conditioned on your adherence to all of the restrictions in this Section 8. Under this Section 8, you must not (nor may you permit anyone else to):
...
8.2. copy, translate, modify, create a derivative work of, pre-fetch, cache, or publicly display any Content or any part thereof.
...
(Emphasis added by me)
Using other map services:
No idea...
Have a look at http://code.google.com/p/mapsforge/
It uses openstreetmap instead of googlemaps and allows for offline maps. The API is almost identical to the googlemaps api. If you're familiar with googlemaps api it should be very easy to switch..
You might want to try OpenStreetMap instead of GoogleMaps. While you're not going to have as rich of a dataset, it's FOSS you can still do a whole lot with it.
The OSM Android page is here.
I haven't dug too much into offline cacheing for it, but as you can see, a lot of apps have already been built using their kit.
You may have a look into OpenStreetMap and generate your own tiles using Mapnik.
For mobile use I will suggest look into osmosis - crop different sections (bounding boxes) - to make smaller size packages. Here it's explained well how it can be done.