【GIS教程】ArcGIS做日照分析(附练习数据下载)

news/2024/5/6 21:46:34

 我国对住宅日照标准的规定是:冬至日住宅底层日照不少于1小时或大寒日住宅层日照不少于2小时(通常以当地冬至日正午12时的太阳高度角作为依据)。因冬至日太阳高度角最低,照射范围最小,如果冬至日12:00建筑物底层能够接收到阳光,那么一年中其他天数就能接收到更多的太阳辐射。

        随着数字城市的建设,在大量的城市建筑数据支持下,应用GIS空间分析方法可以找出不符合建筑日照规范的建筑,为城市规划与设计提供有效的方法依据。

        小编通过12:00的日照情况来模拟该时刻的建筑物产生的阴影范围,如果在这时刻建筑物都没有被遮挡,则建筑间距满足日照要求,最后通过分析阴影与建筑物的空间叠加关系可以找出不符合日照标准的建筑物。

        我们用到的数据只有建筑物高度的矢量数据“Build”和小区数据“Community”,并且当地12:00太阳高度角为34.75197°。具体怎么求这个建筑物的日照阴影,看小编画的技术流程图啦!

图片

1.矢量转栅格

在Arcmap中处理阴影都是在栅格数据的基础上进行的,为此我们要把这个矢量数据转换成栅格数据。使用【转换工具】|【转为栅格】|【面转栅格】,【输出栅格】设置为“BuildR”。

图片

2.栅格重分类

现在要对刚才处理出来的栅格进行重分类,把旧值为“NoData”的像元值改成新值“0”,其他的不变。有的小伙伴可能不明白为什么要做这一步。在解释这个问题之前小编先说一下坡向计算的原理。

坡度计算是使用邻域分析,有多种计算方法,但是都涉及到模板,就是说计算某一个栅格的坡向,至少需要知道X轴和Y轴4个方向相邻像元的高程值。那么这里的建筑物边缘在后面的操作中也要计算坡向,但是边缘外面的值是“NoData”,这样无法计算建筑物的边缘,所以为了后续的坡向计算需要将“NoData”的像元值设置为0。

选择【Spatial Analyst 工具】|【重分类】|【重分类】工具,【输入栅格】选择“BuildR”,【值字段】选择“Value”,【输出栅格】设置为“reclass1”,如下图所示:

图片

图片

3.计算坡向

选择【Spatial Analyst工具】|【表面分析】|【坡向】工具,【输入栅格】选择“reclass1”,【输出栅格】设置为“aspect”,根据需要,设置其他参数,点击【确定】,生成坡向数据“aspect”,如下图所示:

图片

可以发现坡向都是在建筑物边缘,因为只有在边缘才有高度落差,才能形成坡向,其他同一水平面高度无法形成坡向。

4.提取建筑物的背光面轮廓

本次计算在12:00时刻太阳方位角在180°时建筑物的背光面轮廓,此时建筑物阴影应该是在0°—90°和270°—360°。

打开【Spatial Analyst 工具】|【地图代数】|【栅格计算器】,输入一个判断语句:

(("Aspect2">=0)&("Aspect2"<=90))|(("Aspect2">=270)&("Aspect2"<=360))

得到建筑物背光面轮廓“back12”,图中蓝色为轮廓,值为1。

图片

5.提取建筑物背光面的高度数据

由于栅格数据只能表示一种属性,而后面山体阴影分析需要的是高程数据,为此我们需要计算背光面的高度。已知前面的数据“reclass1”是表示高度的,而“back12”中背光面像元值为1,因此我们只要将两个相同位置的像元相乘即可的得到背光面像元的高度值。

打开【Spatial Analyst 工具】|【地图代数】|【栅格计算器】,输入:“reclass1”*“back12”,设置【输出栅格】为“DEM12”,这时候的背光面轮廓都有了高度属性。

图片

6.计算建筑物的阴影

我们要根据当地时间12:00太阳的方位角和高度角,以及背光面的高度计算建筑物的阴影。

