【发布时间】:2011-08-15 00:04:30
【问题描述】:
我会使用标准地图 API 吗?我问的原因是我希望地图是我在校园的 Photoshop 中制作的自定义图像。我发现另一所大学的某人做了类似的事情。我该怎么做这样的东西?
http://s3.appbrain.com/screen?id=2110362890445967243&i=1
这样的东西必须离线吗?它还能提供您当前的地理位置吗?谢谢。
【问题讨论】:
标签: java android google-maps-api-3
我会使用标准地图 API 吗?我问的原因是我希望地图是我在校园的 Photoshop 中制作的自定义图像。我发现另一所大学的某人做了类似的事情。我该怎么做这样的东西?
http://s3.appbrain.com/screen?id=2110362890445967243&i=1
这样的东西必须离线吗?它还能提供您当前的地理位置吗?谢谢。
【问题讨论】:
标签: java android google-maps-api-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());
}
【讨论】: