【问题标题】:Add another marker on the map with current location and marker is visiable to bounds在地图上添加另一个具有当前位置的标记,并且标记对边界可见
【发布时间】:2016-09-19 07:09:44
【问题描述】:

我目前正在制作地图,我必须在地图上显示两个标记,一个是当前位置,另一个是目标位置,并且它们处于最大缩放状态,两个标记都应该在地图上可见。 目前,我正在以最大缩放获得当前位置,工作完美,现在我不知道如何添加第二个标记,即目的地以及在哪里获得最大缩放。

感谢任何帮助!我试过了:

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

    LocationRequest mLocationRequest;
    GoogleApiClient mGoogleApiClient;

    LatLng latLng;
    GoogleMap mGoogleMap;
    SupportMapFragment mFragment;
    Marker currLocationMarker;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.content_map_main);
        mFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.googlemap);
        mFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap gMap) {
        mGoogleMap = gMap;


        mGoogleMap.setMyLocationEnabled(true);

        buildGoogleApiClient();

        mGoogleApiClient.connect();

    }

    protected synchronized void buildGoogleApiClient() {
        Toast.makeText(this, "buildGoogleApiClient", Toast.LENGTH_SHORT).show();
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
    }

    @Override
    public void onConnected(Bundle bundle) {
        Toast.makeText(this, "onConnected", Toast.LENGTH_SHORT).show();

        Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
                mGoogleApiClient);
        if (mLastLocation != null) {
            //place marker at current position
            //mGoogleMap.clear();

            latLng = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());
            MarkerOptions markerOptions = new MarkerOptions();
            markerOptions.position(latLng);
            markerOptions.title("Current Position");
            markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA));
            currLocationMarker = mGoogleMap.addMarker(markerOptions);

        }

        mLocationRequest = new LocationRequest();
        mLocationRequest.setInterval(5000); //5 seconds
        mLocationRequest.setFastestInterval(3000); //3 seconds
        mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
        //mLocationRequest.setSmallestDisplacement(0.1F); //1/10 meter
        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);

    }

    @Override
    public void onConnectionSuspended(int i) {
        Toast.makeText(this,"onConnectionSuspended",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        Toast.makeText(this,"onConnectionFailed",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onLocationChanged(Location location) {

        //place marker at current position
        //mGoogleMap.clear();
        if (currLocationMarker != null) {
            currLocationMarker.remove();
        }
        latLng = new LatLng(location.getLatitude(), location.getLongitude());
        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.position(latLng);
        markerOptions.title("My Position");
        markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA));
        currLocationMarker = mGoogleMap.addMarker(markerOptions);

        Toast.makeText(this,"Location Changed",Toast.LENGTH_SHORT).show();
        CameraPosition cameraPosition = new CameraPosition.Builder()
                .target(latLng).zoom(14).build();

        mGoogleMap.animateCamera(CameraUpdateFactory
                .newCameraPosition(cameraPosition));
    }
}

【问题讨论】:

  • 您想在地图上显示的目的地纬度在哪里?
  • @nitishpatel 我想知道,在哪里添加目的地 lat 和 lng ,我很难假设目的地 lat 和 lng 是 22.5726 和 88.3639
  • 您可以在显示当前位置时通过传递 22.5726 和 88.3639 来调用它的 onMapReady() 方法。
  • 谢谢,让我试一试,让你知道

标签: android google-maps marker


【解决方案1】:

您可以创建一个包含两个标记的LatLngBounds,然后将相机移动到该LatLngBounds

// Add the markers to the map
LatLng latlng1 = new LatLng(8,48);
googleMap.addMarker(new MarkerOptions().position(latlng1));
LatLng latlng2 = new LatLng(8.1,48.1);
googleMap.addMarker(new MarkerOptions().position(latlng2));

// Make both markers visible
LatLngBounds bounds = new LatLngBounds(latlng1, latlng2); // Create a LatLngBounds including both LatLng
mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 50)); // Animate the camera to the given LatLngBounds with 50px padding

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多