Check if a latitude/longitude point is within a region

WBOY
Release: 2024-02-06 09:24:09
forward
994 people have browsed it

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
Copy after login

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)
Copy after login

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 <=maximumpoint.xandcheckpoint.y >=minimumpoint.yandcheckpoint .y <=maximumpoint.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))
    }
}
Copy after login

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
Copy after login

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!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!