Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >win10 uwp win2d 入门 看这一篇就够了

win10 uwp win2d 入门 看这一篇就够了

作者头像
林德熙
修改于 2025-07-07 09:25:34
修改于 2025-07-07 09:25:34
1.8K00
代码可运行
举报
文章被收录于专栏:林德熙的博客林德熙的博客
运行总次数:0
代码可运行

本文主要翻译,可能带有一定的主观性和局限性,说的东西可能不对或者不符合每个人的预期。如果觉得我有讲的不对的,就多多包含,或者直接关掉这篇文章,但是请勿生气或者发怒吐槽,可以在我博客评论 http://blog.csdn.net/lindexi_gd

介绍

Win2d是一个很简单使用的底层图形Windows Runtime API,可以使用硬件加速,主要是GPU的强大计算。他可以使用C#或C++写应用商店应用,包括UWP或windows 8.1手机或电脑。他利用强大的Direct2D,无缝集合windows的Xaml,可以使用强大的渲染得到漂亮界面。

使用他可以将界面交给GPU,让CPU集中计算我们的算法

我们可以通过Nuget来得到win2d,Nuget的windows10版win2d:http://www.nuget.org/packages/Win2D.uwp,Nuget的windows 8.1版win2d:http://www.nuget.org/packages/Win2D.win81

如何使用可以参见微软示例http://github.com/Microsoft/Win2D-samples

在下面我们会说如何快速使用。大概看了这个博客就可以入门了,因为使用是很简单。

一些链接: 如果找到bug可以通过 http://github.com/Microsoft/Win2D/issues 告诉微软

团队博客:http://blogs.msdn.com/b/win2d

特性

  • 位映像图形
  • 加载、保存、渲染图形
  • 纹理渲染
  • 蒙版
  • 快速处理大量图片
  • 分块压缩图像
  • 加载、保存、渲染虚拟位图,虚拟位图就是超过GPU的纹理会自动分为多个
  • 矢量图
  • 画图形,线、矩形、圆,或使用基础图形组成复杂的
  • 使用笔刷、颜色、图形填充图形
  • 任意宽度线段
  • 图形显影效应

使用

打开 vs,创建项目,这里把项目叫 UmmyShirouValeri ,名字是用我的命名输入法写出来的。

打开Nuget,搜索 win2d 安装

打开 MainPage.xaml ,添加命名xmlns:canvas="using:Microsoft.Graphics.Canvas.UI.Xaml"。在本文后面,我可能会使用xmlns:xaml="using:Microsoft.Graphics.Canvas.UI.Xaml" ,两个是相同的,因为本文我写了大概有半年,所以里面的代码有很多是不相同。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <Page
    x:Class="UmmyShirouValeri.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:UmmyShirouValeri"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:canvas="using:Microsoft.Graphics.Canvas.UI.Xaml"
    mc:Ignorable="d">

添加命名之后,如果需要显示win2d,那么需要使用控件显示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            <canvas:CanvasControl x:Name="canvas" ClearColor="Black"></canvas:CanvasControl>

先运行一下,可以看到如下图的界面。

一般可以按 F5 运行。如果觉得太早了,自己的代码还出现没有写好的,那么请按 ctrl+break 取消生成。

按下F5这时看起来什么没有,但是有了颜色,如果可以看到这个,那么程序是安装成功,如果错误,那么可能安装的包错误。

如果发现自己的包无法使用,那么请同时升级 Win2d 和 Microsoft.NETCore.UniversalWindowsPlatform 最新

添加文字

需要在 canvas 的 Draw 添加函数,可以在这里画出图案,文字,于是使用这句添加在 xaml ` 。在 MainPage.xaml.cs 写函数Canvas_OnDraw`

核心就是 Draw="Canvas_OnDraw" ,在 MainPage.xaml.cs 函数请看代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        private void Canvas_OnDraw(Microsoft.Graphics.Canvas.UI.Xaml.CanvasControl sender, Microsoft.Graphics.Canvas.UI.Xaml.CanvasDrawEventArgs args)
        {
            var draw = args.DrawingSession;
            draw.DrawText("lindexi",new Vector2(100,100),Color.FromArgb(0xFF,100,100,100));
        }

上面的代码在坐标(100,100)写出文字 “lindexi” ,设置了我也不知道的颜色。