打开【Spatial Analyst Tools】|【表面分析】|【山体阴影】工具,【输入栅格】选择“DEM12”,方位角:180(北半球当地时间12:00太阳方位角都是180°啦),高度:34.75197,选中【模拟阴影】,如果不选中的话就没有阴影出来,只有物体本身的阴阳面出现,【输出栅格】设置为“Shade12”,如下图所示:

图片

我们在结果图层的基础上叠加上建筑物的蓝色轮廓,我们可以发现有些建筑物轮廓里面有黑色的阴影,可以肯定该建筑物底层在12:00一定是无法接收到太阳照射的,不满足日照规范。

图片

在这里有的小伙伴就会想,为什么我不可以直接在“reclass1”这个建筑物高度数据上面做【山体阴影】?小编曾经也有这个疑惑,于是乎照着操作了一遍,得到的结果如下图所示:

图片

有什么不一样吗?眼尖的小伙伴一眼就识破。绝大多数的建筑物没有被阴影遮挡,这个是很正常的对吧?因为一部分的建筑物阴影会被后面楼层的向光面覆盖掉,而我们看到的图像是上帝视角,所以就觉得阴影缺失了一部分,只有极少部分由于建筑物太高,产生的阴影才可能会覆盖到后面建筑物的楼顶。

如下图所示:

图片

(小部分阴影会覆盖到其他建筑物屋顶)

图片

(大部分阴影被建筑物向光面遮挡)

由于图像显示的是上帝视角,垂直往下看的,这样看到的阴影没有覆盖住其他建筑物,就不好判断该建筑物是否被其他建筑物的阴影覆盖,是否符合日照标准。

由于阴影都是由建筑物的背光面遮挡太阳光线产生的,因此只要我们使用背光面来创建阴影即可,这样做有什么作用吗?有!这样背光面产生的阴影就不会因为有向光面而被残忍覆盖了,阴影就可以直接覆盖到建筑物的底层,叠加上建筑物就可以很容易判断其是否满足日照标准啦,如下图所示:

图片

7.判断阴影和建筑物的覆盖关系

此时我们需要将阴影栅格转换成矢量格式,在“Shade12”中,像元值为0的就是阴影,所以我们在属性表里面选中值为0的栅格,使用【转换工具】|【由栅格转出】|【栅格转面】,【输入数据】设置为“Shade12”,【字段】选择“Value”,选中简化面,输出文件名为“Mshade”,结果图层如下所示:

图片

接下来我们要查询不符合日照标准的建筑物了。选择菜单栏里面的选择选项卡,在下拉选项卡中点击【按位置选择】工具,选择方法设置为“从以下图层中选择要素”,目标图层勾选为建筑物矢量数据“Build”,源图层选择“Mshade”,空间选择方法为“目标图层要素的质心在源图层要素内”,为什么选择这个呢?因为根据这两个图层的空间关系来看,建筑物矢量数据都和它的阴影相交。

有的小伙伴又会问,为什么都相交?不应该是阴影和建筑物边界相邻吗?我第一感觉也是这样的,但是我看到建筑物的栅格数据“BuildR”时,发现矢量边界线一部分和建筑物边界外面的像元相交了,这说明阴影计算的结果阴影栅格中一定会有和建筑物边界线相交的像元,如下图所示:

图片

(黄色为建筑物栅格,蓝色线是建筑物矢量边框)

图片

(黑色为阴影栅格,蓝色线是建筑物矢量边框)

综上所述,只能选择建筑物的质心是否在阴影上面来判断其是否是不符合日照标准的建筑物咯,最后点击确定。

这时候我们可以看到“Build”中有一部分建筑物高亮显示,我们把选中的建筑物右键导出来,然后叠加到建筑物数据“Build”和小区上面进行符号化,最终结果如下图所示:

图片

如果有小伙伴准备买房的哈,对采光条件比较有要求的,可以自己做一个这样的日照分析,拿着这个图去挑房绝对不会吃亏哦!


http://www.mrgr.cn/p/78185144

相关文章

Golang | Leetcode Golang题解之第42题接雨水

