Luca,<div><br></div><div>thank you so much for your help. For a programming beginner like me, the obvious is not alway so clear!</div><div><br></div><div>Now I see the light :)</div><div><br>I ended up using the
ExecuteSQL method because the
SetFeature method deleted the content of the other fields. I'm sure there is an obvious solution to this also but I didn' t find it :)</div><div><br></div><div>I also noticed the CopyLayer function dosen't write the geometry type of the copied layer. Is this expected behaviour ?</div>
<div><br></div><div>Best regards</div><div><br></div><div>Martin</div><div><br><br><br><div class="gmail_quote">On 14 May 2012 12:07, Luca Sigfrido Percich <span dir="ltr"><<a href="mailto:sigfrido@tiscali.it" target="_blank">sigfrido@tiscali.it</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Martin,<br>
<br>
you're updating existing features so you don't want to use the<br>
CreateFeature method. If you try to re-insert an existing feature you<br>
will get the duplicate pk error.<br>
<br>
See the docs for the SetFeature method.<br>
<br>
Moreover, your loop code is a bit confused; usually you would do:<br>
<br>
while True:<br>
outFeature = dstLayer.GetNextFeature()<br>
if (outFeature is None):<br>
break<br>
outFeature.SetField('gradient',666)<br>
outLayer.SetFeature(outFeature)<br>
<br>
You may also use an SQL UPDATE instruction:<br>
<br>
dataSource.ExecuteSQL("update gwr.dstlayer set gradient = 666")<br>
<br>
Sig<br>
<br>
Il giorno sab, 12/05/2012 alle 19.43 +0200, Martin Jensen ha scritto:<br>
<div class="im">> Hi list,<br>
><br>
><br>
> I was trying to do the following with ogr python bindings<br>
</div>> 1. Create srclayer from PostGIS based on sql statement<br>
> 2. Copy srclayer to dstlayer (also PostGIS)<br>
> 3. Add new field to dstlayer<br>
> 4. assign value to new field<br>
<div class="im"><br>
<br>
> outFeature = dstlayer.GetNextFeature()<br>
><br>
> ## update the new field<br>
><br>
> for feature in dstlayer:<br>
><br>
> outFeature.SetField('gradient',666) ##set this field only<br>
><br>
> outFeature.SetFID(-1) ## tried to unset ogc_fid so not violating<br>
> pk column constraint<br>
><br>
> dstlayer.CreateFeature(outFeature)<br>
><br>
> outFeature = dstlayer.GetNextFeature()<br>
><br>
><br>
><br>
><br>
><br>
><br>
> I get the error:<br>
><br>
><br>
> ERROR: duplicate key value violates unique constraint "dstlayer_pk"<br>
> DETAIL: Key (ogc_fid)=(1) already exists.<br>
><br>
><br>
><br>
><br>
> I have a feeling i'm missing something really simple here.<br>
><br>
><br>
> Any suggestions would be much appreciated!<br>
><br>
><br>
> Software:<br>
> GDAL 1.9<br>
> PG: PostgreSQL version string : 'PostgreSQL 9.1.3 on<br>
> x86_64-apple-darwin11.3.0, compiled by<br>
> i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc.<br>
> build 5658) (LLVM build 2336.9.00), 64-bit'<br>
> PG: PostGIS version string : '2.0 USE_GEOS=1 USE_PROJ=1 USE_STATS=1'<br>
><br>
><br>
> Best regards<br>
><br>
><br>
> Martin<br>
</div>> _______________________________________________<br>
> gdal-dev mailing list<br>
> <a href="mailto:gdal-dev@lists.osgeo.org">gdal-dev@lists.osgeo.org</a><br>
> <a href="http://lists.osgeo.org/mailman/listinfo/gdal-dev" target="_blank">http://lists.osgeo.org/mailman/listinfo/gdal-dev</a><br>
<br>
<br>
_____________<br>
PRIVACY<br>
Le informazioni contenute in questo messaggio sono riservate e confidenziali. Il loro utilizzo e' consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora Lei non fosse la persona a cui il presente messaggio è destinato, La invitiamo ad eliminarlo dal Suo Sistema e a distruggere le varie copie o stampe, dandone gentilmente comunicazione all’indirizzo mail del mittente. Ogni utilizzo improprio e' contrario ai principi del D.lgs 196/03 e alla legislazione europea (Direttiva 2002/58/CE).<br>
<br>
PRIVACY<br>
Le informazioni contenute in questo messaggio sono riservate e confidenziali. Il loro utilizzo e' consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora Lei non fosse la persona a cui il presente messaggio è destinato, La invitiamo ad eliminarlo dal Suo Sistema e a distruggere le varie copie o stampe, dandone gentilmente comunicazione all’indirizzo mail del mittente. Ogni utilizzo improprio e' contrario ai principi del D.lgs 196/03 e alla legislazione europea (Direttiva 2002/58/CE).<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>Med venlig hilsen<br><br>Martin Bjærge Jensen<br>
</div>