在写文字就需要用到 args.DrawingSession 提供很多方法,可以在这些方法写文字的有两个,本文使用的是里面最简单的一个。

如果使用了 draw.DrawText ,这个方法提供的重载很多,方法提供很多参数,一般可以使用这个方法设置显示位置,显示颜色。

和上面同样功能,可以不使用Vector2,使用这个代码也是一样draw.DrawText("lindexi",100,100,Color.FromArgb(0xFF,100,100,100));

如果需要设置字体宽度,可以使用 CanvasTextFormat 来做。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            draw.DrawText("lindexi", 100, 100, 500, 50, Color.FromArgb(0xFF, 100, 100, 100), new CanvasTextFormat()
            {
                FontSize = 100
            });

需要告诉大家的是,上面的代码是为了让大家快速跑起来,很多细节都没有告诉大家。如 DrawingSession 的使用需要 using 。在设置字体宽度 new CanvasTextFormat 使用之后需要释放。

微软希望使用的清真方法请看代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            using (var canvasDrawingSession = args.DrawingSession)
            {
                var canvasTextFormat = new CanvasTextFormat { FontSize = 100 };

                using (canvasTextFormat)
                {
                    canvasDrawingSession.DrawText("林德熙", new Vector2(100,100), Color.FromArgb(0xA1, 100, 100, 100), canvasTextFormat);
                }
            }

清理

因为 win2d 不会自己清理,一般在页面切换,清理资源

打开 MainPage.xaml ,添加 Unloaded 的事件,这样在 Unloaded 事件可以清理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <Page
    x:Class="UmmyShirouValeri.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:UmmyShirouValeri"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:canvas="using:Microsoft.Graphics.Canvas.UI.Xaml"
    Unloaded="Page_OnUnloaded"
    mc:Ignorable="d">

打开 MainPage.xaml.cs ,在函数 Page_OnUnloaded 添加下面代码,就是把 Win2d 从视觉树移除

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        private void Page_OnUnloaded(object sender, RoutedEventArgs e)
        {
            canvas.RemoveFromVisualTree();
            canvas = null;
        }

需要记得,这个很重要

为何需要这样,参见:避免内存泄漏

这个标题不知道写什么

搞事,一定要

那么这是如何做的?

如果需要重新画,如何做?

想要让他重画,使用canvas.Invalidate(); 就会重新调用Canvas_OnDraw

在构造使用下面代码让win2d不停重画。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            DispatcherTimer t = new DispatcherTimer();
            t.Interval = new TimeSpan(1000);
            t.Tick += (s, e) =>
            {
                canvas.Invalidate();
            };
            t.Start();

这样就可以隔 1000 毫秒重画。需要知道使用这个方法是让大家可以用到之前的技能,有小伙伴告诉我,如果写一篇博客里面用到的都是大家默认的技能,那么很少有人可以看下去,所以我尽量使用大家都知道的技能来做。这里是告诉大家,如果想要触发 Draw 就需要调用 canvas.Invalidate(); 调用这个函数可以在不可控的一个时间触发Draw,所以无法稳定指定时间重画。在本文的后面会告诉大家如何做动画。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            private void Canvas_OnDraw(Microsoft.Graphics.Canvas.UI.Xaml.CanvasControl sender, Microsoft.Graphics.Canvas.UI.Xaml.CanvasDrawEventArgs args)
        {
            var draw = args.DrawingSession;
            draw.DrawText("lindexi", Ran.Next(10,100), Ran.Next(10, 100), 500, 50, Color.FromArgb(0xFF, 100, 100, 100), new CanvasTextFormat()
            {
                FontSize = 100
            });

            draw.DrawLine(Ran.Next(10,100),Ran.Next(10,100),Ran.Next(100,1000),Ran.Next(100,1000),Color.FromArgb(0xFF,25,100,100));
        }

        private Random Ran { set; get; } = new Random();

运行上面代码就可以看到上面的效果

是不是觉得还不好看,试试这个代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
         private void Canvas_OnDraw(Microsoft.Graphics.Canvas.UI.Xaml.CanvasControl sender, Microsoft.Graphics.Canvas.UI.Xaml.CanvasDrawEventArgs args)
        {
            var draw = args.DrawingSession;
            draw.DrawText("lindexi", Ran.Next(10, 100), Ran.Next(10, 100), 500, 50, r(), new CanvasTextFormat()
            {
                FontSize = 100
            });

            for (int i = 0; i < 10; i++)
            {
                draw.DrawLine(Ran.Next(10, 100), Ran.Next(10, 100), Ran.Next(100, 1000), Ran.Next(100, 1000), r());
            }

            Color r()
            {
                return Color.FromArgb(0xFF, rc(), rc(), rc());
            }

            byte rc()
            {
                return (byte)(Ran.NextDouble() * 255);
            }
        }

需要在vs2017 才可以跑,如果希望下载vs2017 ,可以到我网盘下载

链接:http://pan.baidu.com/s/1skXDc3z 密码:70d6

如果度盘链接没法使用,请联系我。

btsync:BTZR4YIPCLUUEL2BKDACVGLC3473MEWDN

如果需要使用 Win2d 使用动画,请看 win10 uwp win2d CanvasVirtualControl

如何画线

刚才已经代码有画线的,也许已经看见下面的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
draw.DrawLine(x1,y1,x2,y2,颜色)

除了可以设置线所在的地方,可以设置线条宽度、样式,因为很简单,所以这里就不需要多说了。

添加图片

添加图片可以draw.DrawImage 画出图片,之前需要有图片,需要的是CanvasBitmap,如何获得这个?

可以通过下面的三个方法拿到图片

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    CanvasBitmap.CreateFromBytes()
    CanvasBitmap.CreateFromColors()
    CanvasBitmap.LoadAsync()

注意:传入的ICanvasResourceCreator就是 CanvasControl

下面使用 LoadAsync 传入工程的图片,比较期望的方法是在 Canvas_OnCreateResources 事件里面加载图片。但是这里为了演示方便就直接在 Canvas_OnDrawAsync 创建图片。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            private void Canvas_OnDrawAsync(Microsoft.Graphics.Canvas.UI.Xaml.CanvasControl sender, Microsoft.Graphics.Canvas.UI.Xaml.CanvasDrawEventArgs args)
        {
            var draw = args.DrawingSession;
            // 这是文字
            draw.DrawText("lindexi", Ran.Next(10, 100), Ran.Next(10, 100), 500, 50, r(), new CanvasTextFormat()
            {
                FontSize = 100
            });

            for (int i = 0; i < 10; i++)
            {
                draw.DrawLine(Ran.Next(10, 100), Ran.Next(10, 100), Ran.Next(100, 1000), Ran.Next(100, 1000), r());
            }
            if (img != null)
            {
                draw.DrawImage(img, Ran.Next(10, 1000), rc());
            }
            else
            {
                // 这是危险写法,请看 [win10 uwp 异步转同步](https://lindexi.gitee.io/post/win10-uwp-%E5%BC%82%E6%AD%A5%E8%BD%AC%E5%90%8C%E6%AD%A5.html )
                Img().Wait();
            }

            Color r()
            {
                return Color.FromArgb(0xFF, rc(), rc(), rc());
            }

            byte rc()
            {
                return (byte)(Ran.NextDouble() * 255);
            }

            async Task Img()
            {
                // 加载图片
                img = await CanvasBitmap.LoadAsync(canvas, new Uri("ms-appx:///Assets/SplashScreen.png"));
            }
        }

创建图片使用img = await CanvasBitmap.LoadAsync(canvas, new Uri("ms-appx:///Assets/SplashScreen.png"));

创建使用的uri参见:win10 uwp 访问解决方案文件

创建资源

上面的代码大家看到了在 Draw 的时候才创建图片,这个写法是不清真。正规的写法是在 CreateResources 里面创建资源。

图片是一个资源,除了图片外还有其他很多资源。但是这里使用图片作为例子。

在 xaml 添加 CreateResources 事件,下面将会在解决方案获得两张图片。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        <xaml:CanvasControl x:Name="Canvas" ClearColor="Black" 
                            CreateResources="Canvas_OnCreateResources"
                            Draw="Canvas_OnDraw"></xaml:CanvasControl> 

在后台代码 Canvas_OnCreateResources 就可以用来创建资源。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        private void Canvas_OnCreateResources(CanvasControl sender, CanvasCreateResourcesEventArgs args)
        {
        }

