Blog b = new Blog("marcos blog"); RSS 2.0
# Saturday, April 04, 2009

Ich hab mal ausnahmsweise ein bisschen Zeit gehabt um ein paar neue / nicht mehr ganz so neue Technologien anzusehen und auszuprobieren.

Da ich ja nun doch schon seit einiger Zeit meine halbwegs aktuelle Position per Virtual Earth auf woist.mwiedemeyer.de visualisiere und es seit kurzem ein Virtual Earth Silverlight Control gibt, ist es wie geschaffen, um endlich einen ernsthafteren Einstieg in Silverlight 2 zu starten.

Das interactive SDK ist wirklich genial und die Bedienung ist super einfach. Zumindest dann, wenn man bereits ein wenig WPF oder Silverlight Erfahrungen gesammelt hat.

Beispiel:

Man möchte in einer Silverlight Anwendung einfach nur die gesamte Karte darstellen. Dazu reicht es das Map Control zur Seite hinzuzufügen:

<UserControl x:Class="VirtualEarthSilverlightTest.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:m="clr-namespace:Microsoft.VirtualEarth.MapControl;assembly=Microsoft.VirtualEarth.MapControl"
    Width="800" Height="600">
    <Canvas x:Name="LayoutRoot" Background="White">
        <m:Map Name="MyMap"></m:Map>
(...)

Um per code einen Pin (oder jedes andere UIElement, z.B. auch Bilder, Videos, etc.) auf der Karte an einer bestimmten Position anzuzeigen, reicht folgender code:

// Neuen MapLayer hinzufügen um Elemente an Locations anzuzeigen
MapLayer mapLayer = new MapLayer();
MyMap.Children.Add(mapLayer);
// Beliebiges UIElement (Canvas, Border, etc) an der Position latitude, longitude anzeigen
mapLayer.AddChild(anyUIElement, new Location(latitude, longitude));

Ich habe für einen ersten Versuch mal den letzten Urlaub in die Silverlight Karte eingefügt. Hier gibts das ganze nun zu sehen:

http://woist.mwiedemeyer.de/silverlight

UPDATE:

Was ich an der Stelle noch vergessen habe zu erwähnen: Es funktioniert nicht nur im Internet Explorer, sondern auch in Opera (und natürlich auch Firefox…)!

Saturday, April 04, 2009 4:14:53 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [11]
.NET | ASP.NET 2.0 | Microsoft | Silverlight
Saturday, April 11, 2009 5:09:02 PM (W. Europe Standard Time, UTC+01:00)
hi,
may i ask u how to change the virtual earth's map source?
i only want to change the default map to my map.
i have search file for this one day, but cann't see any tips.
can u tell me? thx.
kkdhf
Tuesday, April 14, 2009 7:33:33 AM (W. Europe Standard Time, UTC+01:00)
I'm not sure, what you mean by changing the map source!?
The map source is the map of the world from Microsoft Virtual Earth... you cannot change this to any other source.
If you mean you want to add a new layer to the map, use the MapLayer class and add children as you can see in the code above.
Thursday, May 14, 2009 11:58:23 AM (W. Europe Standard Time, UTC+01:00)
Hi,

ist es mit dem Silverlight Map-Control auch möglich, einen User Orte finden zu lassen?
Ich habe leider keine Methode Map.Find oder Map.FindLocation gefunden, aber vielleicht überseh ich auch etwas!

Kannst du mir da weiterhelfen?
Juby
Thursday, May 14, 2009 3:11:03 PM (W. Europe Standard Time, UTC+01:00)
Hallo,

Ja, das ist kein Problem. Im interactive SDK gibt es ganz links unten die Rubrik "Use the Virtual Earth Web Services". Dort ist der erste Unterpunkt "Geocode an address".
Damit kann man soetwas wie "Bahnhof, Berlin, Germany" auflösen und auf der Karte darstellen.
Monday, May 18, 2009 2:30:45 PM (W. Europe Standard Time, UTC+01:00)
Hi Marco, danke für den Tipp. Im interactive SDK funktioniert es auch einwandfrei. Hab es dann in einem VS-Projekt probiert und scheitere an der Auflösung eines WebService (PlatformServicesHelper.GetCredentials()). Dazu gibts leider im Web keinen Hinweis.

