def _prepare_from_string(in_crs_string: str) -> str: if not in_crs_string: raise CRSError("CRS is empty or invalid: {!r}".format(in_crs_string)) elif "{" in in_crs_string: # may be json, try to decode it try: crs_dict = json.loads(in_crs_string, strict=False) except ValueError: raise CRSError("CRS appears to be JSON but is not valid") if not crs_dict: raise CRSError("CRS is empty JSON") return _prepare_from_dict(crs_dict) elif is_proj(in_crs_string): in_crs_string = re.sub(r"[\s+]?=[\s+]?", "=", in_crs_string.lstrip()) # make sure the projection starts with +proj or +init starting_params = ("+init", "+proj", "init", "proj") if not in_crs_string.startswith(starting_params): kvpairs = [] # type: List[str] first_item_inserted = False for kvpair in in_crs_string.split(): if not first_item_inserted and ( kvpair.startswith(starting_params)): kvpairs.insert(0, kvpair) first_item_inserted = True else: kvpairs.append(kvpair) in_crs_string = " ".join(kvpairs) # make sure it is the CRS type if "type=crs" not in in_crs_string: if "+" in in_crs_string: in_crs_string += " +type=crs" else: in_crs_string += " type=crs" # look for EPSG, replace with epsg (EPSG only works # on case-insensitive filesystems). in_crs_string = in_crs_string.replace("+init=EPSG", "+init=epsg").strip() if in_crs_string.startswith(("+init", "init")): warnings.warn( "'+init=<authority>:<code>' syntax is deprecated. " "'<authority>:<code>' is the preferred initialization method. " "When making the change, be mindful of axis order changes: " "https://pyproj4.github.io/pyproj/stable/gotchas.html" "#axis-order-changes-in-proj-6", FutureWarning, stacklevel=2, ) return in_crs_string
def from_proj4(cls, in_proj_string): """Make a CRS from a PROJ string Parameters ---------- in_proj_string : str A PROJ string. Returns ------- CRS """ if not is_proj(in_proj_string): raise CRSError("Invalid PROJ string: {}".format(in_proj_string)) return cls(_prepare_from_string(in_proj_string))
def from_proj4(in_proj_string: str) -> "CRS": """ .. versionadded:: 2.2.0 Make a CRS from a PROJ string Parameters ---------- in_proj_string : str A PROJ string. Returns ------- CRS """ if not is_proj(in_proj_string): raise CRSError("Invalid PROJ string: {}".format(in_proj_string)) return CRS(_prepare_from_string(in_proj_string))