Search code examples
winformsbing-mapsgeopointsuwp-maps

Is there a Geopoint class available for Winforms (or an Analogue thereof)?


In my UWP app, I use a Geopoint class:

using Windows.Devices.Geolocation;

. . .

List<Geopoint> locations;

In a Winforms app, this is not available - Geopoint is not recognized. Is there an analogous class available for Winforms apps?

The same is true for the BasicGeoposition object - not recognized.

UPDATE

I want the GeoPoint and BasicGeoposition classes so I can do things like this:

BasicGeoposition location = new BasicGeoposition();
location.Latitude = 36.59894360222391; // Monterey == 36.6002° N
location.Longitude = -121.8616426604813; // Monterey == 121.8947° W (West is negative)
Geopoint geop = new Geopoint(location);
await map.TrySetSceneAsync(MapScene.CreateFromLocation(geop));
cmbxZoomLevels.SelectedIndex = Convert.ToInt32(map.ZoomLevel - 1);
map.Style = MapStyle.Aerial3DWithRoads;

UPDATE 2

I tried the code provided in the answer:

this.UserControl1.myMap.AnimationLevel = AnimationLevel.Full;
this.userControl11.myMap.Loaded += MyMap_Loaded;

...but it won't compile. I don't have a UserControl11 (which is what the answer's code has), but I do have a UserControl1, yet it is not recognized:

enter image description here

This is the XAML in question (Bing Maps key obfuscated):

<UserControl x:Class="MyMaps.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
   xmlns:m="clr-namespace:Microsoft.Maps.MapControl.WPF;assembly=Microsoft.Maps.MapControl.WPF">
    <Grid>
        <m:Map CredentialsProvider="Gr8GooglyMoogly" x:Name="myMap" />
    </Grid>
</UserControl>

Solution

  • To set the view of the Bing Maps WPF control, you can use SetView method. The method have different overloads, for example you can pass a Location(which you create based on the latitude and longitude of your desired location) and a zoom-level to the method like this:

    var location = new Location(47.604, -122.329);
    this.userControl11.myMap.SetView(location, 12);
    

    Same can be achieved by setting Center and ZoomLevel.

    Download or Clone the example

    You can download or close the working example from here:

    Step by Step Example - Zoom into Seattle as initial view

    1. Follow instructions in this post to create a Windows Forms project which uses WPF Bing Maps Control.

    2. Handle the Load event of the Form and use the following code:

       private void Form1_Load(object sender, EventArgs e)
       {
           this.userControl11.myMap.AnimationLevel = AnimationLevel.Full;
           this.userControl11.myMap.Loaded += MyMap_Loaded;
       }
       private void MyMap_Loaded(object sender, System.Windows.RoutedEventArgs e)
       {
           var location = new Location(47.604, -122.329);
           this.userControl11.myMap.SetView(location, 12);
       }
      

      Make sure you use using Microsoft.Maps.MapControl.WPF;.

    As a result, the map zooms in Seattle as center location: enter image description here

    More information:

    You may want to take a look at the following links for more information: