我试图在给定缩放级别的情况下计算地图上方的高度(忽略地形)。我知道特定缩放级别的比例等式是591657550.5 / 2 ^(level-1)(https://gis.stackexchange.com/questions/7430/google-maps-zoom-level-ratio),但我不确定如何使用这些信息(或者这是否是正确的信息)解决地图上方的高度。任何帮助表示赞赏。
答案 0 :(得分:3)
我将我的谷歌地图大小设置为5厘米选择缩放级别,然后在谷歌地球中重新找到该缩放位置以获得眼睛高度等级(角度大小等式http://en.wikipedia.org/wiki/Forced_perspective中的D值) 。通过首先将屏幕上的地图长度设置为5cm,然后使用591657550.5 / 2 ^(level-1)* 5cm的比例公式来计算角度中的h值,我能够在角度大小方程中找到h值。大小方程。知道了这两个变量后,我能够计算出当地图宽度为5厘米(85.36222058)时谷歌地图显示图像的恒定角度。根据这些信息,我能够构建这种方法,从相应精度的缩放级别计算地图上方的眼睛高度
public float getAltitude(float mapzoom){
//this equation is a transformation of the angular size equation solving for D. See: http://en.wikipedia.org/wiki/Forced_perspective
float googleearthaltitude;
float firstPartOfEq= (float)(.05 * ((591657550.5/(Math.pow(2,(mapzoom-1))))/2));//amount displayed is .05 meters and map scale =591657550.5/(Math.pow(2,(mapzoom-1))))
//this bit ^ essentially gets the h value in the angular size eq then divides it by 2
googleearthaltitude =(firstPartOfEq) * ((float) (Math.cos(Math.toRadians(85.362/2)))/(float) (Math.sin(Math.toRadians(85.362/2))));//85.362 is angle which google maps displays on a 5cm wide screen
return googleearthaltitude;
}
很抱歉,如果我的解释说得不好解释。如果你们想要使用这种方法,请随意。对不起,任何措辞不好的句子。
答案 1 :(得分:1)
我基本上将Javascript代码转换为Java。我希望这有效。
public int convertRangeToZoom(double range) {
//see: google.maps.v3.all.debug.js
int zoom = (int) Math.round(Math.log(35200000 / range) / Math.log(2));
if (zoom < 0) zoom = 0;
else if (zoom > 19) zoom = 19;
return zoom;
}
public int convertZoomToRange(double zoom){
//see: google.maps.v3.all.debug.js
int range = (int) 35200000/(Math.pow(2, zoom));
if (range < 300) range = 300;
return range;
}
https://groups.google.com/forum/#!msg/google-earth-browser-plugin/eSL9GlAkWBk/T4mdToJz_FgJ