从 CanvasCreateResourcesEventArgs 可以知道资源需要创建的原因,通过判断资源创建的原因决定是不是需要创建资源。如果判断是 FirstTime 那么就必须创建资源,因为这是第一次使用。

在创建资源完成之前是不会触发 Draw ,但是这里有一个坑,如果我创建资源需要异步读写,那么我如何阻塞这个函数,难道使用 wait?实际上在 args 有一个方法,使用 TrackAsyncAction 可以用来等待一个 Task ,在他完成之后调用 Draw 而不是使用 wait 。这样写的代码比较符合微软的希望。

为了拿到一个 Task 来异步读写,需要创建一个函数,请看代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        private void Canvas_OnCreateResources(CanvasControl sender, CanvasCreateResourcesEventArgs args)
        {
            args.TrackAsyncAction(CreateResourcesAsync(sender).AsAsyncAction());
        }

        private async Task CreateResourcesAsync(CanvasControl canvasControl)
        {
            _bitmap1 = await CanvasBitmap.LoadAsync(canvasControl, "Assets/1.png");
            _bitmap2 = await CanvasBitmap.LoadAsync(canvasControl, "Assets/2.png");
        }

        private CanvasBitmap _bitmap1;
        private CanvasBitmap _bitmap2;

上面的代码在大家的设备不一定能使用,原因是需要大家在 Assets 文件夹放两张图片,需要命名和我一样而且属性的生成是内容,这样才可以找到。

建议使用这个方法创建资源,在加载图片的时候使用这个方法,而不是上面的等待。

资源的创建会发生的另一个触发是丢失设备,关于丢失设备请看Win2D 官方文章系列翻译 - 处理设备丢失 - void² - 博客园

设置 win2d 背景

win2d 会忽略在 xaml 设置的背景,如果使用 Background = xx 的方法设置背景,会在 win2d 忽略

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        <xaml:CanvasControl x:Name="canvas" Background="Brown" Draw="Canvas_OnDraw"></xaml:CanvasControl>

上面的代码不会把win2d 的背景设置,因为 win2d 需要设置 ClearColor ,来画出背景

如果想把 win2d 的背景颜色设置为 白色,那么可以使用下面代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        <xaml:CanvasControl x:Name="canvas" ClearColor="White" Draw="Canvas_OnDraw"></xaml:CanvasControl>

如果在一次刷新需要设置 win2d 的颜色,那么可以使用 下面代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            sender.ClearColor = Colors.White;

关于 Alpha 请看 Win2D 官方文章系列翻译 - 预乘 Alpha - void² - 博客园

特效

现在的特效,越来越便宜,从原先的很贵的特效,到现在的不到一块钱。一个好的应用就需要多加一些特效。看到了这里,我准备告诉大家如何在 Win2d 使用特效。

所有的实现 IGraphicsEffectSource 都可以添加特效,而特效本身就实现 IGraphicsEffectSource ,如果需要复杂的图片可以堆特效来做。

本文只告诉大家如何使用特效,因为几乎所有的特效使用方法都差不多,就是输入位图,修改参数,输出修改后的位图。如果需要使用多个特效合在一起,就把前面特效输出的位图输入到第二个特效。通过连接多个特效就可以做出好看的图片。

具体 Win2d 有哪些特效而且这些特效需要如何使用,就请看鱼哥的知乎专栏,在下面的参见我添加了他的博客。

实际的特效不是只能在图片使用,而是在所有 IGraphicsEffectSource 上使用。

在开始准备之前,需要准备一些图片和文字作为资源用来后面创建资源。在前台添加 CreateResources 事件,请看代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        <xaml:CanvasControl x:Name="Canvas" ClearColor="Black" 
                            CreateResources="Canvas_OnCreateResources"
                            Draw="Canvas_OnDraw"></xaml:CanvasControl> 

在后台的事件读取图片资源

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        private void Canvas_OnDraw(CanvasControl sender, CanvasDrawEventArgs args)
        {
            
        }

        private void Canvas_OnCreateResources(CanvasControl sender, CanvasCreateResourcesEventArgs args)
        {
           // 在这里添加资源
        }

