999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Shp數據結構解析及一種底層讀取方法

2020-08-12 06:48:26陳明超劉朋飛
科學技術創新 2020年21期
關鍵詞:信息

陳明超 劉朋飛*

(天津師范大學 地理與環境科學學院,天津300387)

Shapefile 文件是ESRI 公司提出的用于描述空間數據的幾何和屬性特征的非拓撲實體矢量數據結構的一種格式[1],利用歐幾里得幾何學中的點、線、面、體來表示地理實體的一種數據組織方式。該文件格式已經成為GIS 界的一個開放標準,同時也是一種重要的矢量數據交換格式。能很好的表達地理實體分布特征、數據精度高、冗余度低,在桌面版GIS 應用程序和WebGIS中有廣泛的應用。

1 Shapefile 數據文件結構

一個完整的Shapfile 文件包含如下(如表1 所示)幾個子文件,常用的子文件包括.shx 格式的幾何特征索引文件,.shp 格式的幾何文件,.dbf 格式的屬性文件[2]和.prj 格式的投影文件。.shp文件為其中的主文件,本文的研究基于此展開。

表1 Shapefile 文件子文件

Shp 數據結構:

Shp 文件主要由文件頭和信息記錄兩部分組成,文件頭存儲與文件基本特征相對應的數據,信息記錄由多條子記錄組成,每條記錄表示相應的幾何實體信息。文件頭總長度為100 字節,分為基本識別信息和空間概況信息。基本識別信息包含八個int類型字段,總長度32 字節。空間概況信息包含一個int 類型字段和八個double 類型字段,總長度68 字節。具體字段信息如表2和表3 所示。

表2 基本識別信息結構

表3 空間概況信息字段信息結構

其中最大最小X,Y 坐標值構成了最小外接矩形(MER),Z 坐標為非必要字段。讀取時按照起始位置依次讀取,如讀取FileCode 字段從第零位開始,讀Unused 字段從第四位開始讀。

信息記錄部分由多個子記錄組成,沒有固定的長度,最終長度取決于子記錄的個數和每個子記錄的長度。每個子記錄由記錄頭信息和空間信息記錄組成,記錄頭信息包含記錄號和記錄長度,均為int 型,總長度為八字節。空間記錄信息包含數據類型和坐標對信息,具體結構如圖1 所示。

表4 空間實體類型

圖1 空間記錄信息結構

其中的Shapetype 字段表示該shp 數據表示的實體類型,常見的類型包括點(point)、線(polyline)和面(polygon)等。全部的實體類型如表4 所示。

1.1 point 數據結構

Point 是shp 數據中最簡單的實體類型,由一個int 型的Shapetype 和一對double 型的坐標對組成,單個Point 實體長度固定為20 字節,存儲結構如圖2 所示。

圖2 Point 對象存儲結構

1.2 polyline 數據結構

Polyline 是我們常用的另一種實體類型,GIS 中的河流,路網等都屬于polyline 實體。一個polyline 實體可能包含一條折線,也可能包含多條折線,每條折線叫做一個分段,每次讀取依次從每條折線首個節點索引位置開始。在polyline 存儲結構中,存儲最小外接多邊形、折線數、每條折線的起始點位置、節點數目以及所有的節點坐標等。具體的存儲字段如表5 所示,存儲結構如圖3 所示,示例如圖4 和圖5 所示。

表5 polyline 數據存儲字段

圖3 polyline 存儲結構

圖4 示例polyline

圖5 多段線存儲結構

1.3 polygon 數據結構

polygon 是shapefile 數據中又一重要的實體類型,常用來表示公園、小區、省市等面狀實體。一個polygon 可由一個polyline實體首尾相連組成,也可由多個polyline 實體首尾相連組成,每個節點的坐標可由polyline 存儲結構中獲取,該方法保證了多邊形公共邊的唯一性[3]。同時每條邊具有方向性,最外層的polyline 由起點沿順時針到終點,其手邊為polygon 區域,存在島的polygon 為起點沿逆時針方向到終點的右手邊方向。組成polygon 的邊界polyline 不能存在交叉,即為一個“干凈的多邊形”[4]。由于polyline 為閉合環,存在首尾重合,所以在存儲上會多一個point,比如存儲一個四邊形邊界要存儲五個點。polygon由polyline 組成,同時具有與polyline 相同的存儲結構。

2 Shp 數據讀取程序設計

2.1 設計原則及方法

本次程序設計使用Visual Studio 2019 平臺,使用的語言為C#語言,采用純底層面向對象的方法實現。

