arcmap创建空间索引_GIS中创建空间索引的一种方法

在这里注册以来,只字未曾发表,有点不好意思了。刚好最近解决了一个空间索引方面的难题,写几个字以充门面:)

最近在做嵌入式GIS系统,由于PDA的CUP和内存跟不上,做东西的时候自己要斤斤计较不能再像PC机上那么大手大脚的浪费内存。开始的时候,加载矢量数据(暂时只针对shp文件)是先把全部几何对象读入内存,放在一个动态数组CArray上的,这样就造成打开一个shp文件的时间比较长,而且文件大的时候就根本加载不进去了比如一个100多M的shp文件。

原来的方式不能加载大文件,可现实是残酷的,在老板的一再催逼之下只能换种方式——使用空间索引。在系统启动的时候并不把几何对象的数据加载进内存,而是显示的时候临时从文件中读取当前视图范围内的对象。

现有的能查到的空间索引创建方法,大多都是“树”结构的,比如二叉树、四叉树等。采用树结构建立空间索引,必须要保存每个几何对象的矩形位置,也就是上下左右四个坐标(或者也有其他办法但我不知道的……),这样一来就有个问题——索引文件还是比较大的,点图层就非常明显,生成的索引文件比shp文件更大,而且当索引文件很大的时候,同样会遇到加载不了的问题。我就试过用四叉树建立索引,一个广东省的居民地生成的索引有好几十M,同样在PDA上加不了。。。。。

浪费了一周时间搞的四叉树没用,心灰意懒突然又柳暗花明,且听我细细道来:

现在很多webgis都是事先把地图配好,然后再切成一幅幅的图片,显示的时候再根据当前视图范围和显示层数计算出有哪几张图片需要显示再从服务器加载。这就是传说中的“瓦片”了。开源的三维系统WorldWind(上帝之眼)的影像也是采用这种方式加载的。这方式的特点就是根据图层范围和级别可以计算出需要多少个格网,以及每个格的行、列号,根据某个视图范围也可以计算出当前范围内有多少个格,每个格的行、列号。

到这里就清晰了,建立索引需要解决的是什么问题?无非就是如何最快的找到当前视图范围内有哪些几何对象!而worldwind的影像加载方法很适合,因为他可以直接计算出当前视图范围有多少格网、以及每个格网的行、列号,而不是像树结构那样需要从根节点递归搜索。只要我们知道这个图层在每个格网中有多少几何对象,每个几何对象的记录号——shp文件中只要知道了记录号就可以非常方便的定位读取,就可以实现我们创建空间索引的目的了。

创建方法是这样的:使用WorldWind切割影像的方法对整个图层范围进行分割,得到n个格网,然后查询每个格网范围内的几何对象(查询的操作我是通过ArcEngine做的),然后按格式保存到索引文件内即可。下面发索引文件的结构图给大家看看吧,不多说了。

这种方式创建的空间索引有几个好处:索引文件很小,由于不保存几何对象的范围,只是保存了记录号,一个几十M的shp文件,索引才几K;检索比较快,知道行列号后,只需要一次读取两个int类型的结构就可以知道这个格内有多少几何对象,读N个int类型的内容就可得到这个格内所有的几何对象记录号了(格子内有多少几何对象就读多少次)。

空间索引再配合图层的可见比例尺,以及空间索引的级别,可以很好的实现在PDA上面加载大shp文件了!现在存储卡已经有好几G了,虽然跟PC机差太远,但加载几百M的数据再不是做梦了嘿嘿

此外,在PDA上面也可以用worldwind的方法加载影像图,也就是先切图片,再一块块加载显示。速度还不错,就是需要空间大

《远景地理信息系统|RemoteGIS》

RemoteGIS是基于HTML5开发的高性能WEBGIS,支持百万级别矢量数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机pdf文件转语音_没有电脑也能处理PDF文件,手机里的这个功能太强大!

没电脑怎么处理PDF文件?急,在线等!PDF文件因为它的强大兼容性而广泛使用,一半我们都是在电脑打开,如果你刚好没办法使用电脑怎么办?一般来说,我们手机还是能直接打开进行浏览的,以在…

图文+动画讲解排序算法总结!!

戳蓝字“CSDN云计算”关注我们哦!作者 | 大数据肌肉猿责编 | 阿秃很多同学算法零基础,我都不建议他们直接去刷「剑指offer」和「LeetCode」,可以从常见的查找和排序算法开始学起,本期我先整理了常见排序算法,大家可以收…

SpringMVC项目 使用IDEA快速构建

文章目录一、使用idea构建基础项目1. 创建一个新的项目2. 选择maven项目构建架子3. 项目储存路径4. 配置maven和仓库5. 自动下载所需依赖二、初始化项目结构2.1. 创建Java和resources文件夹2.2. 给文件夹赋予目录结构层级2.3. 初始化pom.xml2.4. 初始化web.xml2.5创建配置文件2…

GDPR到底是如何影响机器学习的?

摘要: GDPR时代来临,你的机器学习模型还能训练吗?一般数据保护条例(GDPR)对数据科学产生了很大的影响。现在GDPR有99条正文条款和173篇声明(Recital),长而复杂,但是随着时…

android图片浏览功能,怎么在Android应用中实现一个网页图片浏览功能

怎么在Android应用中实现一个网页图片浏览功能发布时间:2020-12-05 17:28:31来源:亿速云阅读:80作者:Leah本篇文章给大家分享的是有关怎么在Android应用中实现一个网页图片浏览功能,小编觉得挺实用的,因此分…

