mirror of
https://github.com/meteoinfo/MeteoInfo.git
synced 2025-12-08 20:36:05 +00:00
58 lines
1.8 KiB
Python
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
|
|
|