Sophie

Sophie

distrib > Mandriva > 9.0 > i586 > by-pkgid > d67485fb8ce60f8952179bbde3b5d022 > files > 112

libgdal0-devel-1.1.7-2mdk.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta name="robots" content="noindex">
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Sample Driver: jdemdataset.cpp</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 1.2.3-20001105 on Thu Mar 28 09:47:33 2002 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; </center>
<hr><a name="jdemdataset.cpp"><h2>Sample Driver: jdemdataset.cpp</h2></a>
 <center>

<p>
</center>

<p>
<div class="fragment"><pre><font class="comment">/******************************************************************************</font>
<font class="comment"> * $Id: jdemdataset.cpp.html,v 1.4 2002/04/16 13:11:49 warmerda Exp $</font>
<font class="comment"> *</font>
<font class="comment"> * Project:  JDEM Reader</font>
<font class="comment"> * Purpose:  All code for Japanese DEM Reader</font>
<font class="comment"> * Author:   Frank Warmerdam, warmerdam@pobox.com</font>
<font class="comment"> *</font>
<font class="comment"> ******************************************************************************</font>
<font class="comment"> * Copyright (c) 2000, Frank Warmerdam &lt;warmerdam@pobox.com&gt;</font>
<font class="comment"> *</font>
<font class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</font>
<font class="comment"> * copy of this software and associated documentation files (the "Software"),</font>
<font class="comment"> * to deal in the Software without restriction, including without limitation</font>
<font class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</font>
<font class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</font>
<font class="comment"> * Software is furnished to do so, subject to the following conditions:</font>
<font class="comment"> *</font>
<font class="comment"> * The above copyright notice and this permission notice shall be included</font>
<font class="comment"> * in all copies or substantial portions of the Software.</font>
<font class="comment"> *</font>
<font class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS</font>
<font class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</font>
<font class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL</font>
<font class="comment"> * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</font>
<font class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</font>
<font class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</font>
<font class="comment"> * DEALINGS IN THE SOFTWARE.</font>
<font class="comment"> ******************************************************************************</font>
<font class="comment"> * </font>
<font class="comment"> * $Log: jdemdataset.cpp.html,v $
<font class="comment"> * Revision 1.4  2002/04/16 13:11:49  warmerda
<font class="comment"> * updated
<font class="comment"> *</font>
<font class="comment"> * Revision 1.5  2001/11/11 23:51:00  warmerda</font>
<font class="comment"> * added required class keyword to friend declarations</font>
<font class="comment"> *</font>
<font class="comment"> * Revision 1.4  2001/07/18 04:51:57  warmerda</font>
<font class="comment"> * added CPL_CVSID</font>
<font class="comment"> *</font>
<font class="comment"> * Revision 1.3  2001/06/21 19:59:51  warmerda</font>
<font class="comment"> * added help link</font>
<font class="comment"> *</font>
<font class="comment"> * Revision 1.2  2000/11/28 02:28:54  warmerda</font>
<font class="comment"> * Added error checks, GetGeoTransform and GetProjection</font>
<font class="comment"> *</font>
<font class="comment"> * Revision 1.1  2000/11/27 19:03:26  warmerda</font>
<font class="comment"> * New</font>
<font class="comment"> *</font>
<font class="comment"> */</font>

<font class="preprocessor">#include "gdal_priv.h"</font>

CPL_CVSID(<font class="stringliteral">"$Id: jdemdataset.cpp.html,v 1.4 2002/04/16 13:11:49 warmerda Exp $"</font>);

<font class="keyword">static</font> <a class="code" href="class_GDALDriver.html">GDALDriver</a>       *poJDEMDriver = NULL;

CPL_C_START
<font class="keywordtype">void</font>    GDALRegister_JDEM(<font class="keywordtype">void</font>);
CPL_C_END

<font class="comment">/************************************************************************/</font>
<font class="comment">/*                            JDEMGetField()                            */</font>
<font class="comment">/************************************************************************/</font>

<font class="keyword">static</font> <font class="keywordtype">int</font> JDEMGetField( <font class="keywordtype">char</font> *pszField, <font class="keywordtype">int</font> nWidth )<font class="keyword"></font>
<font class="keyword"></font>
<font class="keyword"></font>{
    <font class="keywordtype">char</font>        szWork[32];

    CPLAssert( nWidth &lt; (<font class="keywordtype">int</font>) <font class="keyword">sizeof</font>(szWork) );

    strncpy( szWork, pszField, nWidth );
    szWork[nWidth] = <font class="charliteral">'\0'</font>;

    <font class="keywordflow">return</font> atoi(szWork);
}

<font class="comment">/************************************************************************/</font>
<font class="comment">/*                            JDEMGetAngle()                            */</font>
<font class="comment">/************************************************************************/</font>

