Mapsui绘制WKT的示例

步骤

  1. 创建.NET Framework4.8的WPF应用
  2. 在NuGet中安装Mapsui.Wpf 4.1.7
  3. 添加命名空间和组件
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>
  1. 添加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;       
            });
        } 

效果图

一条线、两个点、三个面:

相关推荐
hez20102 天前
在 .NET 上构建超大托管数组
c#·.net·.net core·gc·clr
雨落倾城夏未凉7 天前
第四章c#方法-参数数组和可选参数(16)
后端·c#
唐青枫8 天前
线程不是越多越快:C#.NET Thread 生命周期、同步与后台工作线程实战
c#·.net
唐青枫9 天前
别只会反射:C#.NET Emit 动态生成代码实战详解
c#·.net
咕白m6259 天前
.NET 环境下 Word 超链接批量提取方案
c#·.net
用户91721561902119 天前
C# 通信协议增量解析:用状态机处理半包和粘包
c#
小码编匠10 天前
C# 工控上位机必备:数据转换工具类与十个核心模块
后端·c#·.net
唐青枫12 天前
别再乱用 StartNew:C#.NET TaskFactory 任务调度实战详解
c#·.net
Artech12 天前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
ai·c#·agent·memory·maf
Scout-leaf14 天前
C#摸鱼实录——IoC与DI案例详解
c#