一、下载OSM数据

首先从OpenStreetMap官网下载我们需要的实验数据,这里我选择清华和北大校园作为本次实验数据

二、数据处理

将我们下载的实验数据导入ArcGIS。由于OSM数据是.osm格式,因此导入ArcGIS之前需要将其转换为.shp格式,具体方法见:关于openstreet map的osm文件转shp文件方法(附arcgis10.2插件)

可以看到,面状数据中除了建筑物之外还有植被、水体等。因此为了实现对建筑物的简化,我们需要将建筑物单独从面状数据中筛选出来。

打开面状数据的属性表,不难发现building字段可以反应每个面是否为建筑物。因此,我们打开Select by Attribute面板,buiding <>'' 找出buiding字段不为空的记录,再将这些记录导出就能得到只包含建筑物的面状数据了。

三、算法实验

建筑物简化:

ArcGIS 10.2的建筑物简化工具位于Toolboxes->Cartography Tools->Generalization->Simplify Building,但我们暂时还不能进行简化。

巨坑警告!在进行建筑物简化之前,请务必确认数据的参考坐标系和投影坐标系!ArcGIS 10.2似乎不能对 **没有投影坐标系的经纬度坐标(Decimal Degrees) **下的建筑进行简化,而下载的OSM数据一般是基于WGS-84坐标系,本身没有进行地图投影,因此没有投影坐标。如果直接使用经纬度进行建筑物简化可能得到错误结果(例如下图所有建筑物变成三角形,且与容差设置无关)

因此,建议先进行下面两个步骤:

1. 改变数据的坐标系。

打开Toolboxes->Data Management Tools->Projections and Transformation->Feature->Project 工具。

其中Input Coordinate System 选项可以看到当前数据的坐标系,如果仅仅只有参考坐标系则需要进行投影。Output Coordinate System选项代表我们将要变更到的坐标系,选择Projected Coordinate System中的一种投影坐标系就好,这里我选择了Mercator投影坐标系。

现在我们得到了一个Mercator投影的建筑物面状数据。

2. 改变Data Frame的坐标系

其实完成上一步,就已经可以正常进行建筑物简化了,只需要在Simplify Building工具中导入刚才得到数据,再Simplification Tolerance选项将单位改成Meters即可。(注意:必须使用有投影坐标系的数据,再改变这里的单位,否则也可能得到错误的简化结果)。

PS:虽然经过我的测试,只要数据是Project之后的,并且容差值合适(对于经纬度而言,例如0.001),即使容差单位选择Decimal degrees,也能得到正确的简化结果。不过鉴于建筑简化工具还有关于面积的Minimum Area等参数,不太推荐使用经纬度进行简化。

因此,为了便于对简化算法结果的量算和分析,最好是在菜单栏View-Data Frame Properties中更改数据框架显示的Coordinate System,这里我把他设置成Mercator投影。这样就能够在Measure工具中以米为单位量算距离和面积了。

现在就可以正常使用Simplify Building工具对我们的建筑物数据进行简化了,让我们看看使用10m作为容差的结果。接下来只要再对结果进行分析就能完成实验啦,这里就不作讨论了。

建筑物群聚合:

ArcGIS 10.2似乎并没有直接的建筑物群聚合工具,因此,要实现建筑物群简化我们需要借助聚合面工具。

首先,需要在菜单栏的Customize-Extensions中打开Spatial Analyst功能。

然后再工具箱中找到Toolboxes->Cartography Tools->Generalization->Aggregate Polygons工具,这就是我们需要的聚合面工具。

从ArcGIS官网上我们能够了解到每个参数和选项的含义,根据我们实验的情况选择使用合适的参数即可完成建筑物群的聚合。

参数 说明 数据类型
in_features 要聚合的面要素。如果这是一个引用某个制图表达的图层,并且在输入要素中存在形状覆盖,则在聚合处理中将采用这些覆盖的形状、而不是要素形状。 Feature Layer
out_feature_class 要创建的输出要素类。 Feature Class
aggregation_distance 聚合时面要素边界间要满足的距离。必须指定一个距离,且此距离必须大于零。可以选择首选单位;默认为要素单位。 Linear Unit
minimum_area(可选) 聚合面得以保留的最小面积。默认值为零,即保留所有面。可以指定首选单位;默认为要素单位。 Areal Unit
minimum_hole_size(可选) 面要素中的孔洞得以保留的最小大小。默认值为零,即保留所有面要素中的孔洞。可以指定首选单位;默认为要素单位。 Areal Unit
orthogonality_option(可选) 指定构造聚合边界时输出要素的特征。NON_ORTHOGONAL —将创建有机形状的输出要素。这适用于自然要素,例如,植被或土壤多边形。这是默认设置。ORTHOGONAL —将创建正交形状的输出要素。此选项适用于保留人为输入要素的几何特性,例如,建筑物轮廓线。 Boolean
barrier_features[barrier_features,...](可选) 包含在输入要素中作为聚合障碍的线要素或面要素的图层。要素不会跨障碍要素聚合。与输入要素存在几何冲突的障碍要素将被忽略。 Feature Layer
out_table(可选) 将聚合的面连接到其源面要素的一对多关系表。该表包含两个字段(OUTPUT_FID 和 INPUT_FID),分别用于存储聚合要素 ID 和其源要素 ID。使用此表根据源要素派生输出要素的必要属性。该表的默认名称为输出要素类名称加上 _tbl。默认路径与输出要素类相同。当该参数留空时,不创建任何表。 Table

