日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gdal - ogr简单对象模型

發布時間:2023/11/30 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gdal - ogr简单对象模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ogr是gdal的一部分,主要是處理gis的矢量數據。

ogr的地理數據模型符合OGC的簡單數據對象模型標準,如下圖:

最頂層是Geometry類,下面的點(Point),曲線(Curve),表面(Surface)分別繼承于它。然后geometry與投影相關的類成關聯關系。

線串(LineString)繼承于曲線(Curve),且線串(LineString)由點(Point)聚焦而成,一對連續的點決定一個線段。

線(Line)與環線(LinearRing)同時繼承于線串(LineString)。

線(Line)是只有兩個點的線串(LineString)。

環線(LinearRing)是一種特殊的線串(LineString),如下圖所示:

a,b,c,d四個LineString中,只有c是LineRing,因為只有c是簡單(即不自交)且閉合的。

?

表面(Surface)?是二維的地理對象。

多面體表面(PolyhedralSurfaces)與多邊形(Polygon)承繼與它。
多面體表面(PolyhedralSurfaces)是由多個簡單表面(Surface)構成的。如下圖所示:

多邊形(Polygon)是一個平面表面,有一個外部邊界及0或多個內部邊界,每一個內部邊界叫做多邊形的一個洞。如下圖所示:

而三角形(Triangle)繼承于多邊形(Polygon),三角形是由3個不同的,且非共同線頂點構成的,沒有內部邊界。

多曲線(MultiCurve)是有多個Curve構成的集合。如下圖所示:

MultiCurve是一個抽象類,給子類定義了很多接口。且有以下性質:

MultiCurve當且僅當所有子Curve都是簡單(無自交)才是簡單的多曲線;兩個子曲線的邊界都是他們的交點。

MultiCurve的邊界的確定采用除2原則:A Point is in the boundary of a MultiCurve if it is in the boundaries of an odd number of elements of the MultiCurve。

a的邊界是{s1,e2},b的邊界是{s1,e1},c的邊界是空。

如果MultiCurve的子Curve都是閉合的,那它也是閉合的,此時邊界總為空。MultiCurve是定義成拓撲閉合的。

?

MultiSurface是Surface的集合,但是PolyhedralSurface并不是MultiSurface。

因為它違反了MultiSurface的規則:子Polygon的邊界相交于有限有點。

---------------------------------------------------------------------------------------

具體類的說明:

Geometry (ogr_geometry.h): geometry類(OGRGeometry等) 定義了所有矢量數據類(如下圖),一些空間分析功能,wkt,wkb的轉換,以及投影的引用。

OGRGeometryFactory類用來轉換將wkb/wkt與geometry的對象互相轉換。

OGRGeometry類中有一個OGRSpatialReference類的對象,用來定義投影的相關信息。

OGRSpatialReference(ogr_spatialref.h):)支持地理坐標系統,投影坐標系統。但縱坐標系統,地心坐標系統和復合(水平+垂直)坐標系統不支持。

坐標系統間的轉換在OGRCoordinateTransformation類中調用了proj.4的東西。

??

OGRGeometry的成員文檔:http://www.gdal.org/ogr/classOGRGeometry.html

?

OGRFeature(ogr_feature.h):OGRFeature類里描述了OGRGeometry的空間信息,屬性信息,fid,以及類的標識。

OGRFeatureDefn類里描述了一個圖層的字段信息,包括字段名稱,字段類型,字段屬性。

fid是空間數據的主鍵,定義成長整型,gml內是string型,oracle里的rowid是大于4bytes的.

OGRFeatureDefn::GetGeomType()).返回空間數據的類型(OGRwkbGeometryType),wkbUnknown的話則任意類型都可以。

?

OGRLayer (ogrsf_frmts.h):表示數據源中的一層空間數據,可以認為OGRLayer是從底層數據源讀取數據的一個中繼。

OGRLayer::GetNextFeature()可以隨機或順序讀取?.

?

一個OGRLayer和一個OGRFeature是一一對應的。

?

OGRDataSource (ogrsf_frmts.h):?一個OGRDataSource對象表示一個文件或數據庫,含有多個OGRLayer對象。

?

?

?

OGRSFDriver(ogrsf_frmts.h): OGRSFDriver翻譯各種矢量數據類型,是打開各種數據對象的驅動。

所有的數據驅動在?OGRSFDriverRegistrar類中管理。

?

-----------------------------------------------------------

讀取一個shp的步驟

? 1,

????? //注冊數據驅動--ALL所有格式

OGRRegisterAll();

?2,

????? //打開數據源

?

OGRDataSource *poDS = OGRSFDriverRegistrar::Open("E:\\exercise\\qt\\qmapcui-build-desktop\\debug\\ZW0817P.shp"); ? ?3,?

??? //獲取圖層

??? OGRLayer *poLayer = poDS->GetLayer(0);

? 4,

?? //獲取數據

?? OGRFeature *poFeature = poLayer->GetFieldAsString(0);

?

5,通過poFeature的各種函數就可以讀出數據了。

?

6,關閉數據源。

OGRDataSource::DestroyDataSource(poDS);

轉載于:https://www.cnblogs.com/zhanglibo0626/archive/2011/04/01/2002743.html

總結

以上是生活随笔為你收集整理的gdal - ogr简单对象模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。