Google Streetview in API verfügbar

Laut dem aktuellen Changelog von Google-Maps sind die Zugriffsobjekte für Google-Streetview ab dem 11.03.2008 in der API verfügbar.
Jetzt heißt es also wieder rumspielen und testen mit Googlemaps.
Hier mal erste Spielereien zum Thema Streetview und Googlemap: Golden Gate Bridge

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Einbinden von Adwords in eine Google-Map

Zur Darstellung einer Google-Map auf der eigenen Webseite gibt es ja inzwischen viele Ansätze.
Diese reichen von der puren Javascript-Programmierung, über das beliebte Code-Kopieren bis hin zum Einsatz fertiger Steuerelemente, die den Javascript-Code mehr oder weniger stark abstrahieren.
Da Entwickler von Grund auf faul sind, und ich zähle mich dazu, habe ich mich für das ASP.NET-Control aus der Bibliothek von http://de.googlemaps.subgurim.net/ entschieden.
Diese Framework 2.0-Bibliothek bringt die wesentlichen Objekte zur Darstellung und Steuerung einer Google-Map mit, nur eben die Adwords-Integration (noch) nicht.
Das ist aber nich schlimm, da dafür nur ganz wenig Code erforderlich ist, wie Ihr gleich sehen werdet:
string jsAdsense =       
string.Format(         
"var adMng = new GAdsManager({0}, \"ca-pub-8215606248126572\",{{\'maxAdsOnMap\':10,\'minZoomLevel\':6,\'channel\':\'getpos.de ip2location\'}});" +          "adMng.enable();",
 GMap.GMap_Id); 

GMap.addCustomInsideJavascript(jsAdsense);

 

Es werden einfach 2 Javascript-Funktionen an das Googlemap-Objekt amgehängt.

Das ist erstens der GAdsManager, der die Publisher-Id sowie GAdsManagerOptions erwartet, die als literaler Konstruktor eingefügt werden.

Dann einfach noch die entsprechende ID einsetzen und schon habt ihr kontextsensitive Werbung von Adwords auf eurer Google-Map.

Currently rated 3.0 by 1 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Abfragen eines Standortes bei Google-Maps

In vielen Fällen ist es notwendig, den genauen Standort zu einer Adresse zu ermitteln.
Meist wird dies dazu benötigt, um eine Position auf einer Karte (z.B. Google-Map) darzustellen.
Das Client-Framework von Google nimmt von Hause aus die Längen- und Breitengrade entgegen, um Positionen auf der Karte darzustellen.
Aber wie erhalte ich diese Informationen?
Es existiert eine Art Webservice, über den man eine Anfrage an Google stellen kann. Der Anfragetext kann dann genauso aussehen, als ob es in die entsprechenden Textbox auf der Google-Maps-Seite eingegen wird. Zum Beispiel: Berlin, Brandenburger Tor usw.
Die Adresse dafür ist:

http://maps.google.com/maps/geo

Es werden noch zwei Parameter benötigt, um ein Abfrageergebnis zu erhalten.

Das ist einmal ein Key, den man sich bei Google-Maps besorgen muß, um sich zu authentifizieren. Website
Dieser Schlüssel gilt jeweils für ein Verzeichnis, so das man sich mehrere Schlüssel generieren lassen muß, wenn eine Visualisierung in mehreren Verzeichnissen geplant ist.
Ich habe dafür einfach ein Dictionary eingerichtet, das je nach Verzeichnis den entsprechenden Schlüssel übergibt.

Der andere Parameter ist die Anfragetext, der natürlich url-kodiert sein muß.

So könnte eine Abfrage-Url aussehen:

string url =
  string.Format(
    "http://maps.google.com/maps/geo?q={0}&output=xml&key={1}", HttpUtility.UrlEncode(address),key);

Zur Abfrage kann dann einfach das Webrequest-Object benutzt werden:

WebRequest webRequest =
  WebRequest.Create(url);
WebResponse webResponse =
  webRequest.GetResponse();
sResponse = new StreamReader(
  webResponse.GetResponseStream(), Encoding.Default).ReadToEnd();
webResponse.Close();
XmlDocument xmlDocument =
  new XmlDocument();

xmlDocument.LoadXml(sResponse);

Zurückgegeben wird ein XML-Dokument, das einen Returncode und den Standort enthält, falls einer gefunden wurde.
Der Code 200 heißt wie immer, das die Anfrage erfolgreich war.

Die Returncodes:

601 => "G_GEO_MISSING_ADDRESS: No address specified",

602 => "G_GEO_UNKNOWN_ADDRESS: The address entered cannot be identified",

