v2 Android지도의지도 중심을 얻는 방법은 무엇입니까?


81

Android v1 용 Google지도 에서 MapView에는 getMapCenter(). 이제이 API의 v2 로지도 센터를 얻는 방법을 알 수 없습니다 . API 문서를 숙독했지만 그러한 기능에 대한 언급은 없습니다. 조언하십시오.

고마워, 이고르

답변:


194

나는 같은 문제가 있었다. 이런 식으로 센터를 얻을 수있는 것 같습니다.

mMap.getCameraPosition().target

여기서 mMap은 활동의 GoogleMap 인스턴스입니다. 이렇게하면 기본적으로지도의 중심을 나타내는 LatLng 객체가 반환됩니다.

점을 유의 GeoPoint클래스는 더 이상 사용할 수 없습니다.

http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.html 에 따르면

target은 "카메라가 가리키는 위치"입니다. (샘플 코드로 테스트했는데 괜찮 았습니다)


1
감사합니다. v2에서 GeoPoint를 사용할 수 없다는 사실을 몰랐습니다. VisibleRegion 객체를 사용하여지도 디스플레이의 네 모서리 사이의 중간 지점을 계산하려고했습니다.
— IgorGanapolsky

@Radu Comaneci html 자바 스크립트로 동일한 작업을 수행하는 방법은 무엇입니까? 어떤 생각
— Ankesh 쿠마 Jaisansaria

대답은 잘하지만, 메신저 저작권 구글 기호를 이동하는 예를 들어 패딩을 사용하는 경우지도의 중심이이 패딩 값을 얻을 수 있도록이 영향을 도착
— sdelvalle57

34

두 가지 방법을 찾았습니다.

1) 가장 쉬운 방법, 첫 번째는 Map의 CameraPosition Object에서 target 속성을 사용하는 것입니다.

 LatLng center = mMap.getCameraPosition().target;

2) 두 번째는 VisibleRegion 객체를 사용하는 것입니다.

VisibleRegion visibleRegion = mMap.getProjection()
                    .getVisibleRegion();

Point x = mMap.getProjection().toScreenLocation(
                    visibleRegion.farRight);

Point y = mMap.getProjection().toScreenLocation(
                    visibleRegion.nearLeft);

Point centerPoint = new Point(x.x / 2, y.y / 2);

LatLng centerFromPoint = mMap.getProjection().fromScreenLocation(
                    centerPoint);

두 답변을 비교했습니다.

Log.d("MapFragment: ", "Center From camera: Long: " + center.longitude
                        + " Lat" + center.latitude);

Log.d("Punto x", "x:" + x.x + "y:" + x.y);
Log.d("Punto y", "y:" + y.x + "y:" + y.y);

Log.d("MapFragment: ", "Center From Point: Long: "
                    + centerFromPoint.longitude + " Lat"
                    + centerFromPoint.latitude);

1
옵션 2는 옵션 1과 완전히 다른 대답을 제공합니다. 투명한 툴바가 있기 때문일까요? 팁 고마워!
— Flyingkiwi

3
그래서 어떤 방법이 정확합니까?
— Abdullah Shoaib 2015

@shontauro html javascript로 동일한 작업을 수행하는 방법은 무엇입니까? 어떤 생각
— Ankesh 쿠마 Jaisansaria

1
자바 스크립트는 모른다.
— shontauro 2010 년

15

당신이 사용할 수있는 :

latlng=map.getProjection().getVisibleRegion().latLngBounds.getCenter();

이 솔루션으로 정확성
— 확보

6

지도의 중심을 얻기 위해 활동에서 onMapReady () 메서드를 사용한 다음 사용했습니다 googleMap.setOnCameraChangeListener() method to get position of Came.

@Override
public void onMapReady(GoogleMap googMap) {
    googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
        @Override
        public void onCameraChange(CameraPosition cameraPosition) {

       Log.i("centerLat",cameraPosition.target.latitude);

       Log.i("centerLong",cameraPosition.target.longitude);

        }
    });
}

5

위치를 한 번만 얻으려면 (예 : 사용자가지도 이동을 중지 한 후) 다음을 사용합니다 setOnCameraIdleListener.

https://developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap.OnCameraIdleListener

mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
    @Override
    public void onCameraIdle() {
        LatLng position = mMap.getCameraPosition().target;
        Log.d("MapActivity", "Position: " + position);
    }
});

또는 Java 8 람다 사용 :

mMap.setOnCameraIdleListener(() -> {
    LatLng position = mMap.getCameraPosition().target;
    Log.d("MapActivity", "Position: " + position);
});

에 등록 된 리스너 setOnCameraChangeListener는 여러 번 호출되며 설명서에 다음 과 같이 나와 있습니다.

이것은 매 프레임마다 한 번씩 호출 될 수 있으며 값 비싼 작업을 수행해서는 안됩니다.


3

cameraPosition을 사용하는 가장 좋은 방법

자바:

LatLng centerMap = googleMap.getCameraPosition().target;

코 틀린 :

googleMap?.cameraPosition?.target?.let {
    // it is LatLng center
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.