Shapefile.jl icon indicating copy to clipboard operation
Shapefile.jl copied to clipboard

The `Shapefile.LinearRing` of this Polygon is not closed

Open eliascarv opened this issue 1 year ago • 3 comments

The Polygon in this shapefile does not have a closed LinearRing: https://drive.google.com/file/d/11UWltt3HKgGKyAI7wCyhFa65khLEVAXT/view?usp=sharing Does this mean the shapefile is invalid? Should Shapefile.jl throw an error when this happens? Thanks in advance to the maintainers for their attention.

The code below can be used to check this:

julia> using Tables

julia> import Shapefile as SHP

julia> import GeoInterface as GI

julia> tb = SHP.Table("poly.shp")
Shapefile.Table{Union{Missing, Shapefile.Polygon}} with 1 rows and the following 2 columns:
	
geometry, all_missing


julia> geom = Tables.getcolumn(tb, :geometry)
1-element Vector{Union{Missing, Shapefile.Polygon}}:
 Polygon(270 Points)

julia> poly = GI.getgeom(first(geom)) |> first
1-element Shapefile.SubPolygon{Shapefile.LinearRing{Shapefile.Point, Nothing, Nothing}}:
 [Shapefile.Point(-48.171018231988946, -18.247322704250113), Shapefile.Point(-48.17101963904955, -18.24732326352786), Shapefile.Point(-48.171166414267645, -18.247384611203163), Shapefile.Point(-48.17123873091134, -18.24742071080391), Shapefile.Point(-48.17154130244691, -18.247570296969965), Shapefile.Point(-48.17165832222795, -18.247624452830525), Shapefile.Point(-48.17176866962341, -18.247679340108416), Shapefile.Point(-48.17190070959351, -18.247741647228782), Shapefile.Point(-48.17213461853433, -18.24785014015957), Shapefile.Point(-48.17233698373535, -18.24794613391215)  …  Shapefile.Point(-48.16942155997931, -18.248163131147656), Shapefile.Point(-48.16975009226726, -18.24796171136208), Shapefile.Point(-48.17002955190942, -18.247791917870092), Shapefile.Point(-48.17028344506759, -18.247639364278832), Shapefile.Point(-48.17049368601856, -18.24751511071119), Shapefile.Point(-48.170613880516, -18.247447773228185), Shapefile.Point(-48.17072170297917, -18.247391464122753), Shapefile.Point(-48.170794728119, -18.247359370679074), Shapefile.Point(-48.170860165849845, -18.24733737438331), Shapefile.Point(-48.17089013490942, -18.24733007375713)]

julia> ring = GI.getexterior(poly)
270-element Shapefile.LinearRing{Shapefile.Point, Nothing, Nothing}:
 Shapefile.Point(-48.171018231988946, -18.247322704250113)
 Shapefile.Point(-48.17101963904955, -18.24732326352786)
 Shapefile.Point(-48.171166414267645, -18.247384611203163)
 Shapefile.Point(-48.17123873091134, -18.24742071080391)
 Shapefile.Point(-48.17154130244691, -18.247570296969965)
 Shapefile.Point(-48.17165832222795, -18.247624452830525)
 Shapefile.Point(-48.17176866962341, -18.247679340108416)
 Shapefile.Point(-48.17190070959351, -18.247741647228782)
 Shapefile.Point(-48.17213461853433, -18.24785014015957)
 Shapefile.Point(-48.17233698373535, -18.24794613391215)
 ⋮
 Shapefile.Point(-48.16975009226726, -18.24796171136208)
 Shapefile.Point(-48.17002955190942, -18.247791917870092)
 Shapefile.Point(-48.17028344506759, -18.247639364278832)
 Shapefile.Point(-48.17049368601856, -18.24751511071119)
 Shapefile.Point(-48.170613880516, -18.247447773228185)
 Shapefile.Point(-48.17072170297917, -18.247391464122753)
 Shapefile.Point(-48.170794728119, -18.247359370679074)
 Shapefile.Point(-48.170860165849845, -18.24733737438331)
 Shapefile.Point(-48.17089013490942, -18.24733007375713)

julia> GI.geomtrait(ring)
GeoInterface.LinearRingTrait()

julia> GI.isclosed(ring)
false

julia> GI.isring(ring)
false

eliascarv avatar Jun 12 '23 14:06 eliascarv