initial commit
This commit is contained in:
62
billinglayer/python/shapely/coords.py
Normal file
62
billinglayer/python/shapely/coords.py
Normal file
@@ -0,0 +1,62 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user