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

Windows Presentation Foundation Discussion :

[WPF & C#] Réalisation d'une carte


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 22
    Par défaut [WPF & C#] Réalisation d'une carte
    Bonjour,

    Je souhaite réaliser en XAML une carte simple a base de lignes comme on peut le voir dans l'image en pièce jointe. Pour la réaliser j'utilise un canvas dans lequel j'ajoute toutes mes PolyLine. L'ensemble contient 15000 points.

    1. Je ne parviens pas a trouver un moyen simple et efficace pour pouvoir zoomer et me déplacer sur la carte (mon canvas). J'avais pensé a uns scrollviewer pour me déplacer mais ca ne résout pas le problème du zoom...

    2. Avec 15000 points la charge CPU deviens important dès que je survole la carte avec la souris par exemple. Comment pourrait on optimiser ca ?

    Merci
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Par défaut
    Salut,

    Je fais un peu de R&D sur WPF pour une applis cartho ces temps ci.
    Bon je commence à peinne donc pour le zoom je peux pas t'aider.

    Par contre j'utilise les objets Path qui on l'air plus adaptés à un affichage de nombreuse polylignes. Un exemple de code :
    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
    Path p = new Path();
                p.Stroke = new SolidColorBrush(Color.FromArgb(255, 0, 0, 255));
                p.StrokeThickness = 1;
                foreach (GisSharpBlog.NetTopologySuite.Geometries.Geometry geom in ListGeom)
                {         
                    m_figure = new PathFigure();
                    m_figure.IsClosed = false;
                    m_figure.IsFilled = false;
                    m_figure.StartPoint = new System.Windows.Point((geom.Coordinates[0].X - miniX) / ratio, (geom.Coordinates[0].Y - miniY) / ratio);
                    for(int i = 1 ; i < geom.Coordinates.Count() ; i++ )
                    {
                        m_figure.Segments.Add(new System.Windows.Media.LineSegment(new System.Windows.Point((geom.Coordinates[i].X - miniX)/ratio, (geom.Coordinates[i].Y - miniY)/ratio), true));
                    }
                    m_listFigures.Add(m_figure);
                }
                PathGeometry pgeom = new PathGeometry(m_listFigures);
                p.Data = pgeom;
                Plan.Children.Add(p);
    miniX et miniY me servent à cadrer le plan, ratio, pour l'échelle. Tout ce qui est NETTopologySuite c'est là que sont stockés mes objets géométriques.

    Niveau perf je met 5 sec à afficher 45 000 polilygnes plus ou moins complexes qui correspondent au réseau routier d'une grande agglomération.

    Pour le fait que le CPU augmente quand tu passes la souris dessus, il faut regarder autourd du "IsFrozen", apparement WPF considère les poly comme modifiable ce qui doit causer cette augmentation du cpu quand on passe dessus.

    J'ai pas trop le temps de mettre le bout de code au propre mais poste si t'as des questions. Pour le zoom je cherche du coté des transformations.

  3. #3
    Expert confirmé
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Par défaut
    Bon j'ai trouvé pour le zoom mais chez moi les perfs sont dégueu (surement toujours ce problème de frozen...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.Windows.Media.ScaleTransform m_transform = new ScaleTransform(zoom, zoom);
                Plan.LayoutTransform = m_transform;
    Plan c'est mon canevas 0.XXXXXX pour dezoom et >1 pour zoomer.

  4. #4
    Expert confirmé
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Par défaut
    Pour l'augmentation de RAM quand on passe la souris sur les poly :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plan.IsHitTestVisible = false;
    Plan c'est le canvas. J'ai trouvé un article insterressant sur les perf de wpf : http://blogs.msdn.com/wpfsdk/archive...-hardware.aspx

  5. #5
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Pfiou, je vois pas trop ce que je pourrais dire de plus suite à tous ces post de neo

  6. #6
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Passer par un algo de vectorisation pour minimiser les points affiches? (m'en demandez pas plus je n'y connais rien )

Discussions similaires

  1. Réaliser une carte interactive, quel langage simple ?
    Par apal dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 03/03/2022, 16h53
  2. Réponses: 1
    Dernier message: 30/08/2010, 10h40
  3. [XSLT]Projet: réaliser une carte
    Par Wells dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 10/10/2008, 14h38
  4. Comment réaliser une "carte" en 3D?
    Par zuzuu dans le forum Développement 2D, 3D et Jeux
    Réponses: 9
    Dernier message: 15/02/2008, 21h50
  5. Réponses: 6
    Dernier message: 26/06/2006, 12h51

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