Interface GProjection

L’interface GProjection est utilisé pour créer ou déclarer ses propres types de projection.

C’est la projection qui gère les fonctions mathématiques permettant de convertir des latitudes et des longitudes en points visibles sur l’écran (donc en pixels) et inversement.

Dans les exemples qui suivent a été ajoutée une propriété non officielle nommée mapResolutions. Il s’agit en fait d’un tableau où seront stockées les différentes résolutions à appliquer au type de carte en question en fonction du niveau de zoom appelé.

fromLatLngToPixel

Signature de la propriété fromLatLngToPixel :
fromLatLngToPixel(latlng:GLatLng, zoom:Number) .

Cette propriété représente une fonction mathématique (à déclarer, cf exemple ci-dessous) qui convertit un objet de type GLatLng pour un zoom donné en un objet de type GPoint.

En d’autres termes, la propriété fromLatLngToPixel retourne les coordonnées en pixels (X et Y) d’un point sur la carte à partir de ses coordonnées gégraphiques (en degrés) et en fonction du zoom fourni en paramètre.

C’est la propriété inverse de fromPixelToLatLng.

<script type="text/javascript">

   NB : La fonction déclarée ci-dessous n'est qu'un exemple de calcul de conversion.
   Ces fonctions diffèrent en fonction du type de projection désiré.
   Ici, nous avons choisi un type de projection cylindrique.
   Les types de projection sont généralement définis en 3 catégories :
   plan, conique et cylindrique.
   Le type de projection approprié dépend des types de carte que vous utiliserez.

   /*  Déclaration d'un nouveau type de Projection */
   monTypeDeProjection = new GProjection();

   /*  Ici on renseigne les résolutions disponibles pour notre type de projection */
   monTypeDeProjection.mapResolutions = [256,512,1024,2048,4096,8192];

   /*  Déclaration de la fonction mathématique de conversion (GLatLng > GPoint) */
   monTypeDeProjection.fromLatLngToPixel = function(latlng,zoom) {

     var lng = parseInt(Math.floor((this.mapResolutions[zoom] / 360) *
		(latlng.lng() + 180)));

     var lat = parseInt(Math.floor(Math.abs((this.mapResolutions[zoom] / 2 / 180) *
		(latlng.lat() - 90))));

     var point = new GPoint(lng,lat);

     return point;
   }

</script>

fromPixelToLatLng

Signature de la propriété fromPixelToLatLng:
fromPixelToLatLng(pixel:GPoint, zoom:Number, unbounded?: Booléen) .

Cette propriété représente une fonction mathématique (à déclarer, cf exemple ci-dessous) qui convertit un objet de type GPoint pour un zoom donné en un objet de type GLatLng.

En d’autres termes, la propriété fromPixelToLatLng retourne les coordonnées géographiques (en degrés, latitutde et longitude) d’un point sur la carte à partir de ses coordonnées en pixels et en fonction du zoom fourni en paramètre.

C’est la propriété inverse de fromLatLngToPixel.

<script type="text/javascript">

   NB : La fonction déclarée ci-dessous n'est qu'un exemple de calcul de conversion.
   Ces fonctions diffèrent en fonction du type de projection désiré.
   Ici, nous avons choisi un type de projection cylindrique.
   Les types de projection sont généralement définis en 3 catégories :
   plan, conique et cylindrique.
   Le type de projection approprié dépend des types de carte que vous utiliserez.

   /*  Déclaration d'un nouveau type de Projection */
   monTypeDeProjection = new GProjection();

   /*  Ici on renseigne les résolutions disponibles pour notre type de projection */
   monTypeDeProjection.mapResolutions = [256,512,1024,2048,4096,8192];

   /*  Déclaration de la fonction mathématique de conversion (GPoint > GLatLng) */
   monTypeDeProjection.fromPixelToLatLng = function(pixel,zoom,unbounded) {

     var lat = 90 - (pixel.y / (this.mapResolutions[zoom] / 2 / 180));

     var lng = (pixel.x / (this.mapResolutions[zoom] / 360)) - 180;

     var latlng = new GLatLng(lat,lng);

     return latlng;
   }

</script>

tileCheckRange

Signature de la propriété tileCheckRange:
tileCheckRange(tile:GPoint, zoom:Number, tileSize: Number) .

Cette propriété retourne true si la tuile (image représentant un morceau de la map) pour un point donné (GPoint) est incluse dans la vue du type de carte en question en fonction du zoom et de la taille des tuiles (par défaut, 256 * 256px).
Sinon, la map affichera une tuile vide.

<script type="text/javascript">

   /*  Déclaration d'un nouveau type de Projection */
   monTypeDeProjection = new GProjection();

   /*  Ici on renseigne les résolutions disponibles pour notre type de projection */
   monTypeDeProjection.mapResolutions = [256,512,1024,2048,4096,8192];

   /*  Exemple de déclaration de la propriété tileCheckRange */
   monTypeDeProjection.tileCheckRange = function(tile,zoom,tileSize){

     var rez = this.mapResolutions[zoom];

     if(tile.y < 0 || tile.y * tileSize >= rez / 2){ return false; }

     if(tile.x < 0 || tile.x * tileSize >= rez){

       var e = Math.floor( rez / tileSize );

       tile.x = tile.x % e;

       if(tile.x < 0){ tile.x += e; }

     }

     return  true;

   }

</script>

getWrapWidth

Disponible depuis la version 2.46 de l’Api.

Signature de la propriété getWrapWidth:
getWrapWidth(zoom:Number) .

Cette propriété retourne la largeur en pixel de la carte tout entière pour le type de vue en question pour un niveau de zoom donné.

L’Api Map de Google utilise cette valeur pour indiquer quand la carte (ou la tuile) doit se répéter dans le div contenant la map.

Elle est également utilisée pour calculer l’emplacement d’un marker ou de tout objet présent sur la carte quand le div contenant la map propose une vue de la Terre qui se répète, donc à des niveaux de zoom très faibles.

<script type="text/javascript">

   /*  Déclaration d'un nouveau type de Projection */
   monTypeDeProjection = new GProjection();

   /*  Ici on renseigne les résolutions disponibles pour notre type de projection */
   monTypeDeProjection.mapResolutions = [256,512,1024,2048,4096,8192];

   /*  Retourne la taille de la tuile représentant la Terre pour un niveau de zoom donné */
   monTypeDeProjection.getWrapWidth = function(zoom){
     return this.mapResolutions[zoom];
   }

</script>

Laisser une réponse

Security Code: