2016-05-29 4 views
0

я попытался добавить маркер, когда MapView прикасались на основе этого question, это мой кодAndroid: Osmdroid добавить маркер на ощупь не точный

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); 

Проблема при увеличении маркера добавлено случайное положение, не точны , Но он отлично работает, если масштабирование карты уменьшено, возможно, около 5 уровней масштабирования и ниже.

ответ

0

(Отправлено от имени ОП).

Наконец я могу исправить это с помощью этого кода:

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);