Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stremovskyy/geo_fencer
Simple Geo fence library
https://github.com/stremovskyy/geo_fencer
bbox btree geofencing geolocation golang golang-library s2
Last synced: 4 days ago
JSON representation
Simple Geo fence library
- Host: GitHub
- URL: https://github.com/stremovskyy/geo_fencer
- Owner: stremovskyy
- License: apache-2.0
- Created: 2019-10-14T08:57:45.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-03-03T14:26:11.000Z (over 1 year ago)
- Last Synced: 2024-06-20T08:03:37.520Z (5 months ago)
- Topics: bbox, btree, geofencing, geolocation, golang, golang-library, s2
- Language: Go
- Homepage:
- Size: 13.7 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# geo_fencer - Simple Geo fence library
`geo_fencer` is a simple Go package for creating and searching geographic fences. It provides an interface for creating an index of multiple fences, making it easy to search for coordinates across different data sets.
## Installation
To install the package, use go get:
```shell
go get github.com/stremovskyy/geo_fencer
```## Usage
To use geo_fencer, you need to first create a GeoFence object. You can then add features to the fence, which are essentially geographic shapes (such as polygons or circles) that define the boundaries of the fence.Once you have created a fence, you can add it to a FenceIndex, which is a dictionary of multiple fences. You can then search for a coordinate in any of the indexed fences.
```go
import (
"github.com/stremovskyy/geo_fencer"
"github.com/stremovskyy/geo"
)// Create a fence
fence, err := geo_fencer.GetFence(geo_fencer.GeoFenceTypeCircle, 10)
if err != nil {
panic(err)
}// Add a feature to the fence
center := geo.NewPoint(-122.431297, 37.773972)
radius := 1000.0
feature := geo.NewCircle(center, radius)
fence.Add(feature)// Create an index of fences
fences := geo_fencer.NewFenceIndex()
fences.Set("my_fence", fence)// Search for a coordinate
coord := geo.NewPoint(-122.431297, 37.773972)
match, err := fences.Search("my_fence", coord)
if err != nil {
panic(err)
}
fmt.Println(match)```
You can also load a fence index from a GeoJSON string using the LoadFenceIndex function:
```go
geoJsonString := `{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[-122.4412, 37.7776],
[-122.4412, 37.7818],
[-122.4356, 37.7818],
[-122.4356, 37.7776],
[-122.4412, 37.7776]
]
]
}
}
]
}`fences, err := geo_fencer.LoadFenceIndex(geo_fencer.GeoFenceTypePolygon, 10, "my_fence", &geoJsonString)
if err != nil {
panic(err)
}coord := geo.NewPoint(-122.4384, 37.7797)
match, err := fences.Search("my_fence", coord)
if err != nil {
panic(err)
}
fmt.Println(match)
```## License
geo_fencer is licensed under the MIT License. See [LICENSE](LICENSE) for the full license text.