Laden...

Darstellung von Geodaten (Polylinien)

Erstellt von Huthi vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.525 Views
H
Huthi Themenstarter:in
2 Beiträge seit 2007
vor 16 Jahren
Darstellung von Geodaten (Polylinien)

Hallo,

seit einiges Zeit sitze ich an einem Programm, dass Shape Files (enthalten Geodaten) darstellen soll. Im groben sind das nur Linien die recht einfach gezeichnet werden könnten.

Mein Problem ist jetzt nur, dass die Koordinaten in dem File so um die 416000 und 750000 liegen, was nicht in ein normales Fenster passt. Zuerst dachte ich an eine einfache anpassung an die Größe der PictureBox in der gezeichnet werden soll. Allerdings stellte sich das schnell als unvorteilhaft heraus was die Zoom- und Verschiebeoperation angeht.
Ich dachte jetzt an eine Lösung die auf affiner Transformation mit einer Transformationsmatrix beruht. Hierzu scheinen ja die Transform Methoden der Klasse Graphics recht geignet. Leider komm ich damit nicht richtig klar:

  • Die Punkte liegen als PointF mit den physischen Koordinaten vor
  • Bevor gezeichnet wird soll das Graphics Objekt transformiert werden
  • Dann werden einfach(?? 😉 ) die Linien mit realen Koordinaten gezeichnet.

Die Umsetzung sollte so etwas wie das reale Koordinatensystem in das logische der PictureBox transformieren und die Linien zeichnen. Folgender Code sollte das eigentlich tun:


            // Skalierung auf Breite /Hoehe der PictureBox
            // Xmax - Xmin bzw. Ymax - Ymin ist Breite bzw. Höhe der realen Welt
            g.ResetTransform();
            g.ScaleTransform((float)(breite / (shpFile.Kopf.Xmax - shpFile.Kopf.Xmin)),
                (float)(hoehe / (shpFile.Kopf.Ymax - shpFile.Kopf.Ymin)), MatrixOrder.Append);
            // Verschieben des Ursprungs
            g.TranslateTransform(0, -hoehe, MatrixOrder.Append);

            foreach (IShapeObjekt shpObjekt in shpFile.Elemente)
            {
                shpObjekt.Draw(g, new Pen(Brushes.Blue));
            }

Es wird auch was gezeichnet (merkt man an dem stocken bei einer Größenänderung des Fensters). Leider sieht man von der Zeichnung nichts.

Hat jemand von euch eine Idee?

MfG

B
1.529 Beiträge seit 2006
vor 16 Jahren

Du konvertierst erst nach der Division in einen float. Das bringt dann aber nichts mehr. Konvertiere vor der Division.

5.658 Beiträge seit 2006
vor 16 Jahren

Hi!
Mit welcher Bibliothek liest du eigentlich die Shapfiles aus? Würde mich mal interessieren, da ich etwas ähnliches vorhabe.
Oder hast du das alles selbst programmiert?
Christian

Weeks of programming can save you hours of planning

H
Huthi Themenstarter:in
2 Beiträge seit 2007
vor 16 Jahren

Hi...

die Klassen zur Behalndlung von Shapefiles stammen von mir und sind leider noch nicht fertig. Wenn ich damit mal irgendwann fertig bin, kann ich dir die gern zukommen lassen. Kann aber noch eine Weile dauern, hab zur Zeit leider nur wenig Zeit für private Projekte 🙁

MfG