Maßstab setzen

  • hallo,
    ich habe eine applikation geschrieben die einer osm datei die geographischen koordinaten entnimmt und diese dann via mercatorprojektion umrechnet. die daraus resultierenden koordinaten bilde ich dann in einem koordinatensystem ab. das klappt soweit ganz gut.
    hier ein vergleich zwischen der openstreetmapkarte und meiner karte:


    http://img695.imageshack.us/img695/3337/vergleichy.jpg


    ich habe die von mir erzeugte karte um den faktor 10 skaliert und mit augenmaß der openstreetmapkarte angepasst.


    Da bei der Mercatorprojektion zunächst die errechneten Koordinaten dimensionslos sind, habe ich diese mit dem Erdradius multipliziert. als ergebnis erhalte ich koordinaten in meter. mein koordinatensystem geht von


    x = -29009m bis 29009m
    y = 6975656m bis 7018876m


    nach meinem verständnis ist also 1 pixel = 1 meter. als vorgabe dient der maßstab der ICAO Karte. diese hat einen maßstab von 1:500000, was bedeuted das 1cm = 500000 cm = 5000 m sind. wie bringe ich jetzt meine bildschirmpixel ins verhältnis zu dem kartenmaßstab der ICAO Karte ?

  • hallo marvel,


    wenn du den Pixel-Meter Masstab auf einen reinen Meter-Masstab umrechnen willst brauchst du die Anzahl der Pixel pro cm (oder Zoll). Diese ist leider bei jedem Display anders.


    Grüsse - Anton

  • hallo nochmal,
    ich möchte den maßstab 1:500.000 einer icao karte ins verhältnis zu meiner digitalen vektorkarte am pc bringen. die icao karte liegt im cm maßstab vor, meine digitale karte in pixel. mein bildschirm hat eine auflösung von 320x240 (smartphone). das bedeuted ich habe horizontal 320 pixel und vertikal 240 pixel.
    1 ppi sind 1 pixel pro zoll, wobei 1 zoll = 2,54 cm sind.


    berechnung :


    2,54cm / 320 pixel = 0,00794 cm/pixel
    2,54cm / 240 pixel = 0,01058 cm/pixel


    wieviele pixel passen nun in einen cm ?


    1 cm / 0,00794 cm/pixel = 125,94 pixel
    1 cm / 0,01058 cm/pixel = 94,52 pixel


    auf der icao karte sind 1cm = 0,000002 cm (1:500000)


    125,94 pixel / 500000 = 0,00025188 pixel
    94,52 pixel / 500000 = 0,00018904 pixel


    nach meinem verständnis würde ich also bei einem maßstab von 1:500000 für die x-achse ca. 0,0003 pixel und für die y-achse ca 0,0002 pixel nutzen um den maßstab darzustellen. da die kleinste darstellbare einheit am pc aber 1 pixel ist, habe ich hier ein problem xD. ich bin mir sicher ich werfe da was total durcheinander, aber ich komme leider von alleine nicht drauf. hoffe ihr könnt mir weiterhelfen.


    danke im vorraus


    mfg marvel

  • ...nach meinem verständnis ist also 1 pixel = 1 meter. als vorgabe dient der maßstab der ICAO Karte. diese hat einen maßstab von 1:500000, was bedeuted das 1cm = 500000 cm = 5000 m sind. wie bringe ich jetzt meine bildschirmpixel ins verhältnis zu dem kartenmaßstab der ICAO Karte ?...


    angenommen, das stimmt (ich kann es und will es nicht prüfen):
    dann entsprechen 320 pixel =320 meter waagerecht(x-Achse) und auf der y-Achse 240 Pixel =240 meter vertikal, Jetzt wäre zu klären, wie denn die ICOA Karte dargestellt wird. Anders gesagt, wieviele Meter in der Natur werden von den 320 Pixeln des Bildschirmes denn dargestellt ? Es muss ja ein Ausschnitt sein. Bei Deiner Karte sind es wie Du vorher selbst definiert hast 1 Pixel==1 meter ==>Bildschirmbreite mit 320 Pixeln==>320 Meter.
    Frage: was meinst Du mit ppi? Anton meinte mit ppi ,wieviel Pixel /cm bildschirmlänge Dein Bildschirm hat, eine rein gerätetypische Konstante. Oder hat die ICAO -Karte 1ppi, also 1 Pixel je Zoll ? Dann wären 320 Pixel*2,54 cm =8,128 meter (bildschirmbreite). Da ich die ICAO-karte nur als Papierkarte kenne, kann ich mir nicht recht vorstellen, daß so kleine Entfernungen wie 8,128 meter überhaupt dargestellt werden können. Die Papierkarte ist viel gröber, da sind so kleine Entfernungen wie 8 Meter gar nicht ablesbar. Bei der Papierkarte ist als kleinste ablesbare Einheit 1000 Meter aufgedruckt. Das muß erst mal geklärt sein. dann kann man umrechnen. Angenommen es wäre so : also ICAO :320 Pixel = 8,128 Meter;
    Deine Karte : 320 Pixel =320 meter; ==>320/8,128=283,688 . Mit diesen Faktor muss Deine Karte vergrößert oder die ICAO verkleinert werden.(oder umgekehrt ?) morgen1
    morgen1
    edit : Dein Denkfehler liegt in der falschen Rechnung: 2,54cm /320 Pix. ist denn der Bildschirm nur 2,54 cm breit ? Sicher nicht , Du müßtest die wahre Breite in cm /320 pix dividieren. dann hast Du die zutreffende Entfernung, die von 1 Pix repräsentiert wird.Multipliziert mit dem ICAO Mapstab 500.000 ergibt die tatsächliche Entfernung in der Natur , welche durch 1 Pix dargestellt wird.
    Noch eine Anmerkung: Im Eingangspost beschreibst Du Dein Koordinatensystem. Es hat in x-Richtung eine Ausdehnung von 58018 meter. Sollten das der Bildchirmbreite von 320 Pix entsprechen, dann wäre Deine Annahme 1Pix= 1 meter falsch. Richtig wäre 58018m /320Pix =181,306 meter je Pix.


    btw. In welcher Programmiersprache schreibst Du das. C++? Würdest Du den Teil des Codes, der aus dem osm mp erzeugt(falls ich das richtig vermute ) weitergeben können/wollen?. Wäre dran interessiert.
    morgen1

  • hi,
    ich bin die rechnung total falsch angegangen. das liegt einfach daran das ich einiges durcheinander geworfen habe. was ich nicht wusste ist das der ppi wert aus dem betriebssystem ausgelesen werden kann und nicht selber berechnet werden muss. ich wollte nämlich zunächst gerätespezifisch an die sache ran gehen und den ppi wert für jeden bildschirm selber ausrechnen. zwar ist das ausrechnen viel genauer, ist jedoch nur möglich wenn man die bildschirmwerte(breite/höhe/diagonale) in zoll hätte. das liefert im günstigsten fall ein bildschirmtreiber, doch darauf kann ich mich nicht verlassen, also muss ich auf die betriebssystemwerte zurückgreifen. ein sehr interessanter artikel zu ppi fehler gibt es auf http://praegnanz.de/essays/137/72dpi72dpi zu lesen.


    so, nun zu meiner lösung...
    ...wenn mein bildschirm eine auflösung von 320x240 pixel hat, dann ist folglich die bildschirmbreite bei 320 pixel. auf meinem bildschirm können 96 pixel pro zoll dargestellt werden (ppi liefert das betriebssystem). ein zoll sind 2,54 cm. jetzt möchte ich wissen wieviele pixel ein cm sind.


    rechnung :
    320 / 96 * 2,54 = 8,47


    mein bildschirm hat also eine breite von ca 8,47 cm. jetzt bringe ich noch den maßstab ins verhältnis. das bedeuted bei einem maßstab von 1:500000 ist 1cm = 5 km, also einfach 8,47 * 5 rechnen und siehe da ich muss insgesamt 42,33 km darstellen.


    mfg
    marvel


    p.s.: ich schreibe das ganze in visual studio mit qt für windows mobile. qt ist ein framework mit c++.