How to inverse the orientation of the holes coordinates of a polygon in geopandas Planned maintenance scheduled April 23, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?using shapely: translating between Polygons and MultiPolygonsDoes shapely within function identify inner holes?How can I get all the latitude, longitude coordinates/points inside a rectangular polygon drawn in google maps?Order of polygon vertices in general GIS: clockwise or counterclockwiseArcGIS lines to polygons without holes“Hole” argument ignored in call to Polygon functionDraw polygons from self-intersecting lines: Looking for a workaround for inner boundaries / holesLine between outside and inside polygon - geotoolsSpatial join in Geopandas is only finding itselfOGR multipolygon with holes model
Why doesn't SQL Optimizer use my constraint?
Is CEO the "profession" with the most psychopaths?
What does it mean that physics no longer uses mechanical models to describe phenomena?
How to compare two different files line by line in unix?
How to write this math term? with cases it isn't working
Is grep documentation about ignoring case wrong, since it doesn't ignore case in filenames?
What was the first language to use conditional keywords?
Maximum summed subsequences with non-adjacent items
How can I reduce the gap between left and right of cdot with a macro?
Are all finite dimensional hilbert spaces isomorphic to spaces with Euclidean norms?
I want to run a python3 script on startup and in an endless loop on my raspberry pi
How fail-safe is nr as stop bytes?
Amount of permutations on an NxNxN Rubik's Cube
What is the appropriate index architecture when forced to implement IsDeleted (soft deletes)?
What would you call this weird metallic apparatus that allows you to lift people?
SF book about people trapped in a series of worlds they imagine
When a candle burns, why does the top of wick glow if bottom of flame is hottest?
Significance of Cersei's obsession with elephants?
How were pictures turned from film to a big picture in a picture frame before digital scanning?
Most bit efficient text communication method?
What do you call the main part of a joke?
Should I use a zero-interest credit card for a large one-time purchase?
Hangman Game with C++
The code below, is it ill-formed NDR or is it well formed?
How to inverse the orientation of the holes coordinates of a polygon in geopandas
Planned maintenance scheduled April 23, 2019 at 00:00UTC (8:00pm US/Eastern)
Announcing the arrival of Valued Associate #679: Cesar Manara
Unicorn Meta Zoo #1: Why another podcast?using shapely: translating between Polygons and MultiPolygonsDoes shapely within function identify inner holes?How can I get all the latitude, longitude coordinates/points inside a rectangular polygon drawn in google maps?Order of polygon vertices in general GIS: clockwise or counterclockwiseArcGIS lines to polygons without holes“Hole” argument ignored in call to Polygon functionDraw polygons from self-intersecting lines: Looking for a workaround for inner boundaries / holesLine between outside and inside polygon - geotoolsSpatial join in Geopandas is only finding itselfOGR multipolygon with holes model
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
I have a polygon shapefile which I am reading with geopandas. The polygon contains holes. My purpose is to add a random point inside each hole.
In order to create the points inside the holes (interior polygon rings), the definition of their coordinates needs to be reversed (from counterclockwise to clockwise) otherwise the point falls outside of the polygon.
I get the coordinates of the interior rings using GeoSeries.interiors and what I get is
LINEARRING (85002.811 446988.023, 85010.79399999999 446992.869, 85005.61900000001 447001.417, 84982.78599999999 446987.513, 84987.933 446978.99, 85001.89999999999 446987.47, 85002.811 446988.023)
How can I reverse the definition of the coordinates? Alternatively, I could get the x,y coordinates in a list and reverse it, but even in this case I cannot find a way to convert the geometry to list.
python polygon geopandas holes interior-ring
add a comment |
I have a polygon shapefile which I am reading with geopandas. The polygon contains holes. My purpose is to add a random point inside each hole.
In order to create the points inside the holes (interior polygon rings), the definition of their coordinates needs to be reversed (from counterclockwise to clockwise) otherwise the point falls outside of the polygon.
I get the coordinates of the interior rings using GeoSeries.interiors and what I get is
LINEARRING (85002.811 446988.023, 85010.79399999999 446992.869, 85005.61900000001 447001.417, 84982.78599999999 446987.513, 84987.933 446978.99, 85001.89999999999 446987.47, 85002.811 446988.023)
How can I reverse the definition of the coordinates? Alternatively, I could get the x,y coordinates in a list and reverse it, but even in this case I cannot find a way to convert the geometry to list.
python polygon geopandas holes interior-ring
Can you post the entire geometry, with the interior rings inside?
– wfgeo
Apr 10 at 20:52
You can use shapely for that. Geopandas uses fiona, a gdal/ogr wrapper for python for reading and writing from various geodata file formats. As far as i know geopandas does not support any geometric operations, but Shapely does.
– Andreas Müller
Apr 10 at 21:08
add a comment |
I have a polygon shapefile which I am reading with geopandas. The polygon contains holes. My purpose is to add a random point inside each hole.
In order to create the points inside the holes (interior polygon rings), the definition of their coordinates needs to be reversed (from counterclockwise to clockwise) otherwise the point falls outside of the polygon.
I get the coordinates of the interior rings using GeoSeries.interiors and what I get is
LINEARRING (85002.811 446988.023, 85010.79399999999 446992.869, 85005.61900000001 447001.417, 84982.78599999999 446987.513, 84987.933 446978.99, 85001.89999999999 446987.47, 85002.811 446988.023)
How can I reverse the definition of the coordinates? Alternatively, I could get the x,y coordinates in a list and reverse it, but even in this case I cannot find a way to convert the geometry to list.
python polygon geopandas holes interior-ring
I have a polygon shapefile which I am reading with geopandas. The polygon contains holes. My purpose is to add a random point inside each hole.
In order to create the points inside the holes (interior polygon rings), the definition of their coordinates needs to be reversed (from counterclockwise to clockwise) otherwise the point falls outside of the polygon.
I get the coordinates of the interior rings using GeoSeries.interiors and what I get is
LINEARRING (85002.811 446988.023, 85010.79399999999 446992.869, 85005.61900000001 447001.417, 84982.78599999999 446987.513, 84987.933 446978.99, 85001.89999999999 446987.47, 85002.811 446988.023)
How can I reverse the definition of the coordinates? Alternatively, I could get the x,y coordinates in a list and reverse it, but even in this case I cannot find a way to convert the geometry to list.
python polygon geopandas holes interior-ring
python polygon geopandas holes interior-ring
edited Apr 12 at 3:18
Paul H
421312
421312
asked Apr 10 at 19:29
ioanna tsakioanna tsak
1
1
Can you post the entire geometry, with the interior rings inside?
– wfgeo
Apr 10 at 20:52
You can use shapely for that. Geopandas uses fiona, a gdal/ogr wrapper for python for reading and writing from various geodata file formats. As far as i know geopandas does not support any geometric operations, but Shapely does.
– Andreas Müller
Apr 10 at 21:08
add a comment |
Can you post the entire geometry, with the interior rings inside?
– wfgeo
Apr 10 at 20:52
You can use shapely for that. Geopandas uses fiona, a gdal/ogr wrapper for python for reading and writing from various geodata file formats. As far as i know geopandas does not support any geometric operations, but Shapely does.
– Andreas Müller
Apr 10 at 21:08
Can you post the entire geometry, with the interior rings inside?
– wfgeo
Apr 10 at 20:52
Can you post the entire geometry, with the interior rings inside?
– wfgeo
Apr 10 at 20:52
You can use shapely for that. Geopandas uses fiona, a gdal/ogr wrapper for python for reading and writing from various geodata file formats. As far as i know geopandas does not support any geometric operations, but Shapely does.
– Andreas Müller
Apr 10 at 21:08
You can use shapely for that. Geopandas uses fiona, a gdal/ogr wrapper for python for reading and writing from various geodata file formats. As far as i know geopandas does not support any geometric operations, but Shapely does.
– Andreas Müller
Apr 10 at 21:08
add a comment |
2 Answers
2
active
oldest
votes
This should do what you want, and works in cases where a polygon has multiple holes. It involves using shapely, which is a geopandas dependency.
Explanations and further reading are in the comments.
import geopandas as gpd
from shapely.geometry import Polygon
# Initializing a polygon with two holes
# See: https://stackoverflow.com/questions/48770822/how-to-make-holes-in-a-polygon-in-shapely-python-having-polygons
outer = Polygon(((0,0),(20,0),(20,20),(0,20),(0,0)))
inners = (Polygon(((4,4),(4,6),(6,6),(6,4),(4,4))), Polygon(((7,7),(7,8),(8,8),(8,7),(7,7))))
p = Polygon(outer.exterior.coords, [inner.exterior.coords for inner in inners])
# Make a geoseries with this polygon
gs = gpd.GeoSeries(0: p)
print("Before:")
print(gs[0])
# Get the interiors and initialize a list for new interior polygons
interiors = gs.interiors
reversed_interior_polys = []
# Iterate through the interiors, and through their subsequent rings
for interior in interiors:
for ring in interior:
# Unpack the ring's coordinates and convert it to a polygon
# See: https://shapely.readthedocs.io/en/stable/manual.html#object.is_ccw
interior_poly_reversed = Polygon(list(ring.coords)[::-1])
reversed_interior_polys.append(interior_poly_reversed)
reversed_interior_polys = tuple(reversed_interior_polys)
# Reconstruct the original polygon from the list reversed polygons we just made
# See (again): https://stackoverflow.com/questions/48770822/how-to-make-holes-in-a-polygon-in-shapely-python-having-polygons
fixed_polygon = Polygon(outer.exterior.coords, [inner.exterior.coords for inner in reversed_interior_polys])
# Map this value back to the GeoSeries
gs[0] = fixed_polygon
print("nAfter:")
print(gs[0])
Output:
Before:
POLYGON ((0 0, 20 0, 20 20, 0 20, 0 0), (4 4, 4 6, 6 6, 6 4, 4 4), (7 7, 7 8, 8 8, 8 7, 7 7))
After:
POLYGON ((0 0, 20 0, 20 20, 0 20, 0 0), (4 4, 6 4, 6 6, 4 6, 4 4), (7 7, 8 7, 8 8, 7 8, 7 7))
add a comment |
Since the orientation of the exterior ring doesn't matter, you could use the shapely.geometry.polygon.orient function, which will orient the interiors colckwise or counterclockwise.
Simple example:
from shapely.geometry import Polygon
from shapely.geometry import polygon
pol = Polygon([(0,0),(1,0),(1,1),(0,1)],[[(0.1,0.1),(0.1,0.2),(0.2,0.2)]])
[[*p.coords] for p in polygon.orient(pol,-1).interiors]
#Out[]: [[(0.1, 0.1), (0.2, 0.2), (0.1, 0.2), (0.1, 0.1)]]
[[*p.coords] for p in polygon.orient(pol,1).interiors]
#Out[]: [[(0.1, 0.1), (0.1, 0.2), (0.2, 0.2), (0.1, 0.1)]]
In geopandas you will map the function over the gemetry column with:
new_geometry_series = dataframe.geometry.apply(polygon.orient,args=(1)) #or -1
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "79"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f318423%2fhow-to-inverse-the-orientation-of-the-holes-coordinates-of-a-polygon-in-geopanda%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
This should do what you want, and works in cases where a polygon has multiple holes. It involves using shapely, which is a geopandas dependency.
Explanations and further reading are in the comments.
import geopandas as gpd
from shapely.geometry import Polygon
# Initializing a polygon with two holes
# See: https://stackoverflow.com/questions/48770822/how-to-make-holes-in-a-polygon-in-shapely-python-having-polygons
outer = Polygon(((0,0),(20,0),(20,20),(0,20),(0,0)))
inners = (Polygon(((4,4),(4,6),(6,6),(6,4),(4,4))), Polygon(((7,7),(7,8),(8,8),(8,7),(7,7))))
p = Polygon(outer.exterior.coords, [inner.exterior.coords for inner in inners])
# Make a geoseries with this polygon
gs = gpd.GeoSeries(0: p)
print("Before:")
print(gs[0])
# Get the interiors and initialize a list for new interior polygons
interiors = gs.interiors
reversed_interior_polys = []
# Iterate through the interiors, and through their subsequent rings
for interior in interiors:
for ring in interior:
# Unpack the ring's coordinates and convert it to a polygon
# See: https://shapely.readthedocs.io/en/stable/manual.html#object.is_ccw
interior_poly_reversed = Polygon(list(ring.coords)[::-1])
reversed_interior_polys.append(interior_poly_reversed)
reversed_interior_polys = tuple(reversed_interior_polys)
# Reconstruct the original polygon from the list reversed polygons we just made
# See (again): https://stackoverflow.com/questions/48770822/how-to-make-holes-in-a-polygon-in-shapely-python-having-polygons
fixed_polygon = Polygon(outer.exterior.coords, [inner.exterior.coords for inner in reversed_interior_polys])
# Map this value back to the GeoSeries
gs[0] = fixed_polygon
print("nAfter:")
print(gs[0])
Output:
Before:
POLYGON ((0 0, 20 0, 20 20, 0 20, 0 0), (4 4, 4 6, 6 6, 6 4, 4 4), (7 7, 7 8, 8 8, 8 7, 7 7))
After:
POLYGON ((0 0, 20 0, 20 20, 0 20, 0 0), (4 4, 6 4, 6 6, 4 6, 4 4), (7 7, 8 7, 8 8, 7 8, 7 7))
add a comment |
This should do what you want, and works in cases where a polygon has multiple holes. It involves using shapely, which is a geopandas dependency.
Explanations and further reading are in the comments.
import geopandas as gpd
from shapely.geometry import Polygon
# Initializing a polygon with two holes
# See: https://stackoverflow.com/questions/48770822/how-to-make-holes-in-a-polygon-in-shapely-python-having-polygons
outer = Polygon(((0,0),(20,0),(20,20),(0,20),(0,0)))
inners = (Polygon(((4,4),(4,6),(6,6),(6,4),(4,4))), Polygon(((7,7),(7,8),(8,8),(8,7),(7,7))))
p = Polygon(outer.exterior.coords, [inner.exterior.coords for inner in inners])
# Make a geoseries with this polygon
gs = gpd.GeoSeries(0: p)
print("Before:")
print(gs[0])
# Get the interiors and initialize a list for new interior polygons
interiors = gs.interiors
reversed_interior_polys = []
# Iterate through the interiors, and through their subsequent rings
for interior in interiors:
for ring in interior:
# Unpack the ring's coordinates and convert it to a polygon
# See: https://shapely.readthedocs.io/en/stable/manual.html#object.is_ccw
interior_poly_reversed = Polygon(list(ring.coords)[::-1])
reversed_interior_polys.append(interior_poly_reversed)
reversed_interior_polys = tuple(reversed_interior_polys)
# Reconstruct the original polygon from the list reversed polygons we just made
# See (again): https://stackoverflow.com/questions/48770822/how-to-make-holes-in-a-polygon-in-shapely-python-having-polygons
fixed_polygon = Polygon(outer.exterior.coords, [inner.exterior.coords for inner in reversed_interior_polys])
# Map this value back to the GeoSeries
gs[0] = fixed_polygon
print("nAfter:")
print(gs[0])
Output:
Before:
POLYGON ((0 0, 20 0, 20 20, 0 20, 0 0), (4 4, 4 6, 6 6, 6 4, 4 4), (7 7, 7 8, 8 8, 8 7, 7 7))
After:
POLYGON ((0 0, 20 0, 20 20, 0 20, 0 0), (4 4, 6 4, 6 6, 4 6, 4 4), (7 7, 8 7, 8 8, 7 8, 7 7))
add a comment |
This should do what you want, and works in cases where a polygon has multiple holes. It involves using shapely, which is a geopandas dependency.
Explanations and further reading are in the comments.
import geopandas as gpd
from shapely.geometry import Polygon
# Initializing a polygon with two holes
# See: https://stackoverflow.com/questions/48770822/how-to-make-holes-in-a-polygon-in-shapely-python-having-polygons
outer = Polygon(((0,0),(20,0),(20,20),(0,20),(0,0)))
inners = (Polygon(((4,4),(4,6),(6,6),(6,4),(4,4))), Polygon(((7,7),(7,8),(8,8),(8,7),(7,7))))
p = Polygon(outer.exterior.coords, [inner.exterior.coords for inner in inners])
# Make a geoseries with this polygon
gs = gpd.GeoSeries(0: p)
print("Before:")
print(gs[0])
# Get the interiors and initialize a list for new interior polygons
interiors = gs.interiors
reversed_interior_polys = []
# Iterate through the interiors, and through their subsequent rings
for interior in interiors:
for ring in interior:
# Unpack the ring's coordinates and convert it to a polygon
# See: https://shapely.readthedocs.io/en/stable/manual.html#object.is_ccw
interior_poly_reversed = Polygon(list(ring.coords)[::-1])
reversed_interior_polys.append(interior_poly_reversed)
reversed_interior_polys = tuple(reversed_interior_polys)
# Reconstruct the original polygon from the list reversed polygons we just made
# See (again): https://stackoverflow.com/questions/48770822/how-to-make-holes-in-a-polygon-in-shapely-python-having-polygons
fixed_polygon = Polygon(outer.exterior.coords, [inner.exterior.coords for inner in reversed_interior_polys])
# Map this value back to the GeoSeries
gs[0] = fixed_polygon
print("nAfter:")
print(gs[0])
Output:
Before:
POLYGON ((0 0, 20 0, 20 20, 0 20, 0 0), (4 4, 4 6, 6 6, 6 4, 4 4), (7 7, 7 8, 8 8, 8 7, 7 7))
After:
POLYGON ((0 0, 20 0, 20 20, 0 20, 0 0), (4 4, 6 4, 6 6, 4 6, 4 4), (7 7, 8 7, 8 8, 7 8, 7 7))
This should do what you want, and works in cases where a polygon has multiple holes. It involves using shapely, which is a geopandas dependency.
Explanations and further reading are in the comments.
import geopandas as gpd
from shapely.geometry import Polygon
# Initializing a polygon with two holes
# See: https://stackoverflow.com/questions/48770822/how-to-make-holes-in-a-polygon-in-shapely-python-having-polygons
outer = Polygon(((0,0),(20,0),(20,20),(0,20),(0,0)))
inners = (Polygon(((4,4),(4,6),(6,6),(6,4),(4,4))), Polygon(((7,7),(7,8),(8,8),(8,7),(7,7))))
p = Polygon(outer.exterior.coords, [inner.exterior.coords for inner in inners])
# Make a geoseries with this polygon
gs = gpd.GeoSeries(0: p)
print("Before:")
print(gs[0])
# Get the interiors and initialize a list for new interior polygons
interiors = gs.interiors
reversed_interior_polys = []
# Iterate through the interiors, and through their subsequent rings
for interior in interiors:
for ring in interior:
# Unpack the ring's coordinates and convert it to a polygon
# See: https://shapely.readthedocs.io/en/stable/manual.html#object.is_ccw
interior_poly_reversed = Polygon(list(ring.coords)[::-1])
reversed_interior_polys.append(interior_poly_reversed)
reversed_interior_polys = tuple(reversed_interior_polys)
# Reconstruct the original polygon from the list reversed polygons we just made
# See (again): https://stackoverflow.com/questions/48770822/how-to-make-holes-in-a-polygon-in-shapely-python-having-polygons
fixed_polygon = Polygon(outer.exterior.coords, [inner.exterior.coords for inner in reversed_interior_polys])
# Map this value back to the GeoSeries
gs[0] = fixed_polygon
print("nAfter:")
print(gs[0])
Output:
Before:
POLYGON ((0 0, 20 0, 20 20, 0 20, 0 0), (4 4, 4 6, 6 6, 6 4, 4 4), (7 7, 7 8, 8 8, 8 7, 7 7))
After:
POLYGON ((0 0, 20 0, 20 20, 0 20, 0 0), (4 4, 6 4, 6 6, 4 6, 4 4), (7 7, 8 7, 8 8, 7 8, 7 7))
answered Apr 10 at 21:27
wfgeowfgeo
1,573519
1,573519
add a comment |
add a comment |
Since the orientation of the exterior ring doesn't matter, you could use the shapely.geometry.polygon.orient function, which will orient the interiors colckwise or counterclockwise.
Simple example:
from shapely.geometry import Polygon
from shapely.geometry import polygon
pol = Polygon([(0,0),(1,0),(1,1),(0,1)],[[(0.1,0.1),(0.1,0.2),(0.2,0.2)]])
[[*p.coords] for p in polygon.orient(pol,-1).interiors]
#Out[]: [[(0.1, 0.1), (0.2, 0.2), (0.1, 0.2), (0.1, 0.1)]]
[[*p.coords] for p in polygon.orient(pol,1).interiors]
#Out[]: [[(0.1, 0.1), (0.1, 0.2), (0.2, 0.2), (0.1, 0.1)]]
In geopandas you will map the function over the gemetry column with:
new_geometry_series = dataframe.geometry.apply(polygon.orient,args=(1)) #or -1
add a comment |
Since the orientation of the exterior ring doesn't matter, you could use the shapely.geometry.polygon.orient function, which will orient the interiors colckwise or counterclockwise.
Simple example:
from shapely.geometry import Polygon
from shapely.geometry import polygon
pol = Polygon([(0,0),(1,0),(1,1),(0,1)],[[(0.1,0.1),(0.1,0.2),(0.2,0.2)]])
[[*p.coords] for p in polygon.orient(pol,-1).interiors]
#Out[]: [[(0.1, 0.1), (0.2, 0.2), (0.1, 0.2), (0.1, 0.1)]]
[[*p.coords] for p in polygon.orient(pol,1).interiors]
#Out[]: [[(0.1, 0.1), (0.1, 0.2), (0.2, 0.2), (0.1, 0.1)]]
In geopandas you will map the function over the gemetry column with:
new_geometry_series = dataframe.geometry.apply(polygon.orient,args=(1)) #or -1
add a comment |
Since the orientation of the exterior ring doesn't matter, you could use the shapely.geometry.polygon.orient function, which will orient the interiors colckwise or counterclockwise.
Simple example:
from shapely.geometry import Polygon
from shapely.geometry import polygon
pol = Polygon([(0,0),(1,0),(1,1),(0,1)],[[(0.1,0.1),(0.1,0.2),(0.2,0.2)]])
[[*p.coords] for p in polygon.orient(pol,-1).interiors]
#Out[]: [[(0.1, 0.1), (0.2, 0.2), (0.1, 0.2), (0.1, 0.1)]]
[[*p.coords] for p in polygon.orient(pol,1).interiors]
#Out[]: [[(0.1, 0.1), (0.1, 0.2), (0.2, 0.2), (0.1, 0.1)]]
In geopandas you will map the function over the gemetry column with:
new_geometry_series = dataframe.geometry.apply(polygon.orient,args=(1)) #or -1
Since the orientation of the exterior ring doesn't matter, you could use the shapely.geometry.polygon.orient function, which will orient the interiors colckwise or counterclockwise.
Simple example:
from shapely.geometry import Polygon
from shapely.geometry import polygon
pol = Polygon([(0,0),(1,0),(1,1),(0,1)],[[(0.1,0.1),(0.1,0.2),(0.2,0.2)]])
[[*p.coords] for p in polygon.orient(pol,-1).interiors]
#Out[]: [[(0.1, 0.1), (0.2, 0.2), (0.1, 0.2), (0.1, 0.1)]]
[[*p.coords] for p in polygon.orient(pol,1).interiors]
#Out[]: [[(0.1, 0.1), (0.1, 0.2), (0.2, 0.2), (0.1, 0.1)]]
In geopandas you will map the function over the gemetry column with:
new_geometry_series = dataframe.geometry.apply(polygon.orient,args=(1)) #or -1
edited Apr 11 at 0:33
answered Apr 10 at 21:44
Javier JCJavier JC
663
663
add a comment |
add a comment |
Thanks for contributing an answer to Geographic Information Systems Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f318423%2fhow-to-inverse-the-orientation-of-the-holes-coordinates-of-a-polygon-in-geopanda%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Can you post the entire geometry, with the interior rings inside?
– wfgeo
Apr 10 at 20:52
You can use shapely for that. Geopandas uses fiona, a gdal/ogr wrapper for python for reading and writing from various geodata file formats. As far as i know geopandas does not support any geometric operations, but Shapely does.
– Andreas Müller
Apr 10 at 21:08