Rumah > pembangunan bahagian belakang > Golang > Semak sama ada titik latitud/longitud berada dalam kawasan

Semak sama ada titik latitud/longitud berada dalam kawasan

WBOY
Lepaskan: 2024-02-06 09:24:09
ke hadapan
1063 orang telah melayarinya

Semak sama ada titik latitud/longitud berada dalam kawasan

Kandungan soalan

Saya cuba mencari jalan untuk menyemak sama ada sepasang koordinat latitud/longitud berada dalam kawasan (dijana daripada koordinat latitud/longitud lain).

Sebagai contoh, jika kawasan saya ialah segi empat tepat yang dijana menggunakan koordinat ini:

43.672162 , -79.43585
43.629845 , -79.314585
Salin selepas log masuk

Saya ingin menyemak sama ada koordinat ini berada dalam kawasan: 43.651989,-79.371993

Saya cuba menggunakan pakej ini tetapi tidak dapat berfungsi: 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)
Salin selepas log masuk

Saya tertanya-tanya sama ada sesiapa boleh berkongsi pelaksanaan ini, atau mempunyai sebarang sumber yang boleh menunjukkan saya ke arah yang betul? Saya juga bersedia menggunakan google maps api.


Jawapan Betul


Dalam contoh anda ini ialah segi empat tepat, anda boleh mengiranya seperti ini:

  1. Cari titik terkecil dengan luas. minimumpoint.x = min(p1.x, p2.x)minimumpoint.y = min(p1.y, p2.y)
  2. Cari titik maksimum kawasan. maximumpoint.x = max(p1.x, p2.x)maximumpoint.y = max(p1.y, p2.y)
  3. Periksa sama ada titik di antara mereka: checkpoint.x >=minimumpoint.xcheckpoint.x <=maximumpoint.xcheckpoint.y >=minimumpoint.ycheckpoint.y <=maximumpoint.y

Atau anda boleh menggunakan fungsi mengandungi: https://www.php.cn/link/fb6e7c396949fea1f6f6bf144dbc7908

Tambahkan pada projek: go get github.com/paulmach/orb

Ini adalah contoh kod yang saya tulis untuk soalan anda:

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))
    }
}
Salin selepas log masuk

Hasil:

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
Salin selepas log masuk

Atas ialah kandungan terperinci Semak sama ada titik latitud/longitud berada dalam kawasan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan