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;       
            });
        } 

效果图

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

相关推荐
少控科技1 小时前
农场设备管理代码(1)
开发语言·c#
椒颜皮皮虾྅16 小时前
OpenVINO C# API 3.3.1:支持OpenVINO 2026.3及GenAI增强
人工智能·c#·openvino
半亩码田19 小时前
C#转Python第3.1篇:Python 的 class 没有访问修饰符?面向对象的另一条路
开发语言·python·c#
唐青枫1 天前
别再手写 args[0]:C#.NET CommandLineParser 命令行工具实战详解
c#·.net
LccKyI1 天前
C#学习day06(方法/函数及其关键字,附思维导图)
经验分享·学习·c#
.Peter1 天前
.NET/WPF 程序在部分 Windows 电脑无法保存用户环境变量:使用 DPAPI 实现安全兼容
windows·信息安全·c#·.net·wpf·环境变量·dpapi
农村小镇哥1 天前
怎么把HTM格式转化成WORD
ui·c#·word
农村小镇哥1 天前
C#读取CSV文件的方法
服务器·数据库·c#
FuckPatience1 天前
C# 报错参数无效
c#
北域码匠2 天前
PID 控制算法完整详解(C# 原生实现,无第三方库)
c#·pid控制·工控开发·闭环控制·自动控制算法·数字pid·增量式pid