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

基于WebGIS的ShapeFile文件解析系統的設計與實現

2019-06-21 06:06:52張凱旋鄒業斌劉曇曇馬文濤
資源環境與工程 2019年2期
關鍵詞:結構信息

張凱旋, 鄒業斌, 劉曇曇, 馬文濤

(中國礦業大學(北京),北京 100083)

地理信息系統是一種采集、存儲、管理、分析、顯示與應用地理信息的計算機系統[1],以數字化的形式反映地球空間現勢和變遷的各種空間數據并描述這些空間數據特征的屬性,以及使用模型化的方法來模擬地球空間對象的行為,在計算機軟、硬件的支持下,以特定的格式支持輸入/輸出、存貯、顯示以及進行地理空間信息查詢、綜合分析、輔助決策,為人們提供處理地理信息最佳的方法和手段[2]。隨著互聯網技術的發展,大數據和云計算等技術的興起,使WebGIS應用得到了飛速的發展。利用Internet在Web上發布和出版地理信息,為用戶提供空間數據的瀏覽、查詢、制作專題圖和分析的功能,從而實現地理信息的共享,已經成為GIS發展的必然趨勢[3]。在實際WebGIS開發中會需要上傳本地的ShapeFile文件并結合WebGIS系統進行分析,Esri的服務非常昂貴,因此在小規模的GIS平臺搭建過程中可搭建本地后臺解析系統。本文詳細介紹了ShapeFile的文件結構,根據ShapeFile文件的結構,利用.NET技術進行解析,并展示到Web前端。對各學者建設WebGIS平臺有所借鑒。

1 ShapeFile圖形文件的結構

一個完整的ESRI的ShapeFile文件包括一個主文件*.shp,一個索引文件*.shx,和一個屬性文件*.dbf。主文件是一個直接存取,記錄長度文件,其中每個記錄描述一個由其頂點列表組成的ShapeFile。在索引文件中,每條記錄是在主文件中記錄對應距離主文件頭部的偏移量。*.dbf中記錄的是對應主文件中記錄的屬性記錄,每條主文件記錄對應*.dbf中的一條屬性記錄。*.prj文件用于存儲坐標系的信息;*.xml文件作為元數據文件,用于存儲ShapeFile的相關信息[4]。

1.1 shp文件的數據結構

主文件用來存儲地理要素的幾何圖形,一個.shp文件由文件頭和記錄實體兩部分組成[5]。主文件頭100字節長。表1描述了文件頭中數據的字節位置、值類型和字節順序。在表1中,位置是相對于文件頭的。文件頭的布局如表1所示。

表1 主文件頭結構表Table 1 Structure table of main file header

1.2 shx索引文件結構

.shx索引文件是存儲圖形要素與屬性信息索引的文件,主要起到定位的作用,其由文件頭和記錄兩部分組成,文件頭的內容與主文件的基本一致[5]。每條記錄由8個字節組成,具體內容如表2所示。其中,Offset可以理解為該條記錄在.shp文件中的偏移量,Content Length可以理解為該記錄的長度。

表2 索引文件記錄結構表Table 2 Structure table of index file record

1.3 dbf文件結構

.dbf屬性表文件,是由頭記錄及數據記錄組成。頭記錄定義了該表的結構并包含與表相關的其它信息,它主要對屬性文件作一些概括性描述,尤其是對屬性文件的記錄項信息進行著重性說明,比如對每個記錄項的名稱、數據類型、精度、長度都作了詳細地介紹。

2 整體解析過程

本地文件利用Ajax技術通過Post提交方式異步上傳給后臺服務端,后臺服務端通過HttpPostedFile接受前端傳遞過來的文件并且通過FileStream類讀取文件上傳到文件服務器[6]。然后調用WebService服務利用BinaryReader類以二進制文件流的方式對ShapeFile進行解析,以集合的方式返回解析后的數據。將集合數據轉換成JSON數據格式,利用ArcGIS for JavaScript庫類展示數據,流程如圖1。

圖1 解析流程圖Fig.1 Analytical flow chart

2.1 文件上傳

HttpPostedFile postedFile =context.Request.Files[0]; //接收文件

postedFile.SaveAs(context.Request.MapPath(fullDir)); //保存文件

FileStream fo= new System.IO.FileStream

(context.Request.MapPath(shxpath),FileMode.Open,FileAccess.Read);

//文件流形式

以文件流的方式將前端Web Browser上傳的文件存儲到文件服務器,利用FileStream分別讀取.shp、.shx和.dbf文件,FileStream讀寫操作可以指定為同步或異步操作。同時支持對輸入輸出流進行緩沖,提高性能。

2.2 文件解析

[WebMethod]

public List file(FileStream shpfo,string passPath,FileStream fs)

BinaryReader bi = new BinaryReader(shpfo); //讀取shp文件

BinaryReader br = new BinaryReader(fs); //讀取shx文件

