ich bin absoluter Neuling auf diesem Gebiet. Möchte aber gerne ESRI-Shapedateien im Fenster anzeigen lassen. Habe es aber bis dato noch nicht geschafft. Also, im Header der SHP-Datei stehen die Werte für das umgebende Rechteck drin, diese Werte lese ich aus und möchte das OGL-Fenster auf diese Werte einstellen,damit ich die enthaltenen Polygone/Linien/Punkte anzeigen lassen kann. Ich hoffe ich habe mein Problem einigermaßen verständlich dargestellt und Ihr könnt mir weiterhelfen.
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Äh, leider nein.
Du möchtest die Grösse deines Fensters, in dem OpenGL gerendert wird, auf einen Wert setzen der in einer Datei steht?
Was benutzt du überhaupt? VCL oder SDL?
_________________ Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut. Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’. Und du schaust mich an und fragst ob ich das kann. Und ich denk, ich werd' mich ändern irgendwann. _________________Farin Urlaub - Bewegungslos
also meine ersten Gehversuche habe ich mit der dgl-Headerdatei 1.9 unter D7 gemacht. Letztendlich ist es mir aber egal ob VCL,SDL,Glut, etc., es sollte nur funktionieren.
Nun zu weiteren Erklärungen:
Ich stelle mir unter OGL ein GIS System in weitestem Sinne vor, d. h. dass die SHP-Dateien Gauss-Krüger-Koordinaten enthalten. Diese möchte ich nun in ein OGL-Fenster anzeigen lassen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
KG-Koordinaten sagen mir jetzt nichts. Wenn die allerdings in die 2D Ebene Projeziert sind, dann kannst du leicht per glOrtho die Auflösung auf den Wert in der Datei einstellen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Ich finde Eure Anregungen gut, aber mich bringt es nicht weiter.
1. Von glOrtho habe ich schon gehört und auch schon damit herumgespielt, aber noch keine nenneswerten Ergebnisse erzielt.
2. und wie stelle ich das Seitenverhältnis ein.
Vielleicht könnt Ihr mir mit bißchen Code unter die Arme greifen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Bei glOrtho gibst du Parameter für die kleinsten und größten sichtbaren X bzw. Y werte ein. Wenn du die von 0 bis BreiteAusDatei-1, und von 0 bis HöheAusDatei-1 laufen lässt, hast du einen beliebig großen Kontext, welcher die richtigen Verhältnisse wiederspiegelt.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Flash: Das ist so nicht richtig. Zu mindest nicht zum Seitengetreuen darstellen. Somit erreichst du lediglich, dass der Inhalt sich komplett über das Fenster erstreckt was je nach Fenstergröße ziemlich verschoben aussehen dürfte. Das Prinzip bleibt aber mehr oder weniger das gleich. Du musst mit glOrtho eine entsprechende Auflösung einstellen, damit deine Daten richtig angezeigt werden. Das hört sich komplizierter an als es ist. Ich denke mal das Beste wäre ein Beispiel.
Sagen mir mal deine Daten erstrecken sich in einem Bereich von Breite 9° - 11° und höhe 50° - 53°. Also irgend etwas in dem Gebiet müsste Deutschland sein. Dann hast du ein Seitenverhältniss von 1,5:1. Wenn du jetzt ein Fenster mit 640x480 hast, dann hast du ein Seitenverhältnis von 1:1,3. (Die Verhältnisse sind bewusst so doof geschrieben.) Wenn du das jetzt so ohne weiteres in glOrtho setzt zerrst du deutschland auseinander.
Aus dem Grund kannst du nicht einfach 9, 11, 53 und 50 bei glOrtho setzen sondern musst berechnen wie groß es sein müsste. Ich denke mal du wolltest alles sehen. Also muss der glOrtho wesentlich breiter werden. Die Höhe kann an der Stelle so bleiben. Alles kann man mit dem Dreisatz ausrechen. Mit dem Seitenverhältniss rechnen wir erst einmal aus wie breit (Pixel) die eigentlichen Daten wären. (Maßangaben nur zur Verdeutlichung.) 480 Pixel * 2° / 3° = 320 Pixel. 320 Pixel breit sind unsere Daten bei einer Höhe von 480 Pixel. 640 Pixel * 2° / 320 Pixel = 4°. Somit müssen wir Horizontal eine Größe von 4° setzen damit die Daten sinnvoll dargestellt werden.
Um das ganze dann zu zentrieren bräuchtest du nur die die Hälte der Differenz zwischen den Breiten vom anfang abziehen. Also (4° - 2°) / 2 = 1°. Damit würden wir glOrtho also folgendermaßen aufrufen.
Code:
glOrtho(8,12,53,50,-1,1);
Wenn du das ganze jetzt noch dynamisch in deinem Programm ausrechnest ist alles perfekt. Aber beachte, dass Deutschland auch hätte Horizontal liegen können. Also wesentlich Breiter als Höher wäre. Oder du das Seitenverhältniss deines Fensters verändern könntest. Du musst dann vor der Berechnung abprüfen welche Seite du überhaupt ausrechnen musst. Aber wenn du das einmal verstanden hast lässt sich das Prinzip auf alles anwenden was irgendwo ein Seiteverhältniss hat. Wenn die Gradzahlen zu verwirrend sind kannst du es auch als Pixel ansehen oder wie auch immer.
Das Einzige was du dann noch machen musst ist deine Datei einlesen, die Punkte in einer internen Struktur ablegen und diese dann zeichnen. Durch die Anpassung der Darstellung (glOrtho) an die Gradzahlen musst du dir nicht mal die Mühe machen diese irgendwie umzuformen oder so. Das sollte dann alles 1A funktionieren. Aber Hilfe beim Einlesen können wir dir nur geben, wenn du mal ein kleines Extract der Datei postest. Sonst können wir nur raten.
Lossy eX: also das Shape-Dateiformat ist von der Firma ESRI enwickelt http://www.esri.com/library/whitepapers ... pefile.pdf es ist das Standard Import/Export-Format bei GIS Programmen. Ich möchte nun die Daten, wie oben beschrieben in OGL einfügen. Beispiel: umfassendes Rechteck = 3514200,5880600 | 3514700,5881000 und dahinein sollen nun 2d+3d Punkte,Linien,Texte,Polygone,Bilder gezeichnet werden. Ein Beispiel eines solchen Programmes kann man unter http://qgis.org sehen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also so gesehen sollte das echt simpel sein das einzulesen. Du benutz dazu wohl am besten einen TFileStream und ließt dann in die entsprechenden Bereiche deine Werte.
Also einen Double würdest du wie folgt auslesen können.
Code:
var
FS: TFileStream;
Doub:Double;
begin
FS := TFileStream.Create(File, fmOpenRead);
try
FS.Read(Doub,SizeOf(Doub));// Oder Read(Doub, 8 ); da ein double 8 Bytes groß ist.
finally
FS.Free;
end;
end;
Es bestände auch die Möglichkeit, dass du gleich komplette Record auslesen kannst.
Code:
type
TRecordName =recordpacked
Value1:Double;
Value2:Double;
end;
var
FS: TFileStream;
Rec: TRecordName;
begin
FS := TFileStream.Create(File, fmOpenRead);
try
FS.Read(Rec,SizeOf(Rec));
finally
FS.Free;
end;
end;
Vom Prinzip her genau so. Aber achte darauf, dass die Records dann packed sind damit fügt delphi keine Spacerbytes mehr ein. Was durchaus passieren kann. Und was dein lesen dann empfindlich stören würde.
Was mich aber ein wenig iritiert ist die Tatsache, dass in den Datein wohl Little Indian und Big Indian formate gemischt sind. Also dass das erste Byte manchmal zu erst und machmal zu letzt geschrieben wurden. Das würde bedeuten, dass du bei deinen gelesenen Werten die Bytes vertauschen musst. Ich habe da eben mal was vorbereitet. Ich weiß allerding nicht genau ob du Little oder Big Indian umdrehen musst. Zu gebrauchen ist es genau wie das Read.
Also es liegt nur ein Format vor, je nach System mit Motorola,AMD oder Intel-CPU.
Die Übernahme der Geometry-Daten stellt für mich keine Problem dar. Nur die Ausgabe in einem OGL-Fenster macht mir einiges an Kopfzerbrechen, denn ich weiß bis jetzt immer noch nicht wie ich das in OGL Realisieren kann. Dein Ansatz mit glOrtho war schon eine Hilfe aber muß ich ein Viewport erzeugen oder welchen MatrixMode setze ich ein, oder muß ich es un/projected setzen. Oder wie kann ich das Seitenverhältnis einstellen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also dazu kann ich dich nur Wärmstens an unsere Tutorial Ecke verweisen. In der findest du Tutorials wie den Quickstart oder das 2D Tutorial. Das wird dir jetzt keiner schreiben, denn sonst könnten wir das auch eben selber schreiben.
Seitenverhältniss: Habe ich doch oben geschrieben was du mit glOrtho machen musst. Wenn du noch fragen dazu hast dann frag. Aber bitte stelle diese konkret.
Datenformat: Kann ich nicht beurteilen aber in der, von dir geposteten, Spec existierte beim Header eine Spalte "Byte Order" in der Stand bei einigen Little und bei einigen Big. Ich denke mal es hat schon einen Grund warum die so eine Angabe machen.
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.