首頁 >後端開發 >Golang >檢查緯度/經度點是否在區域內

檢查緯度/經度點是否在區域內

WBOY
WBOY轉載
2024-02-06 09:24:091057瀏覽

檢查緯度/經度點是否在區域內

問題內容

我正在嘗試找到一種方法來檢查一對緯度/經度座標是否在一個區域內(由其他緯度/經度座標生成)。

例如,如果我的區域是使用這些座標產生的矩形:

43.672162 , -79.43585
43.629845 , -79.314585

我想檢查這些座標是否在該區域內: 43.651989,-79.371993

我嘗試過使用這個包,但無法使其工作:github.com/kellydunn/golang-geo

#
p1 := geo.NewPoint(coords[0].LatX, coords[0].LonX)
p2 := geo.NewPoint(coords[0].LatY, coords[0].LonY)
geo.NewPolygon(p1, p2)

我想知道是否有人可以分享這個實現,或者有任何資源可以為我指明正確的方向?我也願意使用 google 地圖 api。


正確答案


在您的範例中,這是一個矩形,您可以這樣計算:

  1. 求面積的最小點。 minimumpoint.x = min(p1.x, p2.x)minimumpoint.y = min(p1.y, p2.y)
  2. #求面積的最大點。 maximumpoint.x = max(p1.x, p2.x)maximumpoint.y = max(p1.y, p2.y)
  3. #檢查點是否在它們之間: checkpoint.x >=minimumpoint.xcheckpoint.x 和<code>checkpoint.y >=minimumpoint.ycheckpoint .y

或您可以使用 contains 函數: https://www.php.cn/link/fb6e7c396949fea1f6f6bf144dbc7908

#新增到專案:go get github.com/paulmach/orb

#這是我為您的問題編寫的範例程式碼:

package main

import (
    "fmt"

    "github.com/paulmach/orb"
)

func main() {
    p1 := orb.point{43.672162, -79.43585}
    p2 := orb.point{43.629845, -79.314585}

    bound := orb.multipoint{p1, p2}.bound()

    fmt.printf("bound: %+v\n", bound)

    checklist := []orb.point{orb.point{43.651989, -79.371993}, p1, p2, orb.point{43, -79}}

    fmt.printf("\ncontains?\n")
    for _, checkpoint := range checklist {
        fmt.printf("    %+v:%t\n", checkpoint, bound.contains(checkpoint))
    }
}

結果:

bound: {Min:[43.629845 -79.43585] Max:[43.672162 -79.314585]}

contains?
    [43.651989 -79.371993]:true
    [43.672162 -79.43585]:true
    [43.629845 -79.314585]:true
    [43 -79]:false

以上是檢查緯度/經度點是否在區域內的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除