Tôi tìm thấy giải pháp cho Google Map API v2 từ vài phản ứng:
stackoverflow#1 và stackoverflow#2
Vì vậy, cần thiết phải thực hiện Hoạt động từ GoogleMap.OnCameraChangeListener giao diện
private static final int REQUEST_CODE_GOOGLE_PLAY_SERVECES_ERROR = -1;
private static final double EARTH_RADIOUS = 3958.75; // Earth radius;
private static final int METER_CONVERSION = 1609;
private GoogleMap mGoogleMap;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout);
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(mContext);
if (status != ConnectionResult.SUCCESS)
{
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, activity,
REQUEST_CODE_GOOGLE_PLAY_SERVECES_ERROR);
dialog.show();
mGoogleMap = null;
}
else
{
mGoogleMap = ((SupportMapFragment) getFragmentManager().findFragmentById(
R.id.fragment_shops_layout_maps_fragment)).getMap();
mGoogleMap.setOnCameraChangeListener(this);
}
}
Các người nghe, làm việc mà khi bản đồ được chia tỷ lệ. Xác định là LatLng các vị trí dưới cùng bên trái, dưới cùng bên phải, trên cùng bên trái và trên cùng bên phải của bản đồ, hiển thị trên màn hình. Bên cạnh màn hình lớn nhất và hai điểm chúng tôi có thể lấy bán kính từ trung tâm bản đồ.
@Override
public void onCameraChange(CameraPosition cameraPosition)
{
// Listener of zooming;
float zoomLevel = cameraPosition.zoom;
VisibleRegion visibleRegion = mGoogleMap.getProjection().getVisibleRegion();
LatLng nearLeft = visibleRegion.nearLeft;
LatLng nearRight = visibleRegion.nearRight;
LatLng farLeft = visibleRegion.farLeft;
LatLng farRight = visibleRegion.farRight;
double dist_w = distanceFrom(nearLeft.latitude, nearLeft.longitude, nearRight.latitude, nearRight.longitude);
double dist_h = distanceFrom(farLeft.latitude, farLeft.longitude, farRight.latitude, farRight.longitude);
Log.d("DISTANCE: ", "DISTANCE WIDTH: " + dist_w + " DISTANCE HEIGHT: " + dist_h);
}
Khoảng cách trả về giữa 2 điểm, được lưu trữ dưới dạng 2 cặp tại mét;
public double distanceFrom(double lat1, double lng1, double lat2, double lng2)
{
// Return distance between 2 points, stored as 2 pair location;
double dLat = Math.toRadians(lat2 - lat1);
double dLng = Math.toRadians(lng2 - lng1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(Math.toRadians(lat1))
* Math.cos(Math.toRadians(lat2)) * Math.sin(dLng/2) * Math.sin(dLng/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double dist = EARTH_RADIOUS * c;
return new Double(dist * METER_CONVERSION).floatValue();
}
Nếu bạn muốn có được bán kính của khu vực, được hiển thị trên màn hình chỉ cần chia hết cho 2.
Tôi hy vọng sẽ hữu ích!
bạn đang sử dụng api nào? –
Hỗ trợ API ít nhất là API 11, nhưng hỗ trợ API 8-10 sẽ là tốt đẹp – longilong
tôi đang hỏi về phiên bản api bản đồ của bạn. là 1,2 hoặc3 –