在我的Android应用程序中,我有简单的“地图”,这是基于卫星地图的图像。我在这张地图的两个角上有确切的LatLng
位置:准确地说是左上角和右下角。现在,通过给定LatLng
点,我想创建一个小视图,将其添加到地图上(标记)。为此,我必须在“地图”上计算百分比x和y(以像素为单位)。
总结一下这里是我的数据:
LatLng MAP_LEFT_TOP; //constant point
LatLng MAP_RIGHT_BOTTOM; //constant point
LatLng location; //point, which should be inside map rectangle
我需要计算的是:
float percentageX; //percentage x position of "location" on the map
float percentageY; //percentage y position of "location" on the map
我在这里找到了功能:
LatLng interpolate(LatLng from, LatLng to, double fraction)
我需要一些东西,它的作用相反。这是我的实现,但它没有给我正确的结果(y /经度相同):
double findFractionX(double latitudeLeftTop, double latitudeRightBottom, double latitude){
return (latitude - latitudeLeftTop) / (latitudeRightBottom - latitudeLeftTop);
}
然后我可以像这样得到标记的最终位置:
float imageViewWidth; //width of the imageView holding map
float imageViewHeight; //height of the imageView holding map
float x = percentageX * imageViewWidth;
float y = percentageY * imageViewHeight;
编辑: 我的错误是使用纬度来获得x和经度来获得y,而恰恰相反。
还是有问题,这就是它在应用中的外观:
这是应该的地方(我用scribble来做这个例子):
为了说清楚我正在谈论名为“1.1”的点,不要注意其他人,他们在图像本身中是硬编码的。
答案 0 :(得分:1)
由于我有另一个想法要写,我只是将两者都放在一个完整的答案中以获得更多的空间。
首先,检查您是否意外切换long
/ lat
或x
/ y
:
Long = x
和lat = y
。
然后,您如何查看添加的外观?当您获得地图标记的确切位置时,只需向该位置添加视图即可。
视图本身可能有宽度和高度本身,您可能希望将其放置在标记的顶部,就像在Google地图上点击商店一样?如果你只是把它放在计算的位置,它会把它的左上角放在那个位置。