Jump to content
Sign in to follow this  
ylguf

WIP satellite, mask, heightmap creation tool WIP

Recommended Posts

im happy enough with how this is working that the release is here

you can get 25000 images a day at 640x640px

how to:

1. copy the text and paste it into a text document

there is a small readme inside i hope it explains enough

the code is 700 lines long so i put spoilers to keep organized

<!DOCTYPE html>

<html>

<table border="0">
<tr>
<td><img id="map1" style="border: none;"></td>
<td><img id="map2" style="border: none;"></td>
<td><img id="map3" style="border: none;"></td>
<td><img id="map4" style="border: none;"></td>
<td><img id="map5" style="border: none;"></td>
<td><img id="map6" style="border: none;"></td>
<td><img id="map7" style="border: none;"></td>
</tr>
<tr>
<td><img id="map8" style="border: none;"></td>
<td><img id="map9" style="border: none;"></td>
<td><img id="map10" style="border: none;"></td>
<td><img id="map11" style="border: none;"></td>
<td><img id="map12" style="border: none;"></td>
<td><img id="map13" style="border: none;"></td>
<td><img id="map14" style="border: none;"></td>
</tr>
<tr>
<td><img id="map15" style="border: none;"></td>
<td><img id="map16" style="border: none;"></td>
<td><img id="map17" style="border: none;"></td>
<td><img id="map18" style="border: none;"></td>
<td><img id="map19" style="border: none;"></td>
<td><img id="map20" style="border: none;"></td>
<td><img id="map21" style="border: none;"></td>
</tr>
<tr>
<td><img id="map22" style="border: none;"></td>
<td><img id="map23" style="border: none;"></td>
<td><img id="map24" style="border: none;"></td>
<td><img id="map25" style="border: none;"></td>
<td><img id="map26" style="border: none;"></td>
<td><img id="map27" style="border: none;"></td>
<td><img id="map28" style="border: none;"></td>
</tr>
<tr>
<td><img id="map29" style="border: none;"></td>
<td><img id="map30" style="border: none;"></td>
<td><img id="map31" style="border: none;"></td>
<td><img id="map32" style="border: none;"></td>
<td><img id="map33" style="border: none;"></td>
<td><img id="map34" style="border: none;"></td>
<td><img id="map35" style="border: none;"></td>
</tr>
<tr>
<td><img id="map36" style="border: none;"></td>
<td><img id="map37" style="border: none;"></td>
<td><img id="map38" style="border: none;"></td>
<td><img id="map39" style="border: none;"></td>
<td><img id="map40" style="border: none;"></td>
<td><img id="map41" style="border: none;"></td>
<td><img id="map42" style="border: none;"></td>
</tr>
<tr>
<td><img id="map43" style="border: none;"></td>
<td><img id="map44" style="border: none;"></td>
<td><img id="map45" style="border: none;"></td>
<td><img id="map46" style="border: none;"></td>
<td><img id="map47" style="border: none;"></td>
<td><img id="map48" style="border: none;"></td>
<td><img id="map49" style="border: none;"></td>
</tr>
</table>



<script type="text/javascript">

//////////////////////////////////////////////////////////////////////////////////

var vzoom=15;

var y1=-40.750000, x1=-63.000000;

var vsize="640x640";

var vmaptype="";

var vscale="&scale=1";

var vstyles="";

var vkey="YOUR KEY GOES HERE";

var vformat="png";

var vlabels="";		//&style=element:labels|visibility:off
var vadministrative="";	//&style=feature:administrative|visibility:off
var vlandscape="";	//&style=feature:landscape|visibility:off
var vpoi="";		//&style=feature:poi|visibility:off
var vtransit="";	//&style=feature:transit|visibility:off
var vwater="";		//&style=feature:water|visibility:off|simplified|on