for(int n = 0;n < RecorderNumber;n++) //文件解析過程

{ ……

double[] pointsx = new double[Numpoints];

double[]pointsy = new double[Numpoints]; //定義數組

for(int z = 0;z < Numpoints;z++) //for循環讀取

{ ……

pointtemp.X = br.ReadDouble();

pointtemp.Y = br.ReadDouble();

shpstr+= "["+ pointtemp.X+ ","+ pointtemp.Y+ "],";

}

list.Add(shpstr);//存入List集合

}

return list;

}

}

public List DbfFile(FileStream dbfo) //讀取dbf屬性文件

{

BinaryReader br1 = new BinaryReader(dbfo); //讀取二進制文件

DataRow dr = dt.NewRow();

tempBytes = br1.ReadBytes(fieldLength[j]);

Regex regex = new Regex("\s+");

tempStr = regex.Replace(tempStr,"");

dt.Rows[i][j] = """+ tempStr+ """;

dbfstr = Regex.Split(result,"},"); //將解析后的屬性信息,轉字符串數組

return list; //將字符串數組遍歷,添加到集合后返回

}

調用WebService服務對文件流通過BinaryReader類的ReadInt和ReadByte等方法,根據文件結構以二進制流的方式對ShapeFile文件的.shp、.dbf、.shx文件進行解析,獲取點、線、面數據類型,以及點坐標和屬性文件。最后將解析后的數據以List集合方式返回,坐標list集合中每條點數據格式如圖2,屬性list集合中每條屬性數據格式圖3所示。

圖2 坐標List集合中每條數據格式圖Fig.2 Each data format chart in the coordinate List set

圖3 屬性List集合中每條數據格式圖Fig.3 Each data format graph in the attribute List collection

2.3 JSON格式傳輸數據

JSON是一種輕量級的數據交換格式[7],易于閱讀和編寫,同時也易于機器解析。每條JSON消息都是包含在大括號之內的,鍵值對組合中的鍵名寫在前面并用雙引號包含,鍵和值使用冒號分隔,冒號后面緊接著值,如:“key”:“value”;數組是用方括號包含起來的,如:[“zhou”,“zhang”]。相較于xml,JSON在傳輸的過程中采用了壓縮技術,傳輸的過程中更加節省寬帶而且傳輸更加高效。當大量的坐標信息以及屬性信息傳遞給前端瀏覽器的時候為了不引起瀏覽器卡頓,用戶等待時間過長,所以后臺需要將list集合進行遍歷,然后將字符串拼接成JSON格式的字符串再傳遞給前端。

以線的ShapeFile文件的解析為例。根據ArcGIS for JavaScript庫類提供的線的數據格式,將數據拼接成如下格式:

var myLine =[{ attributes:{“TNODE”:”7”,”LPOLY”:”2”},geometry:{"paths":[[[-91.40625,6.328125],[6.328125,19.3359375]]],

"spatialReference":{"wkid":4326}},

"symbol":{"color":[0,0,0,255],"width":1,"type":"esriSLS","style":"esriSLSSolid"}}];

核心代碼如下:

if(Convert.ToInt32(type)==3)

{

bdfstring1 = "{"+ ""attributes""+ ":"+bdfstring[i].ToString()+ "},"+ shapetype; //通過for循環,添加屬性信息

dbfstr = "["+ str.Remove(0,1)+ "]],"+ ""spatialReference""+ ":"+ "{"+ ""wkid""+ ":"+ 4326+ " }"+ "},"+ ""type""+ ":"+3+"},"; //通過for循環,添加坐標系信息

}

傳遞給前端的JSON字符串格式如圖4。

2.4 利用ArcGIS for JavaScript庫類展示數據

ArcGIS for JavaScript庫類是ESRI根據JavaScript技術實現的一組腳本,可以將ArcGIS Server提供的地圖資源和其它資源(ArcGIS Online)嵌入到Web應用中。有豐富的網絡資源、基于功能強大的Dojo JavaScript工具包、開發和部署都是完全免費的等優點。

前臺通過調用ArcGIS for JavaScript的GraphicLayer、Graphic和Geometry等接口對后臺還回的JSON數據進行解析。創建一個新的圖層,然后根據ArcGIS for JavaScript 框架提供的Graphic類new Graphic(geometry?,symbol?,attributes?,infoTemplate?)將解析后的數據傳遞給瀏覽器渲染展示。通過InfoTemplate類new InfoTemplate(JSON)將屬性信息展示出來。

圖5 中國省級行政區界線讀取Fig.5 Reading of China’s provincial administrative boundaries

圖6 中國省級行政區界線面讀取Fig.6 Reading the boundary surface of provincial administrative regions in China

圖4 傳遞給前端的JSON字符串格式Fig.4 JSON string format passed to the front end

//設置線的顏色寬度

