我正在将一款iOS应用程序移植到Android,并使用Google Maps Android API v2。
该应用程序需要在地图上绘制热力图层叠加。
到目前为止,看起来最好的选择是使用一个TileOverlay
并实现一个自定义的TileProvider
。在getTile
方法中,我的方法会给出x、y和zoom,然后需要返回一张以Tile
形式的位图。到此为止,一切都好。
我有一个热图项目数组,我将使用它们在位图上绘制径向渐变,每个坐标都有一个经度/纬度。我在以下两个任务中遇到了麻烦:
- 如何确定由x、y和zoom表示的瓦片是否包含热图项的经度/纬度?
- 如何将热图项目的经度/纬度转换为位图的x/y坐标。
谢谢您的帮助!
更新
多亏了MaciejGórski下面的答案和marcin的实现,我得到了问题的前半部分的答案,但我仍然需要第二部分的帮助。为了澄清,我需要一个函数来返回指定经度/纬度所对应的瓦片的x/y坐标。我尝试了MaciejGórski和marcin答案的计算方法,但没有成功。
public static Point fromLatLng(LatLng latlng, int zoom){
int noTiles = (1 << zoom);
double longitudeSpan = 360.0 / noTiles;
double mercator = fromLatitude(latlng.latitude);
int y = ((int)(mercator / 360 * noTiles)) + 180;
int x = (int)(latlng.longitude / longitudeSpan) + 180;
return new Point(x, y);
}
非常感谢您的帮助!