2017-02-09 7 views
0

У меня есть приложение, в котором я получаю текущее местоположение пользователя и добавляю маркер в текущее местоположение, и он отлично работает, но у меня есть несколько lat и lon, и я хочу показать на карте маркерДобавить маркер на карту Android

Lat, Lon в workshopList

Мой код:

public class FindServiceProviders extends AppCompatActivity implements OnMapReadyCallback, 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener, 
     LocationListener { 

    ArrayList<ServiceProviderItem> workshopList; 
    GoogleMap mGoogleMap; 
    SupportMapFragment mapFrag; 
    LocationRequest mLocationRequest; 
    GoogleApiClient mGoogleApiClient; 
    Location mLastLocation; 
    Marker mCurrLocationMarker; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

      setContentView(R.layout.activity_find_service_providers); 
      mapFrag = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
      mapFrag.getMapAsync(this); 
      init(); 
    } 


    private void init() 
    { 
     setToolBar(); 
     workshopList = new ArrayList<ServiceProviderItem>(); 
     mRecyclerView=(RecyclerView)findViewById(R.id.recyclerView); 
     mRecyclerView.setHasFixedSize(true); 
     mLayoutManager=new LinearLayoutManager(this); 
     mRecyclerView.setLayoutManager(mLayoutManager); 
     fetchServiceProviders(); 
     mAdapter=new ServiceProviderAdapter(this,workshopList); 

    } 
    @Override 
    public void onPause() { 
     super.onPause(); 

     //stop location updates when Activity is no longer active 
     if (mGoogleApiClient != null) { 
      LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 
     } 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) 
    { 
     mGoogleMap=googleMap; 
     mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 

     //Initialize Google Play Services 
     if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      if (ContextCompat.checkSelfPermission(this, 
        Manifest.permission.ACCESS_FINE_LOCATION) 
        == PackageManager.PERMISSION_GRANTED) { 
       //Location Permission already granted 
       buildGoogleApiClient(); 
       mGoogleMap.setMyLocationEnabled(true); 
      } else { 
       //Request Location Permission 
       checkLocationPermission(); 
      } 
     } 
     else { 
      buildGoogleApiClient(); 
      mGoogleMap.setMyLocationEnabled(true); 
     } 
    } 

    protected synchronized void buildGoogleApiClient() { 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 
     mGoogleApiClient.connect(); 
    } 

    @Override 
    public void onConnected(Bundle bundle) { 
     mLocationRequest = new LocationRequest(); 
     mLocationRequest.setInterval(1000); 
     mLocationRequest.setFastestInterval(1000); 
     mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); 
     if (ContextCompat.checkSelfPermission(this, 
       Manifest.permission.ACCESS_FINE_LOCATION) 
       == PackageManager.PERMISSION_GRANTED) { 
      LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); 
     } 
    } 

    @Override 
    public void onLocationChanged(Location location) 
    { 
     mLastLocation = location; 
     if (mCurrLocationMarker != null) { 
      mCurrLocationMarker.remove(); 
     } 


     LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); 
     MarkerOptions markerOptions = new MarkerOptions(); 
     markerOptions.position(latLng); 
     markerOptions.title("Current Position"); 
     markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker)); 
     markerOptions.anchor(.5f,.95f); 
     mCurrLocationMarker = mGoogleMap.addMarker(markerOptions); 

     //move map camera 
     mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,12f)); 


     if (mGoogleApiClient != null) { 
      LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 
     } 

    } 

    private void fetchServiceProviders() 
    { 
     //volley call and populate in list 
    } 



} 
+0

@ Dhruv Тяги, тогда в чем твоя проблема. –

ответ

3

вы можете просто использовать этот метод:

@Override 
    public void onMapReady(GoogleMap map) { 
     for(ServiceProviderItem item : workshopList){ 
     map.addMarker(new MarkerOptions() 
      .position(new LatLng(item.lat, item.lng)) 
      .title("Hello world")); 
     } 
    } 
+0

Я получил ошибку LatLng (double, double) в LatLng не может быть применен к (java.lang.string, java.lang.string) ... поэтому я конвертирую sring в double –

+0

@DhruvTyagi, что отлично –

+0

bt still problem есть –

1

попробовать это:

private GoogleMap googleMap; 
private MarkerOptions options = new MarkerOptions(); 
private ArrayList<LatLng> latlngs = new ArrayList<>(); //define arraylist of latlng 

вы можете добавить лат длиной до Arraylist использованием

latlngs.add(new LatLng(21.334343, 92.43434)); 

Теперь для показа их на карте использовать цикл

for (LatLng point : latlngs) { 
    options.position(point); 
    options.title("Marker Title"); 
    options.snippet("Marker Desc"); 
    googleMap.addMarker(options); 
} 
Смежные вопросы