13
2013
Contourner deux limites de Google Fusion Tables
Petite exposition de deux limites constatées sur Google Fusion Tables (GFT) mais aussi sur les "rustines" utilisables pour les contourner.
Limite n°1 : la superposition de zones
Il peut arriver, surtout si vous piochez dans différentes sources cartographiques, que des zones décrites en KML se superposent. Si vous vous contentez d'une intégration basique dans GFT, vous risquez de tiquer très vite :
Le cas présent a été créé en mixant deux types de données :
- les bans de communes où se trouve/trouvait le Grand hamster d'Alsace
- les zones de protection trouvées sur le site de la DREAL Alsace
On distingue trois zones un peu enfouies et un peu visibles, quand elles devraient se trouver strictement au-dessus des bans communaux.
Rustine associée : la création de calques
Il va falloir contourner cet obstacle en utilisant l'API de Google Maps. Le principe est le suivant :
- créer deux calques vides (de mémoire, on peut en créer jusqu'à cinq différents par carte)
- assigner une ou des zones à chacun d'eux
- initialiser le calque du dessous en premier, et le calque du dessus en dernier
Voici le script associé (pour activer le scroll horizontal, survolez le code) :
<script type="text/javascript"> var layer1=null; var layer2=null; var map=null; var infowindow=new google.maps.InfoWindow(); function initialize(){ //on définit le centre de la carte var selestat=new google.maps.LatLng(48.2593860,7.4542410); //on configure l'ossature de la carte map=new google.maps.Map(document.getElementById('map_canvas'),{center:selestat,zoom:9,mapTypeId:'roadmap'}); //on remplit le premier calque avec toutes les zones hors protection layer1=new google.maps.FusionTablesLayer({suppressInfoWindows:true,styleId:2,query:{select:'Zone',where:"'Statut-num' not equal to 3",from:'1FRn48g46ZkKmh-yB0G78jaJ7DsPagdfps2ckQnI'},map:map}); //on remplit le second avec les zones de protection layer2=new google.maps.FusionTablesLayer({suppressInfoWindows:true,query:{select:'Zone',where:"'Statut-num' = 3",from:'1FRn48g46ZkKmh-yB0G78jaJ7DsPagdfps2ckQnI'},styles:[{polygonOptions:{fillColor:"#000000",fillOpacity:0.0001}},{where:"'Statut-num' = 3",polygonOptions:{fillColor:"#31a354",fillOpacity:0.8,strokeColor:"#ffffff",}}]}); //on initialise le premier calque setTimeout("layer1.setMap(map);",1); //puis le second, en veillant bien à la marge de temps setTimeout("layer2.setMap(map);",100); //à chaque clic, on active la fonction open IW google.maps.event.addListener(layer1,'click',openIW); google.maps.event.addListener(layer2,'click',openIW);}; //que voici ici function openIW(evt){evt.infoWindowHtml="<b>Nom de la zone :</b> "+evt.row['Nom de la zone'].value+"<br>"+"<b>Statut :</b> "+evt.row['Statut'].value;infowindow.setContent(evt.infoWindowHtml);infowindow.setPosition(evt.latLng);infowindow.open(map);} </script>
Vous pourrez apprécier le résultat en cliquant sur le lien suivant.
Limite n° 2 : les zones trop complexes
Vous venez de téléchargez les zones qu'il vous fallait, téléchargées directement en KML et donc interprétables directement sur GFT. Vous en avez déjà eu un aperçu, et savez à peu près à quoi vous attendre (ici, c'est la zone hachurée en rouge qui nous intéresse) :

Capture d'écran du site de la DREAL Alsace
Mais, lorsque vous chargez pour la première fois votre rendu, vous obtenez ceci :
Étonnant, non ? Après demande d'aide sur un groupe de discussion, la faille est purement technique : une cellule de GFT supporte au maximum 1 million de caractères. Un de plus, et c'est le black-out, comme entre Sélestat et Obernai.
Rustine associée : la simplification, coûte que coûte
Bon, mais alors, comment faire pour diminuer le nombre de caractère ? Penchons-nous sur une partie (tronquée) de notre zone à problèmes :
<MultiGeometry> <Polygon> <outerBoundaryIs> <LinearRing> <coordinates>8.230925,48.967454 8.22923,48.969628 8.227593,48.972079 8.226413,48.973975 8.225447,48.974871 8.224236,48.975543 8.222365,48.975924 8.220712,48.975951 8.219443,48.97587 8.216443,48.97563 8.214456,48.975007 8.212748,48.97419 8.211427,48.973291 8.209732,48.971987 8.208498,48.971129 8.206726,48.970469 8.204308,48.969912 8.202388,48.969159 8.200769,48.968266 8.199212,48.96781 8.198487,48.967945 8.197029,48.968738 8.195824,48.969454 8.195622,48.970213 8.196446,48.971316 8.197161,48.972074 8.197304,48.972725 8.196833,48.973397 8.196133,48.97472 8.195225,48.976486 8.194577,48.977293 8.194013,48.977752 8.193464,48.977852 8.192358,48.977762 8.190589,48.977489 8.189755,48.977259 8.188496,48.977131 8.18754,48.977151 8.18672,48.977408 8.186057,48.977712 8.185334,48.978107 8.184981,48.978251 8.184142,48.978336 8.183474,48.978369 8.182668,48.978382 8.181452,48.978279 8.179705,48.978212 8.177979,48.978207 8.175749,48.978334 8.173568,48.97854 8.171415,48.978744 8.171148,48.978685 8.171597,48.977816 8.171769,48.977276 8.171279,48.976931 8.170418,48.976712 8.16949,48.97673 8.168698,48.976868 8.168092,48.977087 8.167361,48.977393 8.166708,48.977425 8.16636,48.977369 8.165863,48.977222 8.165207,48.977228 8.164745,48.977376 8.164172,48.977522 8.163513,48.977509 8.162699,48.977449 8.162507,48.977449 8.161093,48.977897 8.16055,48.978437 8.160277,48.978433 8.15939,48.977981 8.159228,48.977628 8.158608,48.977596 8.15817,48.977959 8.156279,48.978186 8.155724,48.977754 8.155287,48.977884 8.154868,48.97758 8.153954</coordinates> </LinearRing> </outerBoundaryIs> <innerBoundaryIs> <LinearRing> <coordinates> 7.70195,48.670728 7.702946,48.670881 7.703979,48.67097 7.705009,48.670969 7.706609,48.670914 7.707175,48.670906 7.708563,48.671023 7.709311,48.671323 7.709919,48.671899 7.710494,48.672576 7.710852,48.673019 7.711356,48.673842 7.711503,48.674286</coordinates> </LinearRing> </innerBoundaryIs> <innerBoundaryIs> <LinearRing> <coordinates> 7.70195,48.670728 7.702946,48.670881 7.703979,48.67097 7.705009,48.670969 7.706609,48.670914 7.707175,48.670906 7.708563,48.671023 7.709311,48.671323 7.709919,48.671899 7.710494,48.672576 7.710852,48.673019 7.711356,48.673842 7.711503</coordinates> </LinearRing> </innerBoundaryIs> </Polygon> </MultiGeometry>
L'aire est construite un peu comme une sculpture :
- d'abord, on dessine "grossièrement" les contours principaux entre les balises <outerBoundaryIs>
- ensuite, on peaufine en creusant à l'intérieur grâce aux balises <innerBoundaryIs>
Après ce constat, la solution coule de source ; enlever assez de balises superficielles <innerBoundaryIs> pour arriver en-dessous de la limite maximale du million de caractères. Personnellement, j'ai procédé de cette façon :
- en utilisant un éditeur de code, type jEdit, pour repérer et enlever les fameuses balises
- en vérifiant que je n'enlevais pas de partie trop importante, en visualisant de temps à autre mon KML dans l'excellent QGis
Et avec un peu de ténacité, la zone est enfin réapparue. Vous en trouverez ici un aperçu, avec en prime une superposition de calques.
Related Posts
Contact
Les auteurs
Commentaires récents
- L'incrackable document Word ... dans
- L'incrackable document Word ... dans
- L'incrackable document Word ... dans
- L'incrackable document Word ... dans
- L'incrackable document Word ... dans
- L'incrackable document Word ... dans
- L'incrackable document Word ... dans
- Nono's vrac 10 dans
- Nono's vrac 18 dans
- L'incrackable document Word ... dans
- L'incrackable document Word ... dans
- Créez vos propres Geojson avec OpenStreetMap dans
- Backup avec Borg via ssh(fs) sur Synology dans
- Va te faire foutre Disqus ! dans
- Saloperie de TrendMicro OfficeScan ! dans
Étiquettes
Archives
- octobre 2020 (1)
- juin 2018 (1)
- avril 2018 (1)
- mars 2018 (1)
- décembre 2015 (1)
- avril 2015 (3)
- mars 2015 (2)
- février 2015 (3)
- janvier 2015 (1)
- décembre 2014 (5)
- novembre 2014 (4)
- octobre 2014 (4)
- septembre 2014 (5)
- août 2014 (4)
- juin 2014 (7)
- mai 2014 (14)
- avril 2014 (8)
- mars 2014 (10)
- février 2014 (9)
- janvier 2014 (3)
- décembre 2013 (2)
- novembre 2013 (5)
- octobre 2013 (6)
- septembre 2013 (8)
- août 2013 (6)
- juillet 2013 (6)
- juin 2013 (11)
- mai 2013 (7)
- avril 2013 (8)
- mars 2013 (10)
- février 2013 (9)
- janvier 2013 (9)
- décembre 2012 (7)
- novembre 2012 (16)
- octobre 2012 (11)
- septembre 2012 (9)
- août 2012 (19)
- juillet 2012 (19)
- juin 2012 (20)
- mai 2012 (24)
- avril 2012 (20)
- mars 2012 (23)
- février 2012 (27)
- janvier 2012 (28)
- décembre 2011 (28)
- novembre 2011 (28)
- octobre 2011 (1)
[...] Contourner deux limites de Google Fusion Tables « m0le'o'blog [...]
[...] idée était, après quelques tâtonnements techniques, de commenter ces cartes avec des membres d'associations écologistes. Au fil de la discussion, je [...]
[…] me suis un jour lancé dans des cartes centrées sur la sauvegarde du grand hamster d'Alsace. J'avais trouvé un paquet de matière à […]