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.