<font class="keyword">static</font> <font class="keywordtype">double</font> JDEMGetAngle( <font class="keywordtype">char</font> *pszField )<font class="keyword"></font>
<font class="keyword"></font>
<font class="keyword"></font>{
    <font class="keywordtype">int</font>         nAngle = JDEMGetField( pszField, 7 );
    <font class="keywordtype">int</font>         nDegree, nMin, nSec;

    <font class="comment">// Note, this isn't very general purpose, but it would appear</font>
    <font class="comment">// from the field widths that angles are never negative.  Nice</font>
    <font class="comment">// to be a country in the "first quadrant". </font>

    nDegree = nAngle / 10000;
    nMin = (nAngle / 100) % 100;
    nSec = nAngle % 100;
    
    <font class="keywordflow">return</font> nDegree + nMin / 60.0 + nSec / 3600.0;
}

<font class="comment">/************************************************************************/</font>
<font class="comment">/* ==================================================================== */</font>
<font class="comment">/*                              JDEMDataset                             */</font>
<font class="comment">/* ==================================================================== */</font>
<font class="comment">/************************************************************************/</font>

<font class="keyword">class </font>JDEMRasterBand;

<font class="keyword">class </font>JDEMDataset : <font class="keyword">public</font> <a class="code" href="class_GDALDataset.html">GDALDataset</a>
{
    <font class="keyword">friend</font> <font class="keyword">class </font>JDEMRasterBand;

    FILE        *fp;
    GByte       abyHeader[1012];

  <font class="keyword">public</font>:
                ~JDEMDataset();
    
    <font class="keyword">static</font> <a class="code" href="class_GDALDataset.html">GDALDataset</a> *Open( GDALOpenInfo * );

    CPLErr      <a class="code" href="class_GDALDataset.html#a8">GetGeoTransform</a>( <font class="keywordtype">double</font> * padfTransform );
    <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="class_GDALDataset.html#a6">GetProjectionRef</a>();
};

<font class="comment">/************************************************************************/</font>
<font class="comment">/* ==================================================================== */</font>
<font class="comment">/*                            JDEMRasterBand                             */</font>
<font class="comment">/* ==================================================================== */</font>
<font class="comment">/************************************************************************/</font>

<font class="keyword">class </font>JDEMRasterBand : <font class="keyword">public</font> <a class="code" href="class_GDALRasterBand.html">GDALRasterBand</a>
{
    <font class="keyword">friend</font> <font class="keyword">class </font>JDEMDataset;
    
  <font class="keyword">public</font>:

                JDEMRasterBand( JDEMDataset *, <font class="keywordtype">int</font> );
    
    <font class="keyword">virtual</font> CPLErr IReadBlock( <font class="keywordtype">int</font>, <font class="keywordtype">int</font>, <font class="keywordtype">void</font> * );
};


<font class="comment">/************************************************************************/</font>
<font class="comment">/*                           JDEMRasterBand()                            */</font>
<font class="comment">/************************************************************************/</font>

JDEMRasterBand::JDEMRasterBand( JDEMDataset *poDS, <font class="keywordtype">int</font> nBand )<font class="keyword"></font>
<font class="keyword"></font>
<font class="keyword"></font>{
    this-&gt;poDS = poDS;
    this-&gt;nBand = nBand;
    
    eDataType = GDT_Float32;

    nBlockXSize = poDS-&gt;<a class="code" href="class_GDALDataset.html#a1">GetRasterXSize</a>();
    nBlockYSize = 1;
}

<font class="comment">/************************************************************************/</font>
<font class="comment">/*                             IReadBlock()                             */</font>
<font class="comment">/************************************************************************/</font>

CPLErr JDEMRasterBand::IReadBlock( <font class="keywordtype">int</font> nBlockXOff, <font class="keywordtype">int</font> nBlockYOff,
                                  <font class="keywordtype">void</font> * pImage )<font class="keyword"></font>
