步骤
- 创建.NET Framework4.8的WPF应用
- 在NuGet中安装Mapsui.Wpf 4.1.7
- 添加命名空间和组件
csharp
<Window x:Class="TestMapsui.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TestMapsui"
mc:Ignorable="d"
xmlns:wpf="clr-namespace:Mapsui.UI.Wpf;assembly=Mapsui.UI.Wpf"
Title="MainWindow" Height="450" Width="800"
>
<Grid>
<wpf:MapControl x:Name="MapCtrl"/>
</Grid>
</Window>
- 添加WKT相关内容
csharp
using Mapsui.Layers;
using Mapsui.Nts;
using Mapsui.Styles;
using Mapsui.Styles.Thematics;
using NetTopologySuite.IO;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using Brush = Mapsui.Styles.Brush;
using Color = Mapsui.Styles.Color;
namespace TestMapsui
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var map = MapCtrl.Map;
var layer = new MemoryLayer
{
IsMapInfoLayer = true,
Features = GetFeatures(),
Style = CreateDefaultVectorStyle()
};
map.Layers.Add(layer);
//map.Refresh();
}
}
}
随意制作几个点线面的WKT:
csharp
public IEnumerable<GeometryFeature> GetFeatures()
{
var wkts = new List<string>()
{
"polygon((0 0,0 2,1 1,1 0,0 0),(0.3 0.3,0.3 0.8,0.8 0.8, 0.3 0.3))",
"polygon((2 2,3 2,3 1,2 2))",
"polygon((1 0,1 1,2 1,2 0,1 0))",
"linestring(0 3,2 3,1 2)",
"point(0 0)",
"point(3 3)"
};
var r = new WKTReader();
var geos = wkts.Select(x => r.Read(x));
var fs = geos.Select(x => new GeometryFeature(x));
return fs;
}
随意设置默认的矢量样式:
csharp
private IThemeStyle CreateDefaultVectorStyle()
{
return new ThemeStyle(pFunction =>
{
var brush = new Brush(Color.LightBlue);
brush.FillStyle = FillStyle.Solid;
brush.Background = Color.Red;
VectorStyle style = new VectorStyle
{
Fill = brush,
Outline = new Mapsui.Styles.Pen(Color.Gray, 3),
Line = new Mapsui.Styles.Pen(Color.Red, 2)
};
return style;
});
}
效果图
一条线、两个点、三个面: