【问题标题】:How to determine if one 0-360 longitude range encompasses another如何确定一个 0-360 经度范围是否包含另一个
【发布时间】:2020-07-29 17:18:08
【问题描述】:

我正在尝试使用 0-360 的经度在地球赤道周围创建扇区。我不希望用户能够创建一个完全包含另一个扇区的扇区。

例子

第 1 区: minLon = 100 maxLong = 150

如果我尝试创建另一个最小为 100 且最大为 151 的扇区,我想要一个错误。

同样应该可以跨越360度的界限 所以尝试创建以下扇区也会导致错误 minLon = 350 maxLon = 349

这跨越 359 度,包含 100-150 的原始扇区。

其他应该引起冲突的例子是 第 1 区 minLon = 150 maxLong = 200

第 2 区 minLon = 150 最大长 = 201

我尝试将度数从 0-360 范围转换为 -180 到 180,但在确定范围何时包含另一个范围时仍然遇到问题。

我不关心重叠的扇区,只是完全包含另一个扇区。

我目前正在使用 java,但如果有其他语言的帮助或概括解决方案,我将不胜感激。

**** 更新更多上下文和示例 ***** 假设定义了扇区 1 和 2,其中两个都有效,因为两个扇区都不完全包含另一个扇区 (MinLon, MaxLon) 第 1 区 (100.0 , 200.0)

第 2 区 (100.1 , 200.1)

以下扇区将无效并被拒绝,因为它完全位于扇区 1 内

第 3 区
(100.1 , 200.0)

以下扇区对于扇区 2 是有效的,因为它没有完全包含它。但是,它是无效的,将被完全拒绝 包含扇区 1。

第 4 区 (300 , 200)

以下扇区将作为其外部扇区 1 和 2 有效,并且不包含因此接受的 1 或 2 第 5 区 (200.0 , 100.0)

【问题讨论】:

  • 这对于跨度超过 180° 的扇区变得复杂。什么是内部,什么是外部?
  • 更容易检查范围是否不重叠,即 minLon1 > maxLon2 和 maxLon1 stackoverflow.com/questions/20925818/…
  • 我需要知道它是否包罗万象。不只是重叠,这无论如何都不起作用。扇区 1 范围 (350, 50) 扇区 2 范围 (300,100) 这完全包含扇区 1,应生成错误 350 > 100 && 50

标签: java math range latitude-longitude


【解决方案1】:

这是最容易想到的事情。我假设您不允许拥有大于 360 度的扇区。如果是这种情况,这意味着任何时候你有一个小于起始数字的结束数字,你知道它实际上比计算大小的目的大 360(如果你需要考虑不止一圈,你必须计算360 的倍数)。

start = 350, end = 355, size = (355+(0*360)) - 350 = 5
start = 359, end = 4, size = (4+(1*360))-359 = 5

一旦你有了开始和大小,剩下的就应该很简单了。

【讨论】:

  • 这确实给出了大小,但我不确定在给定这两条数据的情况下确定扇区是否相互包含有多简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多