I am currently working on sending a google map image in an html email .
Currently I am using static-maps-api to achieve my task . i will call the static maps api and set the image URL as src
In an image tag .
<img src=":.png|13.82,100.54&markers=icon:.png|13.80,100.54&markers=icon:.png|13.81,100.52&markers=icon:.png|13.79,100.54&markers=icon:.png|13.79,100.53&path=weight:3|color:blue|enc:cfjsAqvsdRnAMd@MZpDLpATpB?HGLMX?VV`CTjBr@L|ATlDf@hBXGl@CPTDtAR~Et@jF`AnLbBvKdB~@JbAR`BTdDd@pDj@l@H`Cb@vALFOJIr@yCxAgHPYTOREV?N@ZHrIxD|HjD~CxAxAn@j@XHDZy@hAoCdCiG~B{Gj@gBXeALWNU@[A[OWi@m@_@_@i@w@O[o@SSKK?}A]sBy@wBeAvBdArBx@|A\J?JOIsCJgC?[Io@KQ^Nn@TLDUfDC`AFp@RfAj@dAl@p@n@n@DHDN?TC`@IFW^MVYdAKZMb@uBdGaDfIiAnC[x@B@RHpCnAnAh@jChAnVrK|@`@Uh@iChG{D~J}B~Fe@tAq@fCcBfG_ApDMd@AXO`@Q^GCu@S{AAyIByEAaABc@@}A@kACeDImKWcKSmAGgAEoCCqECI?LlCH~DI_EMmCH?|@BdA?lA?nCBfADlAFrDHnEH|ELtIRjAB|AAb@A`ACxE@xICzA@l@Oh@a@p@}BhDoMd@yA~AcE`AiCtDsJhCeGHSHs@b@_Ej@cGbAuJ\mC|@sGb@gENoBF]XkAZuBX}CLoA@CbAJbDXl@Fm@GcDYcAKABMnAOzAI`AKr@_@pBQx@OnBUdCYbCk@tDCR~@VTL~@t@xBz@|GrB`I`CYnA_BpH{A`H&key=MY_API_KEY=400x400" >
before calling the static maps api , i will call the directions-api with the lat long and get the polyline , with polyline I get from the call directions API i will call the static maps API.
My Problem Is
When the number of way points increase ( more than 5 normally ) the polyline bee very large and the URL will bee long , if it is larger than 2048 characters , i cannot view my map . google does not identify it as a valid URL. so it is obvious .
My Questions Are
- Is there anyway to reduce the size of the ploy line ?
- Is there anyway to call a Google API and get the image and save it in my server.
- If I can do the second point, is it illegal to save google maps in the my server, instead of call google server to get the image every time I want.
- Is there any other ways I can achieve my task.
I am stuck in this problem for more than 2 weeks now. I almost tried everything. please help me to solve this issue .
Thank you in advance.
I am currently working on sending a google map image in an html email .
Currently I am using static-maps-api to achieve my task . i will call the static maps api and set the image URL as src
In an image tag .
<img src="https://maps.googleapis./maps/api/staticmap?markers=icon:http://mailadapterdev.vanapi./static/start.png|13.82,100.54&markers=icon:http://mailadapterdev.vanapi./static/waypt1.png|13.80,100.54&markers=icon:http://mailadapterdev.vanapi./static/waypt2.png|13.81,100.52&markers=icon:http://mailadapterdev.vanapi./static/waypt3.png|13.79,100.54&markers=icon:http://mailadapterdev.vanapi./static/dest.png|13.79,100.53&path=weight:3|color:blue|enc:cfjsAqvsdRnAMd@MZpDLpATpB?HGLMX?VV`CTjBr@L|ATlDf@hBXGl@CPTDtAR~Et@jF`AnLbBvKdB~@JbAR`BTdDd@pDj@l@H`Cb@vALFOJIr@yCxAgHPYTOREV?N@ZHrIxD|HjD~CxAxAn@j@XHDZy@hAoCdCiG~B{Gj@gBXeALWNU@[A[OWi@m@_@_@i@w@O[o@SSKK?}A]sBy@wBeAvBdArBx@|A\J?JOIsCJgC?[Io@KQ^Nn@TLDUfDC`AFp@RfAj@dAl@p@n@n@DHDN?TC`@IFW^MVYdAKZMb@uBdGaDfIiAnC[x@B@RHpCnAnAh@jChAnVrK|@`@Uh@iChG{D~J}B~Fe@tAq@fCcBfG_ApDMd@AXO`@Q^GCu@S{AAyIByEAaABc@@}A@kACeDImKWcKSmAGgAEoCCqECI?LlCH~DI_EMmCH?|@BdA?lA?nCBfADlAFrDHnEH|ELtIRjAB|AAb@A`ACxE@xICzA@l@Oh@a@p@}BhDoMd@yA~AcE`AiCtDsJhCeGHSHs@b@_Ej@cGbAuJ\mC|@sGb@gENoBF]XkAZuBX}CLoA@CbAJbDXl@Fm@GcDYcAKABMnAOzAI`AKr@_@pBQx@OnBUdCYbCk@tDCR~@VTL~@t@xBz@|GrB`I`CYnA_BpH{A`H&key=MY_API_KEY=400x400" >
before calling the static maps api , i will call the directions-api with the lat long and get the polyline , with polyline I get from the call directions API i will call the static maps API.
My Problem Is
When the number of way points increase ( more than 5 normally ) the polyline bee very large and the URL will bee long , if it is larger than 2048 characters , i cannot view my map . google does not identify it as a valid URL. so it is obvious .
My Questions Are
- Is there anyway to reduce the size of the ploy line ?
- Is there anyway to call a Google API and get the image and save it in my server.
- If I can do the second point, is it illegal to save google maps in the my server, instead of call google server to get the image every time I want.
- Is there any other ways I can achieve my task.
I am stuck in this problem for more than 2 weeks now. I almost tried everything. please help me to solve this issue .
Thank you in advance.
Share Improve this question edited Apr 1, 2016 at 2:40 soccer7 4,0253 gold badges32 silver badges53 bronze badges asked Apr 1, 2016 at 2:25 Kanishka PanamaldeniyaKanishka Panamaldeniya 17.6k31 gold badges127 silver badges195 bronze badges4 Answers
Reset to default 4I will answer my own question - only for part 1 ,
A way to reduce the size of the polyline is to use polyline encoding. To see how it works you can use this interactive sample
For node.js I used simplify-path and polyline modules to implement this.
STEPS
- cal the Directions API with your lat long data and get the overview polyline
- decode the ploy line using
polyline
module - simplify the path using
simplify-path
module. - finally encode the details you got from 3 rd step using encode in
polyline
module
Example
var simplify_path = require("simplify-path");
var polyline = require("polyline");
var poly_line = "overview polyline from directions API";
var path = polyline.decode(poly_line);
var tolerance = 10;
path = simplify_path(path, tolerance)
var new_polyline = polyline.encode(path);
console.log("old_plyline "+JSON.stringify(poly_line));
console.log("new_polyline "+JSON.stringify(new_polyline));
So you will get a simplified relatively short ploy line .
Seems pretty simple :D
I will answer you inline:
- Is there anyway to reduce the size of the poly line ?
Yes, Google uses encoded polylines, and here you can find the process how they are created. You can find also an Interactive Polyline Encoder Utility, and you could also consider using the Google's library called Geometry and its methodencodePath()
. Find reference here. Is there anyway to call a Google API and get the image and save it in my server.
No, as stated by xomenaIf I can do the second point, is it illegal to save google maps in the my server, instead of call google server to get the image every time I want?
No, as stated by xomena- Is there any other ways I can achieve my task.
Yes, as stated at my answer to your first question, you have the possibility to use Google's Geometry library
Addressing questions 2 and 3. You cannot save an image on your server. It is prohibited by Terms of Service.
Look at paragraph 10.1 (a) of ToS
No access to APIs or Content except through the Service. You will not access the Maps API(s) or the Content except through the Service. For example, you must not access map tiles or imagery through interfaces or channels (including undocumented Google interfaces) other than the Maps API(s).
https://developers.google./maps/terms#10-license-restrictions
Addressing question 3: no (as previously stated by xomena)
Here an update to where the relevant terms of service seem to be now:
3.2.3 Restrictions Against Misusing the Services.
(a) No Scraping. Customer will not export, extract, or otherwise scrape Google Maps Content for use outside the Services. For example, Customer will not: (i) pre-fetch, index, store, reshare, or rehost Google Maps Content outside the services; (ii) bulk download Google Maps tiles, Street View images, geocodes, directions, distance matrix results, roads information, places information, elevation values, and time zone details; (iii) copy and save business names, addresses, or user reviews; or (iv) use Google Maps Content with text-to-speech services.
(b) No Caching. Customer will not cache Google Maps Content except as expressly permitted under the Maps Service Specific Terms.