精华内容
下载资源
问答
  • 【ArcGIS|空间分析】栅格数据缓冲区分析-学校选址

    万次阅读 多人点赞 2018-10-11 11:50:18
    空间分析方法:栅格数据距离制图、成本距离加权、数据重分类、多层面合并 工具:欧氏距离、坡度、重分类、栅格计算器 文章目录1、实验目的2、实验准备2.1数据2.2软件3、技术路线4、实验内容及步骤4.1新学校选址要求...

    空间分析方法:栅格数据距离制图、成本距离加权、数据重分类、多层面合并
    工具:欧氏距离、坡度、重分类、栅格计算器

    1、实验目的

    1、 ArcGIS中实现学校选址分析,首先利用现有学校数据集、现有娱乐场所数据集和高程数据派生出坡度数据以及到现有学校、娱乐场所的距离数据集。然后重分类数据集到相同的等级范围,再按照上述数据集在学校选址中的影响率赋权重值,最后合并这些数据即可创建显示新学校适宜位置分布的地图。
    2、通过练习,熟悉ArcGIS栅格数据距离制图、成本距离加权、数据重分类、多层面合并等空间分析功能;
    3、熟练掌握利用ArcGIS空间分析功能,解决相关的地学空间分析问题,如学校选址等实际用问题。

    2、实验准备

    2.1数据

    1、 Landuse (土地利用数据)。
    2、 dem (地面高程数据)。
    3、rec_sites (娱乐场所分布数据)。
    4、 school (现有学校分布数据)。

    2.2软件

    ArcGIS Desktop 10.5

    3、技术路线

    在这里插入图片描述

    4、实验内容及步骤

    4.1新学校选址要求

    1、新学校应位于地势较平坦处。
    2、新学校的建立应结合现有土地利用类型综合考虑,选择成本不高的区域。
    3、新学校应该与现有娱乐设施相配套,学校距离这些设施愈近愈好。
    4、新学校应避开现有学校,合理布局。

    4.2数据准备

    4.2.1 高程数据(dem)

    在这里插入图片描述

    4.2.2 土地利用数据(landuse)

    在这里插入图片描述

    4.2.3 现有学校数据(school)

    在这里插入图片描述

    4.2.4 娱乐场所数据(rec_sites)

    在这里插入图片描述

    4.3派生数据集

    4.3.1 坡度数据

    1、原理:利用坡度工具将dem数据派生坡度数据。
    坡度工具作用:判断栅格表面的各像元中的坡度(梯度或 z 值的最大变化率)。
    2、过程:【ArcToolbox】>【Spatial Analyst】>【表面分析】>【坡度】。
    3、结果:
    在这里插入图片描述

    4.3.2 学校距离数据集

    1、原理:利用欧氏距离工具将现有学校数据派生学校距离数据集。
    欧氏距离工具作用:计算每个像元到最近源的欧氏距离。
    2、过程:【ArcToolbox】>【Spatial Analyst】>【距离】>【欧氏距离】。
    3、结果:
    在这里插入图片描述

    4.3.3 娱乐场所数据集

    1、原理:利用欧氏距离工具将娱乐场所数据派生娱乐场所数据集。
    2、过程:【ArcToolbox】>【Spatial Analyst】>【距离】>【欧氏距离】。
    3、结果:
    在这里插入图片描述

    4.4重分类各种数据集

    4.4.1 坡度数据重分类

    1、原理:学校的位置在平坦地区比较有利,按等间距分类原则分为1到10级,级数越高适宜性越好,最平坦的地方适宜性最好赋值10,最陡峭的地区赋值1。
    2、过程:【ArcToolbox】>【Spatial Analyst】>【重分类】>【重分类】>对新值取反
    3、结果:
    在这里插入图片描述

    4.4.2 学校距离数据集重分类

    1、原理:按等间距分类原则分为1到10级,级数越高适宜性越好,新学校距离现有最远的单元赋值10,距离最近的单元赋值1。
    2、过程:【ArcToolbox】>【Spatial Analyst】>【重分类】>【重分类】
    3、结果:
    在这里插入图片描述

    4.4.3 娱乐场所数据集重分类

    1、原理:按等间距分类原则分为1到10级,级数越高适宜性越好,距离娱乐场所最近适宜性最高,赋值10;距离最远的地方赋值1。
    2、过程:【ArcToolbox】>【Spatial Analyst】>【重分类】>【重分类】>对新值取反
    3、结果:
    在这里插入图片描述

    4.4.4 土地利用数据重分类

    1、原理:各种土地利用类型对学校适宜性也存在一定的影响。如在有湿地wetland、水体water和草地grass分布区建学校的适宜性极差,于是在重分类时删除这三个选项。
    2、过程:【ArcToolbox】>【Spatial Analyst】>【重分类】>【重分类】>删除wetland、water和grass三个条目>选择【将缺失值设为NoData】。
    3、结果:
    在这里插入图片描述

    4.5 给各数据集赋权重

    1、原理:在适宜性模型中对影响较大的数据集赋较高权重,最后合并各数据集合确定适宜位置。各数据层权重比为:距离娱乐设施占0.5,距离现有学校占0.25,土地利用类型和地势位置因素各占0.125。
    2、过程:【ArcToolbox】>【Spatial Analyst】>【地图代数】>【栅格计算器】>输入表达式
    suit(最终适宜性)=rec_sites20.5+rec_school0.25+rec_landuse0.125+rec_slope0.125
    suitbest(最佳选址区域)=con(suit>=8,1,0)
    3、结果:
    在这里插入图片描述

    4.6使用Model Builder建立空间模型

    4.6.1 将学校选址分析数据派生与数据重分类的工具放入模型中。
    4.6.2 分别在模型的工具中添加数据和设置参数,并且将工具按顺序连接起来。
    4.6.3 运行模型。
    在这里插入图片描述
    4.6.4 建模结果。
    在这里插入图片描述

    展开全文
  • 上两篇文章介绍了如何使用Geotrellis进行矢量数据栅格化以及栅格渲染,本文主要介绍栅格化过程中常用到的缓冲区分析以及同一范围内的多种类型要素栅格化。 本文主要记录今天过程中碰到的两个问题,第一个问题就是...

    目录

    1. 前言
    2. 缓冲区分析
    3. 多种类型要素栅格化
    4. 总结
    5. 参考链接

    一、前言

           上两篇文章介绍了如何使用Geotrellis进行矢量数据栅格化以及栅格渲染,本文主要介绍栅格化过程中常用到的缓冲区分析以及同一范围内的多种类型要素栅格化。

           本文主要记录今天过程中碰到的两个问题,第一个问题就是线状要素在进行栅格化的时候只有单个像素,看不出应有的效果;第二个问题就是同一地区的数据既包含面状要素,又包含了线状要素,普通方式只能栅格化成两套数据。下面我为大家介绍解决这两个问题的方法(当然若有人有更好的方法,欢迎交流)。

    二、缓冲区分析

           缓冲区分析在百度百科中的定义为:

    缓冲区分析是指以点、线、面实体为基础,自动建立其周围一定宽度范围内的缓冲区多边形图层,然后建立该图层与目标图层的叠加,进行分析而得到所需结果。它是用来解决邻近度问题的空间分析工具之一。邻近度描述了地理空间中两个地物距离相近的程度。

           当然本文并不是教大家如何解决邻近度问题,只是简单的说明如何能够在栅格化的过程中将线状要素能够多外扩几个像素。

    自己实现外扩像素

           由于本人非地理信息专业出身(甚至非计算机专业出身,没办法,置身码农把青春卖!)所以在遇到问题的时候并不懂什么缓冲区分析的高大上的词汇。首先想到的是我可以在矢量化的过程中外扩几个像素,这样不就实现了增强的效果,但是有个问题就是我如何知道线段的方向,先将就着来,我把线段点上下左右的像素全部赋予与改点相同的值,这样可以不用考虑方向,并且应该能达到效果。
           说干就干,再一次认真研读GeotrellisReasterizer.scala的源代码,冥思苦想一阵之后,想到了方法,主要是要重写赋值的方法,实现代码如下:

    def rasterize(geom: Geometry, rasterExtent: RasterExtent, value: Int) ={
          val cols = rasterExtent.cols
          val array = Array.ofDim[Int](rasterExtent.cols * rasterExtent.rows).fill(NODATA)
          val f = (col: Int, row: Int) => {
            array(row * cols + col) = value
            if (col > 0)
              array(row * cols + col - 1) = value
            if (col < cols - 1)
              array(row * cols + col + 1) = value
            if (row > 0)
              array((row - 1) * cols + col) = value
            if (row < rasterExtent.rows - 1)
              array((row + 1) * cols + col) = value
          }
          Rasterizer.foreachCellByGeometry(geom, rasterExtent)(f)
          ArrayTile(array, rasterExtent.cols, rasterExtent.rows)
        }

    简单说来就是之前f函数中只有array(row * cols + col) = value一条语句,即实现当前点的像素点赋值,那么加上了判断不是边界之后,给上下左右的像素点都赋值即可实现,运行起来。

           得到的结果虽然看起来有点丑,但是总算解决了这个问题,然后把结果拿给老板看,老板什么话也没说,默默的甩给我https://gitter.im/geotrellis/geotrellis/archives/2016/02/22这么一个网址。好吧,老板果然是老板,这里也要介绍一下https://gitter.im/geotrellis/geotrellis/,这是Github中的Geotrellis项目交流群,在里面咨询问题,会有懂的人甚至作者解答,有点考验英语基础。

    使用buffer函数

           在那个网页中,上来就有这么一段代码:

    val points = Seq(
      Point(re.gridToMap(100,100)).buffer(30),
      Point(re.gridToMap(200,200)).buffer(30),
      Point(re.gridToMap(300,300)).buffer(30),
      Point(re.gridToMap(400,400)).buffer(30),
      Point(re.gridToMap(500,500)).buffer(30)
    )

           根据这段代码尤其是buffer名称,可以知道其实在Geotrellis中缓冲区分析就是使对象调用buffer函数即可,参数表示缓冲的距离。赶紧拿来试验,非常成功,但是这里面却有几个需要注意的问题。

    1. 缓冲距离

           此处的缓冲距离经过实际测试发现与当前数据的坐标系相一致,即如果是WGS84地理坐标系,那么此处缓冲距离就是以经纬度为单位,大地坐标系此处就是以米为单位。

    1. 缓冲类型

           一般情况下只需要给点、线要素使用缓冲即可,这里就可以使用模式匹配,如下:

    val geom = WKT.read(pro.getValue.toString) match {
                    case geom: Point        =>    geom.buffer(bufferDistance)
                    case geom: Line         =>    geom.buffer(bufferDistance)
                    case geom: MultiLine    =>    geom.buffer(bufferDistance).toGeometry().get
                    case geom               =>    geom
                  }

           这里就仅为PointLine以及MultiLine类型进行了缓冲区设置,其他需要转换的可以用同样的方式进行匹配,展示一下最终的效果。

    缓冲区分析

           其实查看buffer函数的定义,不难发现该函数实现的就是将要点线要素转换成了面要素。

           以上就实现了缓冲区分析,下面进行下一个主题多种类型要素栅格化。

    三、多种类型要素栅格化

           同一个区域数据即包含面状要素又包含线状要素,显然在shape文件中以及数据库中我们都没有办法将其进行合并,而如果我们又不想得到两套栅格化的数据该如何是好呢?

           其实方法也很简单,只需要将要素拼接到同一个GeometryCollection中然后统一获取其RasterExtent即可,实现代码如下:

    val features = mutable.ListBuffer[Geometry]()
        for (path <- paths) {
          val file = new File(path)
          if(file.exists()) {
            val shpDataStore = new ShapefileDataStore(new File(path).toURI().toURL())
            shpDataStore.setCharset(Charset.forName(charset))
            val featureSource = shpDataStore.getFeatureSource()
            val itertor = featureSource.getFeatures().features()
            while (itertor.hasNext()) {
              val feature = itertor.next()
    
              val p = feature.getProperties()
              val it = p.iterator()
    
              while (it.hasNext()) {
                val pro = it.next()
                if (pro.getName.getLocalPart.equals("the_geom")) {//get all geom from shp
                  val geom = WKT.read(pro.getValue.toString) match {
                    case geom: Point        =>    geom.buffer(resolution * bufferDistance)
                    case geom: Line         =>    geom.buffer(resolution * bufferDistance)
                    case geom: MultiLine    =>    geom.buffer(resolution * bufferDistance).toGeometry().get //0.0054932 * 7
                    case geom               =>    geom
                  }
                  features += geom
                }
              }
            }
            itertor.close()
            shpDataStore.dispose()
          } else
            println(s"the file ${path} isn't exist")
        }

           以上代码实现的是逐个循环需要栅格化的文件,然后将每个geometry对象添加到features中,剩下的在前面的文章中已经介绍过,不再赘述。

    四、总结

           以上讲述了如何进行缓冲区分析以及多种类型要素栅格化。虽然实现方法比较较难,但是在刚碰到这些问题的时候确实会让人摸不着头脑,本文简单记录之,仅为整理思路以及方便以后使用,如果能够帮助到一些苦苦探索的人当然是更好的。最后感谢在工作过程中给予了重大帮助和指导的吴老板!

    五、参考链接

    一、geotrellis使用初探
    二、geotrellis使用(二)geotrellis-chatta-demo以及geotrellis框架数据读取方式初探
    三、geotrellis使用(三)geotrellis数据处理过程分析
    四、geotrellis使用(四)geotrellis数据处理部分细节
    五、geotrellis使用(五)使用scala操作Accumulo
    六、geotrellis使用(六)Scala并发(并行)编程
    七、geotrellis使用(七)记录一次惨痛的bug调试经历以及求DEM坡度实践
    八、geotrellis使用(八)矢量数据栅格化
    九、geotrellis使用(九)使用geotrellis进行栅格渲染
    十、geotrellis使用(十)缓冲区分析以及多种类型要素栅格化

    转载于:https://www.cnblogs.com/shoufengwei/p/5605399.html

    展开全文
  • 提出一种应用在3维数字地球中的通过图形处理器(GPU)快速实现矢量数据缓冲区分析的算法。使用一张4通道的纹理图作为容器将地理实体的矢量数据传人GPU,利用GPU的高效并行特性,将目标缓冲区纹理中的每个像素所对应的...
  • 文章目录叠置分析(overlay processing)问题背景传统的叠置分析--透图法叠置分析矢量数据的叠加分析点+多边形叠置线+多边形叠置多边形+多边形叠置栅格数据的叠加分析空间逻辑运算数学运算复合法缓冲区分析(buffer ...

    在知识传播途中,向涉及到的相关著作权人谨致谢意!


    【空间分析】

    1. 是从空间数据中获取有关地理对象的空间位置、分布、形态、形成和演变等信息的分析技术
    2. 是地理信息系统的核心功能之一
    3. 是地理信息系统区别于一般管理信息系统的主要功能特征

    【GIS基本空间分析】

    1. 是在空间分析的研究和实践中,总结、提炼出来的在应用领域具有一定普遍意义的、涉及空间位置的、具有一定的通用性质分析手段和方法。
    2. 是进一步掌握复杂空间分析方法的重要基础

    【分类】统计分析、DEM分析、路径分析、叠置分析、缓冲区分析、网络分析

    1 叠置分析(overlay processing)

    又名,【复合分析】或者【叠加分析】

    1.1 问题背景

    【地学多因子分析的需要】

    1. 把问题分解开
      地理对象的本质是整体的,但是,为了研究工作的需要,经常将其分解为多因子分别研究(如自然地理要素分解为地质、地貌、水文、气象、生物、土壤等)
    2. 【多因子】综合考虑
      在研究实际问题的时候,又需要将它们综合为一个具体目标的整体范畴。即:从多因子地学问题到综合地学问题
      这是地学分析的基本方法,也是亟待解决的技术难题

    这个结合多因子的,综合考虑的过程,就叫做【叠置、复合、叠加、overlay】

    1.2 传统的叠置分析–透图法

    在这里插入图片描述

    【透图法】

    1. 将一个因子的一幅图,放在桌子上
    2. 将另一个因子的一幅图,盖在上面
    3. 再在上面放一张白纸
    4. 在桌子下面开灯
    5. 在白纸上将符合的图版临摹出

    【存在的问题】

    1. 对超多层面的复合难以实现
    2. 对超多图斑的复合分析难以实现
    3. 对复杂分析模型复合分析难以实现

    1.3 叠置分析

    【叠置分析】

    1. 是将有关主题层组成的各个数据层面进行叠置产生一个新的数据层面
    2. 提取空间隐含信息的方法之一,是指将不同幅或不同数据层的数据叠置在一起,在叠置地图的相应位置上产生新的属性的分析方法。其中,被叠加的要素层面必须是基于相同坐标系统的、基准面相同的、同一区域的数据

    【作用】

    1. 其结果综合了原来两个或多个层面要素所具有的属性,同时叠置分析不仅生成了新的空间关系,而且还将输入的多个数据层的属性联系起来产生了新的属性关系

    【条件】

    1. 参加叠置分析的不同数据层面所对应的地面范围必须是一致的
    2. 参与叠置分析的多层面分析数据必须有效匹配
    3. 叠置分析的分析模型与分析数据必须有效匹配
    4. 需了解叠置分析产生的误差与不确定性特征,并有相应的解决方案

    1.3.1 矢量数据的叠加分析

    类型 说明 作用
    点与多边形叠置 指一个点图层与一个多边形图层相叠 将一个图层的属性信息注入到另一个图层中,更新得到新的数据图层
    线与多边形 线与多边形叠加 通常将多边形的属性注入另一个图层中,然后更新得到数据图层
    多边形叠置 两个或多个多边形图层进行叠加 新图层的多边形是原来各图层多边形相交分割的结果,每个多边形的属性含有原图各个多边形的所有属性数据

    在这里插入图片描述

    点+多边形叠置

    【定义】

    1. 指一个点图层与一个多边形图层相叠
    2. 叠置分析的【结果】:往往是将其中一个图层的属性信息注入到另一个图层中,然后更新得到的数据图层;基于新数据图层,通过属性直接获得点与多边形叠加所需要的信息

    【过程】

    1. 计算 【多边形对点的包含关系】
      矢量结构的GIS能够通过计算每个点相对于多边形线段的位置,进行点是否在一个多边形中的空间关系判断
    2. 进行属性信息处理
      • 方法一:将多边形属性信息叠加到其中的点上
        在这里插入图片描述
      • 方法二:点的属性叠加到多边形上,用于标识该多边形

    【作用】可以查询每个多边形里有多少个点,以及落入各多边形内部的点的属性信息

    线+多边形叠置

    【与点+多边形叠置相比】

    1. 类似:用线图层叠置在多边形图层上,确定一条线落在哪个多边形内
    2. 不同的是:线具有长度,可能被多边形分割

    在这里插入图片描述

    多边形+多边形叠置

    【定义】是将两个或多个多边形叠加,产生一个新的多边形

    在这里插入图片描述

    【类型】
    在这里插入图片描述

    【问题】产生了不确定的碎屑多边形

    1. 不确定性,是一种误差–>和我们预想的不一样
    2. 要经过处理才能符合我们的目标–>矢量数据叠置分析的难题
    3. 而且这种情况是很常见的:每个人矢量化的边界不同
      在这里插入图片描述

    【问题改善】在做这项工作之前做顶层设计–>如果是遇到公共的边界–>要一家先数字化–>后面的人以第一家的基准来数字化–>才能适当的解决这个问题

    1.3.2 栅格数据的叠加分析

    【栅格数据的叠加分析】

    1. 与多边形叠置分析一样,是求两组或两组以上空间图形的交集
    2. 但是多边形叠置分析得到的是合成多边形,而栅格叠置分析得到的是合成数据串
    3. 这些合成的数据文件是进一步进行空间聚类或聚合的依据

    【作用】

    1. 类型叠置:获取新的类型。如土壤图和植被图叠置,以分析土壤与植被的关系
    2. 数量统计:计算某一区域内的类型和面积
    3. 动态分析:分析由时间引起的变化
    4. 益本分析:计算成本、价值等
    5. 几何提取:通过与所需提取的范围的叠置运算,快速地进行范围内的信息提取

    空间逻辑运算

    【空间逻辑运算】根据属性数据的布尔逻辑来检索,即一个逻辑选择的过程。

    【类型】
    在这里插入图片描述

    【例子】
    在这里插入图片描述

    数学运算复合法

    【数学运算复合法】指不同层面的栅格数据按一定的数学法则进行运算,从而得到新的栅格数据层面的方法。

    【主要类型】

    1. 算术运算
    2. 函数运算

    2 缓冲区分析(buffer analysis)

    【缓冲区】空间实体的一种影响范围或服务范围
    【缓冲区分析】基本思想就是给定一个空间实体或集合,确定它们的邻域,邻域的大小由领域半径R来确定

    【分析流程】
    在这里插入图片描述

    【类型】

    1. 可变缓冲区
    2. 多级缓冲区

    在这里插入图片描述

    3 窗口分析

    【背景】地学信息除了在不同层面的因素之间存在着一定的制约关系之外,还表现在空间上存在着一定的关联性

    【对于栅格数据而言】

    1. 对于栅格数据所描述的某项地学要素,其中的(i,j)栅格往往会影响其周围栅格的属性特征
    2. 充分而有效地利用这种事物在空间上相联系的特点,是地学分析的必然考虑因素

    【窗口分析】

    1. 是指对于栅格数据系统中的一个、多个栅格点或全部数据
    2. 开辟一个有固定分析半径的分析窗口,并在该窗口内进行诸如极值、均值等一系列统计计算,或与其它层面的信息进行必要的复合分析,从而实现栅格数据有效的水平方向扩展分析

    3.1 三个要素

    3.1.1 中心点

    在单个窗口中的中心点可能就是一个栅格点,或者是分析窗口的最中间的栅格点,窗口分析运算后数值赋予给它

    3.1.2 分析窗口大小与类型

    依据的单个窗口中的栅格分布状况,如平滑运算的3×3矩形窗口,扇形窗口等。

    【窗口大小】
    在这里插入图片描述
    【窗口类型】
    在这里插入图片描述

    3.1.3 运算方式

    图层根据窗口分析类型运算,依据不同的运算方式获得新的图层,如DEM提取坡度、坡向运算。
    在这里插入图片描述

    3.2 例子

    在这里插入图片描述

    展开全文
  • 上两篇文章介绍了如何使用Geotrellis进行矢量数据栅格化以及栅格渲染,本文主要介绍栅格化过程中常用到的缓冲区分析以及同一范围内的多种类型要素栅格化。        本文主要记录今天过程中碰到的...

    一、前言

           上两篇文章介绍了如何使用Geotrellis进行矢量数据栅格化以及栅格渲染,本文主要介绍栅格化过程中常用到的缓冲区分析以及同一范围内的多种类型要素栅格化。

           本文主要记录今天过程中碰到的两个问题,第一个问题就是线状要素在进行栅格化的时候只有单个像素,看不出应有的效果;第二个问题就是同一地区的数据既包含面状要素,又包含了线状要素,普通方式只能栅格化成两套数据。下面我为大家介绍解决这两个问题的方法(当然若有人有更好的方法,欢迎交流)。

    二、缓冲区分析

           缓冲区分析在百度百科中的定义为:

    缓冲区分析是指以点、线、面实体为基础,自动建立其周围一定宽度范围内的缓冲区多边形图层,然后建立该图层与目标图层的叠加,进行分析而得到所需结果。它是用来解决邻近度问题的空间分析工具之一。邻近度描述了地理空间中两个地物距离相近的程度。

           当然本文并不是教大家如何解决邻近度问题,只是简单的说明如何能够在栅格化的过程中将线状要素能够多外扩几个像素。

    自己实现外扩像素

           由于本人非地理信息专业出身(甚至非计算机专业出身,没办法,置身码农把青春卖!)所以在遇到问题的时候并不懂什么缓冲区分析的高大上的词汇。首先想到的是我可以在矢量化的过程中外扩几个像素,这样不就实现了增强的效果,但是有个问题就是我如何知道线段的方向,先将就着来,我把线段点上下左右的像素全部赋予与改点相同的值,这样可以不用考虑方向,并且应该能达到效果。
           说干就干,再一次认真研读GeotrellisReasterizer.scala的源代码,冥思苦想一阵之后,想到了方法,主要是要重写赋值的方法,实现代码如下:

    def rasterize(geom: Geometry, rasterExtent: RasterExtent, value: Int) ={
          val cols = rasterExtent.cols
          val array = Array.ofDim[Int](rasterExtent.cols * rasterExtent.rows).fill(NODATA)
          val f = (col: Int, row: Int) => {
            array(row * cols + col) = value
            if (col > 0)
              array(row * cols + col - 1) = value
            if (col < cols - 1)
              array(row * cols + col + 1) = value
            if (row > 0)
              array((row - 1) * cols + col) = value
            if (row < rasterExtent.rows - 1)
              array((row + 1) * cols + col) = value
          }
          Rasterizer.foreachCellByGeometry(geom, rasterExtent)(f)
          ArrayTile(array, rasterExtent.cols, rasterExtent.rows)
        }
    

    简单说来就是之前f函数中只有array(row * cols + col) = value一条语句,即实现当前点的像素点赋值,那么加上了判断不是边界之后,给上下左右的像素点都赋值即可实现,运行起来。

           得到的结果虽然看起来有点丑,但是总算解决了这个问题,然后把结果拿给老板看,老板什么话也没说,默默的甩给我https://gitter.im/geotrellis/geotrellis/archives/2016/02/22 这么一个网址。好吧,老板果然是老板,这里也要介绍一下https://gitter.im/geotrellis/geotrellis/,这是Github中的Geotrellis项目交流群,在里面咨询问题,会有懂的人甚至作者解答,有点考验英语基础。

    使用buffer函数

           在那个网页中,上来就有这么一段代码:

    val points = Seq(
      Point(re.gridToMap(100,100)).buffer(30),
      Point(re.gridToMap(200,200)).buffer(30),
      Point(re.gridToMap(300,300)).buffer(30),
      Point(re.gridToMap(400,400)).buffer(30),
      Point(re.gridToMap(500,500)).buffer(30)
    )
    

           根据这段代码尤其是buffer名称,可以知道其实在Geotrellis中缓冲区分析就是使对象调用buffer函数即可,参数表示缓冲的距离。赶紧拿来试验,非常成功,但是这里面却有几个需要注意的问题。

    1. 缓冲距离

           此处的缓冲距离经过实际测试发现与当前数据的坐标系相一致,即如果是WGS84地理坐标系,那么此处缓冲距离就是以经纬度为单位,大地坐标系此处就是以米为单位。

    1. 缓冲类型

           一般情况下只需要给点、线要素使用缓冲即可,这里就可以使用模式匹配,如下:

    val geom = WKT.read(pro.getValue.toString) match {
                    case geom: Point        =>    geom.buffer(bufferDistance)
                    case geom: Line         =>    geom.buffer(bufferDistance)
                    case geom: MultiLine    =>    geom.buffer(bufferDistance).toGeometry().get
                    case geom               =>    geom
                  }
    

           这里就仅为PointLine以及MultiLine类型进行了缓冲区设置,其他需要转换的可以用同样的方式进行匹配,展示一下最终的效果。

    缓冲区分析

           其实查看buffer函数的定义,不难发现该函数实现的就是将要点线要素转换成了面要素。

           以上就实现了缓冲区分析,下面进行下一个主题多种类型要素栅格化。

    三、多种类型要素栅格化

           同一个区域数据即包含面状要素又包含线状要素,显然在shape文件中以及数据库中我们都没有办法将其进行合并,而如果我们又不想得到两套栅格化的数据该如何是好呢?

           其实方法也很简单,只需要将要素拼接到同一个GeometryCollection中然后统一获取其RasterExtent即可,实现代码如下:

    val features = mutable.ListBuffer[Geometry]()
        for (path <- paths) {
          val file = new File(path)
          if(file.exists()) {
            val shpDataStore = new ShapefileDataStore(new File(path).toURI().toURL())
            shpDataStore.setCharset(Charset.forName(charset))
            val featureSource = shpDataStore.getFeatureSource()
            val itertor = featureSource.getFeatures().features()
            while (itertor.hasNext()) {
              val feature = itertor.next()
    
          <span class="hljs-keyword">val</span> p = feature.getProperties()
          <span class="hljs-keyword">val</span> it = p.iterator()
    
          <span class="hljs-keyword">while</span> (it.hasNext()) {
            <span class="hljs-keyword">val</span> pro = it.next()
            <span class="hljs-keyword">if</span> (pro.getName.getLocalPart.equals(<span class="hljs-string">"the_geom"</span>)) {<span class="hljs-comment">//get all geom from shp</span>
              <span class="hljs-keyword">val</span> geom = <span class="hljs-type">WKT</span>.read(pro.getValue.toString) <span class="hljs-keyword">match</span> {
                <span class="hljs-keyword">case</span> geom: <span class="hljs-type">Point</span>        =&gt;    geom.buffer(resolution * bufferDistance)
                <span class="hljs-keyword">case</span> geom: <span class="hljs-type">Line</span>         =&gt;    geom.buffer(resolution * bufferDistance)
                <span class="hljs-keyword">case</span> geom: <span class="hljs-type">MultiLine</span>    =&gt;    geom.buffer(resolution * bufferDistance).toGeometry().get <span class="hljs-comment">//0.0054932 * 7</span>
                <span class="hljs-keyword">case</span> geom               =&gt;    geom
              }
              features += geom
            }
          }
        }
        itertor.close()
        shpDataStore.dispose()
      } <span class="hljs-keyword">else</span>
        println(<span class="hljs-string">s"the file <span class="hljs-subst">${path}</span> isn't exist"</span>)
    }
    

           以上代码实现的是逐个循环需要栅格化的文件,然后将每个geometry对象添加到features中,剩下的在前面的文章中已经介绍过,不再赘述。

    四、总结

           以上讲述了如何进行缓冲区分析以及多种类型要素栅格化。虽然实现方法比较较难,但是在刚碰到这些问题的时候确实会让人摸不着头脑,本文简单记录之,仅为整理思路以及方便以后使用,如果能够帮助到一些苦苦探索的人当然是更好的。最后感谢在工作过程中给予了重大帮助和指导的吴老板!

    展开全文
  • 栅格数据的缓冲区分析主要可以分成两种,一种是先将矢量数据做缓冲区之后进行栅格化,另一种是直接将栅格数据进行缓冲区分析。下面是这两种方式的代码: 将矢量数据先进行buffer再栅格化: def bufferPoints(): Unit...
  • 用地适宜性评价与生态敏感性分析 1、采用的是层次分析法...缓冲区工具 ####2、省道评分与县道评分相交做交通评分 字段计算器按条件保留最大评分的数据 4、矢量转栅格 5、指标因子加权 生态敏感性评价 ...
  • ArcGIS【欧氏距离】与【缓冲区分析】的简单区分 在ArcGIS中,当我们需要进行一些有关距离的分析的时候,常常用到两个工具,即【欧氏距离】与【缓冲区】。那么这两个作用相似的工具又有什么区别呢?我们什么时候又要...
  • 从数据预处理入手,将无投影坐标的数据定义投影,以建立缓冲区与叠置分析为实验方法,采用加权的思想;根据新加油站选址要远离已有加油站、河流与铁路的需求,创建不同尺度的缓冲区,并按距离越远权重越大的规则赋值...
  • 线目标的缓冲区生成是缓冲区分析的基础和关键。结合栅格算法与矢量算法的优势,提出矢栅混合算法解决线目标的缓冲区生成问题。采用Douglas-Peuker方法对线目标进行重采样以加快缓冲区建立速度,用扫描线方法将线目标...
  • 缓冲区分析是地理信息系统中使用非常频繁的一种空间分析,是对空间特征进行度量的一种重要方法,在交通、林业、资源管理、城市规划、环境与生态保护等领域都有着广泛的应用。GIS中缓冲区生成包括点、线、面三种目标...
  • 利用缓冲区方法将删除C点或D点,但是实际上C点和D点是处于不同的栅格,并非属于冗余数据;而A点和B点位于同一个栅格内却未被剔除,A点和B点的环境因子指标都是等值,即等于一个点用了两次。因此通过缓冲区法筛选会...
  • ArcGis 中常用工具(ArcToolBox) DEM(数字高程模型)Digital Elevation Model常用分析 1.求平均坡度,平均坡向,平均高程 ...3.缓存的使用,缓冲去一般可以进行店铺的选址,灾害的分析等,应用相当广...
  • ArcGIS高级分析.zip

    2019-11-07 11:48:20
    本资源包括arcgis高级分的操作文档和实验数据,内容有:空间分析基本操作,栅格数据的空间分析,缓冲区分析,网络分析,地形分析,三维分析,河谷网络的提取,山脊、山谷线的水文提取,建模分析
  • 在idesktop中,矢量分析功能包括:缓冲区分析、叠加分析与邻近分析。那么如何灵活运用这些功能呢?举一个简单的例子:我想知道学校周边两公里的范围有多大,就需要做学校的缓冲区分析。我想知...
  • 内容简介:矢量数据不同于栅格数据,一般不存在模式化的分析处理方法。在ArcGIS 中,矢量数据的空间分析主要集中于缓冲区分析、叠置分析和网络分析等方面。
  • Statistic) 、缓冲区分析(Buffer) 、采样数据的空间内插(Interpolate) 、栅格单元统计(Cell Statistic)、邻域统计(Neighborhood )等空间分析基本操作和用途。 3. 为选择合适的空间分析工具求解复杂的实际问题...
  • 空间分析是GIS的核心内容,已成为选择GIS软件的重要指标之一.针对目前广大用户对GIS需求...结果表明,国内外GIS软件在查询与量算、缓冲区分析、空间叠加分析、栅格数据分析等最基本的空间分析功能方面基本相当,而在网
  • 第四章介绍矢量数据空间分析的基本方法,包括包含分析,矢量数据的缓冲区分析,矢量数据的叠置分析,矢量数据的网络分析,是GIS矢量数据常用的空间分析方法。第五章讨论空间数据的量算及统计分析方法,包括空间数据...
  • 本系统是用c#基于AE进行的二次开发,实现了栅格矢量数据的打开保存,属性选择,缓冲区分析,鹰眼视图。属性表查询,右键菜单的实现。实现了ArcGIS的基本功能。
  • ArcGIS案例学习笔记2_1_学校选址适宜性分析 计划时间:第二天上午 目的:学校选址,适宜性分析 内容:栅格数据分析 ...分析工具/邻域分析/缓冲区 分析工具/叠加分析/相交,擦除,联合 添加字段,字...
  • 栅格叠加分析得到1990-2000年人13密度变化空间分布图,用同心圆缓冲区分析法和扇形分析法揭示人VI密度变化的距离特征和方向性特征,最后将1990年和2000年度人VI密度与居住用地类型进行关联,佐证了该时
  • 之前没接触过ArcGIS的密度分析工具,有一次想,怎么处理影响范围的图件,我第一反应是用缓冲区来解决。后来才知道还有密度分析这个工具,所以今天研究一下密度分析。 ArcGIS密度分析工具有核密度、点密度、线密度三...
  • 71缓冲区分析196 711基本概念196 712缓冲区的建立196 72叠置分析202 721图层擦除(Erase)202 722识别叠加(Identity)204 723交集操作(Intersect)206 724对称区别(Symmetrical Difference)208 725图层合并...
  • arcgis浮雕效果

    2020-11-18 21:10:53
    分析工具—领域分析缓冲区,或者在地理处理里面创建缓冲区 缓冲区为向内,单位为15km,其他默认即可 结果如下 擦除缓冲区 分析工具—叠加分析—擦除 工具运算使用默认的参数即可 结果如下 对...
  • ArcGIS制图浮雕效果

    2020-08-15 10:07:29
    分析工具—领域分析缓冲区,或者在地理处理里面创建缓冲区缓冲区为向内,单位为15km,其他默认即可 结果如下 擦除缓冲区 分析工具—叠加分析—擦除 工具运算使用默认的参数即可 结果如下 对新图层进行欧式距离...
  • SuperMap空间数据处理

    2020-08-07 15:12:50
    SuperMap空间数据处理。坐标系与投影转换、叠加分析、网络分析、GIS数据的空间插值处理、缓冲区分析、服务区分析、空间数据入库、矢量图幅接边、矢量、栅格数据互转、矢量数据编辑、DEM构建、三维虚拟现实。
  • 矢量数据、栅格数据、地统计分析、三维分析数据7.5.1 市区择房分析 1.背景 如何找到环境好、购物方便、小孩上学方便的居住区地段是购房者最关心的问题,因此购房者就需要...学会利用缓冲区分析和叠置分析解决实际问题。
  • Arcengine二次开发源代码

    热门讨论 2013-04-15 22:13:52
    2、 缓冲区分析(点、线、面缓冲区分析) (3) 网络分析(最短路径查询、动态模拟) (4) 几何变换(面转线、线转面) (5) 地图查询(属性查图、图查属性) (6) 坐标系(设置,获取,改变参考) (7) 出版...

空空如也

空空如也

1 2 3
收藏数 52
精华内容 20
关键字:

栅格缓冲区分析