iTowns / itowns

A Three.js-based framework written in Javascript/WebGL for visualizing 3D geospatial data
http://www.itowns-project.org
Other
1.09k stars 293 forks source link

Tiles from Google maps #1439

Open Gekk0r opened 4 years ago

Gekk0r commented 4 years ago

Do you already implemented a way to load Google maps tiles?

As I understood , in iTowns implementation you already using bbox, zoom, width and height to retrive the png instead Google API needs lat, long (center of the bbox), zoom, API key, width and height...

What do you think? :)

zarov commented 4 years ago

I think I saw an issue about that, but can't seem to find it !

From what I looked, Google doesn't offer a way to query tiles only, you need to use their own Maps implementation. Could you link the documentation if it is the case so I can help ?

The classic map has a weird URL that I don't know how it is constructed (https://www.google.fr/maps/vt/pb=!1m4!1m3!1i15!2i16602!3i11278!2m3!1e0!2sm!3i520236696!3m7!2sen!5e1105!12m4!1e68!2m2!1sset!2sRoadmap!4e1!5m4!1e4!8m2!1e0!1e1!6m7!1e12!2i2!26m1!4b1!39b1!44e1!50e0!23i1358902 for example), while the satellite view may be accessible, as it uses a x, y and a z. You may then use TMSSource and ColorLayer in iTowns to display it. See this example or this one to see how to use a TMSSource.

I found some layers that you can try, with the following url, but I am not really sure it can be use without an API key

Gekk0r commented 4 years ago

Actually, something like http://mt1.google.com/vt/lyrs=y&x=1325&y=3133&z=13 works without any API key, I tried to use it with TMSSource that works but sometimes return error Too many requests.

Whatever, I tried to implement something (just as experiment while fetching the texture in itown.js) that fetch data using the follow request https://maps.googleapis.com/maps/api/staticmap?center=" + bbox_center.x + "," + bbox_center.y + "&zoom=9&size=256x256&maptype=satellite&key=MY_APY_KEY".

My solution works (fetch the images correctly) but I don't know the properly way to change the z.

zarov commented 4 years ago

The Too many requests doesn't surprise me, as there is not API key to specify, so this may be a limited stream.

You could compute the zoom, knowing the size of the root bbox (aka the earth). Something like Math.round(bbox_root.x / bbox_local * some_factor_to_determine) ?

From what I saw, using staticmap may not be the best solution here, as it doesn't seem adapted for this usage ?

Gekk0r commented 4 years ago

You could compute the zoom, knowing the size of the root bbox (aka the earth). Something like Math.round(bbox_root.x / bbox_local * some_factor_to_determine) ?

Thank you for the tip, I will try it..

From what I saw, using staticmap may not be the best solution here, as it doesn't seem adapted for this usage ?

Agree, but it seems the only "easy" way to use google layer with API key.

BTW: I'm already satisfied with TMSSource :).

zarov commented 4 years ago

Agree, but it seems the only "easy" way to use google layer with API key.

Yeah, they really don't want people using other library than their ;)

Let me know how it goes !