2017-02-09 81 views
0

我有一个应用程序,其中,我得到用户当前位置并在当前位置添加标记,它是完美的作品,但我有一些纬度和经度,我想用标记在地图上显示在地图上添加标记Android

纬度,经度是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直升机Tyagi然后你有什么问题。 –

回答

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 LatLng(双,双)不能应用于(java.lang.string,java.lang.string)... 所以我转换为双重 –

+0

@DhruvTyagi这是伟大的 –

+0

bt仍然存在问题有没有 –

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循环

for (LatLng point : latlngs) { 
    options.position(point); 
    options.title("Marker Title"); 
    options.snippet("Marker Desc"); 
    googleMap.addMarker(options); 
} 
相关问题