2017-01-10 1 views
2

Je dois faire quelque chose de tout simplement faux parce que je ne suis pas sûr après avoir lu les documents comment montrer une collection de polyligne au Césium. Je ne vois explicitement aucune méthode ou didacticiel dans la documentation here sur l'affichage de la collection polyline. Ni qu'il y ait des tutoriels dans le bac à sable que je peux trouver qui semblent plus sur le point que this one, qui affiche seulement polylignes singulier avecComment afficher une collection de polylignes dans Caesium?

viewer.entites.add(Polyline) 

J'ai essayé d'utiliser l'exemple de code pour l'ajout de PolylineCollection (et suggestion pour l'itération puis basculement) dans ce bac à sable, mais rien ne s'affiche, et aucune erreur ne montre:

// Create a polyline collection with two polylines 
var polylines = new Cesium.PolylineCollection(); 
polylines.add({ 
    positions : Cesium.Cartesian3.fromDegreesArray([ 
    -75.10, 39.57, 
    -77.02, 38.53, 
    -80.50, 35.14, 
    -80.12, 25.46]), 
    width : 2 
}); 

polylines.add({ 
    positions : Cesium.Cartesian3.fromDegreesArray([ 
    -73.10, 37.57, 
    -75.02, 36.53, 
    -78.50, 33.14, 
    -78.12, 23.46]), 
    width : 4 
}); 
// Toggle the show property of every polyline in the collection 
var len = polylines.length; 
for (var i = 0; i < len; ++i) { 
    var p = polylines.get(i); 
    p.show = true; 
} 

Je ne suis pas sûr de ce que d'autres moyens de la documentation me pointer vers de rendre ceux-ci. Toute aide est appréciée.

Répondre

1

Vous mélangez des couches API Cesium ici. Le césium a 2 couches différentes d'API publique, une couche "Entité" et une couche "Primitive". La couche Primitive est pour les primitives graphiques: Toute une collection de polylines est en fait une primitive graphique unique (en interne, un seul "draw call"), une collection de panneaux d'affichage est une autre primitive unique, etc. Une "Entité" est plus haute concept de niveau d'un objet ou d'un véhicule, par exemple une entité de camion unique peut avoir un panneau d'affichage, une étiquette et une polyligne qui montrent tous où le camion est et où il a été. Une collection d'entités séparées partagera une collection de panneaux d'affichage, plus une collection de polylignes, etc., pour des raisons de performances graphiques.

Généralement, il est recommandé d'utiliser la couche Entity lorsque cela est possible ou pratique, car cela vous permet de penser en termes d'objets réels au lieu de collections de primitives graphiques. Mais parfois, vous avez une si grande collection de primitives statiques qu'il est plus performant de simplement soumettre cette collection directement.

Dans le demo you linked, le code crée un certain nombre d'entités et attache une polyligne à chacune d'entre elles. Mais, dans le code que vous avez publié, vous créez manuellement PolylineCollection et essayez de l'afficher. Donc, pour corriger votre code, supprimez cette ligne:

viewer.entites.add(Polyline) 

et ajoutez cette ligne:

viewer.scene.primitives.add(polylines); 

Notez que polylines est déclarée dans votre code, mais Polyline est juste une classe. Notez également que nous ajoutons la polylineCollection en tant que scene.primitive, et non entity. En fonction de ce que vous utilisez réellement pour cela, il peut être préférable ou non de supprimer votre code ici et de recopier le code de démonstration d'entité auquel vous vous êtes connecté, et d'utiliser ce formulaire à la place.

+0

Ahh c'est logique! Shoot, je passais en revue la documentation juste en essayant de faire une chose spécifique; J'ai manqué quelques concepts de base. Merci pour la clarification. Dans mon application actuelle de polylignes, j'aurai beaucoup de polylignes dont les emplacements de référence sont des entités, mais qui ne sont pas réellement associées à un objet entité (parce qu'elles doivent être cachées/montrées/représentées dans mon modèle de données indépendamment). Donc je suppose que je pourrais garder les primitives dans ce cas, aussi longtemps que je peux toujours leur assigner des emplacements de points de terminaison. Juste penser "à voix haute" maintenant. Votre réponse a éclairci ma confusion. Merci! – ThePartyTurtle