<font class="keyword"></font>
<font class="keyword"></font>{
    JDEMDataset *poGDS = (JDEMDataset *) poDS;
    <font class="keywordtype">char</font>        *pszRecord;
    <font class="keywordtype">int</font>         nRecordSize = nBlockXSize*5 + 9 + 2;
    <font class="keywordtype">int</font>         i;

    VSIFSeek( poGDS-&gt;fp, 1011 + nRecordSize*nBlockYOff, SEEK_SET );

    pszRecord = (<font class="keywordtype">char</font> *) <a class="code" href="cpl_conv_h.html#a3">CPLMalloc</a>(nRecordSize);
    VSIFRead( pszRecord, 1, nRecordSize, poGDS-&gt;fp );

    <font class="keywordflow">if</font>( !EQUALN((<font class="keywordtype">char</font> *) poGDS-&gt;abyHeader,pszRecord,6) )
    {
        CPLFree( pszRecord );

        <a class="code" href="cpl_error_h.html#a17">CPLError</a>( CE_Failure, CPLE_AppDefined, 
                  <font class="stringliteral">"JDEM Scanline corrupt.  Perhaps file was not transferred\n"</font>
                  <font class="stringliteral">"in binary mode?"</font> );
        <font class="keywordflow">return</font> CE_Failure;
    }
    
    <font class="keywordflow">if</font>( JDEMGetField( pszRecord + 6, 3 ) != nBlockYOff + 1 )
    {
        CPLFree( pszRecord );

        <a class="code" href="cpl_error_h.html#a17">CPLError</a>( CE_Failure, CPLE_AppDefined, 
                  <font class="stringliteral">"JDEM scanline out of order, JDEM driver does not\n"</font>
                  <font class="stringliteral">"currently support partial datasets."</font> );
        <font class="keywordflow">return</font> CE_Failure;
    }

    <font class="keywordflow">for</font>( i = 0; i &lt; nBlockXSize; i++ )
        ((<font class="keywordtype">float</font> *) pImage)[i] = JDEMGetField( pszRecord + 9 + 5 * i, 5) * 0.1;

    <font class="keywordflow">return</font> CE_None;
}

<font class="comment">/************************************************************************/</font>
<font class="comment">/* ==================================================================== */</font>
<font class="comment">/*                              JDEMDataset                             */</font>
<font class="comment">/* ==================================================================== */</font>
<font class="comment">/************************************************************************/</font>

<font class="comment">/************************************************************************/</font>
<font class="comment">/*                            ~JDEMDataset()                             */</font>
<font class="comment">/************************************************************************/</font>

JDEMDataset::~JDEMDataset()<font class="keyword"></font>
<font class="keyword"></font>
<font class="keyword"></font>{
    <font class="keywordflow">if</font>( fp != NULL )
        VSIFClose( fp );
}

<font class="comment">/************************************************************************/</font>
<font class="comment">/*                          GetGeoTransform()                           */</font>
<font class="comment">/************************************************************************/</font>

CPLErr <a class="code" href="class_GDALDataset.html#a8">JDEMDataset::GetGeoTransform</a>( <font class="keywordtype">double</font> * padfTransform )<font class="keyword"></font>
<font class="keyword"></font>
<font class="keyword"></font>{
    <font class="keywordtype">double</font>      dfLLLat, dfLLLong, dfURLat, dfURLong;

    dfLLLat = JDEMGetAngle( (<font class="keywordtype">char</font> *) abyHeader + 29 );
    dfLLLong = JDEMGetAngle( (<font class="keywordtype">char</font> *) abyHeader + 36 );
    dfURLat = JDEMGetAngle( (<font class="keywordtype">char</font> *) abyHeader + 43 );
    dfURLong = JDEMGetAngle( (<font class="keywordtype">char</font> *) abyHeader + 50 );
    
    padfTransform[0] = dfLLLong;
    padfTransform[3] = dfURLat;
    padfTransform[1] = (dfURLong - dfLLLong) / <a class="code" href="class_GDALDataset.html#a1">GetRasterXSize</a>();
    padfTransform[2] = 0.0;
        
    padfTransform[4] = 0.0;
    padfTransform[5] = -1 * (dfURLat - dfLLLat) / <a class="code" href="class_GDALDataset.html#a2">GetRasterYSize</a>();


    <font class="keywordflow">return</font> CE_None;
}

<font class="comment">/************************************************************************/</font>
<font class="comment">/*                          GetProjectionRef()                          */</font>
<font class="comment">/************************************************************************/</font>

<font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="class_GDALDataset.html#a6">JDEMDataset::GetProjectionRef</a>()<font class="keyword"></font>
<font class="keyword"></font>
<font class="keyword"></font>{
    <font class="keywordflow">return</font>( <font class="stringliteral">"GEOGCS[\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",7004]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY[\"EPSG\",6301]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",8901]],UNIT[\"DMSH\",0.0174532925199433,AUTHORITY[\"EPSG\",9108]],AXIS[\"Lat\",NORTH],AXIS[\"Long\",EAST],AUTHORITY[\"EPSG\",4301]]"</font> );
}

<font class="comment">/************************************************************************/</font>
<font class="comment">/*                                Open()                                */</font>
<font class="comment">/************************************************************************/</font>

