Đối với các API của Google Maps dành cho Android, bạn có thể nhận được giới hạn bởi ...
Từ tài liệu tham khảo bản đồ, có Projection
bởi getProjection(). Và,
phép chiếu được sử dụng để dịch giữa vào vị trí màn hình và tọa độ địa lý ..
Vì vậy, từ chiếu, chúng ta có thể sử dụng getVisibleRegion(), và để có được VisibleRegion của bản đồ, mà chứa một số LatLngBounds, là một lớp có chứa 2 LatLng
biến, một cho góc Đông Bắc của giới hạn và một cho góc Tây Nam.
Vì vậy, các mã nên giống như thế này:
googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition position) {
LatLngBounds bounds = googleMap.getProjection().getVisibleRegion().latLngBounds;
LatLng northeast = bounds.northeast;
LatLng southwest = bounds.southwest;
Context context = getApplicationContext();
CharSequence text = "ne:"+northeast+" sw:"+southwest;
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
});
= - = - = - = - = - = chỉnh sửa:
Có thể là tôi đã quá ngây thơ, đưa ra chỉ NE và SW có thể giải quyết vấn đề này, nhưng chỉ trong trường hợp đặc biệt mà người dùng không xoay bản đồ hoặc nghiêng lên bản đồ 3D.
Vì vậy, thay vào đó, bạn chỉ có thể lấy VisibleRegion
, cung cấp 4 biến, farRight, farLeft, nearRight, nearLeft, mỗi đại diện cho 4 conners của khu vực.
Sau đó chúng ta có thể tính toán chiều rộng và chiều cao của khu vực này cho rằng 4 điểm và chọn một trong nhỏ hơn (tốt, đôi khi chiều rộng có thể lớn hơn chiều cao tôi đoán.)
Và đối với việc tính toán, chúng tôi chỉ có thể sử dụng chức năng Location.distanceBetween(x1,y1,x2,y2,result)
...
mà làm cho mã trông giống như sau:
VisibleRegion visibleRegion = googleMap.getProjection().getVisibleRegion();
LatLng farRight = visibleRegion.farRight;
LatLng farLeft = visibleRegion.farLeft;
LatLng nearRight = visibleRegion.nearRight;
LatLng nearLeft = visibleRegion.nearLeft;
float[] distanceWidth = new float[2];
Location.distanceBetween(
(farRight.latitude+nearRight.latitude)/2,
(farRight.longitude+nearRight.longitude)/2,
(farLeft.latitude+nearLeft.latitude)/2,
(farLeft.longitude+nearLeft.longitude)/2,
distanceWidth
);
float[] distanceHeight = new float[2];
Location.distanceBetween(
(farRight.latitude+nearRight.latitude)/2,
(farRight.longitude+nearRight.longitude)/2,
(farLeft.latitude+nearLeft.latitude)/2,
(farLeft.longitude+nearLeft.longitude)/2,
distanceHeight
);
float distance;
if (distanceWidth[0]>distanceHeight[0]){
distance = distanceWidth[0];
} else {
distance = distanceHeight[0];
}
cảm ơn câu trả lời của bạn, thực sự đánh giá cao !! :) – awaistoor
Tôi sẽ nói phần còn lại chỉ là một vấn đề toán học, nhưng tôi đoán tôi đã quá ngây thơ. bằng cách này, khoảng cách tính bằng mét. – kaho
người bạn đời tuyệt vời! cảm ơn một lần nữa – awaistoor