Posts

Showing posts from March, 2021

Handy queries and features for Sql Server geography data from OSM

 I'm using SQL for a lot of work on geographic data and here I wanted to share a few of the "not-so-obious" snippets I use when working with OpenStreetMap (OSM) data. When providing data to be parsed as Latitude and Longitude We can use the STRING_AGG function. select w.Id, STRING_AGG( cast(n.Lat as nvarchar(max)) + ' ' + cast(n.Lon as nvarchar(max)), ', ') within group (order by wn.NodeOrder) as LatLon from Way w inner join WayNode wn on wn.WayId = w.Id inner join Node n on n.Id = wn.NodeId group by w.Id This example is based on my working OSM data model (way - waynode -node etc.) The list above will provide a clean list of "lat lon, lat lon ...". But when I need for instancce WKT it can ve altered by switching the "n.Lat" and "n.Lon" above.   Of couse one can use the built-in functions such as: select w.shape.STAsText() as wkt, w.Shape.AsGml() as gml from.... Firstly, I used the agg function to make the sql g...

Start template for Xaml MapControl

Image
 The Xaml.MapControl comes with a nice example that sow different options. This can be found in the examples directory at  https://github.com/ClemensFischer/XAML-Map-Control . This post is meant to show a more simple solution. And my hope is that I can use this as a start template. The goal is to end up with this view: And this is the steps to get this going: Create new project and setup  Create a new project in Visual Studio. When writing this I selected the tradistional .Net Framework 4.8. Then I installed the Map Control by the package manager console:      PM> Install-Package XAML.MapControl For this template I didn't use any MVVM Frameworks. This is to make less depentant on third-party solutions. I used the base MVVM template I wrote aboute in:  Absolute Mini MVVM .  Copy those two classes to the folder explained below.   Then I made the following folders in Visual Studio: Models Views ViewModels AbsoluteMiniMvvm Extensions For thi...

Using Bing Maps as source for "Xaml MapControl"

In "XAML MapControl" you can also get the map tiles from Bing. You need an API key. This can pe obtained from this site: https://www.bingmapsportal.com/ Building on the example from this blog post: " Minimal Example ", The XAML markup will be: <map:Map x:Name="MainMap" Center="59.9,10.7" ZoomLevel="4"> <map:BingMapsTileLayer Mode="AerialWithLabels" /> </map:Map> But the API key has to be inserted somewhere i code before the map is displayed. The place for this is dependant of your project; For a MVVM project it may be set in the initilization of the ViewModel (if you are using "model-first"). For a more basic tutorial scenario it may be set in the App.Startup or the initialization of the first form. The code is either way:           using MapControl;           public MyViewModel() // or whatever initializes { BingMapsTileLayer.ApiKey = "YOUR-M...

Absolute minimal MVVM

Since I have plans for showing some examples using WPF with MVVM, I thought it would be a good idea to post the code for a very basic MVVM template. This is so I don't have to rely on some advanced frameworks. And this way the examples can focus on the issue at hand. The files may be placed in a library and referenced by several projects, or they may be copied inside the project itself. The first class to be used is the base for handling INotifyPropertyChanged in the ViewModels and models: using System.ComponentModel; using System.Runtime.CompilerServices; namespace AbsoluteMiniMvvm { public class PropertyChangedBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void RaisePropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } } The second is for the Command: namespace AbsoluteMiniMvvm { public class Command : ICommand { ...

Minimal example for "Xaml MapControl"

Image
I have mentioned the map control named "Xaml.MapControl" by Clemes Fischer on this blog earlier. This is a very good map control for use in WPF applications and some of the main features are: It can get tiles from many sources such as "Open Street Map", "Bing Maps" and custom sorces by using a url format string. It can also have WMS layers on from different sources, and you may also add your own tile sources or images. You can display UI elements on the map. The mapp add Points, Lines, Elipses and Polygons but you may add xaml-elements yourself to be displayed on your map.  XAML and MVVM support.  Using ItemsControls for multiple elements. Since it is meant to be used in MVVM and XAML it is very flexible. You can provide data for the map by using WPF binding. You can style it with WPF templates and styles. And adjust data by using WPF converters. I wanted to write this post to show the most simple and basic way to get a map in a WPF application. And this i...