def rev(self, lng, lat, z=None, _type=np.int32):
if z is None:
z = self._default_z
if all(isinstance(var, (int, float, tuple)) for var in [lng, lat]):
lng, lat = (np.array([lng]), np.array([lat]))
if not all(isinstance(var, np.ndarray) for var in [lng, lat]):
raise ValueError("lng, lat inputs must be of type int, float, tuple or numpy.ndarray")
if not isinstance(z, np.ndarray):
z = np.zeros_like(lng) + z
coord = np.dstack([lng, lat, z])
offset, scale = np.vsplit(self._offscl, 2)
normed = coord * scale + offset
X = self._rpc(normed)
result = np.rollaxis(np.inner(self._A, X) / np.inner(self._B, X), 0, 3)
rev_offset, rev_scale = np.vsplit(self._px_offscl_rev, 2)
# needs to return x/y
return np.rollaxis(result * rev_scale + rev_offset, 2).squeeze().astype(_type)[::-1]
评论列表
文章目录