OpenGeoDB (Lat / Lon) auf 2D Karte (PNG)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • OpenGeoDB (Lat / Lon) auf 2D Karte (PNG)

    Hallo zusammen,

    ich bin derzeit auf der Suche nach einer Formel wie ich eine Position auf einer 2D Karte markieren kann.

    Auf meiner Suche bin ich auf Folgendes gestoßen:

    PHP-Code:

            
    //coord
            
    $coord_x_min    5.5;        //west (min longitude)
            
    $coord_x_max    15.5;     //east (max longitude)
            
    $coord_y_min    47.2;     //north (max latitude)
            
    $coord_y_max    55.1;     //south (min latitude)

            //karte
            
    $map_x_min        0;    //west
            
    $map_x_max        $aMapSize['x'];     //east
            
    $map_y_min        0;     //north
            
    $map_y_max        $aMapSize['y'];    //south
            
            
    $coord_x_diff    $coord_x_max $coord_x_min;
            
    $coord_y_diff    $coord_y_min $coord_y_max;
            
            
    $coord_x        $fLongitude;
            
    $coord_y        $fLatitude;
            
            
    $point_x        $map_x_max / ( $coord_x_diff / ( $coord_x $coord_x_min ) );
            
    $point_y        $map_y_max / ( $coord_y_diff / ( $coord_y $coord_y_max ) );        

            
    $final_point_x    $point_x;
            
    $final_point_y    = ($map_y_max $point_y);
            
            return Array(
    'x' => Round($final_point_x2), 'y' => Round($final_point_y2)); 

    Jedoch ist die Berechnung murks, da München hier in der nähe von Köln angezeigt wird.


    Ich denke mal das die Coord X/Y (min/max) falsch sind, weil ich eine eigene Imagemap benutze.

    Weißt jemand weiter?

    Ach ja die Longitude / Latitude Daten liegen im Dezimalformat vor.



    Liebe Grüße
    Zuletzt geändert von Skaschy; 10.03.2010, 11:12.

  • #2
    Hallo Tobias,

    eine Position markierst du mithilfe von Längen- und Breitengrad … wie auch sonst? Entfernungen, Umkreis und all so ein Krempel machst du mit der Haversine-Formel!
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      Hallo Cem,

      ich benutze ja die Latitude und Longitude Werte, jedoch kann ich diese Werte nicht einfach auf eine 2D Karte klatschen, da hier weder die Erdkrümmung noch die Differenzen zwischen den Graden kalkuliert wird.
      Zuletzt geändert von Skaschy; 10.03.2010, 11:43.

      Kommentar


      • #4
        Deswegen Haversine …
        [FONT="Helvetica"]twitter.com/unset[/FONT]

        Shitstorm Podcast – Wöchentliches Auskotzen

        Kommentar


        • #5
          Aber Haversine ist doch nur für die Entfernung zwischen zwei Punkten?

          Kommentar


          • #6
            Genau und was ist ein Ort auf einer Karte? Ein Punkt. Und die Position des Ortes auf der Karte ist nichts anderes als die beiden Entfernungen dieses Punktes von der linken und von der oberen Kante.

            Gruß,

            Amica
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Richtig, für die Entfernung (und alles damit zusammenhängende) brauchst du Haversine. Ich schnall aber auch jetzt erst, was du genau willst.

              Die Wikipedia-Artikel zum Längen- und Breitengrad sagen dir, dass die Breitengrade immer gleich weit voneinander entfernt liegen und lediglich die Längengrade unterschiedliche Entfernungen aufweisen. Dort findest du allerdings auch eine Formel, wie du diese Berechnen kannst. Das Problem wird hier aber in erster Linie sein, dass niemand deine Karte kennt …
              [FONT="Helvetica"]twitter.com/unset[/FONT]

              Shitstorm Podcast – Wöchentliches Auskotzen

              Kommentar


              • #8
                *kopfkratz* Die Haversine-Formel sollte hier doch eigentlich nicht gebraucht werden?! Eine korrekte 2D-Projektion der Karte vorrausgesetzt?

                Stellen die ersten vier Werte aus deinem Codebeispiel (bzw. in den Script, dass du verwendest) auch die linke obere Ecke und rechte untere Ecke aus DEINER Karte dar? Und enthält das Array $aMapSize die Groesse DEINER Karte in Pixeln?

                Wenn ich das Script richtig checke, liefert es die Pixel-Koordinaten für deine Karte anhand der übergebenen Werte $fLongitude und $fLatitude. Dazu muss es die LAT/LON Werte für die linke obere und rechte untere Ecke kennen, sowie die Abmessungen deiner Karte in Pixeln - sonst nichts - eigentlich eine simple Geschichte.

                PS:
                Wenn die Werte aus deinem Codebeispiel für deine Karte gelten sollen, dann liegt die linke obere Ecke deiner Karte in irgendeinem französischem Acker
                Zuletzt geändert von Quetschi; 10.03.2010, 14:03.
                Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                Schön - etwas Geschichte kann ja nicht schaden.
                Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                Kommentar


                • #9
                  Okay, die Werte waren von einer anderen Deutschlandkarte.

                  Woher, bzw. wie komm ich an die Werte für meine Karte?

                  Die Pixelangaben sind korrekt:

                  431x575 Pixel



                  Französischer Acker ist nicht gut, schließlich will ich kein Wein anbauen.

                  Kommentar


                  • #10
                    z.B. Google Earth - aber Vorsicht - die Ansicht auf Dezimalgrad umstellen!

                    EDIT:
                    Also bei den Werten oben sind die
                    PHP-Code:
                            $coord_y_min    47.2;     //north (max latitude)
                            
                    $coord_y_max    55.1;     //south (min latitude) 
                    Werte vertauscht - mach draus

                    PHP-Code:
                            $coord_y_min    55.1;     //north (max latitude)
                            
                    $coord_y_max    47.2;     //south (min latitude) 
                    dann kommt da ein Ausschnitt raus, in dem Deutschland gut reinpasst.
                    Zuletzt geändert von Quetschi; 10.03.2010, 15:04.
                    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                    Schön - etwas Geschichte kann ja nicht schaden.
                    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                    Kommentar


                    • #11
                      Also die Werte passen recht gut (5.5, 15.2, 55.1, 47.2), schaut aber immernoch etwas bescheiden aus.

                      München (PLZ: 80686) wäre demnach direkt in Prag.


                      Irgendwie ist da noch etwas arg daneben.


                      Edit:
                      Anbei mal nen Screen aus GoogleEarth
                      Angehängte Dateien
                      Zuletzt geändert von Skaschy; 10.03.2010, 15:30.

                      Kommentar


                      • #12
                        Also ich kann mir evtl. heut Abend nochmal genau ansehen, was das Script macht - im Augenblick kann ich mich aber nicht ausgiebig der Sache annehmen.
                        Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                        Schön - etwas Geschichte kann ja nicht schaden.
                        Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                        Kommentar


                        • #13
                          Also ich bin nachwievor an einer Lösung interessiert.

                          Die Berechnungen sollten eigentlich richtig sein, vielleicht passt was an meinen Lat/Lon Daten nicht? Diese sind im Dezimalformat vorhanden und stammen von der OpenGeoDB.

                          Kommentar


                          • #14
                            Bin gestern nicht mehr dazu gekommen - nutzt du die Daten auch "richtig" herum? Also in deinem "System" zur Anzeige des Punktes auf der Karte (via Javascript/Css o.ä.)? Evtl. sind da Lat/Lon vertauscht?!
                            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                            Schön - etwas Geschichte kann ja nicht schaden.
                            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                            Kommentar


                            • #15
                              In der Tat, die Werte für die "div" layer, in denen wird ein Marker und Text angezeigt waren vertauscht.

                              Außerdem sind nun die Orte mit folgenden Werten Perfekt in der Karte:

                              PHP-Code:
                              $coord_x_min    6.1;        //west (min longitude)
                              $coord_x_max    17.9;        //east (max longitude)
                              $coord_y_min    55.1;     //north (max latitude)
                              $coord_y_max    48.8;     //south (min latitude) 

                              Seltsam...

                              Kommentar

                              Lädt...
                              X