IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SIG : Système d'information Géographique Discussion :

[Google Maps] Diviser google map en plusieurs zones


Sujet :

SIG : Système d'information Géographique

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 24
    Points
    24
    Par défaut [Google Maps] Diviser google map en plusieurs zones
    Bonjour à tous,

    Je dois utiliser google map et je dois afficher différents marqueurs en fonction du zoom. La premiére étape pour faire cela est de diviser la carte en plusieurs zones.
    Cependant même en regardant la documentation officiel de google map, je ne vois pas comment faire.
    Le seul élément qui va dans ce sens est le code suivant qui permet de mettre une autre carte sur la zone sélectionné (c'est ce que j'ai compris en lisant la doc)
    Voici le code :

    var tileLayerOverlay = new GTileLayerOverlay(
    new GTileLayer(null, null, null, {
    tileUrlTemplate: 'http://domain.com/myimage_{Z}_{X}_{Y}.png',
    isPng:true,
    opacity:1.0
    })
    );

    map.addOverlay(tlo);

    Le code est tiré de : http://code.google.com/intl/fr/apis/.../overlays.html au paragraphe intitulé Tile Coordinates.

    Je voudrais votre avis pour comprendre comment faire.
    EDIT:

    Je pense que je n'ai pas été assez précis la première fois, je vais donc reformuler mon interrogation:

    Après avoir lu un livre, je pense procéder de la façon suivante :
    je vais mettre en dur les coordonnées géographique correspondant à mes zones.
    Ensuite si l'utilisateur passe sa souris sur une des ces zones, un cercle ou un marqueur ( au choix) apparait.
    Pour réaliser cela il faut donc que je définisse à par rapport au pixel ou se trouve ma zone à partir des coordonnées géographique.
    Il faut donc que par rapport à la position de la souris sur la carte je délimite mes zones.
    Je pense que le zoom va poser problème. En effet si j'agrandis la carte l'espace visible va se réduire.
    J'ai peur de ne pas être clair, voici un exemple:
    Si la carte au départ est au niveau des pays et qu'elle indique un cercle en plein milieu de celle-ci. Si je zoom la carte va s'agrandir mais elle occupera toujours la même taille dans le DIV puisqu'on ne voit plus les pays mais les régions. Le risque c'est que du coup en zoomant la nouvelle zone qui doit apparaitre ( qui n'est donc plus forcement le milieu de la carte) apparaisse au mauvais endroit
    Comment faire pour que je puisse indiquer mes zones par rapport à leurs positions X et Y dans la page tout en fessant en sorte qu'elle respecte les vrais positions géographique ?

    En vous remerciant d'avance de vos réponses.

    Je vous remercie d'avance de vos réponses.
    Cordialement, apprentiDev

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Comment faire pour que je puisse indiquer mes zones par rapport à leurs positions X et Y dans la page tout en fessant en sorte qu'elle respecte les vrais positions géographique ?
    Remplacer les cercles par des polygones géographiques (avec un point tous les 10° environ).
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 24
    Points
    24
    Par défaut
    Bonjour Graffito,

    Merci pour ta réponse. En regardant dans la documentation de MySQL j'ai trouvé les différentes fonctions pour des données géographique. Je suppose donc que je dois utiliser la fonction Contains pour indiquer que mes points sont situé dans un endroit plutôt qu'un autre non?

    Actuellement mon code ressemble à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     <?php
    header("content-type: application/xml");
    
    include('config.php');
    
    /// Partie en XML qui contient toutes les infos pour les marqueurs (longitude, latitude)///
    
    echo'<?xml version="1.0" encoding="UTF-8"?>';
    echo "\n<markers> \n";
     $sql2 = "select Y(coord_scene),X(coord_scene),id_scene,trace_scene FROM scene sc LIMIT 20";
        $resultats2 = mysql_query($sql2);
    while ($ligne2=mysql_fetch_array($resultats2)) {
    echo '
    <marker lat=" '. $ligne2['Y(coord_scene)'] .' "
                           long=" '. $ligne2['X(coord_scene)'] .' "
                           nom=" '. $ligne2['id_scene'] .' "
                           url=" '. $ligne2['trace_scene'] .' " />';
    
    }
    echo "\n</markers>\n";
    
    // Les différentes variables pour connaitre la taille de la carte////
    
    	$extendPercent = 50 / 100;
            $cluster_number = 5;
           	$pas = 10;
     
    	$addExtendY = ($_GET['maxY'] - $_GET['minY']) * $extendPercent;
    	$addExtendX = ($_GET['maxX'] - $_GET['minX']) * $extendPercent;
     
    	($_GET['maxY'] > 0 ) ? ((($_GET['maxY'] + $addExtendY) > 90) ? $maxY = 90 : $maxY = $_GET['maxY'] + $addExtendY ) : $maxY = $_GET['maxY'] - $addExtendY ;
    	($_GET['maxX'] > 0 ) ? ((($_GET['maxX'] + $addExtendX) > 180) ? $maxX = 180 : $maxX = $_GET['maxX'] + $addExtendX ) : $maxX = $_GET['maxX'] - $addExtendX ;
    	($_GET['minY'] > 0 ) ? $minY = $_GET['minY'] - $addExtendY : ((($_GET['minY'] - $addExtendY) < -90) ? $minY = -90 : $minY = $_GET['minY'] - $addExtendY) ;
    	($_GET['minX'] > 0 ) ? $minX = $_GET['minX'] - $addExtendX : ((($_GET['minX'] - $addExtendX) < -180) ? $minX = -180 : $minX = $_GET['minX'] - $addExtendX) ;
     
    /// Calcul de la hauteur est de la largeur de la carte///
    	$largeur = $maxX - $minX;
    	$hauteur = $maxY - $minY;
     
    	$pas_largeur = $largeur / $pas;
    	$pas_hauteur = $hauteur / $pas;
     
    	for ($i=0;$i<$pas;$i++){
    		for ($j=0;$j<$pas;$j++){
    			$temp1 = $minY + $pas_hauteur * $i;
    			$temp2 = $minX + $pas_largeur * $j;
    			$temp3 = $minY + $pas_hauteur * ($i + 1);
    			$temp4 = $minX + $pas_largeur * ($j + 1);
    			$coord1 = strval($temp2)." ".strval($temp1);
    			$coord2 = strval($temp4)." ".strval($temp1);
    			$coord3 = strval($temp4)." ".strval($temp3);
    			$coord4 = strval($temp2)." ".strval($temp3);
     
     
     /// La requete pour sélectionner les coordonnées qui sont contenu dans la partie visible de la carte.  
    			$sql = "SELECT X(coord_scene), Y(coord_scene)FROM scene sc WHERE ";
                            $sql .= "Contains (PolygonFromText('POLYGON(($coord1,$coord2,$coord3,$coord4,$coord1'))))";
     
    			$res = mysql_query($sql)or exit(mysql_error());
    			$nb_object = mysql_num_rows($res);
    
     // Les requêtes conditionnels qui permettent de creer les clusters ou les marqueurs selon le cas. ///
    
    			if ($nb_object <> 0){
    				if ($nb_object > $cluster_number){
                   
    
     
    					$polygone = "POLYGON((";
    					$a = 0;
    					while ($result = mysql_fetch_array($res)){
    						if ($a == 0){
    							$firstPoint = $result['x']." ".$result['y'];
    						}
    						$polygone .= $result['x']." ".$result['y'].",";
    						$a++;
    					}
    					$polygone .= $firstPoint;
    					$polygone .= "))";
     
    					$sql2 = "select x(Centroid(GeometryFromText('".$polygone."',4326))) as x, y(Centroid(GeometryFromText('".$polygone."',4326))) as y";
    					$res2 = mysql_query($sql2);
    					$result2 = mysql_fetch_array($res2);
     
    					$lat = $result2['y'];
    					$lng = $result2['x'];
    
    
    					}
    				}
    			}
    		}
    	}
     
    	
    
    ?>
    Cependant j'ai une erreur de code lors de $sql = "SELECT X(coord_scene), Y(coord_scene)FROM scene sc WHERE ";
    $sql .= "Contains (PolygonFromText('POLYGON(($coord1,$coord2,$coord3,$coord4,$coord1'))))";
    Apparemment c'est une erreur de parenthèse mais il y a autant d'accolade ouvrante que fermante.

    En vous remerciant d'avance,
    ApprentiDev

Discussions similaires

  1. Corrigez le XML du World Topographic Map pour Google Earth svp
    Par francoise_peace dans le forum XML/XSL et SOAP
    Réponses: 0
    Dernier message: 30/08/2011, 18h16
  2. Réponses: 4
    Dernier message: 30/09/2009, 14h48
  3. [Google Maps] Récupérer infos d'une zone sélectionnée par polygone
    Par Chouller dans le forum APIs Google
    Réponses: 1
    Dernier message: 24/07/2009, 14h53
  4. api google earth et google map à l'aide pour intégrer de nouvelles fonctions
    Par didier6526 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/03/2009, 11h51
  5. Aider moi,site map,racine,google?
    Par alaintattoo dans le forum Référencement
    Réponses: 3
    Dernier message: 01/12/2008, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo