<div dir="ltr">This is a chunk of code that iḿ writing based in&nbsp; OGR tutorial but I don&#39;t know what&#39;s going on with this. OGR is working well but I&#39;ve a trouble with stl vector. I&#39;m using a vector to save the polygon feature points extracter from shapefile obtained from vmap0 noamer ,for draw them later. The trouble is: I&#39;m saving a feature in a feature vector, but when i want to use it in other code it only have the last feature repeated in&nbsp; the whole vector. There is the code:<br>
<br><br>For my feature class<br>&lt;code&gt;<br>#include &lt;iostream&gt;<br>#include &lt;vector&gt;<br>&nbsp;using namespace std;<br>typedef&nbsp;&nbsp;&nbsp; struct featurePoint{<br>&nbsp;&nbsp;&nbsp; double x;<br>&nbsp;&nbsp;&nbsp; double y;<br>};<br>typedef vector&lt;featurePoint *&gt; myFeaturePoints;<br>
&nbsp;class myFeatureClass{<br>&nbsp;&nbsp;&nbsp; &nbsp;public:<br>&nbsp;&nbsp;&nbsp; &nbsp; double&nbsp; ID;<br>&nbsp;&nbsp;&nbsp; &nbsp; string&nbsp; F_CODE;<br>&nbsp;&nbsp;&nbsp; &nbsp;string&nbsp; F_CODE_DES;<br>&nbsp;&nbsp;&nbsp; &nbsp;string&nbsp; NAM;<br>&nbsp;&nbsp;&nbsp; &nbsp;string&nbsp; NA2;<br>&nbsp;&nbsp;&nbsp; &nbsp;string&nbsp; NA2_DESCRI;<br>&nbsp;&nbsp;&nbsp; &nbsp;string&nbsp; NA3;<br>&nbsp;&nbsp;&nbsp; &nbsp;string&nbsp; NA3_DESCRI;<br>
&nbsp;&nbsp;&nbsp; &nbsp;unsigned int TILE_ID;<br>&nbsp;&nbsp;&nbsp; &nbsp;double&nbsp; FAC_ID;<br>&nbsp;&nbsp;&nbsp; &nbsp;myFeaturePoints points;<br>};<br>typedef vector&lt;myFeatureClass *&gt; Features;<br>&lt;/code&gt;<br><br>And main.cpp<br>/* Created by Anjuta version 1.2.4a */<br>
/*&nbsp;&nbsp;&nbsp; This file will not be overwritten */<br><br><br>#include &quot;ogrsf_frmts.h&quot;<br>#include &quot;myFeature.h&quot;<br>#include &lt;iostream&gt;<br>#include &lt;string&gt;<br>#include &lt;vector&gt;<br>using namespace std;<br>
<br>int main()<br><br>{<br>&nbsp;&nbsp;&nbsp; <br>Features featuresVector;<br>&nbsp;&nbsp;&nbsp; <br>myFeatureClass feature;<br>&nbsp; <br>featurePoint *point;<br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; OGRRegisterAll();<br><br>&nbsp;&nbsp;&nbsp; OGRDataSource&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *poDS;<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; poDS = OGRSFDriverRegistrar::Open( &quot;bnd-political-boundary-a.shp&quot;, FALSE );<br>
&nbsp;&nbsp;&nbsp; if( poDS == NULL )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf( &quot;Open failed.\n&quot; );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit( -1 );<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; int layerNumber;<br>&nbsp;&nbsp;&nbsp; layerNumber=poDS-&gt;GetLayerCount();<br><br>&nbsp;&nbsp;&nbsp; OGRLayer&nbsp; *poLayer;<br>
<br>&nbsp;&nbsp;&nbsp; poLayer = poDS-&gt;GetLayer(0);<br>&nbsp;&nbsp;&nbsp; <br><br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; OGRFeature *poFeature;<br><br>&nbsp;&nbsp;&nbsp; poLayer-&gt;ResetReading();<br>&nbsp;&nbsp; int asdf=poLayer-&gt;GetFeatureCount(1);<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;&quot;Features counted &quot;&lt;&lt;asdf&lt;&lt;endl;<br>
<br>&nbsp;&nbsp;&nbsp; int count=0;<br>&nbsp;&nbsp;&nbsp; while( (poFeature = poLayer-&gt;GetNextFeature()) != NULL )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OGRFeatureDefn *poFDefn = poLayer-&gt;GetLayerDefn();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int iField;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for( iField = 0; iField &lt; poFDefn-&gt;GetFieldCount(); iField++ )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // OGRFieldDefn *poFieldDefn = poFDefn-&gt;GetFieldDefn( iField );<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; switch(iField){<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 0:feature.ID=poFeature-&gt;GetFieldAsDouble(iField);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 1:feature.F_CODE=poFeature-&gt;GetFieldAsString(iField);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 2:feature.F_CODE_DES=poFeature-&gt;GetFieldAsString(iField);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 3:feature.NAM=poFeature-&gt;GetFieldAsString(iField);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 4:feature.NA2=poFeature-&gt;GetFieldAsString(iField);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 5:feature.NA2_DESCRI=poFeature-&gt;GetFieldAsString(iField);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 6:feature.NA3=poFeature-&gt;GetFieldAsString(iField);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 7:feature.NA3_DESCRI=poFeature-&gt;GetFieldAsString(iField);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 8:feature.TILE_ID=poFeature-&gt;GetFieldAsInteger(iField);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 9:feature.FAC_ID=poFeature-&gt;GetFieldAsDouble(iField);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OGRGeometry *poGeometry;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; poGeometry = poFeature-&gt;GetGeometryRef();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( poGeometry != NULL <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; wkbFlatten(poGeometry-&gt;getGeometryType()) == wkbPolygon/*wkbPoint*/)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OGRPolygon *poPoint = (OGRPolygon *) poGeometry;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; OGRLinearRing *LR=poPoint-&gt;getExteriorRing();&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(LR==NULL){<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout&lt;&lt;&quot;No Poligono&quot;&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else{<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //~ cout&lt;&lt;&quot;Si poligono&quot;&lt;&lt;endl;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;int b=LR-&gt;getNumPoints();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //~ cout&lt;&lt;&quot;Numero de puntos=&quot;&lt;&lt;b&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //~ int a=poPoint-&gt;getNumInteriorRings();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //~ cout&lt;&lt;&quot;Numero de anillos internos=&quot;&lt;&lt;a&lt;&lt;endl;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //~ //printf( &quot;\n%.4f,%4.f\n&quot;, poPoint-&gt;getX(), poPoint-&gt;getY() );<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int i=0;i&lt;b;i++){<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//cout&lt;&lt;&quot;i=&quot;&lt;&lt;i&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;OGRPoint *p=(OGRPoint *)poGeometry;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;LR-&gt;getPoint(i,p);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//cout&lt;&lt;&quot;X=&quot;&lt;&lt;p-&gt;getX()&lt;&lt;&quot; Y=&quot;&lt;&lt;p-&gt;getY()&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; point-&gt;x=p-&gt;getX();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; point-&gt;y=p-&gt;getY();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; feature.points.push_back(/*(featurePoint *)&amp;*/point);&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; featuresVector.push_back(&amp;feature);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int size=featuresVector.size();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; myFeatureClass *c=featuresVector[count];<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;&quot;El Tamagno del vector de features es:&quot;&lt;&lt;size&lt;&lt;endl; //////////In this chunk of code I can see all the features/////////<br>
&nbsp;&nbsp;&nbsp; cout&lt;&lt;&quot;El ID de la primera feature es:&quot;&lt;&lt;c-&gt;NAM&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf( &quot;no point geometry\n&quot; );<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //featuresVector.push_back((myFeatureClass *)&amp;feature);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //feature=NULL;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; count++;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //cout&lt;&lt;&quot;***************************************************************&quot;&lt;&lt;endl&lt;&lt;count&lt;&lt;endl;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //OGRFeature::DestroyFeature( poFeature );<br>&nbsp;&nbsp;&nbsp; }getchar();<br>&nbsp;&nbsp;&nbsp; int size=featuresVector.size();<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;&quot;El Tamagno del vector de features es:&quot;&lt;&lt;size&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; int j;<br>&nbsp;&nbsp;&nbsp; for (j=0;j&lt;size;j++){&nbsp; <br>
&nbsp;&nbsp;&nbsp; myFeatureClass *c=featuresVector[j];<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;&quot;El ID de la &quot;&lt;&lt;j&lt;&lt;&quot;esima feature es:&quot;&lt;&lt;c-&gt;NAM&lt;&lt;endl; ////////////////////////but in this nop////////////////////<br>
&nbsp;&nbsp;&nbsp; cout&lt;&lt;&quot;punto x&quot;&lt;&lt;c-&gt;points[0]-&gt;x&lt;&lt;endl;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; OGRDataSource::DestroyDataSource( poDS );<br>}<br><br>This is a newbie error and not a GDAL/OGR issue and this isn&#39;t the rigth place to ask for an answer but nobody help me before. I know but I don&#39;t know what I&#39;m doing wrong.<br>
<br>Thank you<br><br><br><br><br></div>