<a class="code" href="class_GDALDataset.html">GDALDataset</a> *JDEMDataset::Open( GDALOpenInfo * poOpenInfo )<font class="keyword"></font>
<font class="keyword"></font>
<font class="keyword"></font>{
<font class="comment">/* -------------------------------------------------------------------- */</font>
<font class="comment">/*      Before trying JDEMOpen() we first verify that there is at        */</font>
<font class="comment">/*      least one "\n#keyword" type signature in the first chunk of     */</font>
<font class="comment">/*      the file.                                                       */</font>
<font class="comment">/* -------------------------------------------------------------------- */</font>
    <font class="keywordflow">if</font>( poOpenInfo-&gt;fp == NULL || poOpenInfo-&gt;nHeaderBytes &lt; 50 )
        <font class="keywordflow">return</font> NULL;

    <font class="comment">/* check if century values seem reasonable */</font>
    <font class="keywordflow">if</font>( (!EQUALN((<font class="keywordtype">char</font> *)poOpenInfo-&gt;pabyHeader+11,<font class="stringliteral">"19"</font>,2)
          &amp;&amp; !EQUALN((<font class="keywordtype">char</font> *)poOpenInfo-&gt;pabyHeader+11,<font class="stringliteral">"20"</font>,2))
        || (!EQUALN((<font class="keywordtype">char</font> *)poOpenInfo-&gt;pabyHeader+15,<font class="stringliteral">"19"</font>,2)
             &amp;&amp; !EQUALN((<font class="keywordtype">char</font> *)poOpenInfo-&gt;pabyHeader+15,<font class="stringliteral">"20"</font>,2))
        || (!EQUALN((<font class="keywordtype">char</font> *)poOpenInfo-&gt;pabyHeader+19,<font class="stringliteral">"19"</font>,2)
             &amp;&amp; !EQUALN((<font class="keywordtype">char</font> *)poOpenInfo-&gt;pabyHeader+19,<font class="stringliteral">"20"</font>,2)) )
    {
        <font class="keywordflow">return</font> NULL;
    }
    
<font class="comment">/* -------------------------------------------------------------------- */</font>
<font class="comment">/*      Create a corresponding GDALDataset.                             */</font>
<font class="comment">/* -------------------------------------------------------------------- */</font>
    JDEMDataset         *poDS;

    poDS = <font class="keyword">new</font> JDEMDataset();

    poDS-&gt;poDriver = poJDEMDriver;
    poDS-&gt;fp = poOpenInfo-&gt;fp;
    poOpenInfo-&gt;fp = NULL;
    
<font class="comment">/* -------------------------------------------------------------------- */</font>
<font class="comment">/*      Read the header.                                                */</font>
<font class="comment">/* -------------------------------------------------------------------- */</font>
    VSIFSeek( poDS-&gt;fp, 0, SEEK_SET );
    VSIFRead( poDS-&gt;abyHeader, 1, 1012, poDS-&gt;fp );

    poDS-&gt;nRasterXSize = JDEMGetField( (<font class="keywordtype">char</font> *) poDS-&gt;abyHeader + 23, 3 );
    poDS-&gt;nRasterYSize = JDEMGetField( (<font class="keywordtype">char</font> *) poDS-&gt;abyHeader + 26, 3 );

<font class="comment">/* -------------------------------------------------------------------- */</font>
<font class="comment">/*      Create band information objects.                                */</font>
<font class="comment">/* -------------------------------------------------------------------- */</font>
    poDS-&gt;SetBand( 1, <font class="keyword">new</font> JDEMRasterBand( poDS, 1 ));

    <font class="keywordflow">return</font>( poDS );
}

<font class="comment">/************************************************************************/</font>
<font class="comment">/*                          GDALRegister_JDEM()                          */</font>
<font class="comment">/************************************************************************/</font>

<font class="keywordtype">void</font> GDALRegister_JDEM()<font class="keyword"></font>
<font class="keyword"></font>
<font class="keyword"></font>{
    <a class="code" href="class_GDALDriver.html">GDALDriver</a>  *poDriver;

    <font class="keywordflow">if</font>( poJDEMDriver == NULL )
    {
        poJDEMDriver = poDriver = <font class="keyword">new</font> GDALDriver();
        
        poDriver-&gt;pszShortName = <font class="stringliteral">"JDEM"</font>;
        poDriver-&gt;pszLongName = <font class="stringliteral">"Japanese DEM (.mem)"</font>;
        poDriver-&gt;pszHelpTopic = <font class="stringliteral">"frmt_various.html#JDEM"</font>;
        
        poDriver-&gt;pfnOpen = JDEMDataset::Open;

        GetGDALDriverManager()-&gt;RegisterDriver( poDriver );
    }
}
</div></pre>
<p>
<hr><address><small>Generated at Thu Mar 28 09:47:33 2002 for GDAL by
<a href="http://www.stack.nl/~dimitri/doxygen/index.html">
<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
width=110 height=53></a>1.2.3-20001105 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
 &copy;&nbsp;1997-2000</small></address>
</body>
</html>