本次設計基于文件流的方式,使用BinaryReader 類讀取二進制文件。通過解析數據結構,可知.shp 數據結構中存儲的字段為長度為四個字節的int 型和長度為為八個字節的double 型,使用BinaryReader 類提供的ReadInt32()方法和ReadDouble()方法進行讀取,ReadInt32()方法從當前流中讀取四個字節的有符號整數,并使流的當前位置提升四個字節,ReadDouble()從當前流中讀取八個字節的浮點值,并使流的當前位置提升八個字節,這兩種方法保證了相鄰兩次讀取文件的連續性。

2.2 核心代碼說明

3 程序測試

本次程序測試使用的數據為point、ployline 和polygon 三種類型,測試結果如圖6- 圖8 所示。

圖6 點數據測試結果

圖7 線數據測試結果

圖8 面數據測試結果

本文首先對Shapefile 文件結構做了詳細的解析,使讀者對我們常用的Shapefile 文件的組成有了清晰的了解。同時本文將研究重點放在了shp 數據結構解析上,使讀者對shp 數據的理解從簡單的的“點、線、面、坐標對”層次上升到更加詳細的結構化層次,包括完整的shp 數據結構、點線面不同實體的數據結構以及不同位置字段的類型和長度。在文章的最后采用winForm形式基于文件流的方法實現從底層進行讀取,并得到了很好的效果。由于能力有限,程序中還存在一些不足,比如無法實現點線面實體的疊加顯示,無法顯示屬性信息等。在我們今后的學習中還會做深入的研究和完善。近年來,隨著輕量化GIS 的 發展,.shp 數據在web 服務發布中更得到了進一步的應用,比如在GeoServer 中發布為地圖服務[5],在QGIS 中轉換成輕量級的JSON 格式數據供前后端交互等。今后的研究將在此研究的基礎上,把一部分精力放在shp 數據格式研究和應用研究上,在GIS應用和發展中,發揮出shp 數據更大的作用和優勢。

猜你喜歡
信息
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
展會信息
中外會展(2014年4期)2014-11-27 07:46:46
信息超市
大眾創業(2009年10期)2009-10-08 04:52:00
展會信息
展會信息
展會信息
展會信息
展會信息
信息
建筑創作(2001年3期)2001-08-22 18:48:14
健康信息
祝您健康(1987年3期)1987-12-30 09:52:32
主站蜘蛛池模板: 女人18毛片水真多国产| 制服丝袜无码每日更新| 国产精品久久久久久久久久久久| 97青草最新免费精品视频| 国产成人盗摄精品| 午夜国产小视频| 久久人人爽人人爽人人片aV东京热 | 一级香蕉视频在线观看| 白浆视频在线观看| 成人国产精品2021| 亚洲无码高清免费视频亚洲 | 国产成人亚洲精品无码电影| 色视频久久| 精品日韩亚洲欧美高清a| 日韩天堂视频| 久久久久亚洲av成人网人人软件| 国产成年无码AⅤ片在线| 国产综合在线观看视频| 亚洲日本韩在线观看| 九九九精品成人免费视频7| 国产成人精品在线| 欧美视频在线第一页| 国产尤物在线播放| 国产精品久久久久久影院| av无码久久精品| 71pao成人国产永久免费视频| 91麻豆国产精品91久久久| 国产成人精品视频一区二区电影 | 色综合天天综合中文网| 国产成a人片在线播放| 欧美精品成人| 丁香婷婷激情网| 久久综合一个色综合网| 久久成人免费| 国产成人精品高清不卡在线| 国产精品一区二区不卡的视频| 国产男女免费视频| 这里只有精品在线播放| 国产自视频| 国产人成在线观看| 无码中文字幕乱码免费2| 亚洲欧美不卡| 香蕉99国内自产自拍视频| 狠狠综合久久| 国产69囗曝护士吞精在线视频| 欧美区日韩区| 午夜日b视频| 久久精品国产亚洲AV忘忧草18| 欧美a在线看| 人人91人人澡人人妻人人爽| 57pao国产成视频免费播放| 亚洲综合色吧| 日韩精品一区二区三区视频免费看| 3344在线观看无码| 久久国产亚洲欧美日韩精品| 本亚洲精品网站| 日日摸夜夜爽无码| 日韩免费成人| jijzzizz老师出水喷水喷出| 2020精品极品国产色在线观看| 亚洲精品麻豆| 国产天天色| av在线手机播放| 又粗又硬又大又爽免费视频播放| 国产精品99r8在线观看| 日韩在线2020专区| 欧美国产视频| 国产第一色| 风韵丰满熟妇啪啪区老熟熟女| 在线精品欧美日韩| 亚洲国产精品日韩欧美一区| 一本大道AV人久久综合| 九九免费观看全部免费视频| 亚洲大学生视频在线播放| 青青青视频免费一区二区| h视频在线观看网站| 国产99在线| 天天做天天爱夜夜爽毛片毛片| 久久人搡人人玩人妻精品| 成人福利在线免费观看| 九色免费视频| 2021国产v亚洲v天堂无码|