Suite

Restreindre les niveaux de zoom en fonction de la disponibilité de Bing Map ?

Restreindre les niveaux de zoom en fonction de la disponibilité de Bing Map ?


Mon site est construit sur ArcGIS Server 10 avec l'API JavaScript 2.3 et utilise Bing Maps comme cartographie d'arrière-plan. Bien que le site soit destiné à NSW, Australie, nous permettons à l'utilisateur de zoomer n'importe où dans le monde, à n'importe quelle échelle prise en charge (c'est-à-dire la structure de tuilage telle que spécifiée dans le fichier d'aide ArcGIS.)

Les ensembles de données routières/satellites Bing Maps sont disponibles à différentes échelles, les zones peuplées prenant en charge des échelles plus grandes que les zones rurales vides. Lorsque vous zoomez quelque part sans données de carte/satellite, une icône « caméra cassée » s'affiche. Nous aimerions éviter de montrer cette icône laide.

Comment pouvons-nous restreindre l'échelle de zoom maximale là où la carte/le satellite n'est pas disponible, mais autoriser un zoom avant complet là où il est disponible ?

Google Maps le fait assez bien - lorsque vous vous déplacez dans le monde, vous pouvez voir le curseur de zoom s'étendre/se contracter en fonction des ensembles de données disponibles à cet endroit. Ils ont vraisemblablement des métadonnées indiquant la présence/l'absence de données, nous cherchons donc à les imiter lors de l'utilisation de Bing Maps, sans accès aux métadonnées.


Bing Maps est une carte en mosaïque, elle a donc des niveaux de détail lors d'un zoom avant ou arrière. Je tirerais une déclaration conditionnelle sur chaque changement d'étendue. Quelque chose comme : événement déclenché : changement d'étendue conditionnel : si le style de carte = aérien et (obtenir le niveau < souhaité) : remettre le niveau au niveau souhaité…


Avant de zoomer sur un emplacement, obtenez peut-être les métadonnées de l'image pour voir quelle est la résolution la plus fine qui y est disponible.

Déterminer la disponibilité des images à un emplacement à un niveau de zoom spécifié

Étant donné que la réponse contient zoomMin et zoomMax, je suppose que vous pouvez passer l'appel une seule fois à un niveau de zoom basse résolution et utiliser les valeurs de celui-ci, sinon il semble que vous deviez passer plusieurs appels.


function getMapServerMetadata(Url) { var metadata = ""; esri.request({ url: Url + "?f=json", handleAs: "json", callbackParamName: "callback", load: function (response, io) { metadata += "Map Name: " + response.mapName; metadata += "

Version actuelle : " + response.currentVersion; metadata += "

Description du service : " + response.serviceDescription; metadata += "

Copyright : " + response.copyrightText; metadata += "

Nombre de couches : " + response.layers.length; metadata += "

Nombre de tables : " + response.tables.length; metadata += "

Référence spatiale : " + response.spatialReference .wkid ; alerte (métadonnées); }, erreur : fonction (erreur) { alerte (erreur.message); } }); } // Objets json disponibles // currentVersion // serviceDescription // mapName // description // copyrightText // couches // tables // spatialReference // singleFusedMapCache // tileInfo // initialExtent // fullExtent // units // supportedImageFormatTypes // documentInfo // capacités // _ssl

par exemple. essayez d'utiliser le code ci-dessus avec une URL MapServer de fond de carte standard d'ESRI comme : http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer

vous pouvez également l'utiliser sur les sous-couches - pour savoir quelles métadonnées sont présentes, utilisez simplement l'URL de base et ajoutez ?f=json pour obtenir une représentation json renvoyée et parcourir les noms de champ.