julien66 / drupal-airspace

Module Drupal pour afficher les espaces aériens à partir du service Postgis FFVL
0 stars 0 forks source link

Entretien du fichier FFVV #11

Closed julien66 closed 11 years ago

julien66 commented 11 years ago

Une première erreur a été détecté sur le fichier FFVV. TMA 6.1 de Provence classée D au lieu de E. ( Merci Sylvélie ! ). Nous pourrions entretenir le fichier via des méthodes de Crowdsourcing. Le projet servirait aussi de base à l'issue #7.

Le plan est de passer les zones en node puis d'utiliser le module de révision de Drupal. A suivre.

dkm commented 11 years ago

Qu'entends tu par "en node" ?

julien66 commented 11 years ago

Une node est un contenu que l'on peut publier sur Drupal. On peut y attacher un certain nombre de "champs" : Dans notre cas nom, classe, plancher, plafond, coordonnés... pour commencer et de façon non exhaustif.

L'avantage c'est qu'il existe une riche api pour manipuler des "nodes" . Par exemple on peut effectuer des opérations au moment où le node est en train d'être changé par l'utilisateur ou lorsqu'il est effectivement changé (envoyer un mail, mouliner une zone en 3D... faire des trucs en réponse à un déclencheur) etc.

On peut aussi utiliser le système de révision de Drupal. Les utilisateurs peuvent proposer des modifications qui peuvent par la suite devenir "officielle". On peut regarder les différences entre toutes versions d'un même node, en suivre l'historique etc.

Depuis le module, j'ai crée un node de type "zone". Je suis en train de lui attacher les champs qui vont bien. La prochaine étape est de migrer chaque zone de la base de donnée actuelle dans un node de type zone. => On aura nos entités de départ pour attaquer les modifications / création en ligne et à plusieurs. ++

julien66 commented 11 years ago

J'ai essayé de mouliner directement les fichiers .pdf du SIA. Ils sont cryptés...

dkm commented 11 years ago

On 05/28/2013 08:01 PM, Julien Garcia wrote:

J'ai essayé de mouliner directement les fichiers .pdf du SIA. Ils sont cryptés...

Crypté ?! Si un lecteur pdf affiche le texte, alors c'est faisable. Tu as essayé quels outils ?

julien66 commented 11 years ago

J'ai essayé pdf2text avec le code suivant :

 include_once("pdf2text.php"); // Real import from SIA pdf files.
 $result = pdf2text ('https://www.sia.aviation-civile.gouv.fr/aip/enligne/fr/..%5CPDF_AIPparSSection%5CAIP%20FRANCE%5CAD%5C1%5C1306_AD-1.7.pdf');
dsm($result);

et le résultat suivant : sia

julien66 commented 11 years ago

Si l'on pouvait au moins attraper le contenu de ces fichiers pdf nous pourrions construire une nouvelle moulinette à partir du format bizarre qui est utilisé et avoir accès aux données officielles.

En attendant, je fais l'import de POSTGIS en node Drupal avec un batch :

function airspace_drupal_migration(){
    $num_operations = db_query("SELECT count(gid) FROM {airspaces}")->fetchField();
    $operations = array();

    for ($i = 0; $i<$num_operations; $i++) {
        $operations[] = array('batch_airspace_to_drupal', array($i) );
    }

    $batch = array(
        'operations' => $operations,
        'finished' => 'batch_airspace_drupal_finished',
    );
    batch_set($batch);
    batch_process("/");
    return $batch;
}

function batch_airspace_to_drupal($op, &$context){
    // La migration $op par $op !
    $query = db_query("SELECT *, ST_AsText(the_geom) as WKT FROM {airspaces} WHERE gid=:gid", array(':gid' => $op ))->fetchAll();

    if (!isset($query[0]) || !isset($query[0]->plafond) || !isset($query[0]->plancher) ){
        return("Mauvaise requête");
        watchdog('Airspace migration to drupal', "Aucun espace ne correspond a cet identifiant %id", array('%id'=>$op) , "WATCHDOG_ERROR");
    }

    $context['results'][] = $query[0]->gid;
    $context['message'] = t('Traitement de la zone "@id"', array('@id' => $query[0]->gid));

    $node = new stdClass();
    $node->type = 'espace_aerien';
    $node->language = 'und';
    node_object_prepare($node);
    $node->title = $query[0]->name;
    $node->field_classe[$node->language][0]['value'] = $query[0]->class;
    $node->field_plancher[$node->language][0]['value'] = $query[0]->floor;
    $node->field_plafond[$node->language][0]['value'] = $query[0]->ceiling;
    $node->field_coords[$node->language][0]['value'] = $query[0]->wkt;
    node_save($node);
}

Cela fonctionne.

dkm commented 11 years ago

On 05/28/2013 08:24 PM, Julien Garcia wrote:

J'ai essayé pdf2text avec le code suivant :

include_once("pdf2text.php"); // Real import from SIA pdf files. $result = pdf2text ('https://www.sia.aviation-civile.gouv.fr/aip/enligne/fr/..%5CPDF_AIPparSSection%5CAIP%20FRANCE%5CAD%5C1%5C1306_AD-1.7.pdf'); dsm($result);

et le résultat suivant : sia https://f.cloud.github.com/assets/3198861/574214/c174d49e-c7c3-11e2-8484-67ae19fdb8c6.jpg

j'arrive à obtenir le texte, mais toute la mise en page (en donc les tableaux) passe à la trappe. pdf2txt (python-pdfminer) a une sortie xml qui pourrait permettre de récupérer un peu de structuration, mais ça semble pas évident. Sans doute laborieux et pas très robuste.

julien66 commented 11 years ago

Merci pour avoir regardé !

julien66 commented 11 years ago

La plateform de crowdsourcing des espaces aériens est maintenant à peu près en place. Au final, j'utilise le module Workbench de Drupal.