GDAL不支援建立PCIDSK的面狀向量格式

2021-06-28 02:29:50 字數 1746 閱讀 6235

最近在使用gdal建立pcidsk格式的向量資料,發現建立點和線的向量資料都沒問題,建立面狀的只有屬性表沒有圖形。在gdal官網說明也寫的是支援的,位址為:

實在沒辦法,翻看gdal原始碼才發現,setfeature的時候,只寫了wkbpoint和wkblinestring型別,其他的加了句debug**如下:

cpldebug( "pcidsk", "unsupported geometry type in setfeature(): %s",

pogeometry->getgeometryname() );

這也太……沒辦法只好自己研究研究補齊了。

通過檢視gdal讀取發現,對於面狀的向量,pcidsk在向量段裡面的屬性表裡面多存了乙個字段,叫ringstart,型別為intlist,用來儲存多邊形中各個環的起始點號。對於pcidsk的向量資料,所有的點都是儲存在乙個大的陣列裡面的,對於多邊形而言,可能有多個環組成,這些環裡面所有的點全部都存在乙個陣列中,如何來區分每個環的頂點座標,就需要通過ringstart裡面的值來進行分割。知道了儲存的原理,那麼就按照這個原理將寫多邊形的部分補上就可以了。修改後的**如下:

else if( wkbflatten(pogeometry->getgeometrytype()) == wkbpolygon )

for (int iring=0; iring < nringsize; iring++)

}if(iringstartfield == -1)

std::vectoraoshapefields;

povecseg->getfields(id, aoshapefields);

aoshapefields[iringstartfield].setvalue(anringstart);

povecseg->setfields( id, aoshapefields );

}

修改完之後,重新編譯gdal就可以了。

********************===修改於2023年1月9日********************====

通過上面的**是可以生成乙個面狀的pix檔案,使用gdal開啟也沒問題,但是使用focus或者mosaictool開啟的時候會造成這兩個程式崩潰,同時屬性值顯示會有一定點問題。今天再仔細檢視了下讀取部分的**,發現對於沒有內環的多邊形,也就是說乙個feature裡面只有乙個多邊形的時候,不需要寫ringstart這個屬性值,只有含油內環的時候,也就是多邊形中有內環的時候才需要,所以將上面的**修改為下面的**:

else if( wkbflatten(pogeometry->getgeometrytype()) == wkbpolygon )

int nringsize = popoly->getnuminteriorrings();

if(nringsize > 0 )

}if(iringstartfield == -1)

std::vectoraoshapefields;

povecseg->getfields(id, aoshapefields);

aoshapefields[iringstartfield].setvalue(anringstart);

povecseg->setfields( id, aoshapefields );

}}

通過測試發現,這下生成的使用foucs和mosaictool可以正常開啟,程式也不會出現崩潰的情況,但是屬性值顯示仍然有點小問題,不過已經不影響使用了。

mysql不支援 MySQL不支援的特性

mysql 1 不支援物化檢視。2 不支援位圖索引。3 不支援並行查詢。4 不支援雜湊關聯,mysql的所有關聯都是巢狀迴圈關聯。不過,可以通過建立乙個雜湊索引來曲線實現。5 不允許對同一表同時進行查詢和更新。報錯 update tb1 as outer tb1 set cnt select cou...

rsyslog input 不支援變數

input type imfile file usr local apache tomcat 7.0.55 8082 logs localhost access log.txt tag zjzc api access01 severity info facility local5 不支援這種寫法 i...

linux vi 不支援中文

問題說明 網頁html與chi語言的結合,使用c語言輸出html語句,因為其中用到中文,出現亂碼 問題解決 1.在cgi中用到的 使用utf 8編碼,utf 8是國際統一的中文編碼 具體語句為 fprintf cgiout,metacharset utf 8 參考文章 2.上述步驟完成後,重新編譯,...