/////////////////////////////////////////////////////////////////////////////////////////////
//zooms 15-18 only
//
//you can use the link below to find your starting lat/long(top left not center)
//https://google-developers.appspot.com/maps/documentation/javascript/v2/examples/geocoding-reverse
//
//leave at "640x640" for now
//
//roadmap, satellite, terrain, hybrid
//https://developers.google.com/maps/documentation/staticmaps/#MapTypes
//
//scale 1-2
//
//working on styles to create masks/heightmaps
//
//to get 25000 images a day instead of 1000 go to
//https://developers.google.com/maps/documentation/staticmaps/#api_key
//and follow steps 1-3
//then add your API_console_key to your key goes here
//
//you can change the file format with png8, png, png32, gif, jpg, jpg-baseline
//https://developers.google.com/maps/documentation/staticmaps/#ImageFormats
//
//to change languages add the following to vstyles
//	   &language=text          
//and replace text with the appropriate language code abreviation found here under v2
//https://spreadsheets.google.com/spreadsheet/pub?key=0Ah0xU81penP1cDlwZHdzYWkyaERNc0xrWHNvTTA1S1E&gid=1
//
//add to vstyles to color stuff
//example vstyles="&style=feature:road.local|color:0xff0000"
//(it basically says road, local, red.(local is optional))
	//road.local,highway,arterial  
	//transit.line,station.airport,station.bus,station.rail
	//poi.government,medical,park,place_of_worship,school,sports_complex
	//landscape.man_made,natural.land_cover,natural.terrain
	//administrative.country,province,locality,neighborhood,land_parcel
//to have a visual of whats going on go here and play with styles/colors
//http://gmaps-samples-v3.googlecode.com/svn/trunk/styledmaps/wizard/index.html
//////////////////////////////////////////////////////////
//    Zoom level	Meters per Pixel (only for Equator)
//     ----------       ----------------
//	1			78271.52
//	2			39135.76
//	3			19567.88
//	4			 9783.94
//	5			 4891.97
//	6			 2445.98
//	7			 1222.99
//	8			  611.50
//	9			  305.75
//	10			  152.87
//	11			   76.44
//	12			   38.22
//	13			   19.11
//	14			    9.55
//	15			    4.78
//	16			    2.39
//	17			    1.19
//	18			    0.60
//only zoom 15-18 will work
//////////////////////////////////////////////////////////////////////////////////////

var vrkey="&key=" + vkey;

function ceil5(x)
{
   return Math.ceil(x / 5) * 5;
}

var qoffsetz=(ceil5(Math.abs(y1)));

switch (qoffsetz)

{
 case 0:

voffsetz=-0.000800;

break;

 case 5:
voffsetz=-0.000300;

break;

 case 10:
voffsetz=0;

break;

 case 15:

voffsetz=0.000700;

break;

 case 20:

voffsetz=0.001200;

break;
 case 25:

voffsetz=0.002200;

break;


 case 30:

voffsetz=0.003200;

break;

 case 35:

voffsetz=0.004450;

break;

 case 40:

voffsetz=0.005700;

break;

 case 45:

voffsetz=0.007450;

break;

 case 50:

voffsetz=0.009200;

break;

 case 55:

voffsetz=0.011150;

break;

 case 60:

voffsetz=0.013100;

break;
 case 65:

voffsetz=0.015400;

break;


 case 70:

voffsetz=0.017700;

break;

 default:

voffsetz=0.020000;

}

var voffsetz;
var qzoom=vzoom


switch (qzoom)

{

 case 15:

voffsetx=0.027200;

voffsety=0.026700-voffsetz;

break;

 case 16:

voffsetx=0.013600;

voffsety=0.008300-(voffsetz/2);

break;

 case 17:

voffsetx=0.006800;

voffsety=0.001335-(voffsetz/4);

break;

 case 18:

voffsetx=0.003400;

voffsety=0.000778-(voffsetz/8);

break;

 default:

voffsetx=0.027200;

voffsety=0.026700-voffsetz;

}

var voffsetx;
var voffsety;
var y2=y1-voffsety , x2=x1+voffsetx;
var y3=y2-voffsety , x3=x2+voffsetx;
var y4=y3-voffsety , x4=x3+voffsetx;
var y5=y4-voffsety , x5=x4+voffsetx;
var y6=y5-voffsety , x6=x5+voffsetx;
var y7=y6-voffsety , x7=x6+voffsetx;
var y8=y7-voffsety , x8=x7+voffsetx;

//////////////////////////////////////////////////////////						1

var vtextm= "&zoom=" + vzoom + vscale + "&format=" + vformat + "&sensor=false" + "&size=" + vsize + "&maptype=" + vmaptype + vlabels + vlandscape + vadministrative + vstyles + vrkey;

///////////////////////////////////////////////
var image = document.getElementById("map1");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y1 + "," + x1
         + vtextm;
image.src = url;


var image = document.getElementById("map2");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y1 + "," + x2
         + vtextm;