603 => "G_GEO_UNAVAILABLE_ADDRESS: There is no geocoding information for this address",

610 => "G_GEO_BAD_KEY: The API KEY supplied is invalid",

620 => "G_GEO_TOO_MANY_QUERIES: This client has exceeded the query count.  Try later.",

500 => "G_GEO_SERVER_ERROR: Internal Geocode Service Error, Try later.",

Mit folgendem C#-Code können nun die gesuchten Koordianten aus dem XML-String ermittelt werden:

XmlNodeList ndCoord = xmlDocument.GetElementsByTagName("coordinates");
XmlNodeList ndCode = xmlDocument.GetElementsByTagName("code");
if ( 
  ndCode != null &&
 
 
ndCode.Count == 1 && 
 
  ndCode[0].InnerText.Equals("200") && 
  ndCoord != null &&  ndCoord.Count > 0    
    ) 
  {      
   
NumberFormatInfo ni = new NumberFormatInfo();
      
   
ni.NumberDecimalSeparator = ".";
      
   
ga = new GoogleAddress(address);
      
   
string sCoord = ndCoord[0].InnerText;
      
   
string[] arrCoord = sCoord.Split(',');
      
   
ga.Longitude = float.Parse(arrCoord[0], ni);
      
   
ga.Latitude = float.Parse(arrCoord[1],ni);

Jetzt kann das Ergebnis zum Beispiel zur Darstellung bei Google-Maps genutzt werden. Aber dazu ein anderes Mal... 

Currently rated 4.0 by 1 people

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Windows XP im Vista-Look

Wer wie ich ein Fan vom neuen Vista ist, aber an seinem Arbeitsplatz noch einen PC mit Windows XP am Laufen hat, kann mit Hilfe von ein paar kleinen Tools sein System ein wenig aufpeppen.
Für einige Tools sind allerdings lokale Adminrechte notwendig.
Und weil es teilweise doch recht einschneidende Änderungen am Gesamtsystem sind, das Backup nicht vergessen!
Ich verwende zum Beispiel folgende Tools:
  • Vista Inspirat 2 für das Desktopdesign
    Den Dowload und eine Anleitung zur Installation gibt es hier.
  • Sidebar 2.3 als Plagiat für das gleichnamige Vista-Element
    Download hier
  • Visual Tooltip für die Fenstervorschau in der Startleiste
    Download hier
  • Shock Aero V1.35 für die 3D-Effekte beim Taskwechsel
    Download hier
  

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Umrechnen einer IP-Adresse in einen Long-Wert

Um Standortdaten anhand der IP-Adresse aus Datenbanken zu ermitteln, wird meist nicht die Standardform (z.B 192.168.100.23), sondern sie muß in einen Long-wert umgewandelt werden.

Mit Hilfe des folgenden kleinen Code-Schnippsels kannst Du das ganz schnell erledigen:

 

public string Ip
{
  get { return _Ip; }
}

public Int64 LongIP

{

   get

   {

      int i;

      string[] arrDec;

      Int64 num = 0;

      if (_Ip == null)

      {

        return 0;

      }

      else

      {

        arrDec = _Ip.Split('.');

        for (i = arrDec.Length - 1; i >= 0; i--)

        {

          num += Convert.ToInt64(((long.Parse(arrDec[i]) % 256) * Math.Pow(256, (3 - i))));

        }

        return num;

      }

   }

}

 

Currently rated 4.0 by 1 people

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Kostenlose Datenbank mit IP-Standorten

Die amerikanischen Firma Maxmind bietet kostenlose IP-Location-Daten zum Einfügen in eine eigene Datenbank an. Die Daten werden monatlich aktualisiert und decken lt. MaxMind ca. 98% der IP-Adressen weltweit ab.
Dabei werden sowohl Länderdaten, als auch Orte mit ihren Längen- und Breitengraden geliefert.
Die Daten liegen als gepackte Zip-Datei vor und kann hier heruntergeladen werden.

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Lokalisierung anhand der IP-Adresse im Internet

Zu Idendifikation eine Internetbenutzer anhand seiner IP-Adresse benötigen Sie folgende Dinge:
1. Die IP-Adresse des Users (Diese ist sehr einfach mit Hilfe von Skripten oder Objekteigenschaften zu ermitteln.
2. Ein Datenbank, die zu dieser IP-Adresse einen geografischen Standort (geografische Länge und Breite und/oder politische Lage) ermitteln kann.
3. Ein Visualisierungwerkzeug (z.B. Google-Maps), um die Position verständlich darzustellen.
Dieser Blog wird sich in der nächsten Zeit, unter anderem, mit diesen Dingen genauer auseinandersetzen.

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5