Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Programmierung und Datenbanken (https://boardunity.de/programmierung-datenbanken-f23.html)
-   -   Google Maps, Koordinaten anhand der PLZ / ZIP? (https://boardunity.de/google-maps-koordinaten-anhand-plz-zip-t4353.html)

MrNase 17.09.2006 10:23

Google Maps, Koordinaten anhand der PLZ / ZIP?
 
Morgen zusammen!

Ich brauche ne Funktion die mir die Koordinaten einer deutschen Stadt anhand ihrer PLZ liefert.

Die Funktion, aus der Doku der API entnommen bietet folgende Funktion:
Code:

var map = new GMap2(document.getElementById("map"));
var geocoder = new GClientGeocoder();

function showAddress(address) {
  geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        alert(address + " not found");
      } else {
        map.setCenter(point, 13);
        var marker = new GMarker(point);
        map.addOverlay(marker);
        marker.openInfoWindowHtml(address);
      }
    }
  );
}



Ich habe dann versucht diese abzuändern:
Code:


var map = new GMap2(document.getElementById("map"));
var geocoder = new GClientGeocoder();

function showAddress(address) {
  geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        alert(address + " not found");
      } else {
return point;
      }
    }
  );
}

aber alert(showAddress('44534'));

gibt immer 'undefined' zurück.


Kennt jemand da noch was anderes?



Jens* 17.09.2006 10:57

Kennst Phoogle Maps2 ? Damit geht das mein ich... :)

system7designs :: Phoogle Maps 2.0

MrNase 17.09.2006 11:30

Ist mir bekannt, ja und es ist ansich keine schlechte Sache.
Allerdings möchte ich ungern auf eine weitere Lösung setzen wenn die Google Maps API bereits eine passende Funktion bietet. :)
Ausserdem verwendet Phoogle ironischerweise zum bestimmen der Koordinaten eine API von Yahoo. :D

Jens* 17.09.2006 11:56

Du hast recht. DAs geht wirklich. :-) Hab nun was gefunden...

PHP-Code:

<!DOCTYPE html public "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<
html>
<
head>
    <
title>Google Karte</title>
               <
script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAlU9hDaIukWDYUSoeMM3fghQ-6moEltxhkCI6s6wvbdehYkEECBT9GU8rlUWIDUrfuUgZKfwpZS-cvw" type="text/javascript"></script>
    <script type="text/javascript">
    //<![CDATA[
    var map = null;
    var geocoder = null;

    function load() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        geocoder = new GClientGeocoder();
      }
    }

    function showAddress(address) {
      if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              map.setCenter(new GLatLng(48.015947, 11.285739), 10);
              alert(address + " not found");
            } else {
              map.setCenter(point, 13);
              var marker = new GMarker(point);
              map.addOverlay(marker);

            }
          }
        )
      }
    }
    //]]>
   </script>
   
</head>

<body onload="load();showAddress('48683');" onunload="GUnload()">
<p>48683</p>
    <div id='map' style='width: 339px; height: 300px'></div>
</body>
</html> 


MrNase 17.09.2006 12:15

Ich habe ein Script welches Daten zu den Markern aus einer XML-Datei ausliest und diese dann auf der Karte darstellt.
In der XML-Datei sind jeweils die genauen Koordinaten gespeichert und auch weitere Informationen zu den Markern.

Da es sich dabei um Städte handelt und in der Datei momentan nur die Längen- und Breitengrade hinterlegt sind möchte ich das System auf die Postleitzahlen ausweiten und dank Google Maps die Längen- und Breitengrade automatisch aufgrund der PLZ bestimmen lassen. Ansonsten muss ich immer bei jedem neuen Eintrag nachschauen: Welche Koordinaten hat Hamburg usw.

Dafür brauche ich nun, wie oben geschrieben, ein simple Funktion die die Postleitzahl in die Koordinaten umwandelt damit ich den Marker für diese Stadt an dieser Stelle anzeigen lassen kann.

Jens* 17.09.2006 14:33

Okay.. next Skript...:D

Daraus habe ich gerade folgendes gebastelt (noch nicht ganz 100%ig perfekt)

Study-Board - Das Studenten Portal | Mitgliederliste

Es basiert auf folgendem Skript:

Zum Skript

Edit: Mir ist aufgefallen, das die CPU Auslastung bei dem Skript enorm hoch ist.. Any ideas?

frolix 22.09.2006 18:34

Zitat:

Zitat von MrNase (Beitrag 36598)
Dafür brauche ich nun, wie oben geschrieben, ein simple Funktion die die Postleitzahl in die Koordinaten umwandelt damit ich den Marker für diese Stadt an dieser Stelle anzeigen lassen kann.

Also wenn du Google die Postleitzahl und das Land gibst, sollten eigentlich die Geodaten bei rauskommen. Z.B. für 20255 (der Key ist für localhost. Einfach 1x reloaden dann gehts). Bei manchen Ländern habe ich mit Google Probleme gehabt. Da hilft dann aber oft der Webservice von Geonames

MrNase 30.09.2006 22:40

Ich habs mit Ajax und einer datenbankgestützten Liste aller Postleitzahlen Deutschlands gelöst die praktischerweise die Koordinaten beeinhaltet. ;)

