【问题标题】:Check if point is within rectangle (all given by Longitutde / Latitude on Earth (Sphere))检查点是否在矩形内(全部由地球上的经度/纬度(球体)给出)
【发布时间】:2021-09-02 23:56:46
【问题描述】:

给定一个坐标为 (long, lat) 的点,并给定一个矩形的 4 个边点,坐标为 (long1, lat1), (long2, lat2), (long3, lat3), (long4, lat4)。

如何检查该点是否在球体的矩形内(例如,矩形可能不是“平面”)?

一个点是否在矩形内的简单检查对我来说很清楚,但如果我们假设点和矩形在地球上,我认为这是不正确的。

您有什么建议或解决方案吗?我需要找到使用 NodeJS 的解决方案。也许有这样的任务框架?

【问题讨论】:

  • 这样的矩形有多大?你是几南几北?你想精确到什么程度?小于 500 公里,纬度 72 度以下:笛卡尔数学就足够了(参见 UTM)
  • 这会有所不同。用户可以在地球地图内缩小和缩小,矩形就是“地图”本身。我们如何以不同的方式实现它 - 使用欧几里得数学?
  • 哪个投影?换句话说,您可能已经在某侧有恒定的经度,也可能还有恒定的纬度,这简化了计算。但是如果矩形是窗口本身,......你如何从纬度/经度计算x,y?只需计算该点的 x,y 并检查它是否在屏幕边界内(并且屏幕是笛卡尔/欧几里得)。 [对我来说“笛卡尔”:在欧几里得空间中与垂直轴坐标,所以是的,使用欧几里得数学]

标签: node.js geolocation coordinates latitude-longitude


【解决方案1】:

我建议看一下非常有用的geolib,它支持检查点是否在多边形中:isPointInPolygon,应该足以满足您的需求:

const point = { latitude: 51.5125, longitude: 7.485 };
const polygon = [
    { latitude: 51.5, longitude: 7.4 },
    { latitude: 51.555, longitude: 7.4 },
    { latitude: 51.555, longitude: 7.625 },
    { latitude: 51.5125, longitude: 7.625 },
];

console.log(geolib.isPointInPolygon(point, polygon))
<script src="https://unpkg.com/geolib@3.3.1/lib/index.js"></script> 

【讨论】:

  • 嗯,我检查了代码,但这也只是“isPointInPolygon”函数中的一个微不足道的检查。问题是,矩形在地球/球体上,因此“不是”真正的矩形。我假设,这种方法是不正确的,还是我理解错了?
  • 该方法将确定该点是否在地球表面的多边形内。如果多边形代表一个矩形,它将是一个极坐标中的矩形,例如纬度、经度等不是 3D 空间中的“真实”矩形。但是,如果您的目标是确定某个点是否在地球表面的指定区域内,那么它应该可以很好地工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多