From 0b1ed64736a39d64cae984ef7dabf7e344e00f7c Mon Sep 17 00:00:00 2001 From: Karim Bahgat Date: Tue, 4 Aug 2015 17:03:33 +0200 Subject: [PATCH] Move some elements from parameters to containers module --- pycrs/elements/containers.py | 189 ++++++++++++++++++++++++++++++++++ pycrs/elements/containers.pyc | Bin 0 -> 9838 bytes pycrs/elements/parameters.py | 187 --------------------------------- pycrs/elements/parameters.pyc | Bin 29500 -> 21223 bytes pycrs/parser.py | 31 +++--- pycrs/parser.pyc | Bin 15294 -> 15347 bytes 6 files changed, 205 insertions(+), 202 deletions(-) create mode 100644 pycrs/elements/containers.py create mode 100644 pycrs/elements/containers.pyc diff --git a/pycrs/elements/containers.py b/pycrs/elements/containers.py new file mode 100644 index 0000000..02cd48a --- /dev/null +++ b/pycrs/elements/containers.py @@ -0,0 +1,189 @@ + +from . import directions +from . import datums + +# the final CRS object which is instantiated with all of the below and parameters +# remember to use +no_defs when outputting to proj4 +# ... +class CRS: + def __init__(self, toplevel): + self.toplevel = toplevel + + def to_proj4(self): + if isinstance(self.toplevel, ProjCS): + return "%s +no_defs" % self.toplevel.to_proj4() + elif isinstance(self.toplevel, GeogCS): + return "+proj=longlat %s +no_defs" % self.toplevel.to_proj4() + + def to_ogc_wkt(self): + return "%s" % self.toplevel.to_ogc_wkt() + + def to_esri_wkt(self): + return "%s" % self.toplevel.to_esri_wkt() + +##+proj Projection name (see `proj -l`) +class Projection: + proj4 = "+proj" + ogc_wkt = "PROJECTION" + esri_wkt = "PROJECTION" + + def __init__(self, value): + self.value = value + + def to_proj4(self): + return "+proj=%s" %self.value.proj4 + + def to_ogc_wkt(self): + return 'PROJECTION["%s"]' %self.value.ogc_wkt + + def to_esri_wkt(self): + return 'PROJECTION["%s"]' %self.value.esri_wkt + +##+datum Datum name (see `proj -ld`) +class Datum: + proj4 = "+datum" + ogc_wkt = "DATUM" + esri_wkt = "DATUM" + + def __init__(self, name, ellipsoid, datumshift=None): + """ + Arguments: + + - **name**: Specific datum name instance. + - **ellipsoid**: Ellipsoid parameter instance. + """ + self.name = name + self.ellips = ellipsoid + self.datumshift = datumshift + + def to_proj4(self): + if self.datumshift: + return "%s %s" % (self.ellips.to_proj4(), self.datumshift.to_proj4()) + elif isinstance(self.name, datums.Unknown): + return "%s" % self.ellips.to_proj4() + else: + return "+datum=%s %s" % (self.name.proj4, self.ellips.to_proj4()) + + def to_ogc_wkt(self): + if self.datumshift: + return 'DATUM["%s", %s, %s]' % (self.name.ogc_wkt, self.ellips.to_ogc_wkt(), self.datumshift.to_ogc_wkt()) + else: + return 'DATUM["%s", %s]' % (self.name.ogc_wkt, self.ellips.to_ogc_wkt()) + + def to_esri_wkt(self): + if self.datumshift: + return 'DATUM["%s", %s, %s]' % (self.name.esri_wkt, self.ellips.to_esri_wkt(), self.datumshift.to_esri_wkt()) + else: + return 'DATUM["%s", %s]' % (self.name.esri_wkt, self.ellips.to_esri_wkt()) + + def to_geotiff(self): + pass + #return "GeogGeodeticDatum" + +##+ellps Ellipsoid name (see `proj -le`) +class Ellipsoid: + proj4 = "+ellps" + ogc_wkt = "SPHEROID" + esri_wkt = "SPHEROID" + + def __init__(self, name, semimaj_ax=None, inv_flat=None): + """ + Arguments: + + - **name**: Specific ellipsoid name instance. + """ + self.name = name + + # get default values if not specified + if semimaj_ax == None: + semimaj_ax = self.name.semimaj_ax + if inv_flat == None: + inv_flat = self.name.inv_flat + + self.semimaj_ax = semimaj_ax + self.inv_flat = inv_flat + + def to_proj4(self): + return "+ellps=%s +a=%s +f=%s" % (self.name.proj4, self.semimaj_ax, self.inv_flat) + + def to_ogc_wkt(self): + return 'SPHEROID["%s", %s, %s]' % (self.name.ogc_wkt, self.semimaj_ax, self.inv_flat) + + def to_esri_wkt(self): + return 'SPHEROID["%s", %s, %s]' % (self.name.esri_wkt, self.semimaj_ax, self.inv_flat) + + def to_geotiff(self): + pass + #return "GeogEllipsoid" + +#GEOGCS +class GeogCS: + ogc_wkt = "GEOGCS" + esri_wkt = "GEOGCS" + + def __init__(self, name, datum, prime_mer, angunit, twin_ax=None): + """ + Arguments: + + - **name**: Arbitrary name. + """ + self.name = name + self.datum = datum + self.prime_mer = prime_mer + self.angunit = angunit + if twin_ax == None: + # default axes + twin_ax = directions.East(), directions.North() + self.twin_ax = twin_ax + + def to_proj4(self): + # dont parse axis to proj4, because in proj4, axis only applies to the cs, ie the projcs (not the geogcs, where wkt can specify with axis) + return "%s %s %s" % (self.datum.to_proj4(), self.prime_mer.to_proj4(), self.angunit.to_proj4() ) + + def to_ogc_wkt(self): + return 'GEOGCS["%s", %s, %s, %s, AXIS["Lon", %s], AXIS["Lat", %s]]' % (self.name, self.datum.to_ogc_wkt(), self.prime_mer.to_ogc_wkt(), self.angunit.to_ogc_wkt(), self.twin_ax[0].ogc_wkt, self.twin_ax[1].ogc_wkt ) + + def to_esri_wkt(self): + return 'GEOGCS["%s", %s, %s, %s, AXIS["Lon", %s], AXIS["Lat", %s]]' % (self.name, self.datum.to_esri_wkt(), self.prime_mer.to_esri_wkt(), self.angunit.to_esri_wkt(), self.twin_ax[0].esri_wkt, self.twin_ax[1].esri_wkt ) + +#PROJCS +class ProjCS: + ogc_wkt = "PROJCS" + esri_wkt = "PROJCS" + + def __init__(self, name, geogcs, proj, params, unit, twin_ax=None): + """ + Arguments: + + - **name**: Arbitrary name. + """ + self.name = name + self.geogcs = geogcs + self.proj = proj + self.params = params + self.unit = unit + if twin_ax == None: + # default axes + twin_ax = directions.East(), directions.North() + self.twin_ax = twin_ax + + def to_proj4(self): + string = "%s %s " % (self.proj.to_proj4(), self.geogcs.to_proj4()) + string += " ".join(param.to_proj4() for param in self.params) + string += " %s" % self.unit.to_proj4() + string += " +axis=" + self.twin_ax[0].proj4 + self.twin_ax[1].proj4 + "u" # up set as default because only proj4 can set it I think... + return string + + def to_ogc_wkt(self): + string = 'PROJCS["%s", %s, %s, ' % (self.name, self.geogcs.to_ogc_wkt(), self.proj.to_ogc_wkt() ) + string += ", ".join(param.to_ogc_wkt() for param in self.params) + string += ', %s' % self.unit.to_ogc_wkt() + string += ', AXIS["X", %s], AXIS["Y", %s]]' % (self.twin_ax[0].ogc_wkt, self.twin_ax[1].ogc_wkt ) + return string + + def to_esri_wkt(self): + string = 'PROJCS["%s", %s, %s, ' % (self.name, self.geogcs.to_esri_wkt(), self.proj.to_esri_wkt() ) + string += ", ".join(param.to_esri_wkt() for param in self.params) + string += ', %s' % self.unit.to_esri_wkt() + string += ', AXIS["X", %s], AXIS["Y", %s]]' % (self.twin_ax[0].esri_wkt, self.twin_ax[1].esri_wkt ) + return string diff --git a/pycrs/elements/containers.pyc b/pycrs/elements/containers.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d78aaec95df9ba83554c15556ea913992870f89 GIT binary patch literal 9838 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 diff --git a/pycrs/parser.py b/pycrs/parser.py index 3d418ec..faff913 100644 --- a/pycrs/parser.py +++ b/pycrs/parser.py @@ -9,6 +9,7 @@ from .elements import datums from .elements import ellipsoids from .elements import parameters +from .elements import containers from .elements import units from .elements import projections from . import utils @@ -274,7 +275,7 @@ def _from_wkt(string, wkttype, strict=False): projclass = projections.find(projname, "%s_wkt" % wkttype, strict) if projclass: projdef = projclass() - proj = parameters.Projection(projdef) + proj = containers.Projection(projdef) else: raise Exception("The specified projection name could not be found") @@ -314,7 +315,7 @@ def _from_wkt(string, wkttype, strict=False): ## twinax = None # put it all together - projcs = parameters.ProjCS("Unknown", geogcs, proj, params, linunit) #, twinax) + projcs = containers.ProjCS("Unknown", geogcs, proj, params, linunit) #, twinax) return projcs elif header.upper() == "GEOGCS": @@ -341,7 +342,7 @@ def _from_wkt(string, wkttype, strict=False): else: raise Exception("The specified ellipsoid name could not be found") - ellipsoid = parameters.Ellipsoid(ellipsdef, subsubcontent[1], subsubcontent[2]) + ellipsoid = containers.Ellipsoid(ellipsdef, subsubcontent[1], subsubcontent[2]) ## datum shift if wkttype == "ogc": @@ -355,7 +356,7 @@ def _from_wkt(string, wkttype, strict=False): datumshift = None ## put it all togehter - datum = parameters.Datum(datumdef, ellipsoid, datumshift) + datum = containers.Datum(datumdef, ellipsoid, datumshift) # prime mer subheader, subcontent = content[2] @@ -377,13 +378,13 @@ def _from_wkt(string, wkttype, strict=False): # ... # put it all together - geogcs = parameters.GeogCS(name, datum, prime_mer, angunit, twin_ax=None) + geogcs = containers.GeogCS(name, datum, prime_mer, angunit, twin_ax=None) return geogcs # toplevel collection header, content = crstuples[0] toplevel = _parse_top(header, content) - crs = parameters.CRS(toplevel) + crs = containers.CRS(toplevel) # use args to create crs return crs @@ -476,17 +477,17 @@ def from_proj4(string, strict=False): # COMBINE DATUM AND ELLIPS ## create datum and ellips param objs - ellips = parameters.Ellipsoid(ellipsdef, + ellips = containers.Ellipsoid(ellipsdef, semimaj_ax=partdict.get("+a"), inv_flat=partdict.get("+f")) if "+datum" in partdict: - datum = parameters.Datum(datumdef, ellips) + datum = containers.Datum(datumdef, ellips) elif "+towgs84" in partdict: - datum = parameters.Datum(datumdef, ellips, datumshift) + datum = containers.Datum(datumdef, ellips, datumshift) else: - datum = parameters.Datum(datumdef, ellips) + datum = containers.Datum(datumdef, ellips) # PRIME MERIDIAN @@ -520,7 +521,7 @@ def from_proj4(string, strict=False): # GEOGCS (note, currently does not load axes) - geogcs = parameters.GeogCS("Unknown", datum, prime_mer, angunit) #, twin_ax) + geogcs = containers.GeogCS("Unknown", datum, prime_mer, angunit) #, twin_ax) # PROJECTION @@ -543,7 +544,7 @@ def from_proj4(string, strict=False): if projdef: # create proj param obj - proj = parameters.Projection(projdef) + proj = containers.Projection(projdef) # Because proj4 has no element hierarchy, using automatic element find() would # ...would not be very effective, as that would need a try-fail approach for each @@ -656,15 +657,15 @@ def from_proj4(string, strict=False): # PROJCS - projcs = parameters.ProjCS("Unknown", geogcs, proj, params, unit) + projcs = containers.ProjCS("Unknown", geogcs, proj, params, unit) # CRS - crs = parameters.CRS(projcs) + crs = containers.CRS(projcs) else: # means projdef was None, ie unprojected longlat geogcs - crs = parameters.CRS(geogcs) + crs = containers.CRS(geogcs) # FINISHED diff --git a/pycrs/parser.pyc b/pycrs/parser.pyc index 6441d4a4e492097d0a617ea251a30fb945af6e1f..eeef61f3a226653f3bec80ec732ea2af59ec6a8b 100644 GIT binary patch delta 2682 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