我正在开发一张雷达地图,所以它不是地图!
我的想法是在不可见的地图上设置标记,而不是经典地图,设置此图像:
因此,绿色点将是设置为LAT / LON的标记,但是您无法看到地图,但是您可以看到图片。
提前致谢。
答案 0 :(得分:1)
您可以使用Google地图。
之证件: https://developers.google.com/maps/documentation/android/
编辑:可以很容易地计算标记与用户的偏移而不使用地图,不是吗?
EDIT2:
mMap = getMap();
mMap.setMapType(GoogleMap.MAP_TYPE_NONE);
mMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));
其中mProvider是自定义磁贴提供程序。
答案 1 :(得分:0)
我在我的一个项目中做过类似的事情。我创建了自定义ImageView,传递lat longs并在设置为ImageView的位图上绘制。
我的要求是在美国地图上绘制lat long。
因此,您可以创建一个自定义ImageView来保存您的雷达图像。并将lat long的列表传递给该类,以在雷达图像上绘制点。
这是我的自定义ImageView类。
public class MapImageView extends ImageView{
private float latitudeTop, latitudeBottom, longitudeRight, longitudeLeft;
private List<Float> points = new ArrayList<Float>();
private Paint pointPaint;
private Matrix pointMatrix = new Matrix();
public MapImageView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
pointPaint = new Paint();
pointPaint.setAntiAlias(true);
pointPaint.setStrokeCap(Cap.ROUND);
pointPaint.setColor(Color.WHITE);
pointPaint.setStrokeWidth(2.5f);
}
public void setBounds(float latitudeTop, float latitudeBottom, float longitudeLeft, float longitudeRight) {
this.latitudeTop = latitudeTop;
this.latitudeBottom = latitudeBottom;
this.longitudeLeft = longitudeLeft;
this.longitudeRight = longitudeRight;
}
public void addPoint(float latitude, float longitude) {
points.add(longitude);
points.add(latitude);
invalidate();
}
public void setPoints(List<Float> points){
this.points = points;
LogMsg.d("PP GOT "+this.points.size());
invalidate();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
LogMsg.d("Image: -latitude: "+latitudeTop+" longitude: "+longitudeLeft);
LogMsg.d("width: "+getMeasuredWidth()/(longitudeRight-longitudeLeft)+" Height: "+getMeasuredHeight()/(latitudeBottom-latitudeTop));
pointMatrix.reset();
pointMatrix.postTranslate(-longitudeLeft, -latitudeTop);
pointMatrix.postScale(getMeasuredWidth()/(longitudeRight-longitudeLeft),getMeasuredHeight()/(latitudeBottom-latitudeTop));
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawPoints(mapPoints(), pointPaint);
}
private float[] mapPoints() {
float[] pts = new float[points.size()];
for (int i = 0; i < points.size(); i++) {
pts[i] = points.get(i);
}
pointMatrix.mapPoints(pts);
return pts;
}
}
这里的设置是从onCreate()绑定的,设置bound实际上是美国地图的纬度和长度。
mMapAppStats.setBounds(49.066668f, 25.482951f, -124.962159f, -65.932619f);
然后你可以像这样在这个图像视图中添加点。
for ( int i = 0 ; i < appStatsLocations.size(); i++) {
mMapAppStats.addPoint(Float.parseFloat(appStatsLocations.get(i).getLatitude()), Float.parseFloat(appStatsLocations.get(i).getLongitude()));
}
这是XML。
<...MapImageView
android:id="@+id/mapAppStats"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btnAppStatsViewTeamNFriends"
android:scaleType="fitXY"
android:src="@drawable/usmapnew" />
你可以从中得到一些解决问题的想法。