Hast du dieses Beispiel in einem eigenen Projekt schon einmal probiert?
Juby
Monday, May 18, 2009 8:21:47 PM (W. Europe Standard Time, UTC+01:00)
Das Problem daran ist, dass man zum Zugriff auf die WebServices gültige credentials benötigt.
Diese gibt es für die staging umgebung zum testen hier.
Die URL(s) für die Virtual Earth Web Services findet man hier.
Wenn man dann einen gültigen Token hat, muss man diesem im code aus dem iSDK nur noch folgendermaßen einsetzen:

// (...)
request.Credentials = new PlatformServices.Credentials();
request.Credentials.Token = "HIER DER INDIVIDUELLE AUTHENTIFIZIERUNGS TOKEN";
Tuesday, May 19, 2009 9:53:44 AM (W. Europe Standard Time, UTC+01:00)
Hi Marco,

die genannten Schritte hatte ich schon durchgeführt, d.h. Registrierung bei VE für die Nutzung des Such-Webdienstes. Die Virtual Earth Platform developer account ID und Password hab ich auch genutzt und unabhängig (als normale .Net-Anwendung mit dem WebService) getestet. Dieser Schritt funktioniert.

Mein Problem ist genau die Tokengenerierung in Silverlight. Die entsprechenden Objekte und Methoden im .Net-Framework sind leider unter Silverlight nicht verfügbar bzw. die Entsprechung unter Silverlight kenn ich nicht. Und die Web-Hinweise enden alle bei der Token-Generierung :-(

vG Jubi
Juby
Tuesday, May 19, 2009 9:59:03 AM (W. Europe Standard Time, UTC+01:00)
p.s.
zum Test von "request.Credentials" und Tokengenerierung hab ich folgende Beispiele verwendet:
http://cid-8fda9b56b5680ab3.skydrive.live.com/browse.aspx/.Public/VirtualEarthDemos/WebServices

aber, wie gesagt, unter Silverlight so nicht verfügbar

Juby
Tuesday, May 19, 2009 6:55:58 PM (W. Europe Standard Time, UTC+01:00)
Hallo,
Ja, ich hab nicht daran gedacht, dass die NetworkCredential Klasse in Silverlight nicht verfügbar ist.
Generell ist es aber sowieso keine gute idee, die credentials an den client (silverlight ist halt eine client applikation) zu übertragen. Stattdessen (so empfiehlt es auch Microsoft) sollte der Token per WebService geholt werden.
Also WebService erstellen, der den code zur Tokengenerierung beinhaltet und in der Silverlight App dann den token per WS abholen. Oder aber gleich die gesamte Logik zum auflösen der adresse in den WebService packen.
Wednesday, May 20, 2009 10:14:32 AM (W. Europe Standard Time, UTC+01:00)
Hallo Marco,

hab den Rat befolgt und die gesamte Logik der Adreßbestimmung außerhalb von Silverlight gemacht und das funktioniert auch (Wenngleich ich mich frage, warum MS ein Beispiel ins SDK stellt, was ihren Empfehlungen widerspricht)
Dies beinhaltet auch eine Routine die, bei Mehrfachtreffer, dem User eine Auswahlmöglichkeit seiner gewünschten Adresse bietet.
Wenn der User diese ausgewählt hat, müßte ich diese Adresse (bzw. LatLon) an das Silverlight-Modul senden. Aber hier taucht ein erneues Problem auf. Wie kann ich dem Silverlight-Modul die Adresse übergeben?
Ich hab verschiedene Varianten probiert (via hidden Fields, Zugriff via DOM, ) und prinzipiell kann ich die Daten damit auch zwischen Client und Server austauschen. Aber mir fehlt ein Möglichkeit (Event) um dem eingebetteten Silverlight-Modul (.xap) den Zeitpunkt der Adreßbestimmung mitzuteilen.

Oder überseh ich da gedanklich etwas?
Juby
Thursday, June 25, 2009 2:53:39 PM (W. Europe Standard Time, UTC+01:00)
Ich kann nur Zustimmer, wirklich genial!
Das Virtual Earth Silverlight Control kannte ich noch gar nicht.

---------------------------------------------------
Christian Wirth
OpenID
Please login with either your OpenID above, or your details below.
Name
E-mail
(will show your gravatar icon)
Home page

Comment (Some html is allowed: a@href@title, b, strike, strong) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.  

Enter the code shown (prevents robots):

Live Comment Preview
Statistics
Total Posts: 192
This Year: 4
This Month: 1
This Week: 0
Comments: 291


Sign In
All Content © 2010, Marco Wiedemeyer
DasBlog theme 'Business' created by Christoph De Baene (delarou)