Wikini

ActionCarto

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes ec2-54-227-171-163.compute-1.amazonaws.com
[ActionCarto est une proposition en cours de YannLeGuennec et ne fait pas partie de la distribution officielle de WikiNi.]

tests et commentaires: http://www.x-arn.org/w3/ActionCartoPourWikini

v0.1 : principe de base: placer des points sur une image qui correspondent à des pages du wiki
v0.2 : introduction de parametres et nom de carte pour multi-carte sur un wikini
v0.3 : recherche sur le bug lié à la réecriture d'URL : remplacement methode GET par POST
v0.4 : enregistrement des liens de la carte pour Backlinks sur pages créées à partir de la carte (l'action Backlinks permet alors de pointer vers la carte)
v0.5 : changement de stratégie, les coordonnées ne sont plus enregistrées dans le nom de page, mais dans le corps des pages, ce qui permet de positionner sur la carte des pages préexistantes dans le wiki.
v0.6 : correction de bug de la v0.5, impossibilité d'avoir un point qui pointe vers la même page sur différentes cartes à différentes positions.
v0.7 : ajout de la couleur des points
v0.8 : changement de stratégie : les données sont stockées dans des fichiers textes séparés. ajout de tracés de formes


code source v0.7
<?php
/*
action carto pour wikini
auteur : yann le guennec
22.02.2005
version 0.7
usage: {{carto srcmap="chemin/vers/image/de/fond/de/carte.jpg" destmap="chemin/vers/image/carteacreer.png"}}
le paramètre destmap est optionnel mais semble-t-il utile en cas de réécriture d'url
note: le script créé un fichier PNG à partir d'un JPG.

*/

// parametres de l'action
// srcmap   : image de base
// destmap  : image map courante
$this->StopLinkTracking();

$map_name $this->getPageTag();
$src_map $this->GetParameter("srcmap");
if(!
$this->GetParameter("destmap")) {
    
//par defaut, l'image est créée à la racine du wiki
    
$dest_map "".$this->getPageTag().".png"
} else {
    
$dest_map $this->GetParameter("destmap");
}
$prefix $this->config["table_prefix"];

$image $src_map;
// todo: déduire les dimensions du fichier image
$info getimagesize($image);
$im_w $info[0];
$im_h $info[1];

$d 2//demi largeur/hauteur de zone
$rs 10//demi largeur du rectangle de selection
        
$resultat "";

$color['blanc']  = '255,255,255';
$color['noir']   = '0,0,0';
$color['rouge']  = '255,0,0';
$color['vert']   = '0,255,0';
$color['bleu']   = '0,0,255';
$color['jaune']  = '255,255,0';
$color['cyan']   = '0,255,255';
$color['fushia'] = '255,0,255';

if(isset(
$_POST['select_color']) && $_POST['select_color'] != "") {
    
$cur_color$_POST['select_color'];
} else {
    
$cur_color"blanc";
}

$color_menu "<select name=\"select_color\">";
$color_menu .= "<option value=\"\" style=\"\"></option>";
while(list(
$k$v) = each($color)){
    
$color_menu .= "<option value=\"$k\" style=\"background-color:rgb($v)\"";
    if(
$cur_color == $k) {
        
$color_menu .= " selected=\"selected\"";
    }
    
$color_menu .= ">".$k."</option>\r\n";
}
$color_menu .= "</select>";

//type d'action / option bouton radio
if(isset($_POST['act']) && $_POST['act']== "ecriture") {
    
$checklecture "";
    
$checkecriture "checked=\"checked\"";
    
$act "ecr";
} else {
    
$checklecture "checked=\"checked\"";
    
$checkecriture "";
    
$act "lec";
}

if(isset(
$_POST['aff']) && $_POST['aff']== "on") {
    
$checkaff "checked=\"checked\"";
    
$aff"txt";
} else {
    
$checkaff "";
    
$aff="";
}

$im = @imagecreatefromjpeg($image);

$imcolor['blanc']  = imagecolorallocate($im255,255,255);
$imcolor['noir']   = imagecolorallocate($im0,0,0);
$imcolor['rouge']  = imagecolorallocate($im255,0,0);
$imcolor['vert']   = imagecolorallocate($im0,255,0);
$imcolor['bleu']   = imagecolorallocate($im0,0,255);
$imcolor['jaune']  = imagecolorallocate($im255,255,0);
$imcolor['cyan']   = imagecolorallocate($im0,255,255);
$imcolor['fushia'] = imagecolorallocate($im255,0,255);


if(isset(
$_POST['carte_x']) && isset($_POST['carte_y'])) {
    
    
//coordonnées cliquées sur l'image
    
$cur_x $_POST['carte_x'];
    
$cur_y $_POST['carte_y'];
    
//zone selectionée non enregistrée
    
imagefilledrectangle($im$cur_x-$d$cur_y-$d$cur_x+$d $cur_y+$d$imcolor[$cur_color]);
    
//zone de sélection
    
imagerectangle($im$cur_x-$rs$cur_y-$rs$cur_x+$rs$cur_y+$rs$imcolor[$cur_color]);
    
    
    
//si le nom de zone est renseigné dans le formulaire
    
if($_POST['nom_zone'] != "")  {
        
$nom_zone $_POST['nom_zone'];
        
//si le nom ne contient pas que des lettres et des chiffres
        
if(!eregi("^[a-z0-9]*$"$nom_zone)) {
            echo 
"<script language=\"javascript\">alert('erreur de nom')</script>";
            
$nom_zone "";
        }  else  {
        
            
//bloc HTML qui contient les coordonnées et le nom de carte
            // §§§ est le separateur de cartes
            // § est le separateur de coordonnées
            
$html_coords_head "\"\"<!--§§§".$map_name."§".$cur_x."§".$cur_y."§".$cur_color."§-->\"\"";

            
$html_coords_foot "\r\n-------\r\n $map_name";
            
            
//si le nom est celui d'une page existante
            
if($page $this->LoadPage($nom_zone)) {
                
//la page est-elle deja reliée à la carte
                
if(ereg("<!--§§§".$map_name."§[0-9]*§[0-9]*§[a-z]*§-->"$page['body'])) {
                    
//modification des coordonnées existantes
                    
$new_body ereg_replace("<!--§§§".$map_name."§[0-9]*§[0-9]*§[a-z]*§-->""<!--§§§".$map_name."§".$cur_x."§".$cur_y."§".$cur_color."§-->"$page['body']);
                } else  {
                    
//on ajoute les coordonnées dans le corps de la page
                    
$new_body $html_coords_head.$page['body'].$html_coords_foot;
                }
            } else {
                
$new_body $html_coords_head."page générée automatiquement depuis la carte $map_name".$html_coords_foot;
            }
            
//on enregistre la page créée
            
$this->SavePage($nom_zone$new_body);
        
        }
    }
}


//construction de l'image
//recherche des pages contenant des cordonnées et le nom de la carte courante
$query "SELECT tag, body FROM ".$prefix."pages WHERE body REGEXP '<!--§§§".$map_name."§[0-9]*§[0-9]*§[a-z]*§-->' AND latest='Y'";
if (
$pages $this->LoadAll($query))
{
    
//carte HTML pour lecture seule
    
$html_map "<map name=\"themap\">\r\n";
    foreach (
$pages as $page)
    {
        
$tag $page['tag'];
        
//recupération des coordonnées dans le corps de la page liée
        
$t0 explode("§§§".$map_name$page['body']);
        
$t1 explode("§"$t0[1]);
        
$x  $t1[1];
        
$y  $t1[2];
        if(isset(
$t1[3])){
            
$color $t1[3];
            
$c $imcolor[$color];
        } else {
            
$color "blanc";
            
$c $imcolor['blanc'];
        }
        
$x1 $x-$d;
        
$y1 $y-$d;
        
$x2 $x+$d;
        
$y2 $y+$d;
        
imagefilledrectangle($im,$x1,$y1,$x2,$y2,$c);
        
        if(
$aff == "txt") {
            
imagestring($im2$x$y2$tag$c);
        }
        
        
$html_map .= "<area shape=\"rect\" coords=\"$x1,$y1,$x2,$y2\" href=\"".$this->config["base_url"].$tag."\"";
        if(
$aff != "txt") {
            
$html_map .= " title=\"$tag\""//info bulle
        
}
        
$html_map .=  " />\r\n";
            
        
//mise à jour table des liens de la page
        //$this->StartLinkTracking();
        //$this->TrackLinkTo($page['tag']);
        //$this->StopLinkTracking();
        
        //zones enregistrées dans le rayon de selection
        
if(isset($cur_x)) {
            if(
$x $cur_x-$rs && $x $cur_x+$rs && $y $cur_y-$rs && $y $cur_y+$rs) {
                
$resultat .= "<b>selected:</b>"$this->ComposeLinkToPage($tag)."<br /> ";
                
$nom_zone $tag;
            }
        }
    }
    
$html_map .= "</map>\r\n";
}






$fichier $dest_map;
imagepng($im$fichier);
imagedestroy($im);

$url $this->config["base_url"].$this->getPageTag();

echo 
"\r\n";

echo 
"<div style=\"background-color:rgb(220,220,220);border:1px #000000 solid;padding:2em;\" >";
echo 
"<form name=\"mp\" action=\"$url\" method=\"post\">\r\n";

//option lecture / ecriture
echo "lecture <input type=\"radio\" name=\"act\" value=\"lecture\" $checklecture onclick=\"document.forms['mp'].submit()\"/>";
echo 
"ecriture <input type=\"radio\" name=\"act\" value=\"ecriture\" $checkecriture onclick=\"document.forms['mp'].submit()\"/><br />";
//echo "<input type=\"submit\" name=\"switch\" value=\"valider\" /><br />";
echo "afficher les noms dans la carte <input type=\"checkbox\" name=\"aff\" value=\"on\" $checkaff  onclick=\"document.forms['mp'].submit()\"/><br />";

if(
$act == "ecr") {//si option ecriture selectionnée
    
echo "<br />nom de la zone à créer ou déplacer: <input type=\"text\" name=\"nom_zone\" value=\"$nom_zone\" /><span style=\"background-color:rgb(0,0,0);border:1px #000000 solid;color:#ffffff;\" onclick=\"document.forms['mp'].elements['nom_zone'].value=''\">R</span>  couleur: $color_menu<br />\r\n";
    echo 
"<input type=\"image\" name=\"carte\" id=\"carte\" src=\"$fichier\" style=\"cursor:crosshair\" /><br />\r\n";
    


} else {
     echo 
$html_map;
     echo 
"<img src=\"$fichier\" style=\"border:none; cursor:crosshair\" alt=\"\" usemap=\"#themap\" /><br />\r\n";
}


echo 
"</form>\r\n";
echo 
$resultat;
echo 
"</div>";

//$this->WriteLinkTable();
$this->StartLinkTracking();
?>


code source v0.8
<?php
/*
action carto pour wikini
auteur : yann le guennec
24.02.2005
version 0.8
usage: {{carto srcmap="carte.jpg"}}
note: le script créé un fichier PNG à partir d'un JPG.
*/
$this->StopLinkTracking();

// EDITER CETTE VARIABLE 
// chemin vers dossier de stockage images et fichiers txt
// a partir de la racine du wiki
$carto_root "x/maps/"

// chemin vers fichier image de fond de carte
$carto_src_map $carto_root.$this->GetParameter("srcmap");

// chemin vers fichier texte de la carte courante
$carto_text_file $carto_root.$this->getPageTag().".txt"
define('CTF',$carto_text_file);

// chemin vers fichier image de la carte générée
$carto_dest_map $carto_root.$this->getPageTag().".png"

//creation du fichier txt s'il n'existe pas
if(!is_file($carto_text_file)){
    if(
$f fopen($carto_text_file"w+")) {
        
fclose($f);
    } else {
        echo 
"impossible de créer le fichier $carto_text_file";
        exit;
    }
}

// creation de l'image courante
if(eregi(".jpg",$carto_src_map)) {
    
$im = @imagecreatefromjpeg($carto_src_map);
} else if(
eregi(".png",$carto_src_map)) {
    
$im = @imagecreatefrompng($carto_src_map);
}
if(!
$im) {
    echo 
"impossible de créer la carte à partir de l'image $carto_src_map";
    exit;
}

/*
traitement des données reçues du formulaire
*/

//type d'action / option bouton radio
if(isset($_POST['select_action']) && $_POST['select_action']== "ecriture") {
    
$checklecture "";
    
$checkecriture "checked=\"checked\"";
    
$action_courante "ecriture";
} else {
    
$checklecture "checked=\"checked\"";
    
$checkecriture "";
    
$action_courante "lecture";
}

//option d'affichage des noms
if(isset($_POST['aff']) && $_POST['aff']== "on") {
    
$checkaff "checked=\"checked\"";
    
$aff"txt";
} else {
    
$checkaff "";
    
$aff="";
}

//tag, forme, type, r, g, b, coords
//nom de zone en mode écriture
if(isset($_POST['select_tag']) && $_POST['select_tag'] != "")  {
    
// un nom doit commencer par une lettre suivie de lettres ou chiffres
    
if(!eregi("^[a-z][a-z0-9]*$"$_POST['select_tag'])) {
        echo 
"<script language=\"javascript\">alert('erreur de nom')</script>";
        
$cur_tag "";
    }  else  {
        
$cur_tag $_POST['select_tag'];
    }

//forme de zone en mode écriture
if(isset($_POST['select_shape']) && $_POST['select_shape'] != "") {
    
$cur_shape $_POST['select_shape'];
} else {
    
$cur_shape "point"// rect circle poly
}
//type de remplissage en mode écriture NON UTILISE
if(isset($_POST['select_type']) && $_POST['select_type'] != "") {
    
$cur_type $_POST['select_type'];
} else {
    
$cur_type "contour"// plein
}
//couleur de zone en mode écriture
if(isset($_POST['select_color']) && $_POST['select_color'] != "") {
    
$cur_color $_POST['select_color'];
} else {
    
$cur_color "255,255,255";
}
//coordonnées cliquées sur l'image en mode écriture
if(isset($_POST['carte_x']) && isset($_POST['carte_y'])) {
    
$cur_x $_POST['carte_x'];
    
$cur_y $_POST['carte_y'];
}
//coordonnées temporaires
if(isset($_POST['temp_coords'])) {
    
$temp_coords $_POST['temp_coords'];
}


/*
Fonctions de mise à jour du fichier TXT
*/
function isInMap($tag) {
    
$result false;
    
$f file(CTF);
    foreach(
$f as $line)
    {
        
$t explode(",",$line);
        if (
$t[0] == $tag) {
            
$resulttrue;
        }
    }
    return 
$result;
}

function 
putInMap($data) {
    
$f fopen(CTF"a");
    
fputs($f$data);
    
fclose($f);    
}

function 
removeFromMap($tag) {
    
$fc file(CTF);
    
$f fopen(CTF,"w");
    foreach(
$fc as $line)
    {
        
$t explode(",",$line);
        if (
$t[0] != $tag) {
            
fputs($f,$line); 
        }
    }
    
fclose($f);
}

function 
updateMap($tag$data) {
    
$fc file(CTF);
    
$f fopen(CTF,"w");
    foreach(
$fc as $line)
    {
        
$t explode(","$line);
        if (
$t[0] != $tag) {
            
fputs($f$line);
        } else {
            
fputs($f$data);
        }
    }
    
fclose($f);
}



$prefix $this->config["table_prefix"];

// dimensions du fichier image
// $info = getimagesize($carto_src_map);
// $im_w = $info[0];
// $im_h = $info[1];

//suppression de forme
if($_POST['delete'] == "supprimer") {
    
removeFromMap($cur_tag);
    
$cur_tag "";
}




if(
$cur_x && $cur_y) {
    
$cc explode(","$cur_color);
    
$c imagecolorallocate($im$cc[0], $cc[1], $cc[2]);
    
//zone du clic
    
imagefilledrectangle($im$cur_x-2$cur_y-2$cur_x+$cur_y+2$c);
    
//zone de sélection
    
imagerectangle($im$cur_x-10$cur_y-10$cur_x+10$cur_y+10$c);
}


if(
$cur_tag != ""

    
//echo "<br />DEBUG:";

    
if($cur_shape == "point" && $cur_x && $cur_y
    {
        
$cur_coords $cur_x."-".$cur_y;
        
$cur_data "$cur_tag,$cur_shape,$cur_type,$cur_color,$cur_coords\r\n";
        if(
isInMap($cur_tag)) {
            
updateMap($cur_tag$cur_data);
        } else {
            
putInMap($cur_data);
        }
        
// mise à jour de la page wiki pointée depuis la carte
        // $html_foot = "\r\n-------\r\n$cur_tag";
        // si le nom est celui d'une page existante dans le wiki:
        // if($page = $this->LoadPage($cur_tag)) {
        //    $new_body = $page['body'].$html_foot;
        // } else {
        //    $new_body = "Page générée automatiquement depuis la carte ".$this->getPageTag().$html_foot;
        // }
        // on enregistre la page créée:
        // $this->SavePage($cur_tag, $new_body);
    
}
    
    
    else if(
$cur_shape == "rect"  && $cur_x && $cur_y)
    {
        
//echo "<br />DEBUG:temp_coords:$temp_coords";
        
if($temp_coords != "") {
            
$cur_coords $temp_coords."-".$cur_x."-".$cur_y;
            
$cur_data "$cur_tag,$cur_shape,$cur_type,$cur_color,$cur_coords\r\n";
            if(
isInMap($cur_tag)) {
                
updateMap($cur_tag$cur_data);
            } else {
                
putInMap($cur_data);
            }
            
$temp_coords "";   
            
$cur_tag ""
        } else {
            
$temp_coords $cur_x."-".$cur_y;
            
$aff_result "<span style=\"color:#ff0000\">Vous avez positionné le coin supérieur gauche du rectangle, veuillez maintenant cliquer dans l'image pour définir le coin inférieur droit.</span>";
        }
    }
    
    else if (
$cur_shape == "circle"  && $cur_x && $cur_y)
    {
        if(
$temp_coords != "") {
            
$centreexplode("-"$temp_coords);
            
$cx $centre[0];
            
$cy $centre[1];
            if(
$cur_x $cx) { $a $cur_x $cx; } else { $a =  $cx $cur_x; }
            if(
$cur_y $cy) { $b $cur_y $cy; } else { $b =  $cy $cur_y; }
            
$a2 $a*$a;
            
$b2 $b*$b;
            
$s $a2 $b2;
            
$r round(sqrt($s));
            
$cur_coords $cx."-".$cy."-".$r;
            
$cur_data "$cur_tag,$cur_shape,$cur_type,$cur_color,$cur_coords\r\n";
            if(
isInMap($cur_tag)) {
                
updateMap($cur_tag$cur_data);
            } else {
                
putInMap($cur_data);
            }
            
$temp_coords "";
            
$cur_tag "";
        } else {
            
$temp_coords $cur_x."-".$cur_y;
            
$aff_result "<span style=\"color:#ff0000\">Vous avez positionné le centre du cercle, veuillez maintenant cliquer dans l'image pour définir son rayon.</span>";
        }
    }
    
    else if (
$cur_shape == "poly")
    {
        
//BUG: cur_x non défini
        
if(isset($_POST["fermer_polygone"])) {
            
            
$cur_coords $temp_coords."-".$_POST['temp_poly'];
            
//echo "<br />DEBUG:temp_poly:$cur_coords";
            
$cur_data "$cur_tag,$cur_shape,$cur_type,$cur_color,$cur_coords\r\n";
            if(
isInMap($cur_tag)) {
                
updateMap($cur_tag,  $cur_data);
            } else {
                
putInMap($cur_data);
            }
            
$temp_coords "";   
            
$cur_tag ""
        } else {
            
$cur_coords $cur_x."-".$cur_y;
            if(
$temp_coords != "") {
                
$temp_coords .= "-";
                
$d_coords $_POST['temp_poly'];
            } else {
                
$d_coords $cur_x."-".$cur_y;
            }
            
            
$aff_result "<span style=\"color:#ff0000\">Positionnez d'autres points du polygone ou refermer le en cliquent sur 'fermer le polygone'.</span>";

            
$menu_temp_poly "<input name=\"temp_poly\" type=\"hidden\" value=\"$d_coords\" /><input name=\"fermer_polygone\" type=\"submit\" value=\"fermer le polygone\" />";

            
$temp_coords .= $cur_x."-".$cur_y;
            
//previsu du polygone
            
$tcoords explode("-",$temp_coords);
            for(
$n=0$n<=count($tcoords)-4$n++) {
                if(
$n%== 0) {
                    
$x1 =  $tcoords[$n];
                    
$y1 =  $tcoords[$n+1];
                    
$x2 =  $tcoords[$n+2];
                    
$y2 =  $tcoords[$n+3];
                    
imageline($im$x1$y1$x2$y2$c);
                }
            }
            
//Fin previsu du polygone
        
}
    }
    
    else if(
$cur_shape == "label"  && $cur_x && $cur_y)
    {
        
$cur_coords $cur_x."-".$cur_y;
        
$cur_data "$cur_tag,$cur_shape,$cur_type,$cur_color,$cur_coords\r\n";
        if(
isInMap($cur_tag)) {
            
updateMap($cur_tag$cur_data);
        } else {
            
putInMap($cur_data);
        }
    
    }
    
}    
            

/*
construction de l'image
*/

$html_map "<map name=\"themap\">\r\n";
//ouverture du fichier texte de la carte courante
$f file($carto_text_file);
foreach(
$f as $line)
{
     
//tag, forme (rect, circle, poly), type (plein ou contour), rouge, vert, bleu, coordonnées séparées par des tirets;
    
$tab explode(",",$line);
    
$tag $tab[0];
    
$shape $tab[1]; 
    
$type $tab[2];
    
$r $tab[3];
    
$g $tab[4];
    
$b $tab[5];
    
$col[$tag] = imagecolorallocate($im$r$g$b);
    
$coords =  explode("-"$tab[6]);
    
    if (
$shape == "point"
    {
        
$x $coords[0];
        
$y $coords[1];
        
$x1 $x-2;
        
$y1 $y-2;
        
$x2 $x+2;
        
$y2 $y+2;
        
imagefilledrectangle($im$x1$y1$x2$y2$col[$tag]);
        
$html_map .= "<area shape=\"rect\" coords=\"$x1,$y1,$x2,$y2\" href=\"".$this->config["base_url"].$tag."\" title=\"$tag\" />\r\n";
        if(
$aff == "txt") {
            
imagestring($im2$x$y2$tag$col[$tag]);
        }
        
// mise à jour table des liens de la page ??
        // $this->StartLinkTracking();
        // $this->TrackLinkTo($tag);
        // $this->StopLinkTracking();
    
}
    
    else if(
$shape == "rect"
    {
        
$x1 $coords[0];
        
$y1 $coords[1];
        
$x2 $coords[2];
        
$y2 $coords[3];
        if(
$type == "plein") {
            
imagefilledrectangle($im$x1$y1$x2$y2$col[$tag]);
        } else if (
$type == "contour") {    
            
imagerectangle($im$x1$y1$x2$y2$col[$tag]);
        }
        
//$html_map .= "<area shape=\"rect\" coords=\"$x1,$y1,$x2,$y2\" href=\"".$this->config["base_url"].$tag."\"  title=\"$tag\" />\r\n";
        
if($aff == "txt") {
            
imagestring($im2$x2$y2$tag$col[$tag]);
        }
    }
    
    else if(
$shape == "circle"
    {
        
$cx $coords[0];
        
$cy $coords[1];
        
$r $coords[2];
        
$d $r*2;
        
imagearc($im$cx$cy$d$d0360$col[$tag]);
        
//$html_map .= "<area shape=\"circle\" coords=\"$cx,$cy,$r\" href=\"".$this->config["base_url"].$tag."\" title=\"$tag\" />";
        
if($aff == "txt") {
            
imagestring($im2$cx$cy$tag$col[$tag]);
        }
    }
    
    else if(
$shape == "poly")
    {
        for(
$n=0$n<=count($coords)-4$n++) {
            if(
$n%== 0) {
                
$x1 =  $coords[$n];
                
$y1 =  $coords[$n+1];
                
$x2 =  $coords[$n+2];
                
$y2 =  $coords[$n+3];
                
imageline($im,$x1,$y1,$x2,$y2$col[$tag]);
            }
        }
        if(
$aff == "txt") {
            
imagestring($im2$x1$y1$tag$col[$tag]);
        }
    }
    
    else if(
$shape == "label")
    {
        
$x =  $coords[0];
        
$y =  $coords[1];
        
imagestring($im5$x$y$tag$col[$tag]);
    }
    
}
$html_map .= "</map>\r\n";
    
        
imagepng($im$carto_dest_map);
imagedestroy($im);


/*
ELEMENTS DE FORMULAIRES
*/
$url $this->config["base_url"].$this->getPageTag();

//option lecture / ecriture
$menu_action =  "lecture<input type=\"radio\" 
    name=\"select_action\" 
    value=\"lecture\" 
    $checklecture 
    onclick=\"document.forms['mp'].submit()\"/> 
                ecriture<input type=\"radio\" 
    name=\"select_action\" 
    value=\"ecriture\" 
    $checkecriture 
    onclick=\"document.forms['mp'].submit()\"/>"
;
    
$menu_affichage_nom " afficher les noms:<input type=\"checkbox\" 
    name=\"aff\" 
    value=\"on\" 
    $checkaff  
    onclick=\"document.forms['mp'].submit()\"/>"
;
    
// éléments de formulaire en écriture
$menu_nom_zone  " Nom de la zone à créer ou modifier:<input type=\"text\" 
    name=\"select_tag\" 
    value=\"$cur_tag\" /> <input type=\"submit\" name=\"delete\" value=\"supprimer\" />"
;

/* NZ    
$menu_type_zone = "selectionnez le type de zone:";
$menu_type_zone .= "    <select name=\"select_type\">";
$menu_type_zone .= "    <option value=\"plein\"";
if($cur_type == "plein") {
    $menu_type_zone .= "selected=\"selected\"";
}
$menu_type_zone .= ">plein</option>";
$menu_type_zone .= "    <option value=\"contour\"";
if($cur_type == "contour") {
    $menu_type_zone .= "selected=\"selected\"";
}
$menu_type_zone .= ">contour</option>";
$menu_type_zone .= "    </select><br />";
 */
 
$formes = array("point"=>"point","circle"=>"cercle","rect"=>"rectangle","poly"=>"polygone","label"=>"label");   
$menu_forme_zone " Forme:<select name=\"select_shape\">\r\n";
while(list(
$k,$v) = each($formes)) {
    
$menu_forme_zone .= "<option value=\"$k\" ";
    if(
$k==$cur_shape) {
        
$menu_forme_zone .= " selected=\"selected\"";
    }
    
$menu_forme_zone .= ">$v</option>\r\n";
}
$menu_forme_zone .= "</select>\r\n";


$menu_temp_coords "<input type=\"hidden\" name=\"temp_coords\" value=\"$temp_coords\" />\r\n";

//tableau de couleurs prédéfinies
$color['blanc']  = '255,255,255';
$color['noir']   = '0,0,0';
$color['rouge']  = '255,0,0';
$color['vert']   = '0,255,0';
$color['bleu']   = '0,0,255';
$color['jaune']  = '255,255,0';
$color['cyan']   = '0,255,255';
$color['fushia'] = '255,0,255';

//menu déroulant de couleurs prédéfinies
$menu_couleur_zone " Couleur:";
$menu_couleur_zone .= "<select name=\"select_color\">\r\n";
$menu_couleur_zone .= "<option value=\"\" style=\"\"></option>\r\n";
while(list(
$k$v) = each($color)){
    
$menu_couleur_zone .= "<option value=\"$v\" style=\"background-color:rgb($v)\"";
    if(
$cur_color == $v) {
        
$menu_couleur_zone .= " selected=\"selected\"";
    }
    
$menu_couleur_zone .= ">".$k."</option>\r\n";
}
$menu_couleur_zone .= "</select>\r\n";

//BOUTON IMAGE : la carte
$menu_image_carte =  "<input type=\"image\" 
    name=\"carte\" 
    id=\"carte\" 
    src=\"$carto_dest_map\" 
    style=\"cursor:crosshair\" />\r\n"
;
    
    
//<span style=\"background-color:rgb(0,0,0);border:1px #000000 solid;color:#ffffff;\" onclick=\"document.forms['mp'].elements['nom_zone'].value=''\">R</span> 

echo "\r\n";

// FORMULAIRE
//echo "<div style=\"background-color:rgb(220,220,220);border:1px #000000 solid;padding:2em;\" >";

echo "<form name=\"mp\" action=\"$url\" method=\"post\">\r\n";
echo 
$aff_result."<br />";
if(
$action_courante == "ecriture") { //si option ecriture selectionnée
    
    
echo $menu_image_carte;
    echo 
"<br />";
    echo 
$menu_nom_zone;
    echo 
"<br />";
    echo 
$menu_forme_zone;
    
//echo $menu_type_zone;
    
echo $menu_couleur_zone;
    if(
$cur_shape == "poly") { 
        echo 
$menu_temp_poly;
    }
    echo 
$menu_temp_coords;
    echo 
"<br />";
    echo 
"<br />\r\n";
      
} else { 
// lecture seule
     
echo $html_map;
     echo 
"<img src=\"$carto_dest_map\" style=\"border:none;\" alt=\"\" usemap=\"#themap\" />";
     echo 
"<br />\r\n";
}
echo 
"<br />";
echo 
$menu_action;
echo 
$menu_affichage_nom;
echo 
"<br />";
echo 
"</form>\r\n";
//echo "</div>";

//$this->WriteLinkTable();
$this->StartLinkTracking();
?>



Discussions


Remarques :





Des titres

Pourquoi ne pas offrir la possibilité d'ajouter des titres seuls (sans point), pour légender une partie de la carte. Cela permettrait par exemple d'offrir à l'utilisateur WikiNi des graphes vierges dans lesquels il n'aurai plus qu'à ajouter ces titres et ces points. -- CharlesNepote
Exemple Exemple de graphe.
Diagramme
On pourrait livrer WikiNi avec quelques graphiques vierges que les utilisateurs pourraient ainsi remplir à leur guise : pyramydes, cercles, abcisses et ordonnées, cartes géographiques (France, Europe, etc.), etc. Les utilisateurs disposeraient ainsi d'un moyen simple et rapide d'élaborer des graphiques sur inter/intranet.
-- CharlesNepote

> bonne idée, les labels ont été ajoutés à la version 0.8. --YannLeGuennec


[Note perso : je suis désolé Yann, on n'a pas beaucoup avancé sur tes propositions précédentes mais leur maturité me laisse penser à une éventuelle intégration dans la prochaine version officielle de WikiNi. Il y a encore un un deux points de détails à voir.]
-- CharlesNepote

> pas de problème là-dessus, pour ce qui fait parti de la distribe ou non, je laisse les core developpers seuls juges! :) --yann

Projet proche (merci Yann pour les idées) : une carte géographique pour constitution de calendriers ou d'inventaires (naturalistes) coopératifs.

Voir : http://www.onem-france.org/wakka.php?wiki=CalendrieR

Principe :
- base de données de coordonnées géographiques de communes française
- un fond de carte départemental
- un fond de carte maillage utm 10x10km
- restitution sur la carte des évenements indiqués dans le texte, positionnement par nom de commune, centrage sur maille 10k.
- visualisation des évenements ou informations associés à un point sur la carte lors du passage de la souris.

-- DavidDelon

Super! très adapté au géopositionnement . Tu mettras les sources de MapView? à disposition ? -- YannLeGuennec

Oui bien sûr. --DavidDelon


Totalement débutant en .php et Wikini, je trouve ce projet vraiment super intéressant. J'aimerai l'intégrer à un wiki perso hébergé chez free. Problème, je ne sais pas vraiment quoi faire du code source et ou l'intégrer. Si vous pouviez me filer un coup de main ou me renvoyer vers des tutoriaux ce serait avec plaisir! --FabienEychenne? (en espérant de ne pas trop vous faire perdre votre temps...)
Commentaires [Cacher commentaires/formulaire]