image.src = url;


var image = document.getElementById("map3");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y1 + "," + x3
         + vtextm;
image.src = url;


var image = document.getElementById("map4");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y1 + "," + x4
         + vtextm;
image.src = url;


var image = document.getElementById("map5");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y1 + "," + x5
         + vtextm;
image.src = url;


var image = document.getElementById("map6");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y1 + "," + x6
         + vtextm;
image.src = url;


var image = document.getElementById("map7");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y1 + "," + x7
         + vtextm;
image.src = url;



////////////////////////////////////////////////////////					2

var image = document.getElementById("map8");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y2 + "," + x1
         + vtextm;
image.src = url;


var image = document.getElementById("map9");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y2 + "," + x2
         + vtextm;
image.src = url;


var image = document.getElementById("map10");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y2 + "," + x3
         + vtextm;
image.src = url;


var image = document.getElementById("map11");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y2 + "," + x4
         + vtextm;
image.src = url;


var image = document.getElementById("map12");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y2 + "," + x5
         + vtextm;
image.src = url;


var image = document.getElementById("map13");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y2 + "," + x6
         + vtextm;
image.src = url;


var image = document.getElementById("map14");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y2 + "," + x7
         + vtextm;
image.src = url;



////////////////////////////////////////////////////////					3

var image = document.getElementById("map15");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y3 + "," + x1
         + vtextm;
image.src = url;


var image = document.getElementById("map16");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y3 + "," + x2
         + vtextm;
image.src = url;


var image = document.getElementById("map17");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y3 + "," + x3
         + vtextm;
image.src = url;


var image = document.getElementById("map18");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y3 + "," + x4
         + vtextm;
image.src = url;


var image = document.getElementById("map19");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y3 + "," + x5
         + vtextm;
image.src = url;


var image = document.getElementById("map20");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y3 + "," + x6
         + vtextm;
image.src = url;


var image = document.getElementById("map21");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y3 + "," + x7
         + vtextm;
image.src = url;




////////////////////////////////////////////////////////						4

var image = document.getElementById("map22");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y4 + "," + x1
         + vtextm;
image.src = url;


var image = document.getElementById("map23");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y4 + "," + x2
         + vtextm;
image.src = url;


var image = document.getElementById("map24");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y4 + "," + x3
         + vtextm;
image.src = url;


var image = document.getElementById("map25");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y4 + "," + x4
         + vtextm;
image.src = url;


var image = document.getElementById("map26");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y4 + "," + x5
         + vtextm;
image.src = url;


var image = document.getElementById("map27");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y4 + "," + x6
         + vtextm;
image.src = url;


var image = document.getElementById("map28");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y4 + "," + x7
         + vtextm;
image.src = url;




////////////////////////////////////////////////////////						5

var image = document.getElementById("map29");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y5 + "," + x1
         + vtextm;
image.src = url;


var image = document.getElementById("map30");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y5 + "," + x2
         + vtextm;
image.src = url;


var image = document.getElementById("map31");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y5 + "," + x3
         + vtextm;
image.src = url;


var image = document.getElementById("map32");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y5 + "," + x4
         + vtextm;
image.src = url;


var image = document.getElementById("map33");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y5 + "," + x5
         + vtextm;
image.src = url;


var image = document.getElementById("map34");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y5 + "," + x6
         + vtextm;
image.src = url;


var image = document.getElementById("map35");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y5 + "," + x7
         + vtextm;
image.src = url;



////////////////////////////////////////////////////////					6

var image = document.getElementById("map36");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y6 + "," + x1
         + vtextm;
image.src = url;


var image = document.getElementById("map37");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y6 + "," + x2
         + vtextm;
image.src = url;


var image = document.getElementById("map38");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y6 + "," + x3
         + vtextm;
image.src = url;


var image = document.getElementById("map39");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y6 + "," + x4
         + vtextm;
image.src = url;


var image = document.getElementById("map40");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y6 + "," + x5
         + vtextm;
image.src = url;


var image = document.getElementById("map41");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y6 + "," + x6
         + vtextm;
image.src = url;


var image = document.getElementById("map42");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y6 + "," + x7
         + vtextm;
image.src = url;


////////////////////////////////////////////////////////						7

var image = document.getElementById("map43");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y7 + "," + x1
         + vtextm;
image.src = url;


var image = document.getElementById("map44");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y7 + "," + x2
         + vtextm;
