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

Semak sama ada titik latitud/longitud berada dalam kawasan

WBOY
WBOYke hadapan
2024-02-06 09:24:091065semak imbas

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

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)

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 和<code>checkpoint.y >=minimumpoint.ycheckpoint.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))
    }
}

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

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam