[Qgis-developer] script to update the srs.db
Marco Hugentobler
marco.hugentobler at karto.baug.ethz.ch
Mon Jun 23 03:44:53 EDT 2008
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
More information about the Qgis-developer
mailing list