我随意找到两张好看的图片,把他放在 Assets 文件夹,所以下面的代码将会去读取这两个文件。需要注意两个文件都需要右击属性,选择生成是内容,不然使用下面的方式找不到。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        private void Canvas_OnCreateResources(CanvasControl sender, CanvasCreateResourcesEventArgs args)
        {
            args.TrackAsyncAction(CreateResourcesAsync(sender).AsAsyncAction());
        }

        private async Task CreateResourcesAsync(CanvasControl canvasControl)
        {
            _bitmap1 = await CanvasBitmap.LoadAsync(canvasControl, "Assets/1.png");
            _bitmap2 = await CanvasBitmap.LoadAsync(canvasControl, "Assets/2.jpg");
        }

        private CanvasBitmap _bitmap1;
        private CanvasBitmap _bitmap2;

因为现在不知道是否读取了图片,所以先把图片画出来试试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        private void Canvas_OnDraw(CanvasControl sender, CanvasDrawEventArgs args)
        {
            using (var canvasDrawingSession = args.DrawingSession)
            {
                canvasDrawingSession.DrawImage(_bitmap1);
            }
        }

如果运行一下可以看到图片,那么就是创建资源成功。

现在以 AlphaMaskEffect 作为例子告诉大家如何在位图添加特效

首先创建 AlphaMaskEffect ,然后传入图片,最后画出特效。

因为 AlphaMaskEffect 需要指定一个区域的 Alpha 值,让对应图片的对应区域显示,所以需要用到 CanvasCommandList 用来画出矩形区域

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        private void Canvas_OnDraw(CanvasControl sender, CanvasDrawEventArgs args)
        {
            var alphaMask = new CanvasCommandList(sender);

            using (var canvasDrawingSession = alphaMask.CreateDrawingSession())
            {
                canvasDrawingSession.FillRectangle(new Rect(10, 10, 200, 200), Color.FromArgb(100, 0, 0, 0));
            }

            var alphaMaskEffect = new AlphaMaskEffect
            {
                Source = _bitmap1,
                AlphaMask = alphaMask
            };

            using (var canvasDrawingSession = args.DrawingSession)
            {
                canvasDrawingSession.DrawImage(alphaMaskEffect);
            }
        }

现在运行程序,可以看到在(10,10),大小是(100,100)的矩形区域显示图片。在 Color.FromArgb 我写的是 Alpha 不是 0xFF 所以就没有完全显示图片

这时我可以叠加一张其他的图片,而且在第一张图片里面挖出文字,如下图,就是我使用下面代码写出来的。我用文字从一张图片挖去一块区域,让他显示,然后叠加到第二章图片。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        private void Canvas_OnDraw(CanvasControl sender, CanvasDrawEventArgs args)
        {
            var alphaMask = new CanvasCommandList(sender);

            var center = sender.Size.ToVector2() / 2;
            center.X -= 100;
            center.Y -= 100;

            using (var canvasDrawingSession = alphaMask.CreateDrawingSession())
            {
                var canvasTextFormat = new CanvasTextFormat {FontSize = 100};

                using (canvasTextFormat)
                {
                    canvasDrawingSession.DrawText("林德熙", center, Color.FromArgb(0xA1, 0, 0, 0), canvasTextFormat);
                }
            }

            var alphaMaskEffect = new AlphaMaskEffect
            {
                Source = _bitmap1,
                AlphaMask = alphaMask
            };

            using (var canvasDrawingSession = args.DrawingSession)
            {
                canvasDrawingSession.DrawImage(_bitmap2);
                canvasDrawingSession.DrawImage(alphaMaskEffect);
            }
        }

参见:第二章 画布渲染目标CanvasRenderTarget

第三章(介绍篇) 图像特效Effect

第三章(调整篇) 图像特效Effect

其他博客

鱼哥的 win2d 知乎专栏

void

win2d 画出好看的图形

win10 uwp 萤火虫效果

win2d 图片水印


