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

问题描述 投票:0回答:4

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

an example of a polygon

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

我知道这可以通过谷歌地图网络的

containsLocation()
功能来实现。
react-native-maps
是否存在这样的函数?

google-maps react-native polygon react-native-maps
4个回答
10
投票

对于任何仍在寻找更简单替代方案的人(或需要

Circle
支持,就像我需要的那样),请考虑使用
geolib
https://github.com/manuelbieh/Geolib

安装简单明了:

$yarn add geolib

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

import geolib from 'geolib'

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


5
投票

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

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

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


2
投票

geolib
是最好的解决方案。
react-native-geo-fencing
已被弃用,它会给您的项目带来更多错误,而且
react-native-geo-fence
不是你想要的


1
投票

我的代码用于检查经纬度是否位于多个多边形的对象内部。如果坐标位于多边形之一内,则返回 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;
  };
© www.soinside.com 2019 - 2024. All rights reserved.