找出两个其他点之间的点x和y的百分比

时间:2016-08-31 09:07:00

标签: java android android-maps

在我的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)

https://github.com/googlemaps/android-maps-utils/blob/master/library/src/com/google/maps/android/SphericalUtil.java

我需要一些东西,它的作用相反。这是我的实现,但它没有给我正确的结果(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,而恰恰相反。

还是有问题,这就是它在应用中的外观:

enter image description here

这是应该的地方(我用scribble来做这个例子):

enter image description here

为了说清楚我正在谈论名为“1.1”的点,不要注意其他人,他们在图像本身中是硬编码的。

1 个答案:

答案 0 :(得分:1)

由于我有另一个想法要写,我只是将两者都放在一个完整的答案中以获得更多的空间。

首先,检查您是否意外切换long / latx / y

Long = xlat = y

然后,您如何查看添加的外观?当您获得地图标记的确切位置时,只需向该位置添加视图即可。

视图本身可能有宽度和高度本身,您可能希望将其放置在标记的顶部,就像在Google地图上点击商店一样?如果你只是把它放在计算的位置,它会把它的左上角放在那个位置。