Android - Google maps V2 - 计算当前不在视图中的标记是在屏幕的北、东、南还是西
Android - Google maps V2 - Calculate whether a marker currently not in view is North, East, South or West of screen
我希望能够计算我的地图视图中当前不在屏幕视图中的标记是否位于屏幕的上方、右侧、下方或左侧。
我已经为 return 编写了一些代码,哪些标记当前在屏幕的当前边界内外,但我对下一步该做什么有点困惑,我想知道是否有有什么方法可以做到这一点,或者以前是否有人这样做过?
检查视图中的标记:
//-----check markers in view
public void checkMarkersInView() {
//get current screen bounds
LatLngBounds currentScreen = mapView.getProjection().getVisibleRegion().latLngBounds;
//loop through each marker
for(Marker mMarker : marker) {
if(currentScreen.contains(mMarker.getPosition())) {
// marker inside visible region
} else {
// marker outside visible region
}
}
}
谢谢
您需要使用这些值计算方位角,如下所示。
private double angleFromLatLng(double lat1, double long1, double lat2, double long2) {
double dLon = (long2 - long1);
double y = Math.sin(dLon) * Math.cos(lat2);
double x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1)
* Math.cos(lat2) * Math.cos(dLon);
double brng = Math.atan2(y, x);
brng = Math.toDegrees(brng);
brng = (brng + 360) % 360;
brng = 360 - brng;
return brng;
}
注意:北0度,顺时针方向增加,即东90度,继续前进
此外,如果您有 Location
存储纬度和经度值的对象(例如 locfirst 和 locsecond),您可以使用 Location
class 中的以下函数。
float bearing = locfirst.bearingTo(locsecond);
参见参考资料here.
我希望能够计算我的地图视图中当前不在屏幕视图中的标记是否位于屏幕的上方、右侧、下方或左侧。
我已经为 return 编写了一些代码,哪些标记当前在屏幕的当前边界内外,但我对下一步该做什么有点困惑,我想知道是否有有什么方法可以做到这一点,或者以前是否有人这样做过?
检查视图中的标记:
//-----check markers in view
public void checkMarkersInView() {
//get current screen bounds
LatLngBounds currentScreen = mapView.getProjection().getVisibleRegion().latLngBounds;
//loop through each marker
for(Marker mMarker : marker) {
if(currentScreen.contains(mMarker.getPosition())) {
// marker inside visible region
} else {
// marker outside visible region
}
}
}
谢谢
您需要使用这些值计算方位角,如下所示。
private double angleFromLatLng(double lat1, double long1, double lat2, double long2) {
double dLon = (long2 - long1);
double y = Math.sin(dLon) * Math.cos(lat2);
double x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1)
* Math.cos(lat2) * Math.cos(dLon);
double brng = Math.atan2(y, x);
brng = Math.toDegrees(brng);
brng = (brng + 360) % 360;
brng = 360 - brng;
return brng;
}
注意:北0度,顺时针方向增加,即东90度,继续前进
此外,如果您有 Location
存储纬度和经度值的对象(例如 locfirst 和 locsecond),您可以使用 Location
class 中的以下函数。
float bearing = locfirst.bearingTo(locsecond);
参见参考资料here.