geojson icon indicating copy to clipboard operation
geojson copied to clipboard

geometry.Poly{}.Valid() does check if the polygon is valid

Open nico-bock opened this issue 2 years ago • 2 comments

Description

geometry.Poly{}.Valid() check only if the Exterior and the holes are valid Series, not if they are a valid polygon.

Therefore Polygons with missing Points, intersecting edges etc. are not detected.

Is this intended or just not necessary till now?

Exmaple:

package main

import (
	"github.com/tidwall/geojson"
	"github.com/tidwall/geojson/geometry"
)

func main() {
	polygon := geometry.NewPoly([]geometry.Point{
		{
			8.88242492198438,
			47.85972404073712,
		},
		{
			6.003023836249525,
			47.467582223811604,
		},
		{
			10.561998072355692,
			45.71873204889732,
		},
		{
			6.738413586888328,
			48.35187757503576,
		},
		{
			8.88242492198438,
			47.85972404073712,
		},
	}, nil, nil)

	print(polygon.Valid()) //Expected to be false

	geojsonPolygon := geojson.NewPolygon(polygon)
	print(geojsonPolygon.Valid()) //Expected to be false

	geojsonPolygonFeature := geojson.NewFeature(geojsonPolygon, "")
	print(geojsonPolygonFeature.Valid()) //Expected to be False

	geojsonPolygonFeatureJson := geojsonPolygonFeature.JSON()
	print(geojsonPolygonFeatureJson)

}

Screenshot 2023-08-23 at 11 33 33

nico-bock avatar Aug 23 '23 09:08 nico-bock

A more robust Valid operation would be nice, but it's not something I've gotten around to.

tidwall avatar Aug 24 '23 11:08 tidwall

If you want to, I could make a PR for this.

nico-bock avatar Aug 24 '23 11:08 nico-bock