image.src = url;


var image = document.getElementById("map45");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y7 + "," + x3
         + vtextm;
image.src = url;


var image = document.getElementById("map46");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y7 + "," + x4
         + vtextm;
image.src = url;


var image = document.getElementById("map47");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y7 + "," + x5
         + vtextm;
image.src = url;


var image = document.getElementById("map48");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y7 + "," + x6
         + vtextm;
image.src = url;


var image = document.getElementById("map49");
url = "http://maps.googleapis.com/maps/api/staticmap"
         + "?center=" + y7 + "," + x7
         + vtextm;
image.src = url;


</script>
</html>

2. change the variables (such as zoom) and save it as a .html

3. run html and save images(i like to name mine 1-49 instead of x,y)

4. stitch images

5.repeat 2-5

im working on different layers that will be minimal work for masks/heightmaps

ive heard people say that there is like a limit of 4 texture per grid or whatever but

i was looking at the takistan textures to see how BI did their maps and

i have a question about their texture masks.

if you look at you P:\ca\takistan\data\layers\M_020_002_lca.paa

at first glance it seems like they fit like 10 different colors but looking closer that wasnt the case.

they only have 4 colors red, green, blue, black. but they use a alpha layer, with 3 different values clear=255 half grey=128 full greyed out=0

(note even tho it is greyed out and doesnt show color, it still holds a color value under the alpha layer you cant see)

so they are using RGBA instead of RGB format.

so im assuming the alpha is a 4th value to hold more textures

if my assumption is right does anyone know of a way of using alpha for textures?

if there is a way to use alpha ill make styles with alpha included.

original post outdated info.

hello this is a wip currently in a working state, still im not going to release this right now but expect it soon.

im trying to develop this as a FREE alternative to programs such as google earth pro for collecting images for arma 2 map creation.

I am making a script to handle styles and 'multiple' images so that the google maps api with be easy to use as a source of images.

im not to sure how to start so im going to give some google map api examples to show you what im working on.

if you arnt familiar with google map api images its basicaly a free to use image link for any google map image

heres some examples that i put together of how the maps can be customized.

all of these 'single' image examples are of the same location at zoom 12

two standard unstyled map examples

staticmap?center=52.317005,4.803407&zoom=12&format=png&sensor=false&size=640x480&maptype=roadmap

staticmap?center=52.317005,4.803407&zoom=12&format=png&sensor=false&size=640x480&maptype=hybrid

satellite map example

staticmap?center=52.317005,4.803407&zoom=12&format=png&sensor=false&size=640x480&maptype=hybrid&style=element:labels|visibility:off&style=feature:administrative|visibility:off&style=feature:road|visibility:off&style=feature:transit|visibility:off

"whaaaa whaaaa thats not good enough i want a higher quality satalite image whaaa""ok fine stop crying here you go"

click me

staticmap?center=52.317005,4.803407&zoom=12&scale=2&format=png&sensor=false&size=640x480&maptype=hybrid&style=element:labels|visibility:off&style=feature:administrative|visibility:off&style=feature:road|visibility:off&style=feature:transit|visibility:off

mask_lco example(no legend for color=texture or consideration for limits _wip)

staticmap?center=52.317005,4.803407&zoom=12&format=png&sensor=false&size=640x480&maptype=roadmap&style=element:labels|visibility:off&style=feature:administrative|visibility:off&style=feature:transit.line|color:0xff0000&style=feature:transit.station|color:0xff8080&style=feature:landscape|color:0x00ff00&style=feature:road|color:0x0000ff&style=feature:water|color:0xffff00&style=feature:poi|color:0xffffff

heightmap example(again no legend for color=height just random colors _wip)

staticmap?center=52.317005,4.803407&zoom=12&format=png&sensor=false&size=640x480&maptype=roadmap&style=element:labels|visibility:off&style=feature:administrative|visibility:off&style=feature:transit|visibility:off&style=feature:water|color:0x000000&style=feature:road|color:0x9b9b9b&style=feature:landscape|color:0xa5a5a5&style=feature:poi|color:0xbababa

so after messing with some of the settings you start to see that you have some useful 'single' images that could be used for a map

but who finds one image useful? i dont, especially not at 640x480px(meter/pixel values below) so i started putting together some code to handle multiple images.

i currently have a working script that handles a 7x7 grid of maps. and you are able to move over or down or whatever and get the next 7x7 grid

and currently have it set so the images can be combined with microsoft ice without issues although you could use whatever program you want to stitch images.

note:ive spent most of my time getting the script functioning and not worrying about small details like what color is what and am looking for suggestions

some possibilities?

i was thinking with the mask that it would be possible to set the image size to your grid size or a multiple of.

which would make it possible to texture each grid individualy.(way to implement lots of textures on 1 map easily)

other info:

here is a little youtube video showing how im trying to make it simple to get a collection of images.

sorry about no audio i couldnt get my mic to work

https://www.youtube.com/watch?v=jgAs_Ou27cg

when i run the script near the end it shows 2 errors

1. some images load with different default colors

2. there is a max image cap of 1000/day which is showed here

to do, limits, problems, and possible solutions.

issues:

1. you can only request 1000 images per day(reloading only 20 times a day makes testing take a long time)

2. max image size is 640x640(you can get 1280x1280 by scale)

3. only quarrying 50 images at a time(im pretty sure this is a javascript issue and im just starting to learn and is the reason for the grid being 7x7)

4. offset varries slightly due to picture warping based on distance from equator

5. some images in the grid displaying inproper colors

6. settings

solutions:

1,2. google maps buisness api key(25000 images per day,2048x2048px)

3. i made the grid 7x7 so it only quarries 49 images at once atm(need more scripting knowledge) _wip

4. ill see what i can work out might have to manually tweek a number to get a good alignment. _wip

5. again i think its a issue with javascript _wip

6. _wip

//(im only going to include zoom 15-18 as other zooms are nearly useless)

///////////////////////////////////////////////////////////

// Zoom level Meters per Pixel (only for Equator)

// ---------- ----------------

// 12 38.22

// 13 19.11

// 14 9.55

// 15 4.78

// 16 2.39

// 17 1.19

// 18 0.60

this is a work in progress and i decided to make this post as a place to post my progress.

im looking for help in the following areas as i have limited knowledge creating maps and want to have a easy to use tool before release:

1.

i need map legends like this:

SurfaceMapLegend.png

maybe even post custom texture and legends so others can easily use as i want to include preset settings for masks with included legends

(maybe some pics of masks for different styles(deset,jungle,artic,city,ect)and some texture file names to go with it like tk_sand...)

i dont know if im wording that correct i dont know everything

2.

im looking for suggestions and feedback and possibly some javascript knowledge

Edited by ylguf
release

Share this post


Link to post
Share on other sites

would this be used for a such GPS system in game ?, or to just to help reality gameplay, so you can tell another player what street, avenue, block, etc?

Share this post


Link to post
Share on other sites

ill add the lat/long values i guess as a text grid so that you can use the values as your gps values if wanted. altho i would probably just stick with a basic numerical system as lat/long range from -90 to 90/ -180 to 180 with 6 decimal places and on a map all that would change would be the decimals. and this will allow you to use real street names if wanted.

here is a quote from BI following that whole greece incident.

“As part of the creative process, our virtual environments are often rooted in real-life locations and, during development, they evolve and grow along with our design,†said Joris-Jan van ‘t Land, project lead on Arma 3. “The resulting fictional environment is often close to its inspiration, but it’s never exactly the same – nor would we want it to be. For us, ‘Altis’ echoes the Mediterranean heart of our island, but differentiates it from any undesired real-life connotations.â€

this kinda sticks to that quote because what im trying to do is recreate an area without it being 100% realistic. what it is useful for it for is creating city layouts that have masks to go with it based on real world locations. for example what if you wanted to have the ruins of new york in 2100, you could load in the city layout and masks and put a whole bunch of destroyed buildings or whatever. so yes you will be able to use street names(and i think it has a built in translator, ill check it out so you wont have a issue go to i dont know how to say this and i dont know how to say this street)

Edited by ylguf

Share this post


Link to post
Share on other sites

i released the code. ill edit it as neccecary right now this is the first release.

if there are issues with images not overlapping let me know your y1,x1 numbers. its fine if they overlap more then you want im working on it being less extreme.

Share this post


Link to post
Share on other sites

hmm, interesting tool. good for those who dont have UMD or any of the other overpriced google maps tile downloaders... although i suggest using the satelite imagery from Bing maps or Here maps if they have good quality coverage of the area you want. ive been able to download 100k tiles without getting banned from the server, and without an API key

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×