检查该点是否在Google Maps多边形内



我的谷歌地图上有一些区域被划分为多边形,我想用某种方法来识别某个点是否在多边形内。我刚刚尝试了光线投射算法来识别多边形中的点,但结果并不好。它不适用于非常不规则的多边形,在我的测试中,实现是不可行的。

我会把我想做的事留在这里。

射线投射功能:

bool rayCastIntersect(LatLng tap, LatLng vertA, LatLng vertB) {
double aY = vertA.latitude;
double bY = vertB.latitude;
double aX = vertA.longitude;
double bX = vertB.longitude;
double pY = tap.latitude;
double pX = tap.longitude;
if ((aY > pY && bY > pY) || (aY < pY && bY < pY) || (aX < pX && bX < pX)) {
return false; // a and b can't both be above or below pt.y, and a or
// b must be east of pt.x
}

检查标记是否在多边形内的功能,继续光线投射:

bool _checkIfValidMarker(LatLng tap, List<LatLng> vertices) {
int intersectCount = 0;
for (int j = 0; j < vertices.length - 1; j++) {
if (rayCastIntersect(tap, vertices[j], vertices[j + 1])) {
intersectCount++;
}
}
return ((intersectCount % 2) == 1); // odd = inside, even = outside;
}

测试区域声明:

List<LatLng> _areaRed = [
LatLng(-20.54564560298607, -48.93099261363096),
LatLng(-20.47020914370705, -47.585960450443444),
LatLng(-20.888624642495724, -47.564486265123804),
LatLng(-21.275431646124073, -47.44904100868184),
LatLng(-21.53038557354785, -48.50412611872714)
];
List<LatLng> _areaBlue = [
LatLng(-20.583742560626508, -47.36628976946108),
LatLng(-19.732037376448474, -47.11388584796422),
LatLng(-20.091216049597158, -46.00876597546445),
LatLng(-20.70503248593602, -46.48287604422207),
LatLng(-21.297307144955976, -47.24008780871265)
];
List<LatLng> _areaGreen = [
LatLng(-20.588467827088945, -48.26017166238112),
LatLng(-18.32058633744915, -50.27657970099416),
LatLng(-17.474497720584548, -48.19666274777912),
LatLng(-17.988676302476964, -46.25964085241858),
LatLng(-18.877360628508573, -46.9899933703414)
];

调用函数来检查某个区域内的点_currentLocation.latitude是指GPS拍摄的位置,但我也用固定坐标进行了测试。

insideArea = _checkIfValidMarker(LatLng(_currentLocation.latitude, _currentLocation.longitude),            
_areaGreen);

我设法使用maps_toolkit使用PolygonUtil.containsLocation求解-计算给定点是否位于指定多边形内。它与我的谷歌地图包相冲突,所以我创建了一个孤立的类,只是为了检查并将响应发送到我的主屏幕。对不起我的英语。。

相关内容

  • 没有找到相关文章

最新更新