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

时间:2018-02-03 06:19:40

标签: google-maps react-native polygon react-native-maps

我有一个API,它返回一个纬度和经度数组,用于定义地图上某个区域的边界(多边形)。

an example of a polygon

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

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

4 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

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

安装简单明了:

$yarn add geolib

然后在您的React Native项目中,使用以下命令导入它:

import geolib from 'geolib'

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

答案 2 :(得分:0)

geolibe 是最好的解决方案。 react-native-geo-fencing已过时,这会导致您的项目以及更多错误 react-native-geo-fence不是您想要的

答案 3 :(得分:0)

我的代码来检查经纬度是否在许多多边形的对象内。如果坐标在多边形之一内,则返回true。

 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;

};