首頁 > 後端開發 > Golang > 主體

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

WBOY
發布: 2024-02-06 09:24:09
轉載
994 人瀏覽過

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

問題內容

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

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

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 <=maximumpoint.xcheckpoint.y >=minimumpoint.ycheckpoint .y <=maximumpoint.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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!