var myLine = {"symbol":{ "color":[0,0,0,255],"width":2,"type":"esriSLS","style":"esriSLSSolid" }};

//設置屬性窗口

var infoTemplate = new mapAPI.InfoTemplate("Attributes",JSON.parse(attri));

//創建一個新的圖層

var countyLayer = new map.GraphicsLayer();

//將圖層添加到地圖上

countyLayer.add(gra);

map.addLayer(countyLayer);

3 實例驗證

本文采用中國省級行政區界.shp矢量地圖數據,用來驗證編寫的系統讀寫ShapeFile 圖形文件的功能。采用谷歌瀏覽器,利用VS 2012,在.NET 4.5的環境下完成。Esri提供的底圖是WGS 84坐標系。

(1) 讀取中國省級行政區界.shp,如圖5所示。

(2) 讀取中國省級行政區界.shp面信息,以及屬性信息,如圖6所示。

(3) 中國省級行政區界屬性信息的讀取展示,如圖7所示。

4 結論

本文首先介紹了Shapefile圖形文件的基本結構,根據ShapeFile文件的結構在.NET環境下利用 Microsoft Visual Studio2012平臺開發了可以展示ShapeFile圖形及其屬性信息的WebGIS系統,加深了對網絡傳輸、JSON字符串、以二進制文件流的方式解析文件、WebGIS系統開發以及ShapeFile文件結構等的理解,對后期各學者建設WebGIS平臺提供借鑒。

圖7 中國省級行政區界屬性信息顯示Fig.7 Attribute information display of provincial administrative boundaries in China

猜你喜歡
結構信息
《形而上學》△卷的結構和位置
哲學評論(2021年2期)2021-08-22 01:53:34
論結構
中華詩詞(2019年7期)2019-11-25 01:43:04
新型平衡塊結構的應用
模具制造(2019年3期)2019-06-06 02:10:54
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
論《日出》的結構
創新治理結構促進中小企業持續成長
現代企業(2015年9期)2015-02-28 18:56:50
展會信息
中外會展(2014年4期)2014-11-27 07:46:46
基于BIM的結構出圖
信息
建筑創作(2001年3期)2001-08-22 18:48:14
健康信息
祝您健康(1987年3期)1987-12-30 09:52:32
主站蜘蛛池模板: 欧美成人aⅴ| 色悠久久久久久久综合网伊人| 999精品在线视频| 五月激情婷婷综合| 国产无码精品在线播放| 国产无码在线调教| 91青青在线视频| 亚洲中文字幕在线一区播放| 欧美一区二区福利视频| 中国毛片网| 日韩av在线直播| 人妻精品久久久无码区色视| 国产精品免费入口视频| 国产精品jizz在线观看软件| 久久青草精品一区二区三区 | 九色国产在线| 国产精品部在线观看| 国产欧美日韩va另类在线播放| 国产精品女熟高潮视频| 久久一级电影| 免费高清a毛片| 国产欧美视频综合二区| 无码在线激情片| 亚洲午夜福利在线| 久久国产精品娇妻素人| 亚洲av综合网| 国产自在线拍| 亚洲AV无码乱码在线观看代蜜桃| 成人免费黄色小视频| 成人免费视频一区| 97精品久久久大香线焦| 99成人在线观看| 国产精品人成在线播放| 国产精品妖精视频| 免费又黄又爽又猛大片午夜| 国产精品国产主播在线观看| 久久99热这里只有精品免费看| 美女毛片在线| 亚洲综合中文字幕国产精品欧美| 青青草91视频| 国产黄网站在线观看| 日韩不卡高清视频| 国产日韩精品一区在线不卡| 99精品高清在线播放| 青青草91视频| 国产精品一区二区不卡的视频| 午夜精品影院| 午夜天堂视频| 免费xxxxx在线观看网站| 国产美女久久久久不卡| 日本黄色a视频| 久久亚洲高清国产| 亚洲精品视频在线观看视频| 久久天天躁夜夜躁狠狠| 久久99国产精品成人欧美| 呦女精品网站| 国产内射在线观看| 沈阳少妇高潮在线| 思思99热精品在线| 色哟哟国产精品| 国产欧美日韩综合一区在线播放| 欧美成a人片在线观看| 国产精品手机在线观看你懂的| 欧美成人精品在线| 伦伦影院精品一区| 亚洲无码高清一区| 极品国产在线| 伊人婷婷色香五月综合缴缴情| 亚洲第一页在线观看| 免费A∨中文乱码专区| 成人一区在线| 91成人免费观看在线观看| 就去色综合| 夜夜操狠狠操| 制服丝袜无码每日更新| 99视频在线精品免费观看6| 色亚洲激情综合精品无码视频 | 欧美日韩一区二区在线免费观看| 亚洲人成网站色7777| 曰韩人妻一区二区三区| 亚洲无码不卡网| 亚洲国产成人精品一二区|