题目&#xff1a; 题解: func trap(height []int) (ans int) {n : len(height)if n 0 {return}leftMax : make([]int, n)leftMax[0] height[0]for i : 1; i < n; i {leftMax[i] max(leftMax[i-1], height[i])}rightMax : make([]int, n)rightMax[n-1] height[n-1]for i…

详解MySQL C API 相关接口(大白话就是:MySQL的c语言怎么写)

文章目录 1、C API 官方文档2、初始化 MYSQL3、连接 MySQL设置连接字符集&#xff08;使得客户端编码方式匹配&#xff09; 4、下发 mysql 指令5、获取 mysql 查询结果(保存起来)获取行与列遍历存储结果 6、释放 MYSQL\_RES 对象7、关闭 MySQL 连接8、总结 1、C API 官方文档 …

vue3 删除对象中的属性,可以使用js里的delete,但需注意ts定义对象类型!

如上如&#xff0c;当使用delete 删除stateData中的属性时&#xff0c; 报错&#xff0c;意思为 TypeScript 错误“‘delete’ 运算符的操作数必须是可选的 什么原因呢&#xff1f;是因为我偷懒 缺少了ts定义类型 方法一&#xff1a; &#xff08;不推荐&#xff09; delete …

嵌入式笔记4.1 GPIO 功能复用

目录一、了解 MCU(GPIO)具有的所有复用功能通过查看 MCU 的数据手册可以知道 MCU 的所有引脚的功能:例 STM32L431:例 stm32f103:复用、重映射、多路复用(多功能引脚)GPIO复用(AF - Alternate Function)重映射(Remapping)多路复用(Multi-function)常见引脚功能一览…

【八股】Redisson分布式锁

Redisson分布式锁 主要了解了Redisson分布式锁实现的三个功能&#xff1a; 1.可重入 -> 防止死锁 2.可重试&#xff08;i.e. 非阻塞获取锁&#xff09; 3.自动续约 1. 可重入 原理&#xff1a; 利用Redis的Hash结构&#xff0c;记录了使用当前锁的线程id和重用次数&#…

如何分析和优化慢sql语句

前言 sql查询速度比较慢容易成为性能瓶颈,这时我们可以优化我们的sql语句或数据库表 一般sql语句执行很慢的种类分为: 1.聚合查询 2.多表查询 3.表数据量过大查询 4.深度分页查询 这四种的前三种都可以通过优化sql语句来优化sql查询速度 正文 聚合查询 我们可以通过尝…

初始C++

1. C关键字(C98) C总计63个关键字&#xff0c; C语言32个关键字 ps&#xff1a;下面我们只是看一下C有多少关键字&#xff0c;不对关键字进行具体的讲解。后面我们学到以后再 细讲。 2. 命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;…

ps/lr如何为一个型号相机的raw使用其他相机的预设

首先单独下载camera raw,进到C:\ProgramData\Adobe\CameraRaw\CameraProfiles\Camera中获取想要的相机型号的预设dcp文件 去 https://liquidtelecom.dl.sourceforge.net/project/dcptool/dcptool/dcpTool V1.11.0/dcpTool_1_11_0.zip?viasf=1 下载dcp编译工具dcpTool cd C:\U…

Oracle 21 C 安装详细操作手册,并配置客户端连接

Oracle 21 C 安装详细操作手册 Win 11 Oracle 21C 下载&#xff1a; Database Software Downloads | Oracle 中国 云盘共享 链接&#xff1a;https://pan.baidu.com/s/12XCilnFYyLFnSVoU_ShaSA 提取码&#xff1a;nfwc Oracle 21C 配置与登陆&#xff1a; 开始菜单 NetMa…

一文速览Llama 3及其微调:如何通过paper-review数据集微调Llama3 8B

前言 4.19日凌晨正准备睡觉时&#xff0c;突然审稿项目组的文弱同学说&#xff1a;Meta发布Llama 3系列大语言模型了 一查&#xff0c;还真是 本文以大模型开发者的视角&#xff0c;基于Meta官方博客的介绍&#xff1a;Introducing Meta Llama 3: The most capable openly a…

