TransWikia.com

Drawing ellipse with shapely?

Geographic Information Systems Asked on September 29, 2020

How do I draw an ellipse with shapely?

2 Answers

Answer:

First, define a circle of radius 1.
Then define an ellipse along x and y axis.
Finally rotate the ellipse.
EDIT: Finally, actually draw the ellipse

Code:

EDIT: previous code defined ellipse but didn't actually draw anything as asked

from matplotlib import pyplot
from shapely.geometry.point import Point
import shapely.affinity
from descartes import PolygonPatch
# Note: download figures.py manually from shapely github repo, put it in shapely install directory
from shapely.figures import SIZE, GREEN, GRAY, set_limits


# 1st elem = center point (x,y) coordinates
# 2nd elem = the two semi-axis values (along x, along y)
# 3rd elem = angle in degrees between x-axis of the Cartesian base
#            and the corresponding semi-axis
ellipse = ((0, 0),(7, 4),36)

# Let create a circle of radius 1 around center point:
circ = shapely.geometry.Point(ellipse[0]).buffer(1)

# Let create the ellipse along x and y:
ell  = shapely.affinity.scale(circ, int(ellipse[1][0]), int(ellipse[1][1]))

# Let rotate the ellipse (clockwise, x axis pointing right):
ellr = shapely.affinity.rotate(ell,ellipse[2])

# If one need to rotate it clockwise along an upward pointing x axis:
elrv = shapely.affinity.rotate(ell,90-ellipse[2])
# According to the man, a positive value means a anti-clockwise angle,
# and a negative one a clockwise angle.


fig = pyplot.figure()
ax = fig.add_subplot(111)
patch = PolygonPatch(elrv, fc=GREEN, ec=GRAY, alpha=0.5, zorder=2)
ax.add_patch(patch)
set_limits(ax, -10, 10, -10, 10)
pyplot.show()

Shapely documentation:
http://toblerity.org/shapely/manual.html

That's it!
Result of elrv:
drawn shapely ellipse

Correct answer by s.k on September 29, 2020

Different method that actually first uses matplotlib and then turns it into a shapely object. This is a little simpler, but the curves will be interpolated by line segments.

from matplotlib.patches import Ellipse
from shapely.geometry import Polygon 

# first draw the ellipse using matplotlib
ellipse = Ellipse((center_x, center_y), width, height, angle) 
vertices = ellipse.get_verts()     # get the vertices from the ellipse object
ellipse = Polygon(vertices)        # Turn it into a polygon

Answered by Mitchell van Zuylen on September 29, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP