2011-04-28 31 views

回答

3

我已经在过去做到了这一点,这不是太硬。

忘记地图API。您只需要在地图上精确缩放您想要的区域的图像。

您只需要四个角的经度和纬度以及图像的宽度和高度。一旦你有了,你可以做一些相对简单的数学运算,将手机的GPS坐标转换为图像上的X,Y点。

我在芝加哥的格兰特公园为2010年的Android Lollapalooza应用程序制作了一个卡通形象。我的问题实际上稍微有些困难,因为地图被垂直压扁并略微偏移了几度,所以我的数学增加了适应这一点。如果你只是创造一个直接的开销,它应该很容易。

这里是我用来从Long/Lat值转换为点的实用程序函数。它不会完全符合您的需求,因为它具有与我使用的图像相关的特定值,但可能会使您朝着正确的方向前进。

public static PointF GPSToMap(double latitude, double longitude, 
     double minLat, double minLon, double maxLat, double maxLon, 
     long width, long height, String xExpr, String yExpr) 
{ 
    double numerator; 
    double denominator; 

    numerator = latitude - minLat; 
    denominator = maxLat - minLat; 
    double x = width - ((numerator/denominator*width)); 
    numerator = longitude - minLon; 
    denominator = maxLon - minLon; 
    double y = height - ((numerator/denominator*height)); 

    Double dblX = new Double(x+(y*0.434026)-((x-100)*0.180)); 
    Double dblY = new Double(y*0.99); 

    MathEval math = new MathEval(); 

    dblY += math.evaluate(yExpr); //-40 
    dblX += math.evaluate(xExpr); //-15 
    return new PointF(dblX.floatValue(), dblY.floatValue()); 
} 
+1

只是想我会添加,xExpr和yExpr其中字符串值由数学公式组成。这样做,所以一旦我到了格兰特公园,我就可以在公园里散步,并且读取GPS读数,并且在飞行中调整我的数学公式,而无需重新部署应用程序。 – mp2526 2011-04-28 21:05:12

+3

MathEval类位于此处www.softwaremonkey.org/Code/src/MathEval.java – mp2526 2011-04-28 21:12:24

+0

感谢您分享该代码,它肯定会帮助人们。 – 2011-04-30 00:12:20

相关问题