[英]Android: Osmdroid add marker on touch not accurate
我试图根据此问题在mapview触摸时添加标记,这是我的代码
GeoPoint geoPoint = new GeoPoint(mLatitude, mLongitude);
IMapController mapController = mMapView.getController();
mapController.setZoom(5);
mapController.setCenter(geoPoint);
Overlay overlay = new Overlay(getActivity()) {
ItemizedIconOverlay<OverlayItem> items = null;
@Override
protected void draw(Canvas c, MapView osmv, boolean shadow) {
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e, MapView mapView) {
Projection proj = mapView.getProjection();
GeoPoint loc = (GeoPoint) proj.fromPixels((int)e.getX(), (int)e.getY());
double longitude = loc.getLongitudeE6()/1000000;
double latitude = loc.getLatitudeE6()/1000000;
mLatitude = latitude;
mLongitude = longitude;
ArrayList<OverlayItem> markers = new ArrayList<>();
OverlayItem item = new OverlayItem("", "", new GeoPoint(latitude, longitude));
item.setMarker(ContextCompat.getDrawable(getActivity(), R.drawable.ic_maps_marker_large));
markers.add(item);
if (items == null) {
items = new ItemizedIconOverlay<>(getActivity(), markers, null);
mMapView.getOverlays().add(items);
mMapView.invalidate();
} else {
mMapView.getOverlays().remove(items);
mMapView.invalidate();
items = new ItemizedIconOverlay<>(getActivity(), markers, null);
mMapView.getOverlays().add(items);
}
return true;
}
};
mMapView.getOverlays().add(overlay);
问题是放大标记添加到随机位置时不准确。 但是,如果mapview缩小(大约在5缩放级别及以下),效果很好。
(代表OP发布)。
最后,我可以使用以下代码解决此问题:
GeoPoint geoPoint = new GeoPoint(mLatitude, mLongitude);
IMapController mapController = mMapView.getController();
mapController.setZoom(5);
mapController.setCenter(geoPoint);
Overlay overlay = new Overlay(getActivity()) {
ItemizedIconOverlay<OverlayItem> items = null;
@Override
protected void draw(Canvas c, MapView osmv, boolean shadow) {
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e, MapView mapView) {
Projection proj = mapView.getProjection();
GeoPoint loc = (GeoPoint) proj.fromPixels((int)e.getX(), (int)e.getY());
double longitude = loc.getLongitude();
double latitude = loc.getLatitude();
mLatitude = latitude;
mLongitude = longitude;
ArrayList<OverlayItem> markers = new ArrayList<>();
OverlayItem item = new OverlayItem("", "", new GeoPoint(latitude, longitude));
item.setMarker(ContextCompat.getDrawable(getActivity(), R.drawable.ic_maps_marker_large));
markers.add(item);
if (items == null) {
items = new ItemizedIconOverlay<>(getActivity(), markers, null);
mMapView.getOverlays().add(items);
mMapView.invalidate();
} else {
mMapView.getOverlays().remove(items);
mMapView.invalidate();
items = new ItemizedIconOverlay<>(getActivity(), markers, null);
mMapView.getOverlays().add(items);
}
return true;
}
};
mMapView.getOverlays().add(overlay);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.