<html><body>
<p><tt>gfoss-bounces@lists.gfoss.it scritti il 03/08/2011 10.19.43<br>
<br>
> Ciao a tutti,<br>
</tt><br>
<tt>> GDAL\OGR[1] è disponibile su Win e linux; l'utility ogr2ogr[2] consente<br>
> la trasformazione tra sistemi di coordinate (opzioni -a_srs EPSG:3003 e<br>
> -t_srs EPSG:32632) e DXF[3] è tra i formati supportati (relata refero,<br>
> non ho mai convertito un DXF con ogr2ogr).<br>
</tt><br>
<tt>OGR non supporta la riproiezione dei DXF.</tt><br>
<br>
<tt>Inoltre, non sempre per la riproiezione dei SHP è sufficiente indicare il SRS, bisogna aggiungere ulteriori parametri come la traslazione, la rotazione e il fattore di scala.</tt><br>
<br>
<tt>Un esempio per quanto riguarda Trento, con il passaggio dal EPSG:3003 a EPSG:25832 (UTM - ETRF 1989 32N):</tt><br>
<br>
<tt>ogr2ogr -f "ESRI Shapefile" -s_srs "+proj=tmerc +ellps=intl +lat_0=0 +lon_0=9 +k=0.999600 +x_0=1500000 +y_0=0 +units=m +towgs84=-117.231939820,-29.243113167,-7.955969586,-0.353472059,-2.843197642,-1.534991981,-17.961969706"  -t_srs "+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  OUTPUTSHP SOURCESHP</tt><br>
<br>
<tt>l'errore massimo, rispetto ad una riproiezione fatta con ArcMap, è di mezzo millimetro sull'asse X e meno sulle Y.</tt><br>
<br>
<br>
<tt>Per quanto riguarda i DXF, qui usiamo una procedura in python che legge un DXF e genera un nuovo DXF riproiettato</tt><br>
<tt>secondo i parametri sopracitati (p.s. Python deve girare su architettura a 32 bit, non a 64!):</tt><br>
<br>
<br>
<tt>#impostazione coefficienti</tt><br>
<tt>gbe89alfa = 0.999981929972442</tt><br>
<tt>gbe89beta = -8.08884040434622 / 1000000</tt><br>
<tt>gbe89p = 82.9213694651314 </tt><br>
<tt>gbe89q = -1000040.08814668</tt><br>
<tt>#apertura file input e output</tt><br>
<tt>inpFile = open(nomeDxfInput, "r")</tt><br>
<tt># try:</tt><br>
<tt>outFile = open(str (nomeDxfOutput), "w")</tt><br>
<tt>while 1:</tt><br>
<tt>  riga = inpFile.readline()</tt><br>
<tt>  outFile.write(riga)</tt><br>
<tt>  #considero solo "punti primari" ed "altri punti"</tt><br>
<tt>  if riga == " 10"+'\n' or riga == " 11"+'\n' or riga == " 12"+'\n' or riga == " 13"+'\n' or riga == " 14"+'\n' or riga == " 15"+'\n' or riga == " 16"+'\n' or riga == " 17"+'\n' or riga == " 18"+'\n':</tt><br>
<tt>    x = (inpFile.readline())</tt><br>
<tt>    xgb = float(x)</tt><br>
<tt>    x = x.split("\n") [0]</tt><br>
<tt>    quantidecx = (len(x) - (x.rfind(".") + 1))</tt><br>
<tt>    successiva = inpFile.readline()</tt><br>
<tt>    y = inpFile.readline()</tt><br>
<tt>    ygb = float(y)</tt><br>
<tt>    y = y.split("\n") [0]</tt><br>
<tt>    quantidecy = (len(y) - (y.rfind(".") + 1))</tt><br>
<tt>    #considero solo coordinate cartografiche</tt><br>
<tt>    if xgb > 1000000 and ygb > 5000000 :</tt><br>
<tt>      xutm = (float(gbe89q + xgb * gbe89alfa - ygb * gbe89beta))</tt><br>
<tt>      xutm = str(round(xutm,quantidecx))</tt><br>
<tt>      outFile.write(xutm +'\n')</tt><br>
<tt>      outFile.write(successiva)</tt><br>
<tt>      yutm = (gbe89p + (ygb * gbe89alfa) + (xgb * gbe89beta))</tt><br>
<tt>      yutm = str(round(yutm,quantidecy))</tt><br>
<tt>      outFile.write(yutm +'\n')</tt><br>
<tt>    else:</tt><br>
<tt>      outFile.write(str(xgb)+'\n')</tt><br>
<tt>      outFile.write(successiva)</tt><br>
<tt>      outFile.write(str(ygb)+'\n')</tt><br>
<tt>  if not riga:</tt><br>
<tt>    break</tt><br>
<tt># chiusura files e cancellazione file rinominato</tt><br>
<tt>inpFile.close()</tt><br>
<tt>outFile.close()</tt></body></html>