PolyUtil.containsLocation 没有按预期工作
PolyUtil.containsLocation doesn't work as expected
我做了一个简单的测试:
LatLng city = new LatLng(53.121896, 18.010110);
List<LatLng> pts = new ArrayList<>();
pts.add(new LatLng(53.520790, 17.404158));
pts.add(new LatLng(53.450445, 19.209022));
pts.add(new LatLng(52.659365, 17.656366));
pts.add(new LatLng(52.525305, 19.303601));
LatLngBounds bounds = new LatLngBounds(pts.get(2), pts.get(1));
boolean contains1 = PolyUtil.containsLocation(city.latitude, city.longitude, pts, true);
System.out.println("contains1: " + contains1);
boolean contains2 = bounds.contains(city);
System.out.println("contains2: " + contains2);
工作原理如下:
- 我创建了一个特定点 (
city
),我想测试它是否在多边形内,
- 我将多边形声明为 4 个点,边界为 2 个点(东北
和西南)。
输出为:
contains1: false
contains2: true
为什么 PolyUtil.containsLocation
returns 错误?我在这里错过了什么?这很简单,你可以在 google 地图上测试这些点。
PolyUtil 是 class 来自 android 地图的实用工具,由 Google 提供:'com.google.maps.android:android-maps-utils:0.5'
您应该以正确的顺序定义多边形的顶点。让我们用截图来解释,因为图片价值千言万语。目前您有以下多边形顶点
如果您尝试为示例中的数组列表绘制多边形,您将看到以下多边形。
如您所见,城市确实在多边形之外,PolyUtil 给出了正确的结果。同时,您使用西南和东北顶点正确定义边界,因此城市在边界内。要解决此问题,您应该交换示例中的第 3 点和第 4 点。
LatLng city = new LatLng(53.121896, 18.010110);
List<LatLng> pts = new ArrayList<>();
pts.add(new LatLng(53.520790, 17.404158));
pts.add(new LatLng(53.450445, 19.209022));
pts.add(new LatLng(52.525305, 19.303601));
pts.add(new LatLng(52.659365, 17.656366));
bounds = new LatLngBounds(pts.get(3), pts.get(1));
boolean contains1 = PolyUtil.containsLocation(city.latitude, city.longitude, pts, true);
System.out.println("contains1: " + contains1);
boolean contains2 = bounds.contains(city);
System.out.println("contains2: " + contains2);
您可以在 https://github.com/xomena-so/so44523611
找到我用来创建屏幕截图的示例项目
希望对您有所帮助!
我做了一个简单的测试:
LatLng city = new LatLng(53.121896, 18.010110);
List<LatLng> pts = new ArrayList<>();
pts.add(new LatLng(53.520790, 17.404158));
pts.add(new LatLng(53.450445, 19.209022));
pts.add(new LatLng(52.659365, 17.656366));
pts.add(new LatLng(52.525305, 19.303601));
LatLngBounds bounds = new LatLngBounds(pts.get(2), pts.get(1));
boolean contains1 = PolyUtil.containsLocation(city.latitude, city.longitude, pts, true);
System.out.println("contains1: " + contains1);
boolean contains2 = bounds.contains(city);
System.out.println("contains2: " + contains2);
工作原理如下:
- 我创建了一个特定点 (
city
),我想测试它是否在多边形内, - 我将多边形声明为 4 个点,边界为 2 个点(东北 和西南)。
输出为:
contains1: false
contains2: true
为什么 PolyUtil.containsLocation
returns 错误?我在这里错过了什么?这很简单,你可以在 google 地图上测试这些点。
PolyUtil 是 class 来自 android 地图的实用工具,由 Google 提供:'com.google.maps.android:android-maps-utils:0.5'
您应该以正确的顺序定义多边形的顶点。让我们用截图来解释,因为图片价值千言万语。目前您有以下多边形顶点
如果您尝试为示例中的数组列表绘制多边形,您将看到以下多边形。
如您所见,城市确实在多边形之外,PolyUtil 给出了正确的结果。同时,您使用西南和东北顶点正确定义边界,因此城市在边界内。要解决此问题,您应该交换示例中的第 3 点和第 4 点。
LatLng city = new LatLng(53.121896, 18.010110);
List<LatLng> pts = new ArrayList<>();
pts.add(new LatLng(53.520790, 17.404158));
pts.add(new LatLng(53.450445, 19.209022));
pts.add(new LatLng(52.525305, 19.303601));
pts.add(new LatLng(52.659365, 17.656366));
bounds = new LatLngBounds(pts.get(3), pts.get(1));
boolean contains1 = PolyUtil.containsLocation(city.latitude, city.longitude, pts, true);
System.out.println("contains1: " + contains1);
boolean contains2 = bounds.contains(city);
System.out.println("contains2: " + contains2);
您可以在 https://github.com/xomena-so/so44523611
找到我用来创建屏幕截图的示例项目希望对您有所帮助!