步骤
- 创建.NET Framework4.8的WPF应用
- 在NuGet中安装Mapsui.Wpf 4.1.7
- 添加命名空间和组件
<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相关内容
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:
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;}
随意设置默认的矢量样式:
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; });}
效果图
一条线、两个点、三个面: