检查 react-native-maps 中的多边形内是否存在点?

Check if point exists within a polygon in react-native-maps?

我有一个 API,returns 一组定义地图(多边形)区域边界的纬度和经度。

在我的 react-native 应用程序中,我安装了 react-native-maps。如何检查用户的位置是否在 api 返回的多边形中?

我知道这可以通过具有 containsLocation() 功能的 google 网络地图来实现。 react-native-maps 是否存在这样的函数?

react-native-maps 没有公开该功能,但我知道有两个包可以帮助您:

  1. react-native-geo-fencing 与您提到的 google 地图实用程序的作用相同。

  2. react-native-geo-fence 为您处理位置检查并公开您可以挂接的事件。

对于仍在寻找更简单的替代方案(或我需要的 Circle 支持)的任何人,请考虑使用 geolibhttps://github.com/manuelbieh/Geolib.

安装简单明了:

$yarn add geolib

之后在您的 React Native 项目中,使用以下方式导入它:

import geolib from 'geolib'

然后按照 README.md 中的说明使用 API。

geolibe 是最好的解决方案。 react-native-geo-fencing 已弃用,它会导致您的项目出现更多错误,并且 react-native-geo-fence不是你想要的

我的代码用于检查纬度、经度是否在许多多边形的对象内部。如果坐标在其中一个多边形内,则 returns 为真。

 isInsidePoly = (lat, lon, multiPolycoords) => {
// ray-casting algorithm based on
// https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html/pnpoly.html

var x = lat,
  y = lon;

var inside = false;
multiPolycoords.map(poly => {
  vs = poly;
  for (var i = 0, j = vs.length - 1; i < vs.length; j = i++) {
    var xi = vs[i].latitude,
      yi = vs[i].longitude;
    var xj = vs[j].latitude,
      yj = vs[j].longitude;

    var intersect =
      yi > y != yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;
    if (intersect) inside = !inside;
  }
});

return inside;

};