Files
2023-08-24 17:49:47 -05:00

63 lines
1.5 KiB
Python

"""Coordinate sequence utilities
"""
from array import array
class CoordinateSequence:
"""
Iterative access to coordinate tuples from the parent geometry's coordinate
sequence.
Example:
>>> from shapely.wkt import loads
>>> g = loads('POINT (0.0 0.0)')
>>> list(g.coords)
[(0.0, 0.0)]
"""
def __init__(self, coords):
self._coords = coords
def __len__(self):
return self._coords.shape[0]
def __iter__(self):
for i in range(self.__len__()):
yield tuple(self._coords[i].tolist())
def __getitem__(self, key):
m = self.__len__()
if isinstance(key, int):
if key + m < 0 or key >= m:
raise IndexError("index out of range")
if key < 0:
i = m + key
else:
i = key
return tuple(self._coords[i].tolist())
elif isinstance(key, slice):
res = []
start, stop, stride = key.indices(m)
for i in range(start, stop, stride):
res.append(tuple(self._coords[i].tolist()))
return res
else:
raise TypeError("key must be an index or slice")
def __array__(self, dtype=None):
return self._coords
@property
def xy(self):
"""X and Y arrays"""
m = self.__len__()
x = array("d")
y = array("d")
for i in range(m):
xy = self._coords[i].tolist()
x.append(xy[0])
y.append(xy[1])
return x, y