即使LatLng不在定义的边界内,LatLngBounds.contains也会返回true

时间:2015-06-01 05:59:01

标签: android google-maps

我很难过;做ff。如果trueLatLng范围内,或者LatLngBounds只是true是由{LatLng设置的边界的一部分,则方法打算返回including 1}}?

https://developers.google.com/android/reference/com/google/android/gms/maps/model/LatLngBounds#contains(com.google.android.gms.maps.model.LatLng)

到目前为止,我的测试适得其反;即使LatLng超出LatLngBounds

,它也会返回true
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

It should return false if it's outside the Polygon (LatLngBounds defined)

2 个答案:

答案 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();
            }

结果:

InAustralia

然后,在旧金山的一个点测试:

            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();
            }

结果:

InSanFrancisco

所以,考虑到一个明确的例子,它看起来像预期的那样工作。

问题是,为了使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)

接收到的边界值是否正确?如果没有,可能是权限错误。