在这里注册以来,只字未曾发表,有点不好意思了。刚好最近解决了一个空间索引方面的难题,写几个字以充门面:)
最近在做嵌入式GIS系统,由于PDA的CUP和内存跟不上,做东西的时候自己要斤斤计较不能再像PC机上那么大手大脚的浪费内存。开始的时候,加载矢量数据(暂时只针对shp文件)是先把全部几何对象读入内存,放在一个动态数组CArray上的,这样就造成打开一个shp文件的时间比较长,而且文件大的时候就根本加载不进去了比如一个100多M的shp文件。
原来的方式不能加载大文件,可现实是残酷的,在老板的一再催逼之下只能换种方式——使用空间索引。在系统启动的时候并不把几何对象的数据加载进内存,而是显示的时候临时从文件中读取当前视图范围内的对象。
现有的能查到的空间索引创建方法,大多都是“树”结构的,比如二叉树、四叉树等。采用树结构建立空间索引,必须要保存每个几何对象的矩形位置,也就是上下左右四个坐标(或者也有其他办法但我不知道的……),这样一来就有个问题——索引文件还是比较大的,点图层就非常明显,生成的索引文件比shp文件更大,而且当索引文件很大的时候,同样会遇到加载不了的问题。我就试过用四叉树建立索引,一个广东省的居民地生成的索引有好几十M,同样在PDA上加不了。。。。。
浪费了一周时间搞的四叉树没用,心灰意懒突然又柳暗花明,且听我细细道来:
现在很多webgis都是事先把地图配好,然后再切成一幅幅的图片,显示的时候再根据当前视图范围和显示层数计算出有哪几张图片需要显示再从服务器加载。这就是传说中的“瓦片”了。开源的三维系统WorldWind(上帝之眼)的影像也是采用这种方式加载的。这方式的特点就是根据图层范围和级别可以计算出需要多少个格网&#x