资源描述
OGR,官网:http:/www.gdal.org/ogr OGR是一个开源的矢量空间数据的读写、转换器,已被松散集成到GDAL中。 目前支持40多种格式(http:/www.gdal.org/ogr/ogr_formats.html) C/C+,OGR数据模型,核心对象 驱动(Driver) 数据源(DataSource) 图层(Layer) 要素(Feature) 几何图形(Geometry) 其他相关对象 要素定义(FeatureDefn) 字段定义(FieldDefn) 空间参照系统定义(SpatialReference) ,函数命名规律,OGR_DS_xxx:数据源操作 OGR_L_xxx:图层操作 OGR_FD_xxx:要素定义操作 OGR_F_xxx:要素操作 OGR_G_xxx:几何图形操作 OGR_Fld_xxx:字段定义操作,注册所有格式,注册所有格式 OGRRegisterAll(); 注意: 必须在编译时打开格式开关。 通常在程序中调用其他OGR函数之前,必须首先调用此函数,数据集,打开 OGROpen 释放 OGR_DS_Destroy,OGRDataSourceH OGROpen ( const char * pszName, int bUpdate, OGRSFDriverH * pahDriverList ) 遍历所有支持的格式,直到成功打开,或者没有合适的驱动则返回NULL。成功返回数据源句柄。 bUpdate:FALSE:只读方式打开,TRUE:读写方式打开。 pahDriverList:是输出参数,如果成功打开,可返回打开的驱动。 void OGR_DS_Destroy ( OGRDataSourceH hDataSource ) 释放打开的数据源,打开和释放数据集,数据集常用操作,OGR_DS_GetName 获取数据源名称 OGR_DS_GetLayerCount 获取图层数 OGR_DS_GetLayer 根据索引号打开图层,返回图层句柄 OGR_DS_GetLayerByName 根据图层名打开图层,返回图层句柄 OGR_DS_DeleteLayer 根据索引号删除图层 OGR_DS_CreateLayer 创建新图层,图层,一个数据集中可以包含多个图层 图层由多个要素构成 可以基于给定条件搜索要素,图层基本信息操作,OGR_L_GetLayerDefn 获取图层定义信息 OGR_L_GetSpatialRef 获取图层空间参照系统信息(投影信息) OGR_L_GetFeatureCount 获取要素数目 OGR_L_GetExtent 获取外接矩形范围 OGR_L_GetFIDColumn 获取FID所在字段的字段名 OGR_L_GetGeometryColumn 获取geometry所在字段的字段名,图层要素操作,OGR_L_GetFeature 根据FID获取要素 OGR_L_SetFeature 根据FID修改要素 OGR_L_CreateFeature 创建新的要素 OGR_L_DeleteFeature 删除要素,图层要素查找,OGR_L_ResetReading 重置以开始读取下一个要素,调用OGR_L_GetNextFeature之前必须先调用本函数 OGR_L_GetNextFeature 获取下一个满足SpatialFilter条件的要素 OGR_L_SetSpatialFilter 设置空间搜索geometry(目前只支持Intersect),且可能不准确 OGR_L_SetSpatialFilterRect 设置矩形搜索范围(目前只支持Intersect),且可能不准确 OGR_L_GetSpatialFilter 获取空间搜索的geometry,要素,要素代表空间对象,包括空间信息和属性信息 要素用FID标识 空间信息用几何图形(geometry)标识 属性信息用关系模型的字段标识 要素还与空间参照系统相关联,要素基本信息操作,OGR_F_Create OGR_F_Destroy 所有的Feature在使用完后,一定要使用本函数来释放内存。 OGR_F_GetDefnRef OGR_F_GetFieldCount OGR_F_GetFieldDefnRef OGR_F_GetFieldIndex,获取要素字段值,FID: OGR_F_GetFID 空间信息: OGR_F_GetGeometryRef 属性信息: OGR_F_GetFieldAsInteger OGR_F_GetFieldAsDouble OGR_F_GetFieldAsString OGR_F_GetFieldAsIntegerList OGR_F_GetFieldAsDoubleList OGR_F_GetFieldAsStringList OGR_F_GetFieldAsBinary OGR_F_GetFieldAsDateTime,设置要素字段值,FID: OGR_F_SetFID 空间信息: OGR_F_SetGeometry OGR_F_SetGeometryDirectly 属性信息 OGR_F_SetFieldInteger OGR_F_SetFieldDouble OGR_F_SetFieldString OGR_F_SetFieldIntegerList OGR_F_SetFieldDoubleList OGR_F_SetFieldStringList OGR_F_SetFieldBinary OGR_F_SetFieldDateTime,几何图形,几何图形代表空间几何形状,是要素的空间信息,可以存在独立于要素之外的几何图形。 几何图形操作包括对构成几何图形的点进行增删改等操作、空间相互关系操作、坐标变换操作等,几何图形基本信息操作,OGR_G_GetDimension OGR_G_GetEnvelope OGR_G_GetArea OGR_G_Centroid OGR_G_IsSimple OGR_G_IsRing,几何图形坐标点操作,OGR_G_GetPointCount OGR_G_GetX OGR_G_GetY OGR_G_GetZ OGR_G_GetPoint OGR_G_AddPoint OGR_G_AddPoint_2D OGR_G_SetPoint OGR_G_SetPoint_2D,复合几何图形操作,OGR_G_GetGeometryCount OGR_G_GetGeometryRef OGR_G_AddGeometry OGR_G_RemoveGeometry,空间关系判断操作,OGR_G_Intersects OGR_G_Equals OGR_G_Disjoint OGR_G_Touches OGR_G_Crosses OGR_G_Within OGR_G_Contains OGR_G_Overlaps,空间关系运算,OGR_G_GetBoundary OGR_G_ConvexHull OGR_G_Buffer OGR_G_Intersection OGR_G_Union OGR_G_Difference OGR_G_Distance,坐标变换,OGR_G_Transform OGR_G_TransformTo,要素定义(FeatureDefn),要素定义对象( FeatureDefn )与图层相关联,是图层的重要属性,它确定了图层的结构 FeatureDefn主要由若干个字段构成 FeatureDefn 通常至少包含两个重要的字段:FID和Geometry。FID用长整数表示,Geometry是抽象类型。,要素定义操作,OGR_FD_Create OGR_FD_Destroy OGR_FD_GetName OGR_FD_GetFieldCount OGR_FD_GetFieldDefn OGR_FD_GetFieldIndex OGR_FD_AddFieldDefn OGR_FD_SetGeomType,常用的空间数据类型,wkbPoint = 1, wkbLineString = 2, wkbPolygon = 3, wkbMultiPoint = 4, wkbMultiLineString = 5, wkbMultiPolygon = 6, wkbGeometryCollection = 7,字段定义操作,字段定义用于定义图层的属性表结构 每个字段通常包含:名字、类型、宽度、小数位(实数类型)等信息,字段定义操作,OGR_Fld_Create OGR_Fld_SetName OGR_Fld_GetNameRef OGR_Fld_GetType OGR_Fld_SetType OGR_Fld_GetWidth OGR_Fld_SetWidth OGR_Fld_GetPrecision OGR_Fld_SetPrecision,/* Simple 32bit integer */ OFTInteger = 0, /* List of 32bit integers */ OFTIntegerList = 1, /* Double Precision floating point */ OFTReal = 2, /* List of doubles */ OFTRealList = 3, /* String of ASCII chars */ OFTString = 4, /* Array of strings */ OFTStringList = 5, /* Double byte string (unsupported) */ OFTWideString = 6, /* List of wide strings (unsupported) */ OFTWideStringList = 7, /* Raw Binary data */ OFTBinary = 8, /* Date */ OFTDate = 9, /* Time */ OFTTime = 10, /* Date and Time */ OFTDateTime = 11,空间参照系统(OGRSpatialReference),遵循OGC的坐标转换规范(OpenGIS Coordinate Transformations specification) 使用WKT格式描述坐标系统 调用PROJ.4实现投影变换,投影设置,OGRSpatialReference oSRS; oSRS.SetGeogCS( My geographic coordinate system, WGS_1984, My WGS84 Spheroid, SRS_WGS84_SEMIMAJOR, SRS_WGS84_INVFLATTENING, Greenwich, 0.0, degree, SRS_UA_DEGREE_CONV );,WKT格式,PROJCSUTM 17 (WGS84) in northern hemisphere., GEOGCSWGS 84, DATUMWGS_1984, SPHEROIDWGS 84,6378137,298.257223563, AUTHORITYEPSG,7030, TOWGS840,0,0,0,0,0,0, AUTHORITYEPSG,6326, PRIMEMGreenwich,0,AUTHORITYEPSG,8901, UNITDMSH,0.0174532925199433,AUTHORITYEPSG,9108, AXISLat,NORTH, AXISLong,EAST, AUTHORITYEPSG,4326, PROJECTIONTransverse_Mercator, PARAMETERlatitude_of_origin,0, PARAMETERcentral_meridian,-81, PARAMETERscale_factor,0.9996, PARAMETERfalse_easting,500000, PARAMETERfalse_northing,0,
展开阅读全文