我正在将一个 iOS 应用程序移植到 Android,并使用Google Maps Android API v2.
该应用程序需要在地图上绘制一个热图叠加层。
到目前为止,看起来最好的选择是使用 aTileOverlay
并实现一个 custom TileProvider
。在方法getTile
中,我的方法给定了x、y和zoom,需要返回a形式的位图Tile
。到目前为止,一切都很好。
我有一组热图项目,我将使用它们在位图上绘制径向渐变,每个都有一个纬度/经度。我在执行以下两项任务时遇到问题:
- 如何确定由 x、y 和缩放表示的图块是否包含热图项目的纬度/经度?
- 如何将热图项目的纬度/经度转换为位图的 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);
}
任何帮助表示赞赏!