Pagodentreff.de - Mercedes Benz Pagode w113

Zwirni 30.09.2006 22:56

Ich hab sowas ähnliches bereits mehrfach dank opengeoDB umgesetzt. Gibt ähnliches auch für andere Länder. Für eine Kopplung zwischen Koordinaten einer PLZ und einer Karte muss man imho selber sorgen.

MrNase 30.09.2006 23:02

Ich nutze die Daten der openGeoDB allerdings brauche ich nur einen Teil davon, die Darstellung der Umkreise und den Rest übernimmt die Google Maps API bzw. die User direkt aus ihrem Profil. :)

Silmarillion 01.10.2006 14:08

Zitat:

Zitat von MrNase (Beitrag 36837)
Ich habs mit Ajax und einer datenbankgestützten Liste aller Postleitzahlen Deutschlands gelöst die praktischerweise die Koordinaten beeinhaltet. ;)

Pagodentreff.de - Mercedes Benz Pagode w113

Im IE 6 kann die Seite, ganz offensichtlich, nicht dargestellt werden. FF hingegen funktioniert, scheinbar, einwandfrei.

mfg

MrNase 01.10.2006 18:54

Den Fehler versuche ich den ganzen Tag über zu beheben aber... Es klappt nicht *GRRRRRRRRR* Das Problem ist, dass ich hier keinen Internet Explorer installiert hab.

Zwirni 01.10.2006 19:03

Hab auch keinen IE hier, aber ich sehe schon am Quellcode, dass der ziemlich chaotisch ist. Du hast z.B 2 mal DOCTYPE und <html> definiert. Mein Validator meldet 4 Fehler und 43 Warnungen, bei w3c sind es 26 Fehler. Versuche die mal zu beseitigen, dann klappts vielleicht auch im IE.

MrNase 01.10.2006 21:22

Jau, hatte mich beim kopieren der Templates vertan.. Unordentlich siehts aus weil vBSEO die Ausgabe komprimiert. Hab übrigens ne Lösung gefunden und schon teilweise angewendet: Nachbarschaftshilfe

Damit dürfte es gehen.. Naja, Morgen ist auch noch ein Tag. ;)

mgcgn 26.01.2007 08:46

Hallo zusammen,

@MrNase

Ich bin auch auf der Suche nach sowas, darf man deine Lösung erfahren?


Gruß
Matthias

MrNase 26.01.2007 10:18

Klar, ich hab von openGEO die Datenbank mit den Postleitzahlen genommen um die Koordinaten zu erfahren. Mit den Koordinaten kann Google Maps ja gut was anfangen. :)

Luki 10.03.2007 19:29

Ahoi

OpenGeo interessiert mich auch sehr! Wo finde ich das?
ansonsten ist Free Map Generator for your Homepage - Maps, Karten, Stadplan gerade an Start gegangen :)

Gruß
Luki

MrNase 11.03.2007 01:47

OpenGeo(Db): OpenGeoDb - freie Geokoordinaten-Datenbank nach Orten und PLZs - Front Page :)

Off-Topic:
Hoffe mein Linktipp von vorgestern hat geholfen! :)

Luki 12.03.2007 00:53

Der Link war eine grosse Hilfe (wie Du am Resultat siehst :))
vielen Dank auch für diesen Tipp!! :)

mgcgn 20.03.2007 23:32

Hi zusammen,

@ MrNase,

wie hast du das mit dem Radius hinbekommen? Gibt es dafür ein Codeschnipsel?


Gruß
Matthias

MrNase 21.03.2007 19:23

Aber sicher doch! ;)

Code:

                function drawCircle(point, radius, color) {
                        var cColor = color;
                        var cWidth = 5;
                        var Cradius = radius; 
                        var d2r = Math.PI/180;
                        var r2d = 180/Math.PI;
                        var Clat = (Cradius/6377.83027)*r2d;
                        var Clng = Clat/Math.cos(point.lat()*d2r);
                        var Cpoints = [];
                        for (var i=0; i < 33; i++) {
                            var theta = Math.PI * (i/16);
                            var CPlng = point.lng() + (Clng * Math.cos(theta));
                            var CPlat = point.lat() + (Clat * Math.sin(theta));
                            var P = new GLatLng(CPlat,CPlng);
                            newBounds.extend(P);
                            Cpoints.push(P);
                        }
                        map.addOverlay(new GPolyline(Cpoints,cColor,cWidth));
                    }

point -> Koordinaten des Punktes der den Mittelpunkt bildet
radius -> Zahl (Einheit: Kilometer)
color -> HEX oder Wort, Farbe des Kreises

mgcgn 23.03.2007 21:41

Vielen Dank

Gruß
Matthias

H3llGhost 28.07.2007 20:50

Hallo Leute,

danke erstmal für diesen Thread!
Aber nun eine Frage:

Ich will folgende Daten zu einer Koordinate machen, mit der die Google API umgehen kann.
PLZ Ort Land

Aber ich weiß nicht wie!
Ich habe mir das hier (danke Jens) schon angeschaut und versucht einzubauen, aber bei mir geht es nicht!
Dann habe ich mir das openGeo (ein Danke an MrNase) angeschaut, aber da ist mein Ort nicht mal drin!
Also könnt ihr mir vielleicht helfen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25