简体   繁体   English

Android:Osmdroid在触摸上添加标记不准确

[英]Android: Osmdroid add marker on touch not accurate

I tried to add marker when mapview touched based on this question , this is my code 我试图根据此问题在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);

The problem is when zoomed in marker added on random position, not accurate. 问题是放大标记添加到随机位置时不准确。 But it's working fine if mapview zoomed out, maybe about 5 zoom level and below. 但是,如果mapview缩小(大约在5缩放级别及以下),效果很好。

(Posted on behalf of the OP). (代表OP发布)。

Finally I'm able to fix this by using this code: 最后,我可以使用以下代码解决此问题:

    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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM