在谷歌地图中给定缩放级别计算地图上方的高度

时间:2014-03-30 21:54:22

标签: java android google-maps math google-maps-api-2

我试图在给定缩放级别的情况下计算地图上方的高度(忽略地形)。我知道特定缩放级别的比例等式是591657550.5 / 2 ^(level-1)(https://gis.stackexchange.com/questions/7430/google-maps-zoom-level-ratio),但我不确定如何使用这些信息(或者这是否是正确的信息)解决地图上方的高度。任何帮助表示赞赏。

2 个答案:

答案 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