def from_wkt(cls, in_wkt_string): """Make a CRS from a WKT string Parameters ---------- in_wkt_string : str A WKT string. Returns ------- CRS """ if not is_wkt(in_wkt_string): raise CRSError("Invalid WKT string: {}".format(in_wkt_string)) return cls(_from_string(in_wkt_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 is_wkt(in_proj_string) or "=" not in in_proj_string: raise CRSError("Invalid PROJ string: {}".format(in_proj_string)) return cls(_from_string(in_proj_string))
def from_wkt(in_wkt_string: str) -> "CRS": """ .. versionadded:: 2.2.0 Make a CRS from a WKT string Parameters ---------- in_wkt_string : str A WKT string. Returns ------- CRS """ if not is_wkt(in_wkt_string): raise CRSError("Invalid WKT string: {}".format(in_wkt_string)) return CRS(_prepare_from_string(in_wkt_string))
def _from_string(in_crs_string): 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 _from_dict(crs_dict) elif not is_wkt(in_crs_string) and "=" in in_crs_string: # make sure the projection starts with +proj or +init starting_params = ("+init", "+proj", "init", "proj") if not in_crs_string.lstrip().startswith(starting_params): kvpairs = [] 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() # remove no_defs as it does nothing as of PROJ 6.0.0 and breaks # initialization with +init=epsg:... in_crs_string = re.sub(r"\s\+?no_defs([\w=]+)?", "", in_crs_string) return in_crs_string