Làm thế nào để lấy tâm bản đồ cho bản đồ android v2?


81

Trong Google Maps dành cho Android v1 , MapView có một phương pháp tiện theo dõi: getMapCenter(). Bây giờ tôi không thể tìm ra cách để có được trung tâm bản đồ với v2 của api này. Tôi đã xem xét tài liệu API, nhưng không có đề cập đến tính năng như vậy. Xin hãy tư vấn.

Cảm ơn, Igor

Câu trả lời:


194

Tôi đã từng gặp vấn đề tương tự. Có vẻ như bạn có thể lấy trung tâm theo cách này:

mMap.getCameraPosition().target

trong đó mMap là phiên bản GoogleMap từ hoạt động của bạn. Điều này sẽ trả về một đối tượng LatLng về cơ bản đại diện cho trung tâm của bản đồ.

Lưu ý rằng GeoPointlớp học không còn khả dụng nữa.

Theo http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.html

mục tiêu là "Vị trí mà máy ảnh đang hướng vào." (Tôi đã thử nghiệm nó với mã mẫu và nó hoạt động ổn đối với tôi)


1
Cảm ơn, tôi không nhận ra rằng GeoPoint không khả dụng trong phiên bản v2. Tôi sẽ sử dụng đối tượng VisibleRegion để tính toán điểm giữa giữa bốn góc của màn hình bản đồ.
IgorGanapolsky 19/12/12

@Radu Comaneci Làm thế nào để làm điều tương tự với html javascript? Bất cứ ý tưởng
Ankesh kumar Jaisansaria

Tốt câu trả lời, nhưng điều này bị ảnh hưởng nếu im sử dụng một đệm ví dụ để di chuyển dấu google bản quyền, vì vậy trung tâm của bản đồ sẽ nhận được giá trị đệm này là tốt
sdelvalle57

34

Tôi đã tìm thấy hai cách để làm điều này:

1) Dễ nhất, Đầu tiên là sử dụng thuộc tính mục tiêu trong Đối tượng Vị trí Máy ảnh của Bản đồ

 LatLng center = mMap.getCameraPosition().target;

2) Thứ hai là sử dụng đối tượng 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);

Tôi đã so sánh cả hai câu trả lời:

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
Tùy chọn 2 cho tôi một câu trả lời hoàn toàn khác với tùy chọn 1. Có thể vì tôi có Thanh công cụ trong suốt? Cảm ơn vì tiền hỗ trợ!
Flyingkiwi

3
vậy phương pháp nào là chính xác?
Abdullah Shoaib

@shontauro Làm thế nào để làm điều tương tự với html javascript? Bất cứ ý tưởng
Ankesh kumar Jaisansaria

1
javascript không có ý tưởng.
shontauro

15

Bạn có thể dùng :

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

Nhận độ chính xác với giải pháp này
VVB

6

để lấy trung tâm của bản đồ, tôi đã sử dụng phương thức onMapReady () trong hoạt động, sau đó sử dụng 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

Nếu bạn chỉ muốn nhận vị trí một lần (ví dụ: sau khi người dùng ngừng quét bản đồ), hãy sử dụng 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);
    }
});

hoặc sử dụng lambda Java 8:

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

Lưu ý rằng trình nghe đã đăng ký setOnCameraChangeListenerđược gọi nhiều lần và như tài liệu chỉ rõ:

Điều này có thể được gọi thường xuyên như một lần mỗi khung hình và không nên thực hiện các thao tác tốn kém.


3

cách tốt nhất sử dụng máy ảnh

java:

LatLng centerMap = googleMap.getCameraPosition().target;

kotlin:

googleMap?.cameraPosition?.target?.let {
    // it is LatLng center
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.