我试图借助here在Google开发者上使用Android utility library
的教程,借助“ Google Map”在Android设备上绘制热图。使用本教程中描述的示例代码,我实现了如下的热图:
如您所见,热图位置以绿色圆圈和点显示,但实际上,我想实现以下功能:
那是通过一条线将热图连接到当前位置。
有什么想法或帮助吗?
答案 0 :(得分:1)
您可以使用SphericalUtil.interpolate()
中的Google Maps Android API Utility Library获取源点之间的附加点,并将其发送到HeatmapTileProvider
以获取“热图线”。例如,使用以下代码:
@Override
public void onMapReady(GoogleMap googleMap) {
mGoogleMap = googleMap;
// Create the gradient.
int[] colors = {
Color.rgb(102, 225, 0), // green
Color.rgb(255, 0, 0) // red
};
float[] startPoints = {
0.2f, 1f
};
Gradient gradient = new Gradient(colors, startPoints);
final List<LatLng> sourcePolyPoints = new ArrayList<>();
sourcePolyPoints.add(new LatLng(28.537266, 77.208099));
sourcePolyPoints.add(new LatLng(28.536965, 77.209571));
sourcePolyPoints.add(new LatLng(28.536786, 77.209989));
sourcePolyPoints.add(new LatLng(28.537886, 77.210205));
sourcePolyPoints.add(new LatLng(28.537886, 77.210205));
final List<LatLng> interpolatedPolyPoints = new ArrayList<>();
for (int ixPoint = 0; ixPoint < sourcePolyPoints.size() - 1; ixPoint++) {
int nInterpolated = 50;
for (int ixInterpolated = 0; ixInterpolated < nInterpolated; ixInterpolated++) {
LatLng interpolatedPoint = SphericalUtil.interpolate(sourcePolyPoints.get(ixPoint),
sourcePolyPoints.get(ixPoint + 1), (double) ixInterpolated / (double) nInterpolated);
interpolatedPolyPoints.add(interpolatedPoint);
}
}
// Create the tile provider.
mProvider = new HeatmapTileProvider.Builder()
.data(interpolatedPolyPoints)
.gradient(gradient)
.build();
// Add the tile overlay to the map.
mOverlay = mGoogleMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));
mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(28.536965, 77.209571), 16));
}
您将在源点之间获得一条平滑的“热图线”,如下所示:
您可以通过HeatmapTileProvider
参数来调整“热图线”的颜色和宽度。而且,如果仅在道路上需要折线,则可以使用Snap to Road的Google Maps Roads API部分或Waleed Asim注释中提供的示例。