2014年10月23日 星期四

ESRI Shapefile(shp)基本必要檔案,與QGIS所產生的檔案,運用Spatialite各種工具之測試,c++之解決方案

The purpose :

1.確認Shapefile的檔案格式必要的,還我們常會用到的,常用到在此定義為QGIS所建立出來的檔案
2.如何確認Shapefile的正確性
2.1.絕對必須要有哪些檔案,這方面我個人認為我們在load shapefile 若是沒有主要的三個檔案,絕對會出現錯誤訊息,也不會讓你這樣load進去
2.2修改不同的檔案進行測試,例如:將dbf檔案內容亂改後,再進行inport動作
3.判斷SRID,SRID式存在於.prj的檔案格式中,若是沒有這個檔案,其實也無法判斷
4.判斷字碼,自動的轉換字碼,通常存在於.cpg檔案內,但是沒有此檔案的判斷方式...,再想想吧


Starts:

1.Mandatory files for Shapefile:
.shp
圖形,形狀
.shx
儲存shp的位置
.dbf
用來存放所有資料屬性,不包含幾  ,例如pk,id,name這類的

2.QGIS out put Shapefile:
.shp
同上
.shx
同上
.dbf
同上
.cpg
字碼
.prj
座標系統,純文檔
.qpj
QGIS使用的投影座標系統
3.Spatialite_Gui export:
.shp , .shx , .dbf , .cpg


Test1:絕對要有.shp 但測試若沒有另外兩個檔案是否能成功load近來,沒shp還叫load shapefile嗎...

Spatialite_Gui :缺少兩個檔案皆出現錯誤訊息
spatialite  :缺少兩個檔案 也會出現錯誤訊息,並會說無法load到哪一個檔案
spatialite_tool :同spatialite

Test2:以上shapefile的正確性,要的話就是作一次select看看geometry的欄位到底是否有東西,例如如果錯誤SELECT(ASTEXT)就會出現NULL,但是有些情況下,例如之前學長說的要作沒有geometry的shapefile 情況是否考量,但是正常來講shapefile沒有geometry圖形很怪,我想以上就是檢查shapefile檔案正確性的方式

test3.要檢查srid?使用以上的方式開啟prj無法開啟,但奇怪的是記事本事可以讀prj檔的,而我覺得要去作出自動判斷使用者不給srid的方式是有困難的.除非自己作比對用的geometry表格,看作標是否在台灣之內..但是可能有tw97 和67的問題產生
#include<iostream>
#include<fstream>

using namespace std;
#define SIZE 100
char line[SIZE];

int main(){
fstream fin;
fin.open("C:\\Users\\pjtseng\\Desktop\\qgis\\qgis.qpj", ios::in);
while (fin.getline(line, sizeof(line), '\n')){
cout << line << endl;
}

system("pause");
return 0;
}

test4. 但是以上的方式可以讀取.cpg檔案,如果有cpg檔案的話就可以得知字碼,但是要去想如果使用者不給字碼加上也沒有cpg檔案時的方法...



沒有留言:

張貼留言