使用 OSMDroid Tilesource 在本地绘制图块
Draw tiles locally with OSMDroid Tilesource
您如何自定义绘制(在运行时)OSMDroid 磁贴。我正在尝试根据数据在设备本身上生成(简单的)天气叠加层。虽然叠加就足够了,而且我知道 MapsForge 可能是生成矢量图块的一种可能性,但我尝试绘制的数据非常简单,我认为它可能有点矫枉过正?
我试图实现一个通用的 BitmapTileSourceBase 并将 getDrawable() 方法覆盖为 return 位图,但这似乎没有被触发并以空白图块结束。
public class DrawnTiles extends BitmapTileSourceBase {
public DrawnTiles(String aName) {
super(aName, 1, 6, 256, ".png");
}
@Override
public synchronized Drawable getDrawable(final String aFilePath) {
//Make the bad tile easy to spot
Bitmap bitmap = Bitmap.createBitmap(256, 256, Bitmap.Config.RGB_565);
bitmap.eraseColor(Color.YELLOW);
return new BitmapDrawable(bitmap);
}
}
感谢任何建议或首选解决方案。最终的图块将根据它们的边界绘制,因此访问此方法的方法将是理想的。不用担心缓存太多,因为数据会相当频繁地更改。
虽然不是对原始问题的直接回答,但以下确实解决了我的问题并可能解决其他问题。
全球解决方案可能需要生成图块,但 OSMDroid 自定义覆盖似乎确实满足我的要求。在像素和 lat/longs 之间转换的支持函数。
public class CustomOverlay extends org.osmdroid.views.overlay.Overlay {
@Override
public void draw(Canvas canvas, MapView map, boolean shadow) {
if (!isEnabled()) return;
if (shadow) {
//draw a shadow if needed, otherwise return
return;
}
/*
This will go from pixel x,y to lat/lon
GeoPoint iGeoPoint = (GeoPoint) projection.fromPixels(x,y);
This will go from lat/lon to pixel x,y
projection.toPixels(geoPoint, pt);
To project pixels should give you the canvas coordinates
projection.toProjectedPixels(...)
*/
final Projection pj = map.getProjection();
canvas.save();
Paint paint = new Paint();
canvas.drawCircle(pj.getScreenCenterX(),pj.getScreenCenterY(),40,paint);
canvas.restore();
}
您如何自定义绘制(在运行时)OSMDroid 磁贴。我正在尝试根据数据在设备本身上生成(简单的)天气叠加层。虽然叠加就足够了,而且我知道 MapsForge 可能是生成矢量图块的一种可能性,但我尝试绘制的数据非常简单,我认为它可能有点矫枉过正?
我试图实现一个通用的 BitmapTileSourceBase 并将 getDrawable() 方法覆盖为 return 位图,但这似乎没有被触发并以空白图块结束。
public class DrawnTiles extends BitmapTileSourceBase {
public DrawnTiles(String aName) {
super(aName, 1, 6, 256, ".png");
}
@Override
public synchronized Drawable getDrawable(final String aFilePath) {
//Make the bad tile easy to spot
Bitmap bitmap = Bitmap.createBitmap(256, 256, Bitmap.Config.RGB_565);
bitmap.eraseColor(Color.YELLOW);
return new BitmapDrawable(bitmap);
}
}
感谢任何建议或首选解决方案。最终的图块将根据它们的边界绘制,因此访问此方法的方法将是理想的。不用担心缓存太多,因为数据会相当频繁地更改。
虽然不是对原始问题的直接回答,但以下确实解决了我的问题并可能解决其他问题。
全球解决方案可能需要生成图块,但 OSMDroid 自定义覆盖似乎确实满足我的要求。在像素和 lat/longs 之间转换的支持函数。
public class CustomOverlay extends org.osmdroid.views.overlay.Overlay {
@Override
public void draw(Canvas canvas, MapView map, boolean shadow) {
if (!isEnabled()) return;
if (shadow) {
//draw a shadow if needed, otherwise return
return;
}
/*
This will go from pixel x,y to lat/lon
GeoPoint iGeoPoint = (GeoPoint) projection.fromPixels(x,y);
This will go from lat/lon to pixel x,y
projection.toPixels(geoPoint, pt);
To project pixels should give you the canvas coordinates
projection.toProjectedPixels(...)
*/
final Projection pj = map.getProjection();
canvas.save();
Paint paint = new Paint();
canvas.drawCircle(pj.getScreenCenterX(),pj.getScreenCenterY(),40,paint);
canvas.restore();
}