<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[SIG Et @]]></title>
  <link href="http://blog.sigeat.net/atom.xml" rel="self"/>
  <link href="http://blog.sigeat.net/"/>
  <updated>2012-08-14T01:07:35+02:00</updated>
  <id>http://blog.sigeat.net/</id>
  <author>
    <name><![CDATA[Thomas Gratier]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Import DBF/CSV to PostGIS using ogr2ogr]]></title>
    <link href="http://blog.sigeat.net/blog/2012/08/13/import-dbf-slash-csv-to-postgis-using-ogr2ogr/"/>
    <updated>2012-08-13T23:46:00+02:00</updated>
    <id>http://blog.sigeat.net/blog/2012/08/13/import-dbf-slash-csv-to-postgis-using-ogr2ogr</id>
    <content type="html"><![CDATA[<p>Recently, I read a <a class="reference external" href="http://kelsocartography.com/blog/?p=4240">post from Nathaniel Kelso</a> about some behaviours of PostGIS he want to be improved.
Some days after, Paul Ramsey, one of the core PostGIS commiters made <a class="reference external" href="http://blog.cleverelephant.ca/2012/08/postgis-apologia.html">an answer about this</a>.</p>
<p>Both of them, are using for importing data from DBF/CSV with location information a manual table creation, a csv import and a geometry creation similar to <a class="reference external" href="http://www.kevfoo.com/2012/01/Importing-CSV-to-PostGIS/">http://www.kevfoo.com/2012/01/Importing-CSV-to-PostGIS/</a></p>
<p>I use another way I wanted to share.</p>
<p>I rely on ogr2ogr, an utility from <a class="reference external" href="http://www.gdal.org/">the library ogr/gdal</a> and <a class="reference external" href="http://www.gdal.org/ogr/drv_vrt.html">the virtual table format</a> (a way to wrap other format in order to make some custom things)</p>
<p>Be careful, we&#8217;re using version 1.9.1 the latest stable release of ogr/gdal, some old binaries will not stand all options of our example.</p>
<div class="section" id="the-csv-example">
<h2>The CSV example</h2>
<p>Considering,</p>
<ul class="simple">
<li>a myfile.csv file</li>
</ul>
<pre class="literal-block">
Latitude,Longitude,Name
48.1,0.25,&quot;First point&quot;
49.2,1.1,&quot;Second point&quot;
47.5,0.75,&quot;Third point&quot;
</pre>
<ul class="simple">
<li>a myfile.vrt file</li>
</ul>
<pre class="literal-block">
&lt;OGRVRTDataSource&gt;
    &lt;OGRVRTLayer name=&quot;myfile&quot;&gt;
        &lt;SrcDataSource&gt;myfile.csv&lt;/SrcDataSource&gt;
        &lt;GeometryType&gt;wkbPoint&lt;/GeometryType&gt;
        &lt;LayerSRS&gt;WGS84&lt;/LayerSRS&gt;
        &lt;GeometryField encoding=&quot;PointFromColumns&quot; x=&quot;Longitude&quot; y=&quot;Latitude&quot;/&gt;
    &lt;/OGRVRTLayer&gt;
&lt;/OGRVRTDataSource&gt;
</pre>
<ul class="simple">
<li>and ogr2ogr command line (we custom it look like shp2pgsql default id to gid and geometry to the_geom)</li>
</ul>
<pre class="literal-block">
ogr2ogr -f &quot;PostgreSQL&quot; -lco GEOMETRY_NAME=the_geom -lco FID=gid PG:&quot;host=localhost user=postgres dbname=mydb password=mypassword&quot; myfile.vrt -nln mytable
</pre>
<p>This below mean import from myfile.vrt (this file point to your mycsvfile.csv) into a PostgresSQL table named mytable using a geometry name set to the_geom and the id set to gid.
The PostgreSQL connection is defined into PG:&quot;&#8230;&quot;</p>
</div>
<div class="section" id="the-dbf-example">
<h2>The DBF example</h2>
<p>It&#8217;s the same instructions except:</p>
<ul class="simple">
<li>you create a DBF file using same structure (simple as a cut &amp; paste of csv into LibreOffice or OpenOffice and a save as dbf)</li>
<li>you replace your myfile.vrt file with</li>
</ul>
<pre class="literal-block">
&lt;OGRVRTDataSource&gt;
    &lt;OGRVRTLayer name=&quot;myfile&quot;&gt;
        &lt;SrcDataSource&gt;myfile.dbf&lt;/SrcDataSource&gt;
        &lt;GeometryType&gt;wkbPoint&lt;/GeometryType&gt;
        &lt;LayerSRS&gt;WGS84&lt;/LayerSRS&gt;
        &lt;GeometryField encoding=&quot;PointFromColumns&quot; x=&quot;Longitude&quot; y=&quot;Latitude&quot;/&gt;
    &lt;/OGRVRTLayer&gt;
&lt;/OGRVRTDataSource&gt;
</pre>
<ul class="simple">
<li>reload the same command line changing only option for overwriting previous csv table already loaded</li>
</ul>
<pre class="literal-block">
ogr2ogr -f &quot;PostgreSQL&quot; -overwrite -lco GEOMETRY_NAME=the_geom -lco FID=gid PG:&quot;host=localhost user=postgres dbname=mydb password=mypassword&quot; myfile.vrt -nln mytable
</pre>
</div>
<div class="section" id="small-goodies">
<h2>Small goodies</h2>
<p><strong>ogr2ogr related</strong></p>
<p>The way we import is raw, the input is default to string but with VRT, you can custom input type for columns (default is string)
See the fields part of the vrt doc <a class="reference external" href="http://www.gdal.org/ogr/drv_vrt.html">http://www.gdal.org/ogr/drv_vrt.html</a> and the example &quot;Example: Renaming attributes&quot;
Be cautious, I haven&#8217;t try with DBF to set custom type</p>
<p>In our example, the ogr2ogr option &quot;-nln mytable&quot; can be forgotten if you don&#8217;t need to custom the output table name</p>
<p>Another great ressource (outside of the official doc) if you want to dive into ogr2ogr further is <a class="reference external" href="http://www.bostongis.com/PrinterFriendly.aspx?content_name=ogr_cheatsheet">BostonGIS ogr_cheatsheet</a></p>
<p>For continuing DBF example, I borrow them this example</p>
<pre class="literal-block">
ogr2ogr -f &quot;PostgreSQL&quot; PG:&quot;host=myserver user=myusername dbname=mydbname password=mypassword&quot; sometable.dbf -nln &quot;sometable&quot;
</pre>
<p><strong>shp2pgsql related</strong></p>
<p>Following another Kelso question concerning make default some options in shp2pgsql, another tip is to use functions in bash (only available in Unix-like systems)</p>
<p>So put in ~/.bashrc</p>
<pre class="literal-block">
shp2pgsql_im () {
  shp2pgsql -dID $&#64;
}
</pre>
<p>reload ~/.bashrc</p>
<pre class="literal-block">
source ~/.bashrc
</pre>
<p>Now shp2pgsql_im the new command with default options added to shp2pgsql</p>
<p>Hope you enjoy this small contribution</p>
</div>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Quelques commandes réseaux pratiques sous Linux]]></title>
    <link href="http://blog.sigeat.net/blog/2012/07/20/quelques-commandes-reseaux-pratiques-sous-linux/"/>
    <updated>2012-07-20T21:34:00+02:00</updated>
    <id>http://blog.sigeat.net/blog/2012/07/20/quelques-commandes-reseaux-pratiques-sous-linux</id>
    <content type="html"><![CDATA[]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Désactiver sa webcam sous Linux]]></title>
    <link href="http://blog.sigeat.net/blog/2012/07/19/desactiver-sa-webcam-sous-linux/"/>
    <updated>2012-07-19T18:22:00+02:00</updated>
    <id>http://blog.sigeat.net/blog/2012/07/19/desactiver-sa-webcam-sous-linux</id>
    <content type="html"><![CDATA[]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Orthophotos de Nantes pour OSM]]></title>
    <link href="http://blog.sigeat.net/blog/2012/04/04/orthophotos-de-nantes-pour-osm/"/>
    <updated>2012-04-04T23:20:00+02:00</updated>
    <id>http://blog.sigeat.net/blog/2012/04/04/orthophotos-de-nantes-pour-osm</id>
    <content type="html"><![CDATA[<p>Récemment, nous avons vu passer une annonce sympathique de
<a href="http://libertic.wordpress.com/">Libertic</a> qui annonçait qu&#8217;un contributeur
(Tangui Morlier de <a href="http://www.april.org">l&#8217;April</a> pour ne pas le citer) avait
récupéré les url des raster des orthophotos de la ville de Nantes qui datent de 2005.
Au final, de fil en aiguille, cela nous a amené à créer un WMS pour permettre
aux contributeurs nantais d&#8217;OSM d&#8217;améliorer la couverture des données sur Nantes.
Suivez le guide même si tout n&#8217;est pas détaillé :) <!-- more --></p>

<h2>Récupérer les données</h2>

<p>Nous avons voulu récupérer les fichiers pour les réutiliser.
Comme les url récupérées étaient prévues par communes, certaines url étaient
dupliquées. On a procédé au nettoyage pour un usage &#8220;bourrin&#8221; (récupérer toutes
les orthophotos)</p>

<p>Pour cela, on a créé un script python pour s&#8217;exercer sur ce language.</p>

<div><script src='https://gist.github.com/2305924.js?file='></script>
<noscript><pre><code>#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import requests, re, os

def download_file(url, fileName=None):
    def getFileName(url, req):
        h = req.headers
        file = None;
        if h.has_key(&quot;content-disposition&quot;) and h.get(&quot;content-disposition&quot;)!= None and 'filename=' in h.get(&quot;content-disposition&quot;):
            file = re.findall(&quot;filename=(\S+)&quot;, h.get(&quot;content-disposition&quot;))[-1]
            file = file.strip(&quot;\&quot;'&quot;)
            if &quot;/&quot; in file:
                file = file.split(&quot;/&quot;)[-1]
        else:
            file = url.split(&quot;/&quot;)[-1]
        return file
    try:
        r = requests.get(url)
        fileName = getFileName(url, r)
        if fileName == None:
            print &quot;You must set a fileName, unable to auto retrieve it&quot;
        with open(fileName, 'wb') as f:
            f.write(r.content)
        return fileName
    except:
        print &quot;You got an error&quot;
        pass

def extract(zipfilepath, extractiondir):
    &quot;&quot;&quot;&quot;Extract files and dir from zip from zipfilepath to extractiondir
    &quot;&quot;&quot;
    import zipfile
    zip = zipfile.ZipFile(zipfilepath)
    zip.extractall(path=extractiondir)


# Path for downloading
download = os.getcwd()
os.chdir(download)

# Nantes csv list
url_csv_ortho_nantes = &quot;https://gitorious.org/sharedscrapers/orthonantes/blobs/raw/master/data/orthonantes.csv&quot;
file_ortho = download_file(url_csv_ortho_nantes)

import csv
# Now import csv file content
f = open(file_ortho, &quot;rb&quot;)
reader = csv.reader(f, delimiter=&quot;;&quot;)

urls = []
for index, value in enumerate(reader):
    # Escape first line to retrieve url for downloading
    if index!= 0:
        ville, url, abscisse, ordonnee, empty = value
        urls.append(url)

# Delete doubles urls
urls = list(set(urls))

for url in urls:
    filezip = download_file(url)
    extract(filezip, &quot;.&quot;)
    # Delete original file after you dezip
    os.remove(filezip)
</code></pre></noscript></div>


<p>Il aurait été plus rapide de faire à la main un filtrage des url en supprimant les
doublons puis de faire un wget mais notre but n&#8217;était pas la performance mais
l&#8217;apprentissage.</p>

<p>Si vous voulez passer par wget, vous pouvez faire un</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>wget -i liste_ortho_nantes_2005.txt</span></code></pre></td></tr></table></div></figure>


<p>avec ce fichier <a href="https://gist.github.com/2306014">liste_ortho_nantes_2005.txt</a></p>

<h2>Voir l&#8217;assemblage des dalles orthophotos</h2>

<p>Après avoir récupéré et décompressé les fichiers, nous avons créé un shp qui
référence les orthophotos (une grille listant les dalles)
Cela a deux buts : rapidement se rendre compte des dalles associées à un
territoire et permettre d&#8217;appeler les dalles raster pour servir un WMS.</p>

<p>Pour cela, nous avons utilisé gdal avec son outil gdaltindex. Ainsi en ligne de commande avec les images jpg des orthophotos décompressées
dans un répertoire data, on a fait :</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>gdaltindex ortho_nantes_cc47_2005.shp data/*.jpg</span></code></pre></td></tr></table></div></figure>


<p>Le shp obtenu est disponible sur <a href="http://nantes.sigeat.net/ortho_nantes_cc47_2005.zip">ce lien</a></p>

<p>Vous pouvez le visualiser en ouvrant <a href="http://qgis.org/">Quantum GIS</a>, un logiciel qui permet de
visualiser des fichiers cartographiques de manière simple.</p>

<p>Nous vous conseillons de superposer cette couche avec le fichiers des polygones
des communes de l&#8217;agglomération nantaise. Ce second jeu de données est sous licence
ODBL car extrait des données OpenStreetMap. Allez le récupérer sur <a href="http://nantes.sigeat.net/nantes_metropole_communes_lambert93.zip">cette adresse</a></p>

<h2>Utiliser le serveur WMS mis en place pour contribuer à OSM (OpenStreetMap) sur Nantes</h2>

<p>Au final, suite à une réunion OSM (au bar) sur Nantes avec <a href="http://www.fabienpoulard.info/">Fabien Poulard</a> et d&#8217;autres contributeurs,  j&#8217;ai pris
la décision de mettre en place un serveur WMS pour aider à contribuer à OSM et
qui utilise les orthophotos de 2005 de Nantes mises à disposition.</p>

<p>Pour le processus d&#8217;ajout du fond WMS dans JOSM (l&#8217;outil de saisie le plus
complet pour faire de la saisie pour le projet OpenStreetMap), nous vous invitons à vous reporter
au guide déjà fourni sur <a href="http://libreavous.teledetection.fr/geomatique/9-openstreetmap/25-contribuer-a-openstreetmap-avec-les-orthophotos-geobretagne">http://libreavous.teledetection.fr/geomatique/9-openstreetmap/25-contribuer-a-openstreetmap-avec-les-orthophotos-geobretagne</a>
Seules l&#8217;url et la projection (Lambert Conique Conforme 47) vont changer pour accéder au serveur. L&#8217;url à renseigner est</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>http://nantes.sigeat.net/cgi-bin/ortho_nantes</span></code></pre></td></tr></table></div></figure>


<p>Pour espérer ne pas avoir un usage détourné de ce WMS pour autre chose qu&#8217;OSM, nous avons limité le seuil
de zoom à 1/10000.</p>

<p>Pour les retours sur les licences ou usages du WMS, passez par Twitter ou mailez moi sur
osgeo[dot]mailinglist[at]gmail[dot]com</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Installer NodeJS sous Ubuntu]]></title>
    <link href="http://blog.sigeat.net/blog/2012/03/24/installer-node-sous-ubuntu/"/>
    <updated>2012-03-24T01:40:00+01:00</updated>
    <id>http://blog.sigeat.net/blog/2012/03/24/installer-node-sous-ubuntu</id>
    <content type="html"><![CDATA[<h2>Installer Node sous Ubuntu</h2>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>sudo apt-get install python-software-properties
</span><span class='line'>sudo add-apt-repository ppa:chris-lea/node.js
</span><span class='line'>sudo apt-get update
</span><span class='line'>sudo apt-get install nodejs
</span></code></pre></td></tr></table></div></figure>


<p>Cela permet d&#8217;installer la version courante de Node JS  sur la version stable
d&#8217;Ubuntu.</p>

<p>Si vous souhaitez pouvoir compiler des modules C++ Node, n&#8217;oubliez pas
d&#8217;installer les paquets de dev avec:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>sudo apt-get install nodejs-dev
</span></code></pre></td></tr></table></div></figure>



]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Installation d'Octopress]]></title>
    <link href="http://blog.sigeat.net/blog/2012/03/17/installation-de-octopress/"/>
    <updated>2012-03-17T02:16:00+01:00</updated>
    <id>http://blog.sigeat.net/blog/2012/03/17/installation-de-octopress</id>
    <content type="html"><![CDATA[<p>Octopress est un framework utilisant Jekyll, le générateur de blog statique
utilisé sur les <a href="http://pages.github.com">pages Githubs</a>
Il vous évite d&#8217;avoir un hébergement compliqué. Le dynamisme est obtenu côté
client. Vous pouvez rajouter la gestion de Twitter, de Github, de
StackOverflow. Pour les commentaires ,vous passez par Disqus, un service tiers
ou par une application comme <a href="https://github.com/phusion/juvia">Juvia</a>.
Ce post vous permettra d&#8217;aborder rapidement l&#8217;installation d&#8217;Octopress.<!-- more --></p>

<h2>Prérequis</h2>

<p>Octopress s&#8217;appuyant sur Ruby et RVM, il faut installer les deux.</p>

<p>On commence par installer RVM qui permet d&#8217;installer séparément des librairies
pour gérer des environnements par projet.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>bash -s stable &lt; &lt;<span class="o">(</span>curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer<span class="o">)</span>
</span></code></pre></td></tr></table></div></figure>


<p>Ensuite, on rajoute RVM à notre shell avec</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nb">echo</span> <span class="err">&#39;</span><span class="o">[[</span> -s <span class="s2">&quot;$HOME/.rvm/scripts/rvm&quot;</span> <span class="o">]]</span> <span class="o">&amp;&amp;</span> . <span class="s2">&quot;$HOME/.rvm/scripts/rvm&quot;</span> <span class="c"># Charge la function RVM dans ~/.bash_profile</span>
</span><span class='line'><span class="nb">source</span> ~/.bash_profile
</span></code></pre></td></tr></table></div></figure>


<p>On installe Ruby 1.9.2 et on met à jour RubyGems (qui sert à installer des
librairies par un système de paquets)</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>rvm install 1.9.2 <span class="o">&amp;&amp;</span> rvm use 1.9.2
</span><span class='line'>rvm rubygems latest
</span></code></pre></td></tr></table></div></figure>


<p>Il faut aussi Git : il est nécesssaire pour récupérer les sources et le but est
de pouvoir versionner le blog également.
Allez sur cette <a href="http://alx.github.com/gitbook/2_installer_git.html">doc d&#8217;installation</a> pour en savoir plus.</p>

<h2>Octopress</h2>

<p>On arrive à ce qui nous intéresse directement : l&#8217;installation d&#8217;Octopress.</p>

<p>Pour cela, rien de plus simple, exécuter les instructions ci-dessous.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>git clone git://github.com/imathis/octopress.git octopress
</span><span class='line'><span class="nb">cd </span>octopress    <span class="c"># Il faudra confirmer qu&#39;il faut faire confiance au fichier .rvmrc en répondant &quot;yes&quot;).</span>
</span><span class='line'>ruby --version  <span class="c"># Doit renvoyer Ruby 1.9.2</span>
</span></code></pre></td></tr></table></div></figure>


<p>Ajouter les paquets associés</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>git clone git://github.com/imathis/octopress.git octopress
</span><span class='line'>gem install bundler
</span><span class='line'>bundle install
</span></code></pre></td></tr></table></div></figure>


<p>Vous avez Octopress d&#8217;installé. Vous pouvez customisé à fond votre blog. Pour
notre part, nous avons utilisé quelques astuces ci-dessous.</p>

<h2>Les plugins et autres paramétrages customisés</h2>

<h3>Support du rst (ReStructured Text)</h3>

<p>Un plugin est disponible pour transformer le rst directement dans
Jekyll/Octopress
Allez sur <a href="https://github.com/xdissent/jekyll-rst">Github</a> pour le récupérer et
voir comment l&#8217;installer.</p>

<p>Pour le moment, nous n&#8217;avons pas réussi à obtenir un résultat satisfaisant: les
accents ne marchent pas et font planter la génération html. Le plugin utilisé
en Ruby (reposant sur RbST et &#8220;wrappant&#8221; rst2html.py) semble être le
responsable car l&#8217;usage de rst2html.py directement par Python est ok.
Ayant besoin de basculer mes écrits sur Sphinx, j&#8217;envisage de passer par Pandoc
pour pallier àce problème en attendant de le résoudre.</p>

<h3>Multiplication des flux RSS / Atom par catégories</h3>

<p>Nous avons utilisé l&#8217;astuce mentionné sur ce <a href="http://hairysun.com/blog/2011/11/09/creating-category-feeds-in-octopress/">blog
anglophone</a>
Il suffit de copier le snippet proposé et de remplacer la chaîne &#8220;emacs&#8221; par votre
catégorie.</p>

<p>D&#8217;autres compléments sont à venir sur Octopress</p>
]]></content>
  </entry>
  
</feed>