本文会经常更新,请阅读原文: https://lindexi.gitee.io/lindexi/post/win10-uwp-win2d-%E5%85%A5%E9%97%A8-%E7%9C%8B%E8%BF%99%E4%B8%80%E7%AF%87%E5%B0%B1%E5%A4%9F%E4%BA%86.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
地理加权回归模型_arcgis栅格数据归一化0到1
实际上要说起来,GWR有专门的软件,叫做GWR,但是这个软件暂时我还没有用过,所以等我先学习一下,把他放到最后才说了,先用比较熟悉的,比如ArcGIS、比如R语言,这些来讲讲(还有一个我非常熟悉的软件是GEODA,可惜GEODA仅支持回归分析,不支持地理加权回归)。
全栈程序员站长
2022/11/10
1.6K0
地理加权回归模型_arcgis栅格数据归一化0到1
白话空间统计二十四:地理加权回归(一)
大家好,又见面了,我是你们的朋友全栈君。 二十四在人的生活中有举足轻重的地位,一年有二十四个节气,一天有二十四个小时。中国的正史称之为“二十四史”(有人说加清史就二十五了……但是正史这个词,出自清乾隆钦定二十四史,所以一直“正史”这个词,专指二十四史),白话空间统计写到现在,历时18个月,终于写到这个一元复始的二十四章了。
全栈程序员站长
2022/11/08
1.7K0
白话空间统计二十四:地理加权回归(一)
地理加权分析_地理加权回归中的拟合度
地理加权回归分析完成之后,与OLS不同的是会默认生成一张可视化图,像下面这张一样的:
全栈程序员站长
2022/11/08
1.7K0
地理加权分析_地理加权回归中的拟合度
gis地理加权回归步骤_地理加权回归权重
上一节我们讲了GLR广义线性回归,它是一种全局模型,可以构造出最佳描述研究区域中整体数据关系的方程。如果这些关系在研究区域中是一致的,则 GLR 回归方程可以对这些关系进行很好的建模。不过,当这些关系在研究区域的不同位置具有不同的表现形式时,回归方程在很大程度上为现有关系混合的平均值;如果这些关系表示两个极值,那么全局平均值将不能为任何一个极值构建出很好的模型。当解释变量表现出不稳定的关系(例如人口变量可能是研究中某些地区911呼叫量的重要影响因子,但在其他地区可能是较弱的影响因子,这就是不平稳的表现)时,全局模型通常会失效。
全栈程序员站长
2022/11/08
3.4K0
gis地理加权回归步骤_地理加权回归权重
地理加权回归简易总结
空间统计有别于经典统计学的两大特征:空间相关性和空间异质性,莫兰指数等可以用来量化空间相关性,那么地理加权回归,就可以用来量化空间异质性。
全栈程序员站长
2022/11/10
3.4K0
地理加权回归简易总结
ArcGIS与地理加权回归GWR【一】「建议收藏」
https://mp.weixin.qq.com/s/fMPYxO3G7ff2192ZQICN-A
全栈程序员站长
2022/11/08
1.4K0
ArcGIS与地理加权回归GWR【一】「建议收藏」
空间回归与地理加权_时空地理加权回归对样本量要求
大家好,又见面了,我是你们的朋友全栈君。 实际上,除了辅助表以外,GWR还会生成一份全要素的表。对回归的每一个样本都给出相应的信息,今天就来看看这些信息代表了什么内容。
全栈程序员站长
2022/11/09
1.3K0
空间回归与地理加权_时空地理加权回归对样本量要求
精准预测武汉房价!浙大GIS实验室提出osp-GNNWR模型:准确描述复杂空间过程和地理现象
浙江大学 GIS 重点实验室通过引入优化的空间邻近度指标并将其融入神经网络架构,提升了模型对房价预测的准确性。
HyperAI超神经
2024/06/17
3490
精准预测武汉房价!浙大GIS实验室提出osp-GNNWR模型:准确描述复杂空间过程和地理现象
ArcGIS软件下载,地理信息分析软件ArcGIS 10.8中文版下载安装
ArcGIS软件是一款广泛用于地理信息分析、数据可视化和空间决策制定的专业工具。本文将介绍ArcGIS软件的基本功能和使用方法,并结合具体案例分析ArcGIS在地理信息分析中的应用。
用户10413399
2023/04/13
1.8K0
空间回归与地理加权_地理加权显著性
本来这一章准备直接写(照抄)ArcGIS的帮助文档,写地理加权回归工具的使用……,然后就直接结束地理加权回归的,但是近来收到不少同学的邮件,很多都是掉在了当年虾神挖出的大坑里面,比如写了方法,没有列出公式,又比如写了公式木有推导过程(……作为高数战五渣的虾神,推导这种事,他认识我,我不认识他……)
全栈程序员站长
2022/11/08
1.7K0
空间回归与地理加权_地理加权显著性
白话空间统计二十四:地理加权回归(二)
橘生淮南则为橘,生于淮北则为枳,叶徒相似,其实味不同。所以然者何?水土异也。——《晏子春秋·内篇杂下》
全栈程序员站长
2022/11/10
1K0
白话空间统计二十四:地理加权回归(二)
优于五大先进模型,浙江大学杜震洪团队提出 GNNWLR 模型:提升成矿预测准确性
GNNWLR 集成了地理空间和神经网络,结合 Shapley 加性解释理论,不但能够大幅提升预测的准确性,并且能够在复杂的空间场景中提升矿物预测的可解释性。
HyperAI超神经
2024/04/12
1.1K0
优于五大先进模型,浙江大学杜震洪团队提出 GNNWLR 模型:提升成矿预测准确性
初步了解MGWR:多尺度地理加权回归的Python实现
在探索空间数据时,我们经常会遇到空间异质性这一概念。简而言之,空间异质性描述了某一属性或过程在空间上的不均匀分布。为了理解和建模这种异质性,地理加权回归(GWR)成为了一个强大的工具。但GWR有一个基本假设:所有被建模的过程都在同一空间尺度上运行。这在现实中并不总是成立,因此,多尺度GWR(MGWR)应运而生,放宽了这一假设。Python中的mgwr库为我们提供了实现这两种方法的工具。
renhai
2024/06/03
3K0
初步了解MGWR:多尺度地理加权回归的Python实现
空间回归与地理加权_地理加权回归处理点数据
大家好,又见面了,我是你们的朋友全栈君。 本章有数学公式……对数学过敏者慎入……
全栈程序员站长
2022/11/08
1.9K0
空间回归与地理加权_地理加权回归处理点数据
ArcGIS空间分析笔记(汤国安)
2.在ArcCatalog 目录树中,右键单击载入数据库的要素类或表,选择加载——加载数据,打开简单数据加载程序向导。
Twcat_tree
2022/11/28
3.9K0
【Python数据分析】房价预测:使用线性回归模型预测波士顿房价
文章链接:https://cloud.tencent.com/developer/article/2472976
小馒头学Python
2024/12/04
1.2K0
【Python数据分析】房价预测:使用线性回归模型预测波士顿房价
python数据分析——数据分析的数据模型
数据分析的数据模型是决策支持系统的重要组成部分,它通过对大量数据的收集、整理、分析和挖掘,为企业提供有价值的信息,以支持企业的战略规划和日常运营。数据模型的选择和应用,直接关系到数据分析的准确性和有效性,进而影响企业的决策质量和市场竞争力。
鲜于言悠
2024/03/20
5920
python数据分析——数据分析的数据模型
ArcGIS二次开发基础教程(09):叠加分析
缓冲区分析的概念及原理请查看帮助文档 http://desktop.arcgis.com/zh-cn/arcmap/latest/tools/analysis-toolbox/how-buffer-analysis-works.htm
全栈程序员站长
2022/09/15
1.2K0
结构方程模型 SEM 多元回归和模型诊断分析学生测试成绩数据与可视化
本文首先展示了如何将数据导入 R。然后,生成相关矩阵,然后进行两个预测变量回归分析。最后,展示了如何将矩阵输出为外部文件并将其用于回归。
拓端
2021/12/15
3.6K0
结构方程模型 SEM 多元回归和模型诊断分析学生测试成绩数据与可视化
相关性分析的五种方法有哪些_数据相关性分析
相关分析(Analysis of Correlation)是网站分析中经常使用的分析方法之一。通过对不同特征或数据间的关系进行分析,发现业务运营中的关键影响及驱动因素。并对业务的发展进行预测。本篇文章将介绍5种常用的分析方法。在开始介绍相关分析之前,需要特别说明的是相关关系不等于因果关系。
全栈程序员站长
2022/11/15
26.3K0
相关性分析的五种方法有哪些_数据相关性分析
推荐阅读
相关推荐
地理加权回归模型_arcgis栅格数据归一化0到1
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验