2021-03-04 23:26:35 +08:00

58 lines
1.8 KiB
Python

#-----------------------------------------------------
# Author: Yaqiang Wang
# Date: 2017-11-28
# Purpose: MeteoInfo geoutil module
# Note: Jython
#-----------------------------------------------------
from org.meteoinfo.shape import ShapeUtil, PointShape
from org.meteoinfo.common import PointD
import mipylib.numeric as np
__all__ = [
'makeshapes'
]
def makeshapes(x, y, type=None, z=None, m=None):
"""
Make shapes by x and y coordinates.
:param x: (*array_like*) X coordinates.
:param y: (*array_like*) Y coordinates.
:param type: (*string*) Shape type [point | line | polygon].
:param z: (*array_like*) Z coordinates.
:param m: (*array_like*) M coordinates.
:returns: Shapes
"""
shapes = []
if isinstance(x, (int, float)):
shape = PointShape()
shape.setPoint(PointD(x, y))
shapes.append(shape)
else:
x = np.asarray(x)._array
y = np.asarray(y)._array
if not z is None:
if m is None:
m = np.zeros(len(z))._array
else:
m = np.asarray(m)._array
z = np.asarray(z)._array
if type == 'point':
if z is None:
shapes = ShapeUtil.createPointShapes(x, y)
else:
shapes = ShapeUtil.createPointShapes(x, y, z, m)
elif type == 'line':
if z is None:
shapes = ShapeUtil.createPolylineShapes(x, y)
else:
shapes = ShapeUtil.createPolylineShapes(x, y, z, m)
elif type == 'polygon':
if z is None:
shapes = ShapeUtil.createPolygonShapes(x, y)
else:
shapes = ShapeUtil.createPolygonShape(x, y, z, m)
return shapes