判断一个点是否在边界内

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

我正在尝试解决有关点和边界的问题。

我的问题:

  • 我设置了一个地图,用户可以点击来固定标记,每当用户固定标记时,我都会发送该标记 LatLng 服务器来检查该标记是否有效。这里的“有效”意味着它位于边界内(管理员将在管理页面中指定的城市/地区),我可以使用地图服务提供的 API 来做到这一点。
  • 我可以在本地查看吗?因为我不想多次调用 API(每次用户固定标记),所以我读到了有关 LatLng 边界的内容,但一个地区/城市有很多点(许多 LatLong 而不是 4 LatLng 中的一个框)。所以这里有两个问题我想解决,如何找到城市/地区的边界,以及如何确定我的标记是否位于该边界内。

我正在尝试使用 LatlngBounds 来解决,但似乎这个边界通常使用 4 个点

typescript react-native leaflet
1个回答
0
投票

您可以获取城市/地区的数据并将其保存为GeoJSON格式,这是存储和共享地理边界的常用格式。

OpenStreetMap
,政府GIS数据或其他地图服务提供城市/地区的GeoJSON数据。

用于检查一个点是否在边界内,即多边形(形成边界的点的集合)城市或地区,例如:

const cityBoundary = {
  "type": "Polygon",
  "coordinates": [
    [
      [lng1, lat1],
      [lng2, lat2],
      ...
      [lng1, lat1] 
    ]
  ]
};

那么你可以使用

point-in-polygon
算法。您可以使用像 turf.js 这样的库来检查点是否在多边形内部。

如何实现这一目标的示例

// the point
const markerPoint = [markerLng, markerLat];

// Check if inside the polygon
const isInside = turf.booleanPointInPolygon(markerPoint, cityBoundary);

if (isInside) {
  console.log("The point is within the boundnary");
} else {
  console.log("The point is outside the boundary");
}

API 文档中有关

booleanPointInPolygon
方法的一些示例 https://turfjs.org/docs/api/booleanPointInPolygon#examples

© www.soinside.com 2019 - 2024. All rights reserved.