Facbook viewat  Flickr
Accueil du site > Tutoriels > Transformer un fichier KML en fichier JSON conforme pour google (...)

Googlemap / KML / JSON / cartographie

Transformer un fichier KML en fichier JSON conforme pour google map

2 votes

Publié le lundi 17 décembre 2012

Le but de ce tutoriel est de vous fournir les scripts et les explications afin de transformer un fichier KML ou KMZ en fichier JSON   utilisable par Googlemap. Il suffit d’opérer une inversion des coordonnées latitude et longitude en WGS84  .

Etape 1 : Rajouter les sauts de lignes après chaque couple de coordonnées :

La première étape consiste à utiliser une fonction PHP qui va ajouter un saut de ligne après chaque type de coordonnées, en remplaçant l’espace par un "\n".

1°) Fonction PHP pour le remplacement des espaces par des sauts de lignes :

/*******************************************************
***** Arnaud Villefranque
***** décembre 2012
***** Fonction d'ajout de saut de ligne dans des fichiers KML à la fin de chaque couple de coordonnées
***** $file est le fichier à traiter. (81.txt dans notre exemple)
*******************************************************/
function ajoute_saut_de_ligne($file)
{
   $ressource_fichier = fopen($file, 'r'); //Ouvre le fichier en lecture seule, on supposera qu'il existe sous peine d'avoir une erreur
   if($ressource_fichier) //Si $ressource_fichier ne vaut pas FALSE on peut continuer
    {
        while (!feof($ressource_fichier))
        {
                $buffer = fgets($ressource_fichier);
                $buffer = preg_replace("/( )/", "\n", $buffer);// remplace " " par /n
                echo $buffer;
        }
    }
}

On obtient un nouveau fichier avec sauts de lignes comme séparateur de coordonnées, ce qui va faciliter les traitements futurs. Le nouveau fichier obtenu est le 81b.txt ci-joint.

2°) Découpage des couples de coordonnées WGS84   pour inversion :

Pour récupérer la première valeur située avant le séparateur "," sans avoir àà récupérer la virgule nous utiliserons la fonction spécifique : strstr_after un peu plus pratique que strstr classique. La voici ci-dessous :

/*******************************************************
***** Arnaud Villefranque
***** décembre 2012
***** Fonction qui retourne le strstr avec la suppression du caractère recherché
*****
*******************************************************/
function strstr_after($haystack, $needle, $case_insensitive = false)
{
   $strpos = ($case_insensitive) ? 'stripos' : 'strpos';
   $pos = $strpos($haystack, $needle);
        if (is_int($pos))
        {
                return substr($haystack, $pos + strlen($needle));
        }
   return $pos;
}

3°) Génération du fichier JSON   conforme pour utilisation dans Googlemap :

Il suffit de lui envoyer un fichier conforme (ici 81b.txt ) composé comme suit : Coordonnée latitude,coordonnées longitude\n Voic la fonction qui traite le fichier 81b.txt et qui retourne un fichier Json   conforme pour googlemap :

/*******************************************************
***** Arnaud Villefranque
***** décembre 2012
***** Fonction qui crée le json google conforme
*****
*******************************************************/
function build_google_json($file)
{
        $wesh="var polycoords09 = [";// à insérer au début du fichier
        $ressource_fichier = fopen($file, 'r'); //Ouvre le fichier en lecture seule, on supposera qu'il existe sous peine d'avoir une erreur
        if($ressource_fichier) //Si $ressource_fichier ne vaut pas FALSE on peut continuer
            {
                while (!feof($ressource_fichier))
                {
                        $data = fgets($ressource_fichier, 1024);
                        $coord1 = strstr_after($data, ',');// utilisation de la fonction strstr_after décrite plus haut.
                        $coord1 = preg_replace("/(\r\n|\n|\r)/", " ", $coord1);
                        $coord2 = strstr($data, ',', true);
                        $wesh.="new                 google.maps.LatLng(".$coord1.",".$coord2."),\n";
                }
            }
        $wesh.="];";// à insérer en fin de fichier
        return $wesh;
}

Voilà le travail, on se retrouve avec un fichier JSON   directement exploitable dans Googlemap.

Répondre à cet article

Plan du site | Contact | Suivre la vie du site RSS 2.0