Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _is_inside(self, other):
"""Checks if the polygon is entirely inside the other. Should be used
with :meth:`inter` first to check if the is a known intersection.
"""
anti_lon_0 = self.lon[0] + np.pi
if anti_lon_0 > np.pi:
anti_lon_0 -= np.pi * 2
anti_lon_1 = self.lon[1] + np.pi
if anti_lon_1 > np.pi:
anti_lon_1 -= np.pi * 2
arc1 = Arc(SCoordinate(self.lon[1],
self.lat[1]),
SCoordinate(anti_lon_0,
-self.lat[0]))
arc2 = Arc(SCoordinate(anti_lon_0,
-self.lat[0]),
SCoordinate(anti_lon_1,
-self.lat[1]))
arc3 = Arc(SCoordinate(anti_lon_1,
-self.lat[1]),
SCoordinate(self.lon[0],
self.lat[0]))
other_arcs = [edge for edge in other.aedges()]
for arc in [arc1, arc2, arc3]:
def aedges(self):
"""Iterator over the edges, in arcs of Coordinates."""
for (lon_start, lat_start), (lon_stop, lat_stop) in self.edges():
yield Arc(SCoordinate(lon_start, lat_start),
SCoordinate(lon_stop, lat_stop))
anti_lon_1 = self.lon[1] + np.pi
if anti_lon_1 > np.pi:
anti_lon_1 -= np.pi * 2
arc1 = Arc(SCoordinate(self.lon[1],
self.lat[1]),
SCoordinate(anti_lon_0,
-self.lat[0]))
arc2 = Arc(SCoordinate(anti_lon_0,
-self.lat[0]),
SCoordinate(anti_lon_1,
-self.lat[1]))
arc3 = Arc(SCoordinate(anti_lon_1,
-self.lat[1]),
SCoordinate(self.lon[0],
self.lat[0]))
other_arcs = [edge for edge in other.aedges()]
for arc in [arc1, arc2, arc3]:
inter, other_arc = arc.get_next_intersection(other_arcs)
if inter is not None:
sarc = Arc(arc.start, inter)
earc = Arc(inter, other_arc.end)
return sarc.angle(earc) < 0
return other.area() > (2 * np.pi * other.radius ** 2)
arc2 = Arc(SCoordinate(anti_lon_0,
-self.lat[0]),
SCoordinate(anti_lon_1,
-self.lat[1]))
arc3 = Arc(SCoordinate(anti_lon_1,
-self.lat[1]),
SCoordinate(self.lon[0],
self.lat[0]))
other_arcs = [edge for edge in other.aedges()]
for arc in [arc1, arc2, arc3]:
inter, other_arc = arc.get_next_intersection(other_arcs)
if inter is not None:
sarc = Arc(arc.start, inter)
earc = Arc(inter, other_arc.end)
return sarc.angle(earc) < 0
return other.area() > (2 * np.pi * other.radius ** 2)
if other._is_inside(self):
return polys[sign]
return None
# starting from the intersection, follow the edges of one of the
# polygons.
while True:
arcs1 = rotate_arcs(edge1, arcs1)
arcs2 = rotate_arcs(edge2, arcs2)
narcs1 = arcs1 + [edge1]
narcs2 = arcs2 + [edge2]
arc1 = Arc(inter, edge1.end)
arc2 = Arc(inter, edge2.end)
if np.sign(arc1.angle(arc2)) != sign:
arcs1, arcs2 = arcs2, arcs1
narcs1, narcs2 = narcs2, narcs1
nodes.append(inter)
for edge1 in narcs1:
inter, edge2 = edge1.get_next_intersection(narcs2, inter)
if inter is not None:
break
elif len(nodes) > 0 and edge1.end not in [nodes[-1], nodes[0]]:
nodes.append(edge1.end)
if inter is None and len(nodes) > 2 and nodes[-1] == nodes[0]:
arc2 = Arc(SCoordinate(anti_lon_0,
-self.lat[0]),
SCoordinate(anti_lon_1,
-self.lat[1]))
arc3 = Arc(SCoordinate(anti_lon_1,
-self.lat[1]),
SCoordinate(self.lon[0],
self.lat[0]))
other_arcs = [edge for edge in other.aedges()]
for arc in [arc1, arc2, arc3]:
inter, other_arc = arc.get_next_intersection(other_arcs)
if inter is not None:
sarc = Arc(arc.start, inter)
earc = Arc(inter, other_arc.end)
return sarc.angle(earc) < 0
return other.area() > (2 * np.pi * other.radius ** 2)
"""
anti_lon_0 = self.lon[0] + np.pi
if anti_lon_0 > np.pi:
anti_lon_0 -= np.pi * 2
anti_lon_1 = self.lon[1] + np.pi
if anti_lon_1 > np.pi:
anti_lon_1 -= np.pi * 2
arc1 = Arc(SCoordinate(self.lon[1],
self.lat[1]),
SCoordinate(anti_lon_0,
-self.lat[0]))
arc2 = Arc(SCoordinate(anti_lon_0,
-self.lat[0]),
SCoordinate(anti_lon_1,
-self.lat[1]))
arc3 = Arc(SCoordinate(anti_lon_1,
-self.lat[1]),
SCoordinate(self.lon[0],
self.lat[0]))
other_arcs = [edge for edge in other.aedges()]
for arc in [arc1, arc2, arc3]:
inter, other_arc = arc.get_next_intersection(other_arcs)
if inter is not None:
sarc = Arc(arc.start, inter)
earc = Arc(inter, other_arc.end)
return sarc.angle(earc) < 0
return polys[sign]
return None
# starting from the intersection, follow the edges of one of the
# polygons.
while True:
arcs1 = rotate_arcs(edge1, arcs1)
arcs2 = rotate_arcs(edge2, arcs2)
narcs1 = arcs1 + [edge1]
narcs2 = arcs2 + [edge2]
arc1 = Arc(inter, edge1.end)
arc2 = Arc(inter, edge2.end)
if np.sign(arc1.angle(arc2)) != sign:
arcs1, arcs2 = arcs2, arcs1
narcs1, narcs2 = narcs2, narcs1
nodes.append(inter)
for edge1 in narcs1:
inter, edge2 = edge1.get_next_intersection(narcs2, inter)
if inter is not None:
break
elif len(nodes) > 0 and edge1.end not in [nodes[-1], nodes[0]]:
nodes.append(edge1.end)
if inter is None and len(nodes) > 2 and nodes[-1] == nodes[0]:
nodes = nodes[:-1]