Skip to content

a high performance golang lib for simplifying geometry

License

Notifications You must be signed in to change notification settings

hcliff/geo-simplification

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Geo Simplification

This work is based off Jason Davies Excellent blog post, it implements the Visvalingam line simplification algorithm in Golang. It's designed to work with the official golang geo library.

It's been extended to support loops

What doesn't work?

If your polygon has more than one loop this library will not work. This is due to issues with simplifying holes in polygons.

Usage

Reduce to a specific number of points

import (
	geosimplification "github.com/hcliff/geo-simplification"
)

loop := []s2.Loop{
	s2.PointFromLatLng(s2.LatLngFromDegrees(40.319325896602095, -73.14971923828125)),
	s2.PointFromLatLng(s2.LatLngFromDegrees(40.32141999593439, -73.31451416015625)),
	s2.PointFromLatLng(s2.LatLngFromDegrees(40.2313150803688, -73.4271240234375)),
	s2.PointFromLatLng(s2.LatLngFromDegrees(40.24179856487036, -73.16619873046875)),
}
# keep removing points until we reach 4 points in the loop
threshold := 0
minPointsToKeep := 4
avoidIntersections := true
simplified, err := geosimplification.SimplifyLoop(loop, threshold, minPointsToKeep, avoidIntersections)

Reduce to a specific level of detail

import (
	geosimplification "github.com/hcliff/geo-simplification"
)

loop := []s2.Loop{
	s2.PointFromLatLng(s2.LatLngFromDegrees(40.264856517201856, -73.32550048828125)),
	s2.PointFromLatLng(s2.LatLngFromDegrees(40.319325896602095, -73.14971923828125)),
	s2.PointFromLatLng(s2.LatLngFromDegrees(40.32141999593439, -73.31451416015625)),
	s2.PointFromLatLng(s2.LatLngFromDegrees(40.2313150803688, -73.4271240234375)),
	s2.PointFromLatLng(s2.LatLngFromDegrees(40.24179856487036, -73.16619873046875)),
}
# remove points that don't provide much extra detail to the shape
threshold := 0.001
minPointsToKeep := 5
avoidIntersections := true
simplified, err := geosimplification.SimplifyLoop(loop, threshold, minPointsToKeep, avoidIntersections)

About

a high performance golang lib for simplifying geometry

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages