2016-05-29 10 views
0

Ich habe versucht, Marker hinzuzufügen, wenn mapview auf dieser question Basis berührt, das ist mein CodeAndroid: Osmdroid Marker auf Touch hinzufügen nicht genau

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

Das Problem bei der in der Markierung auf zufällige Position hinzugefügt gezoomt wird, nicht korrekt . Aber es funktioniert gut, wenn Kartenansicht herausgezoomt wird, etwa 5 Zoomstufen und darunter.

Antwort

0

(im Auftrag des OP veröffentlicht).

Schließlich ich bin in der Lage, dies zu beheben, indem Sie diesen Code verwenden:

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