Home >Backend Development >Golang >Check if a latitude/longitude point is within a region

Check if a latitude/longitude point is within a region

WBOY
WBOYforward
2024-02-06 09:24:091065browse

Check if a latitude/longitude point is within a region

Question content

I'm trying to find a way to check if a pair of latitude/longitude coordinates are within an area (identified by other latitude/longitude coordinates generate).

For example, if my area is a rectangle generated using these coordinates:

43.672162 , -79.43585
43.629845 , -79.314585

I want to check if these coordinates are within the area: 43.651989,-79.371993

I tried using this package but couldn't get it to work: 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)

I was wondering if anyone could share this implementation or have any resources that could point me in the right direction? I am also willing to use google maps api.


Correct answer


In your example this is a rectangle, you can calculate it like this:

  1. Find the smallest point of area. minimumpoint.x = min(p1.x, p2.x) and minimumpoint.y = min(p1.y, p2.y)
  2. Find the maximum point of the area. maximumpoint.x = max(p1.x, p2.x) and maximumpoint.y = max(p1.y, p2.y)
  3. Check if the point is between them: checkpoint.x >=minimumpoint.xandcheckpoint.x and<code>checkpoint.y >=minimumpoint.yandcheckpoint .y

Or you can use the contains function: https://www.php.cn/link/fb6e7c396949fea1f6f6bf144dbc7908

Add to project: go get github.com/paulmach/orb

Here is the sample code I wrote for your question:

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))
    }
}

result:

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

The above is the detailed content of Check if a latitude/longitude point is within a region. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete