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 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
Du konvertierst erst nach der Division in einen float. Das bringt dann aber nichts mehr. Konvertiere vor der Division.
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
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