最后,我们来看一下容差为30m的建筑物群聚合结果,然后对结果进行分析就好啦!

ArcGIS建筑物简化和建筑物群聚合算法实验的更多相关文章

  1. smoj2806建筑物

    题面 有R红色立方体,G绿色立方体和B蓝色立方体.每个立方体的边长是1.现在有一个N × N的木板,该板被划分成1×1个单元.现在要把所有的R+G+B个立方体都放在木板上.立方体必须放置在单元格内,单 ...

  2. ArcGIS空间分析工具

    1. 3D分析 1.1. 3D Features toolset 工具 工具 描述 3D Features toolset (3D 要素工具集) Add Z Information 添加 Z 信息 添 ...

  3. Java编程思想—八皇后问题(数组法、堆栈法)

    Java编程思想-八皇后问题(数组法.堆栈法) 实验题目:回溯法实验(八皇后问题) 实验目的: 实验要求: 实验内容: (1)问题描述 (2)实验步骤: 数组法: 堆栈法: 算法伪代码: 实验结果: ...

  4. 如何建立一个完整的游戏AI

    http://blog.friskit.me/2012/04/how-to-build-a-perfect-game-ai/ 人工智能(Artificial Intelligence)在游戏中使用已经 ...

  5. UVA 221 城市化地图(离散化思想)

    题意: 给出若干个栋楼俯视图的坐标和面积,求从俯视图的南面(可以视为正视图)看过去到底能看到多少栋楼. 输入第一个n说明有n栋楼,然后输入5个实数(注意是实数),分别是楼的左下角坐标(x,y), 然后 ...

  6. GIS和视频监控的集成

    本文讨论了使用增强现实(AR)技术的三维(3D)地理信息系统(GIS)和视频监视系统的集成.进行这种集成的动机是要克服常规视频监视系统面临的问题.关于哪个摄像机当前监视此类系统中哪个区域的明确信息:因 ...

  7. mapboxgl 中插值表达式的应用场景

    目录 一.前言 二.语法 三.对地图颜色进行拉伸渲染 1. 热力图 2. 轨迹图 2. 模型网格渲染 四.随着地图缩放对图形属性进行插值 五.interpolate的高阶用法 六.总结 一.前言 in ...

  8. UVa 221城市正视图(离散化)

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  9. HDU 5033 Building

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5033 解题报告:在一条x轴上有n个建筑物,每个建筑物有一个高度h,然后现在有q次查询,查询的内容是假设 ...

随机推荐

  1. Windows 8下完美使用Virtual PC 2007(virtual pc 2007 64 win8 兼容性)

    Windows 8下完美使用Virtual PC 2007(virtual pc 2007 64 win8 兼容性) 一.从微软的官方网站下载Virtual PC 2007 SP1英文版,文件名为se ...

  2. linux下串口测试程序

    通过简单的参数配置,执行文件+串口号+波特率 #include <stdio.h> #include <stdlib.h> #include <unistd.h> ...

  3. C++获取设备 PID,VID 信息

    可直接编译(设置成:使用多字节字符集) 转来的,代码: /* http://www.experts-exchange.com/Programming/Editors_IDEs/Q_24506125.h ...

  4. 为什么Java中不支持多重继承?

    我发现这个 Java 核心问题很难回答,因为你的答案可能不会让面试官满意,在大多数情况下,面试官正在寻找答案中的关键点,如果你提到这些关键点,面试官会很高兴.在 Java 中回答这种棘手问题的关键是准 ...

  5. struts2学习二:Tomcat的部署目录和访问路径问题

    1:idea中配置tomcat后,那么最终的web工程发布到哪里去了?为什么在访问路径中不加工程名就可以访问? 1.1:因为tomcat有段时间没接触了,先回顾下tomcat的目录结构吧? 如图所示: ...

  6. Flask-Script使用教程

    Flask使用第三方脚本 一个干净的项目准备: 一个干净的Flask项目连接地址: https://pan.baidu.com/s/123TyVXOFvh5P7V8MbyMfDg 话不多说,上菜: 1 ...

  7. 学习Apache(四)

    介绍 Apache HTTP 服务器被设计为一个功能强大,并且灵活的 web 服务器, 可以在很多平台与环境中工作.不同平台和不同的环境往往需要不同 的特性,或可能以不同的方式实现相同的特性最有效率. ...

  8. jdk代理和cglib代理源代码之我见

    以前值是读过一遍jdk和cglib的代理,时间长了,都忘记入口在哪里了,值是记得其中的一些重点了,今天写一篇博客,当作是笔记.和以前一样,关键代码,我会用红色标记出来. 首先,先列出我的jdk代理对象 ...

  9. read,readline,readlines的特点与区别

    1.read 读取全部文件 with open("test.text", "r",encoding='utf8') as f: print(f.read()) ...

  10. Django中的信号signals

    什么是信号? jango的信号机制就是事件驱动模型,一个事件可以被多个函数注册,当一个动作行为触发了这个事件后,这个事件所对应的函数便执行相应的操作; 内置信号; django 内部有些定义好的sig ...