[Qgis-developer] script to update the srs.db

Marco Hugentobler marco.hugentobler at karto.baug.ethz.ch
Mon Jun 23 07:42:20 EDT 2008


Unfortunately, I found some more occurences of GEOSRS_ID in the code.
It is on my todo list...

Regards,
Marco

Am Montag 23 Juni 2008 10:08:45 schrieb Tim Sutton:
> Hi Marco
>
> Sorry for not replying to the thread - I was away for a few days. Your
> suggestion seems reasonable to me. Since we are matching on proj4
> string it should have no impact if the srs_id changes I guess. We
> should do a comparison of the new Maciej generated srs table and the
> one prior to it and check we havent lost any srses - I recall some
> that were contributed for Paris (I think it was) and Sweden that were
> incorporated into the db to augment / replace erroneous ones, and thus
> wont have EPSG nos.
>
> Regards
>
> Tim
>
> 2008/6/23 Marco Hugentobler <marco.hugentobler at karto.baug.ethz.ch>:
> > Hi Maciej,
> >
> > Since no one else replied, I give it a try. Keep in mind crs is not my
> > special area of competence, so others please feel free to correct me
> > where I'm wrong.
> >
> >> <SpatialRefSys>
> >>   <ProjectSRSProj4String type="QString" >+proj=tmerc +lat_0=0 (snip...)
> >>   <ProjectSRSID type="int" >181</ProjectSRSID>
> >> </SpatialRefSys>
> >>
> >> Which tag does QGIS depend on to recognize the project's SRS? Does it
> >> consider the <srsid> or <ProjectSRSID type="int" > at all?>
> >
> > From what I have seen in the code, if a srs is read from XML file, import
> > is done from proj4 string using OGR.
> >
> > qgsspatialrefsys.cpp: 665
> >
> > void QgsSpatialRefSys::setProj4String (QString theProj4String)
> > {
> >  const char *oldlocale = setlocale(LC_ALL, NULL);
> >  setlocale(LC_ALL, "C");
> >  mIsValidFlag = OSRImportFromProj4(mSRS, theProj4String.toLatin1
> > ().constData() )==OGRERR_NONE;
> >  setlocale(LC_ALL, oldlocale);
> > }
> >
> > and for transformation, the proj4 string is exported from OGR and passed
> > to proj4 library.
> >
> >
> > It seems to me that the QGIS srsid is only used to create a default srs
> > if the <spatialrefsys> tag is not present:
> >
> > qgsspatialrefsys.cpp: 908
> >
> > QDomNode srsNode  = theNode.namedItem( "spatialrefsys" );
> >
> >
> > if ( ! srsNode.isNull() )
> >  {
> > ...
> > }
> > else
> >  {
> >    // Return default SRS if none was found in the XML.
> >    createFromSrsId(GEOSRS_ID);
> > }
> >
> > where GEOSRS_ID is:
> >
> > qgis.h:123:  const long GEOSRS_ID = 2585;
> >
> > I wonder if we just could replace that with epsg number 4326 and then use
> >
> > const long DEFAULT_EPGS = 4326;
> >
> > createFromEPSG(DEFAULT_EPSG);
> >
> > ?
> >
> > That way, it would be possible to change the qgis srs ids without
> > affecting project file support.
> >
> >
> > Regards,
> > Marco
> >
> > Am Mittwoch 11 Juni 2008 22:55:36 schrieb Maciej Sieczka:
> >> Tim Sutton pisze:
> >> > Hi Richard
> >> >
> >> > One thing I would like to do if you assemble small test datasets is
> >> > to create some unit tests for srs stuff. One basic form of test I am
> >> > thinking is to simply have a directory with a bunch of shapefiles
> >> > with a single feature each, each shp being in a different srs. The
> >> > test would load each one in turn and verify that it gets the correct
> >> >  epsg etc for it. So if you so start getting little test files in,
> >> > bear this in mind so that we can use them for more formal unit
> >> > testing too.
> >> >
> >> > Secondly if I recall correctly, the reason we originally opted to use
> >> >  our own srs identifier was that the srs db did inclide some srs
> >> > definitions that did not have an epsg code yet.
> >>
> >> Please anybody who knows details speak up!
> >>
> >> > It would be good if we could maintain the original srs id pkeys in
> >> > any updates you do
> >>
> >> This could be done with some extra work, but I don't think
> >> QGIS should depend on it's own SRS numbering scheme, when EPSG provides
> >> an universal, stable scheme for that. That's what EPSG database is good
> >> at and let's make use of it if possible.
> >>
> >> > since changing them may introduce regressions for people loading .qgs
> >> >  project files.
> >>
> >> In a .qgs the layer's and on the <mapcanvas> SRS part looks like this:
> >>
> >> <spatialrefsys>
> >>   <proj4>+proj=tmerc +lat_0=0 +lon_0=19 +k=0 +x_0=500000 (snip...)
> >>   <srsid>181</srsid>
> >>   <srid>2180</srid>
> >>   <epsg>2180</epsg>
> >>   <description>ETRS89 / Poland CS92</description>
> >>   <projectionacronym>tmerc</projectionacronym>
> >>   <ellipsoidacronym>GRS80</ellipsoidacronym>
> >>   <geographicflag>false</geographicflag>
> >> </spatialrefsys>
> >>
> >> The <properties> SRS (how does differ from the <mapcanvas> one???) is
> >> eg.:
> >>
> >> <SpatialRefSys>
> >>   <ProjectSRSProj4String type="QString" >+proj=tmerc +lat_0=0 (snip...)
> >>   <ProjectSRSID type="int" >181</ProjectSRSID>
> >> </SpatialRefSys>
> >>
> >> Which tag does QGIS depend on to recognize the project's SRS? Does it
> >> consider the <srsid> or <ProjectSRSID type="int" > at all?
> >>
> >> Cheers,
> >> Maciek
> >
> > --
> > Dr. Marco Hugentobler
> > Institute of Cartography
> > ETH Zurich
> > Technical Advisor QGIS Project Steering Committee



-- 
Dr. Marco Hugentobler
Institute of Cartography
ETH Zurich
Technical Advisor QGIS Project Steering Committee


More information about the Qgis-developer mailing list