2011-04-27 1 views
1

Comment convertir une clé quadruple de cartes bing, telle que "03200320023" en coordonnées dans le système de coordonnées terre virtuelle de Mercator (epsg 3857)? J'ai un algorithme pour convertir en coordonnées en longitude de latitude (par exemple la touche quadruple ci-dessus vient à "-84.19921875,33.7243385314941, -84.0234375,33.8704147338867"). Je pourrais alors convertir de la longitude de latitude en coordonnée de mercator, mais cela sent beaucoup trop cher dans la puissance de traitement.Comment convertir une quadripartite de cartes bing en coordonnées mercator

Le résultat de terre virtuel mercator Je cherche compte tenu de la clé quadkey ci-dessus est la suivante: « -9373014,4011415, -9353446,4030983 »

Un peu plus contexte. J'utilise des cartes bing et j'ajoute des couches que je sers en utilisant mapserver d'IIS en utilisant fastcgi. Je veux fondamentalement convertir la requête quadkey des cartes bing pour 256x256 carreaux à une requête wms mapserver dans epsg 3857. Il fonctionne dans epsg 4326 (wgs84) et aussi quand je convertis de wgs84 en epsg 3857. Cependant, la performance n'est pas ce que je veux en raison à la conversion en deux étapes.

J'ai aussi posé la question sur gis.stackexchange.com qui a maintenant reçu une réponse

+0

Votre algorithme le convertit déjà en coordonnées dans le système de coordonnées mercator. Quelle est ta question? – Bytemain

+0

L'algorithme le convertit en lat lon dans wgs84 - ou est-ce que je me trompe? –

+0

J'ai édité la question pour dire la terre virtuelle de mercator (epsg 3857) –

Répondre

1

Pour être complet, voici le code F # J'utilise pour résoudre ce problème.

let quadKeyToVE key = 
let offset,x,y = 
    key 
    |> Seq.fold (fun (offset,x,y) ch -> 
     let x',y' = 
      match ch with 
      | '0' -> x-offset,y+offset 
      | '1' -> x+offset,y+offset 
      | '2' -> x-offset,y-offset 
      | '3' -> x+offset,y-offset 
      | _ -> failwith "Invalid quadkey" 
     offset/2.0,x',y' 
     ) (InitialOffset,0.0,0.0) 

let offset = offset * 2.0 
let west = x - offset 
let north = y + offset 
let east = x + offset 
let south = y - offset 
west,south,east,north 
Questions connexes