<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Emmanuel Dewaele &#187; coordonnées</title>
	<atom:link href="https://edewaele.toile-libre.org/?feed=rss2&#038;tag=coordonnees" rel="self" type="application/rss+xml" />
	<link>https://edewaele.toile-libre.org</link>
	<description></description>
	<lastBuildDate>Thu, 27 Nov 2014 17:25:49 +0000</lastBuildDate>
	<language>fr-FR</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.0.38</generator>
	<item>
		<title>Transformations de coordonnées avec GDAL</title>
		<link>https://edewaele.toile-libre.org/?p=28</link>
		<comments>https://edewaele.toile-libre.org/?p=28#comments</comments>
		<pubDate>Tue, 03 Apr 2012 18:33:12 +0000</pubDate>
		<dc:creator><![CDATA[emmanuel]]></dc:creator>
				<category><![CDATA[SIG]]></category>
		<category><![CDATA[coordonnées]]></category>
		<category><![CDATA[GDAL]]></category>
		<category><![CDATA[géométries]]></category>
		<category><![CDATA[projections]]></category>

		<guid isPermaLink="false">http://edewaele.toile-libre.org/?p=28</guid>
		<description><![CDATA[Cette petite note technique traite d&#8217;une des activités les plus fréquentes quand on travaille avec des données géographiques: la transformation de coordonnées entre différentes projections. L&#8217;incontournable PostGIS est pourvu de la fonction st_transform(the_geom,srid), qui passe n&#8217;importe quelle géométrie dans le système de coordonnées voulu. Or, il n&#8217;est pas toujours possible pour des contraintes techniques ou [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Cette petite note technique traite d&rsquo;une des activités les plus fréquentes quand on travaille avec des données géographiques: la transformation de coordonnées entre différentes projections. L&rsquo;incontournable PostGIS est pourvu de la fonction <em>st_transform(the_geom,srid)</em>, qui passe n&rsquo;importe quelle géométrie dans le système de coordonnées voulu. Or, il n&rsquo;est pas toujours possible pour des contraintes techniques ou autres soucis de performances de solliciter PostGIS.</p>
<p>La bibliothèque GDAL est un outil très adapté dans les cas où vous voulez manipuler des données géographiques en C++ ou Python. Celle ci a la mérite d&rsquo;être bien développée, même s&rsquo;il n&rsquo;y a pas vraiment une grande communauté et beaucoup de tutoriel sur ses fonctionnalités. Pour preuve, le site de GDAL n&rsquo;est autre qu&rsquo;une documentation générée par Doxygen.</p>
<p>Il n&rsquo;est pourtant pas très compliqué, en C++ ou Python, de transformer des coordonnées avec GDAL, supposant qu&rsquo;on utilise le langage C++:</p>
<ul>
<li>Installer la bibliothèque  GDAL, sur des systèmes de type Debian ou Ubuntu:</li>
</ul>
<blockquote>
<pre>sudo  apt-get install libgdal1-dev</pre>
</blockquote>
<ul>
<li>Il est nécessaire de faire les inclusions suivantes:</li>
</ul>
<blockquote>
<pre>#include &lt;gdal/ogr_geometry.h&gt;
#include &lt;gdal/ogr_spatialref.h&gt;
#include &lt;gdal/ogr_srs_api.h&gt;s</pre>
</blockquote>
<ul>
<li>Pour effectuer des transformations d&rsquo;un système à l&rsquo;autre, on déclare d&rsquo;abord deux objets représentant des systèmes de coordonnées, avec la classe <a href="http://www.gdal.org/ogr/classOGRSpatialReference.html"><em>OGRSpatialReference</em></a>, puis l&rsquo;objet destiné à transformer des coordonnées (classe <a href="http://www.gdal.org/ogr/classOGRCoordinateTransformation.html">OGRCoordinateTransformation</a>). Typiquement, on utilise le <a href="http://fr.wikipedia.org/wiki/Syst%C3%A8me_de_coordonn%C3%A9es_g%C3%A9or%C3%A9f%C3%A9renc%C3%A9es#Les_codes_EPSG">code EPSG</a>, pour représenter un système de coordonnées. Ici, on instancie la projection 4326 (latitude et longitude) et la projection 25572, qu&rsquo;on appelle aussi Lambert II, et qui a l&rsquo;avantage en France de représenter fidèlement les distances en mètres. On cherche alors à transformer les coordonnées de Lambert II vers longitude/latitude</li>
</ul>
<blockquote>
<pre>OGRSpatialReference refLonLat;
refLonLat.importFromEPSG(4326);
OGRSpatialReference refLambert;
refLambert.importFromEPSG(27572);
OGRCoordinateTransformation * lambertToLonLat = OGRCreateCoordinateTransformation(&amp;refLambert,&amp;refLonLat);</pre>
</blockquote>
<ul>
<li>Lorsqu&rsquo;on veut convertir un vecteur de deux coordonnées, avec les variables x et y, on utilise l&rsquo;objet de transformation avec la méthode <a href="http://www.gdal.org/ogr/classOGRCoordinateTransformation.html#abf141396940b4f7b1f8118ea025d569b"><em>Transform</em></a></li>
</ul>
<blockquote>
<pre>double x = ...;
double y = ...;
lambertToLonLat-&gt;Transform(1,&amp;x,&amp;y);</pre>
</blockquote>
<p>A noter, les coordonnées sont converties sur place, c&rsquo;est à dire que les variables (ou tables) qui lui sont données sont modifiées. Si le premier argument vaut 1, on peut lui donner de simples valeurs de type <em>double</em>, ou bien des tableaux de <em>double</em> dans le cas contraire&#8230;</p>
<p>Pour convertir des coordonnées en Python, un code Python équivalent serait:</p>
<blockquote>
<pre>try:
from osgeo import ogr
except:
import ogr
try:
from osgeo import osr
except:
import osr
refLambert = osr.SpatialReference()
refLambert.ImportFromEPSG(27572)
refLonLat = osr.SpatialReference()
refLonLat.ImportFromEPSG(4326)
coordTrans = osr.CoordinateTransformation(refLambert,refLonLat)
point = ogr.Geometry(ogr.wkbPoint)
x = ...
y = ...
point.AddPoint(x,y)
point.Transform(coordTrans)</pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>https://edewaele.toile-libre.org/?feed=rss2&#038;p=28</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