记录收集博客园美化代码

记录了一些好看实用的博客园美化主题🌃 初始微改版预览页面点击查看代码 /* 全局字体设定 */ #cnblogs_post_body {font-family: Roboto, sans-serif;color: #333; /* 增强字体颜色对比度,提高可读性 */ }/* 一级标题 */ #cnblogs_post_body h1 {font-size: 30px;font-weigh…

spring-boot学习记录

💭 记录spring-boot学习过程🕐 学习参考网站 1天搞定SpringBoot+Vue全栈开发-bilibili🕐 准备 🕑 项目热部署 视频中的idea版本较老,热部署实现参考IDEA2021 热部署-知乎 🕑 修改默认端口 在 src/main/resources/application.properties 文件中添加 server.port=80�…

Python学习从0开始——项目一day02数据库连接

Python学习从0开始——项目一day02数据库连接 一、在线云数据库二、测试数据库连接三、数据库驱动介绍四、SQL执行4.1插入测试数据4.2安装数据库连接模块4.3测试SQL语句执行4.4执行SQL的固定步骤及示例 一、在线云数据库 找了一个在线数据库&#xff0c;需要邮箱注册&#xff…

C语言结课实战项目_贪吃蛇小游戏

✨✨所属专栏&#xff1a;C语言✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ 游戏源代码链接&#xff1a;function/贪吃蛇 钦某/c-language-learning - 码云 - 开源中国 (gitee.com) 最终实现效果&#xff1a; 实现基本的功能&#xff1a; void set_pos(short x, short y);//定位光…

需求 分析

需求分析的任务 需求分析的任务 1、需求分析是软件定义时期的最后一个阶段&#xff0c;它的基本任务是准确地回答“系统必须做什么?”这个问题。 2、确定系统必须完成哪些工作&#xff0c;也就是对目标系统提出完整、准确、清晰、具体的要求。 3、系统分析员应该写出软件需求…

世强硬创获昕感科技授权代理,SiC MOSFET实现超低导通电阻

近日&#xff0c;世强先进&#xff08;深圳&#xff09;科技股份有限公司&#xff08;下称“世强先进”&#xff09;获北京昕感科技有限责任公司&#xff08;下称“昕感科技”&#xff0c;英文名&#xff1a;NEXIC&#xff09;授权代理&#xff0c;为光伏、储能、电网、新能源汽…

一文搞懂“对账系统”

对于每天都需要对账的生意来讲,如果遇上大的额数,就会出现困难,为了提升核对效率以及准确性,对账系统有一定的改变是避免不了的,下面是笔者整理的关于“对账系统”的内容分享,想要了解相关内容的可以接着继续往下了解了解哦!账目核算是财务工作的必要部分,随着线上交易…

UE4纯C++实现游戏快捷栏之将快捷栏注册到玩家状态

我们有了UI有了物品信息,接下来我们便需要给每一个玩家绑定一个快捷栏了,我们分以下几部分来实现我们玩家的快捷栏。1.Types.h struct ShortcutContainer:我们定义快捷栏的单个容器结构体,其内部存储玩家所引用的快捷栏的单个格子的信息数据基础的,我们将在结构体中保存{单…

个人博客系统的设计与实现

https://download.csdn.net/download/liuhaikang/89222885http://点击下载源码和论文 本 科 毕 业 设 计&#xff08;论文&#xff09; 题 目&#xff1a;个人博客系统的设计与实现 专题题目&#xff1a; 本 科 毕 业 设 计&#xff08;论文&#xff09;任 务 书 题 …

buuctf-pwn-1.test_your_nc

简单题,知道nc怎么用就好 基本用法 nc 地址 端口号 地址可以是一个域名,也可以是ip地址,地址和端口中间不是:,而是一个空格 连接上之后直接ls就看到flag文件了,cat flag查看flag文件的内容获取flag 注意windows上的nc需要下载,linux上一般会自带flag{c41a6f35-bb45-4c01…