gpt4 book ai didi

android - LatLngBounds.contains 返回真,即使 LatLng 不在定义的边界内

转载 作者:搜寻专家 更新时间:2023-11-01 07:54:11 29 4
gpt4 key购买 nike

我被难住了;做 ff。如果 LatLngLatLngBounds 内,方法打算返回 true 还是仅在 时返回 true >LatLngincluding 设置的边界的一部分吗?

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

到目前为止,我的测试效果适得其反;即使 LatLngLatLngBounds 之外,它也会返回 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
}

我所做的是,如果相机在 Polygon 之外平移(我也记录了它),我会显示一条 Toast 消息,但显然,我必须滚动远离用于显示的 Polygon

我使用 Polygon.getPoints 作为我的 LatLngBounds

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

最佳答案

我只是做了一个简单的测试,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:

Creates a new bounds based on a southwest and a northeast corner.

The bounds conceptually includes all points where:

the latitude is in the range [northeast.latitude, southwest.latitude]; the longitude is in the range [southwest.longtitude, northeast.longitude] if southwest.longtitude ≤ northeast.longitude; and the longitude is in the range [southwest.longitude, 180) ∪ [-180, northeast.longitude] if southwest.longtitude > northeast.longitude.

如果通过调用 including() 修改边界,文档说明边界将像这样修改:

Returns a new LatLngBounds that extends this LatLngBounds to include the given LatLng. This will return the smallest LatLngBounds that contains both this and the extra point.

In particular, it will consider extending the bounds both in the eastward and westward directions (one of which may cross the antimeridian) and choose the smaller of the two. In the case that both directions result in a LatLngBounds of the same size, this will extend it in the eastward direction.

关于android - LatLngBounds.contains 返回真,即使 LatLng 不在定义的边界内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30566536/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com