qt编译实现简单的文本编译器有粘贴复制_qmake 时复制文件(自动在编译前做一些操作,且写在.pro文件里)...

SQL语句判断数据库、表、字段是否存在from master..sysdatabases where nameTestDB) print TestDB存在else print TestDB不存在 --判断表[Te ...python之模块模块即一推代码的集合来实现某个功能,使用时直接调用,甚是方便. 模块又分为三种 自定义模块 内置模块 第三方模块…

iphone字体_iPhone 适合老人盘吗?

过年的时候,有多少人会选择给家里的老人购买一台新智能手机做为礼物呢?又有多少人选择赠送的手机是 iPhone 呢? (图片来自网络)很久以前,咆哥就看见很多有关‘ iPhone ’是否可以作为孝心机的话题&#xff…

干货 | 金融级消息队列的演进 — 蚂蚁金服的实践之路

摘要: 小蚂蚁说: 消息队列作为一个数据的集散中心,承载了越来越多的场景和数据,从最开始的 OLTP 到 OLAP,甚至再到物联网、人工智能、机器学习等场景,都有很大的想像空间。 在能力上,消息队列现…

海底光缆,到底是怎么安装和维护的?

戳蓝字“CSDN云计算”关注我们哦!作者 | 鲜枣课堂责编 | 阿秃大家应该都知道海底光缆是什么吧?没错!简单来说,就是埋在海底的光纤线缆。如今这个时代,我们每天都在上网。通过上网,我们可以随时和世界各地保…

推荐 12个Idea 免费实用插件及插件离线安装方法

https://blog.csdn.net/huoqilinheiqiji/article/details/86622154 https://blog.csdn.net/dingzfeng/article/details/80566906

android padding作用,android:padding和android:layout_margin的区别

简单点来说:android:padding是内边距,控件本身的内容与控件边缘的距离。android:layout_margin是外边距,控件与其他控件之间的距离。下面以具体的例子来进行解释:1、不设置边距android:layout_width"match_parent"andro…

stream流倒序排序_java8 stream多字段排序

注:转载请注明出处!!!!!!!很多情况下sql不好解决的多表查询,临时表分组,排序,尽量用java8新特性stream进行处理使用java8新特性,下面先来点基础的List list; 代表某集合//返回 对象集合以类属性一升序排序list.stream().sorted(Comparator.comparing(类::属性一));//返回 对象集…

8张图理解Java

摘要: 一图胜千言,下面图解均来自Program Creek 网站的Java教程,目前它们拥有最多的票选。如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟。8张图理解Java一图胜千言,下面图解均来自Program Creek 网站的Java…

云栖大会|十年阿里云存储进化史:今天最好的表现就是明天最低的要求

戳蓝字“CSDN云计算”关注我们哦!科技创新的能力仍然是俘获市场用户的必要条件,而善于发现新需求的敏锐嗅觉以及直面挑战的魄力,更是巨头企业的绝杀武器。随着大数据、人工智能等新兴技术的发展,图像语音识别、智能机器人、自动驾…

他在阿里的逆袭,只因为想做个“锤子”

摘要: 我叫孟白,这是我在阿里的第五年。这五年,我从一个外包工程师,到同事眼中的“铁打的”技术专家。填过无数次坑,也无数次想过放弃。留在阿里,是因为同事一句无意间的玩笑:“你只能做钉子&am…

vb6 判断打印机是否有效_讲述3D打印机怎么用 初学者必看

许多朋友买来了3D打印机,但却不知道如何下手,其实,3D打印机远远没那么复杂。那么,今天就来简单说一下3D打印机怎么用?第一步:创建模型想要玩转3D打印,最重要也是必不可少的环节就是建模!现在可以绘制三维图…

Intellij Idea 离线安装插件

一、idea插件下载地址 http://plugins.jetbrains.com/ 二、下载插件 安装插件 1、下载插件&#xff1a; 2、安装插件&#xff1a; settings -> plugins -> install plugin from disk&#xff0c;然后重启IDEA即可。 <!-- https://mvnrepository.com/artifact/org…

android dialog自定义圆角,Android自定义Dialog实现通用圆角对话框

前言&#xff1a;圆角对话框在项目中用的越来越多&#xff0c;之前一篇文章有介绍过使用系统的AlertDialogCardView(Android中使用CardView实现圆角对话框)实现了圆角对话框的样式&#xff0c;今天介绍自定义Dialog实现通用的圆角对话框。效果图&#xff1a;1.继承自AlertDialo…

k8s通过yaml创建pod_Kubernetes根据yaml创建pod的时候8080访问被拒绝报错

本人首次学习关于Kubernetes的相关知识&#xff0c;根据Kubernetes的权威指南做了一个关于Kubernetes的一个小测试相关环境是&#xff1a;centos7 64位Kubernetes 1.5.2docker 1.13.1etcd 3.2.22etcd&#xff0c;Kubernetes&#xff0c;docker安装完毕&#xff0c;之后讲防…

Dubbo开源现状与未来规划

摘要&#xff1a; Dubbo 在过去一段时间疏于维护&#xff0c;去年阿里高调宣布重启 Dubbo 开源之后&#xff0c;社区里问的最多的问题是&#xff0c;这次开源与上次有什么一样&#xff0c;还有就是 Dubbo 和 Spring Boot、Spring Cloud 是什么关系&#xff1f;希望通过这次Dubb…