📄 osr_tutorial.html
字号:
y = atof( papszArgv[i+4] ); <span class="keywordflow">if</span>( poCT == NULL || !poCT-><a class="code" href="classOGRCoordinateTransformation.html#bf141396940b4f7b1f8118ea025d569b">Transform</a>( 1, &x, &y ) ) printf( <span class="stringliteral">"Transformation failed.\n"</span> ); <span class="keywordflow">else</span> printf( <span class="stringliteral">"(%f,%f) -> (%f,%f)\n"</span>, atof( papszArgv[i+3] ), atof( papszArgv[i+4] ), x, y );</pre></div><p>There are a couple of points at which transformations can fail. First, <a class="el" href="ogr__spatialref_8h.html#ae11bd08e45cdb2e71e1d9c31f1e550f">OGRCreateCoordinateTransformation()</a> may fail, generally because the internals recognise that no transformation between the indicated systems can be established. This might be due to use of a projection not supported by the internal PROJ.4 library, differing datums for which no relationship is known, or one of the coordinate systems being inadequately defined. If <a class="el" href="ogr__spatialref_8h.html#ae11bd08e45cdb2e71e1d9c31f1e550f">OGRCreateCoordinateTransformation()</a> fails it will return a NULL.<p>The <a class="el" href="classOGRCoordinateTransformation.html#bf141396940b4f7b1f8118ea025d569b">OGRCoordinateTransformation::Transform()</a> method itself can also fail. This may be as a delayed result of one of the above problems, or as a result of an operation being numerically undefined for one or more of the passed in points. The Transform() function will return TRUE on success, or FALSE if any of the points fail to transform. The point array is left in an indeterminate state on error.<p>Though not shown above, the coordinate transformation service can take 3D points, and will adjust elevations for elevation differents in spheroids, and datums. At some point in the future shifts between different vertical datums may also be applied. If no Z is passed, it is assume that the point is on the geoide.<p>The following example shows how to conveniently create a lat/long coordinate system using the same geographic coordinate system as a projected coordinate system, and using that to transform between projected coordinates and lat/long.<p><div class="fragment"><pre class="fragment"> <a class="code" href="classOGRSpatialReference.html">OGRSpatialReference</a> oUTM, *poLatLong; <a class="code" href="classOGRCoordinateTransformation.html">OGRCoordinateTransformation</a> *poTransform; oUTM.<a class="code" href="classOGRSpatialReference.html#208118581246feb29646acf2ea5d4237">SetProjCS</a>(<span class="stringliteral">"UTM 17 / WGS84"</span>); oUTM.<a class="code" href="classOGRSpatialReference.html#096b8dde4fd2eb475acd376060940b02">SetWellKnownGeogCS</a>( <span class="stringliteral">"WGS84"</span> ); oUTM.<a class="code" href="classOGRSpatialReference.html#0c4f6fcab663c9eb6d465787cad3833c">SetUTM</a>( 17 ); poLatLong = oUTM.<a class="code" href="classOGRSpatialReference.html#65a0ae2274a38a04a2cce0b8683d3354">CloneGeogCS</a>(); poTransform = <a class="code" href="ogr__spatialref_8h.html#ae11bd08e45cdb2e71e1d9c31f1e550f">OGRCreateCoordinateTransformation</a>( &oUTM, poLatLong ); <span class="keywordflow">if</span>( poTransform == NULL ) { ... } ... <span class="keywordflow">if</span>( !poTransform-><a class="code" href="classOGRCoordinateTransformation.html#bf141396940b4f7b1f8118ea025d569b">Transform</a>( nPoints, x, y, z ) ) ...</pre></div><h2><a class="anchor" name="osr_tutorial_apis">Alternate Interfaces</a></h2>A C interface to the coordinate system services is defined in <a class="el" href="ogr__srs__api_8h.html">ogr_srs_api.h</a>, and Python bindings are available via the osr.py module. Methods are close analogs of the C++ methods but in C and Python bindings are missing for some C++ methods.<p><h3>C Bindings</h3><p><div class="fragment"><pre class="fragment"><span class="keyword">typedef</span> <span class="keywordtype">void</span> *OGRSpatialReferenceH; <span class="keyword">typedef</span> <span class="keywordtype">void</span> *OGRCoordinateTransformationH;OGRSpatialReferenceH OSRNewSpatialReference( <span class="keyword">const</span> <span class="keywordtype">char</span> * );<span class="keywordtype">void</span> OSRDestroySpatialReference( OGRSpatialReferenceH );<span class="keywordtype">int</span> OSRReference( OGRSpatialReferenceH );<span class="keywordtype">int</span> OSRDereference( OGRSpatialReferenceH );OGRErr OSRImportFromEPSG( OGRSpatialReferenceH, <span class="keywordtype">int</span> );OGRErr OSRImportFromWkt( OGRSpatialReferenceH, <span class="keywordtype">char</span> ** );OGRErr OSRExportToWkt( OGRSpatialReferenceH, <span class="keywordtype">char</span> ** );OGRErr OSRSetAttrValue( OGRSpatialReferenceH hSRS, <span class="keyword">const</span> <span class="keywordtype">char</span> * pszNodePath, <span class="keyword">const</span> <span class="keywordtype">char</span> * pszNewNodeValue );<span class="keyword">const</span> <span class="keywordtype">char</span> *OSRGetAttrValue( OGRSpatialReferenceH hSRS, <span class="keyword">const</span> <span class="keywordtype">char</span> * pszName, <span class="keywordtype">int</span> iChild);OGRErr OSRSetLinearUnits( OGRSpatialReferenceH, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">double</span> );<span class="keywordtype">double</span> OSRGetLinearUnits( OGRSpatialReferenceH, <span class="keywordtype">char</span> ** );<span class="keywordtype">int</span> OSRIsGeographic( OGRSpatialReferenceH );<span class="keywordtype">int</span> OSRIsProjected( OGRSpatialReferenceH );<span class="keywordtype">int</span> OSRIsSameGeogCS( OGRSpatialReferenceH, OGRSpatialReferenceH );<span class="keywordtype">int</span> OSRIsSame( OGRSpatialReferenceH, OGRSpatialReferenceH );OGRErr OSRSetProjCS( OGRSpatialReferenceH hSRS, <span class="keyword">const</span> <span class="keywordtype">char</span> * pszName );OGRErr OSRSetWellKnownGeogCS( OGRSpatialReferenceH hSRS, <span class="keyword">const</span> <span class="keywordtype">char</span> * pszName );OGRErr OSRSetGeogCS( OGRSpatialReferenceH hSRS, <span class="keyword">const</span> <span class="keywordtype">char</span> * pszGeogName, <span class="keyword">const</span> <span class="keywordtype">char</span> * pszDatumName, <span class="keyword">const</span> <span class="keywordtype">char</span> * pszEllipsoidName, <span class="keywordtype">double</span> dfSemiMajor, <span class="keywordtype">double</span> dfInvFlattening, <span class="keyword">const</span> <span class="keywordtype">char</span> * pszPMName , <span class="keywordtype">double</span> dfPMOffset , <span class="keyword">const</span> <span class="keywordtype">char</span> * pszUnits, <span class="keywordtype">double</span> dfConvertToRadians );<span class="keywordtype">double</span> OSRGetSemiMajor( OGRSpatialReferenceH, OGRErr * );<span class="keywordtype">double</span> OSRGetSemiMinor( OGRSpatialReferenceH, OGRErr * );<span class="keywordtype">double</span> OSRGetInvFlattening( OGRSpatialReferenceH, OGRErr * );OGRErr OSRSetAuthority( OGRSpatialReferenceH hSRS, <span class="keyword">const</span> <span class="keywordtype">char</span> * pszTargetKey, <span class="keyword">const</span> <span class="keywordtype">char</span> * pszAuthority, <span class="keywordtype">int</span> nCode );OGRErr OSRSetProjParm( OGRSpatialReferenceH, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">double</span> );<span class="keywordtype">double</span> OSRGetProjParm( OGRSpatialReferenceH hSRS, <span class="keyword">const</span> <span class="keywordtype">char</span> * pszParmName, <span class="keywordtype">double</span> dfDefault, OGRErr * );OGRErr OSRSetUTM( OGRSpatialReferenceH hSRS, <span class="keywordtype">int</span> nZone, <span class="keywordtype">int</span> bNorth );<span class="keywordtype">int</span> OSRGetUTMZone( OGRSpatialReferenceH hSRS, <span class="keywordtype">int</span> *pbNorth );OGRCoordinateTransformationHOCTNewCoordinateTransformation( OGRSpatialReferenceH hSourceSRS, OGRSpatialReferenceH hTargetSRS );<span class="keywordtype">void</span> OCTDestroyCoordinateTransformation( OGRCoordinateTransformationH );<span class="keywordtype">int</span> OCTTransform( OGRCoordinateTransformationH hCT, <span class="keywordtype">int</span> nCount, <span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *y, <span class="keywordtype">double</span> *z );</pre></div><p><h3>Python Bindings</h3><p><div class="fragment"><pre class="fragment"><span class="keyword">class </span>osr.SpatialReference def __init__(self,obj=None): def ImportFromWkt( <span class="keyword">self</span>, wkt ): def ExportToWkt(self): def ImportFromEPSG(self,code): def IsGeographic(self): def IsProjected(self): def GetAttrValue(self, name, child = 0): def SetAttrValue(self, name, value): def SetWellKnownGeogCS(self, name): def SetProjCS(self, name = <span class="stringliteral">"unnamed"</span> ): def IsSameGeogCS(self, other): def IsSame(self, other): def SetLinearUnits(self, units_name, to_meters ): def SetUTM(self, zone, is_north = 1):class CoordinateTransformation: def __init__(self,source,target): def TransformPoint(self, x, y, z = 0): def TransformPoints(self, points):</pre></div><h2><a class="anchor" name="osr_tutorial_impl">Internal Implementation</a></h2>The <a class="el" href="classOGRCoordinateTransformation.html">OGRCoordinateTransformation</a> service is implemented on top of the <a href="http://www.remotesensing.org/proj">PROJ.4</a> library originally written by Gerald Evenden of the USGS. <hr>Generated for GDAL by <a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1.</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -