def project(x, y, fromproj=KnownCoordinateSystems.geographic.world.WGS1984, toproj=KnownCoordinateSystems.geographic.world.WGS1984): """ Project geographic coordinates from one projection to another. :param x: (*array_like*) X coordinate values for projection. :param y: (*array_like*) Y coordinate values for projection. :param fromproj: (*ProjectionInfo*) From projection. Default is longlat projection. :param toproj: (*ProjectionInfo*) To projection. Default is longlat projection. :returns: (*array_like*, *array_like*) Projected geographic coordinates. """ if isinstance(fromproj, str): fromproj = ProjectionInfo.factory(fromproj) if isinstance(toproj, str): toproj = ProjectionInfo.factory(toproj) if isinstance(x, (tuple, list)): x = np.array(x) if isinstance(y, (tuple, list)): y = np.array(y) if isinstance(x, NDArray): outxy = Reproject.reproject(x.asarray(), y.asarray(), fromproj, toproj) return NDArray(outxy[0]), NDArray(outxy[1]) else: inpt = PointD(x, y) outpt = Reproject.reprojectPoint(inpt, fromproj, toproj) return outpt.X, outpt.Y
def projinfo(proj4string=None, proj='longlat', **kwargs): """ Create a projection object with Proj.4 parameters (http://proj4.org/) :param proj4string: (*string*) Proj.4 projection string. :param proj: (*string*) Projection name. :param lat_0: (*float*) Latitude of origin. :param lon_0: (*float*) Central meridian. :param lat_1: (*float*) Latitude of first standard paralle. :param lat_2: (*float*) Latitude of second standard paralle. :param lat_ts: (*float*) Latitude of true scale. :param k: (*float*) Scaling factor. :param x_0: (*float*) False easting. :param y_0: (*float*) False northing. :param h: (*float*) Height from earth surface. :returns: (*ProjectionInfo*) ProjectionInfo object. """ if not proj4string is None: return ProjectionInfo.factory(proj4string) if proj == 'longlat' and len(kwargs) == 0: return KnownCoordinateSystems.geographic.world.WGS1984 origin = kwargs.pop('origin', (0, 0, 0)) lat_0 = origin[0] lon_0 = origin[1] lat_0 = kwargs.pop('lat_0', lat_0) lon_0 = kwargs.pop('lon_0', lon_0) lat_ts = kwargs.pop('truescalelat', 0) lat_ts = kwargs.pop('lat_ts', lat_ts) k = kwargs.pop('scalefactor', 1) k = kwargs.pop('k', k) paralles = kwargs.pop('paralles', (30, 60)) lat_1 = paralles[0] if len(paralles) == 2: lat_2 = paralles[1] else: lat_2 = lat_1 lat_1 = kwargs.pop('lat_1', lat_1) lat_2 = kwargs.pop('lat_2', lat_2) x_0 = kwargs.pop('falseeasting', 0) y_0 = kwargs.pop('falsenorthing', 0) x_0 = kwargs.pop('x_0', x_0) y_0 = kwargs.pop('y_0', y_0) h = kwargs.pop('h', None) projstr = '+proj=' + proj \ + ' +lat_0=' + str(lat_0) \ + ' +lon_0=' + str(lon_0) \ + ' +lat_1=' + str(lat_1) \ + ' +lat_2=' + str(lat_2) \ + ' +lat_ts=' + str(lat_ts) \ + ' +k=' + str(k) \ + ' +x_0=' + str(x_0) \ + ' +y_0=' + str(y_0) if not h is None: projstr = projstr + ' +h=' + str(h) return ProjectionInfo.factory(projstr)