我很难过;做ff。如果true
在LatLng
范围内,或者LatLngBounds
只是true
是由{LatLng
设置的边界的一部分,则方法打算返回including
1}}?
到目前为止,我的测试适得其反;即使LatLng
超出LatLngBounds
。
LatLngBounds latLngBounds = // Get the boundaries of a location
LatLng target = cameraPosition.target; // returns the center of the camera
if (!latLngBounds.contains(target)) {
// do processes
}
我所做的是如果相机在Toast
之外播放(我也记录它),我会显示Polygon
消息,但显然,我必须离开Polygon
它显示。
我使用Polygon.getPoints
作为LatLngBounds
答案 0 :(得分:4)
我刚刚进行了一个简单的测试,contains()
方法将对边界内的任何点返回true,并且对于它认为在边界之外的点返回false。
我使用了一个极端的例子,为澳大利亚国家设定了边界,并在澳大利亚境内测试了一个点,在旧金山测试了一个点。
界限:
private LatLngBounds AUSTRALIA = new LatLngBounds(
new LatLng(-44, 113), new LatLng(-10, 154));
首先在澳大利亚进行测试:
if (AUSTRALIA.contains(new LatLng(-31.693598,147.843026))){
Toast.makeText(MapsActivity.this, "inside bounds", Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(MapsActivity.this, "outside bounds", Toast.LENGTH_LONG).show();
}
结果:
然后,在旧金山的一个点测试:
if (AUSTRALIA.contains(new LatLng(37.7942635,-122.3955861))){
Toast.makeText(MapsActivity.this, "inside bounds", Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(MapsActivity.this, "outside bounds", Toast.LENGTH_LONG).show();
}
结果:
所以,考虑到一个明确的例子,它看起来像预期的那样工作。
问题是,为了使contains()
方法返回false,您需要在多远的范围之外。
对于此测试,我没有对including()
进行任何调用,因此假设contains()
方法可能会根据文档中的描述返回true:
根据西南角和东北角创建新界限。
边界在概念上包括所有点:
纬度在[northeast.latitude,southwest.latitude]范围内; 经度在[西南。长度, 如果西南。长度≤东北。长度;东北。 经度在[southwest.longitude,180]∪[-180, northeast.longitude] if southwest.longtitude> northeast.longitude。
如果通过调用including()
修改了边界,则文档说明边界将被修改如下:
返回一个新的LatLngBounds,它将此LatLngBounds扩展为包含 给定的LatLng。这将返回最小的LatLngBounds 包含这个和额外的点。
特别是,它会考虑扩展两者的界限 向东和向西的方向(其中一个可能穿过 antimeridian)并选择两者中较小的一个。在两者的情况下 方向导致相同大小的LatLngBounds,这将扩展 它在向东的方向。
答案 1 :(得分:0)
接收到的边界值是否正确?如果没有,可能是权限错误。