FileGDB API for linux学习系列之五,获取对象的定义

来源:互联网 发布:古代士兵装备知乎 编辑:程序博客网 时间:2024/04/28 22:47

FileGDB API for linux 提供了获取对象定义的函数,但是获取出来的结果都是以XML形式存在,对于表,FeatureClass,FeatureDataset等对象已经足够了,

以下的例子是获得各种对象定义的例子程序,包括Table, FeatureClass, FeatureDataset等等对象的定义。

#include #include #include <string>#include #include #include #include #define EXT_FILEGDB_API _declspec(dllimport)#pragma warning (disable : 4251)#include "Geodatabase.h"#include "GeodatabaseManagement.h"#include "Table.h"using namespace std;using namespace FileGDBAPI;Geodatabase geodatabase;int main(){    // Create a new geodatabase in the current directory.  long hr;  // Re-open the geodatabase.  if ((hr = OpenGeodatabase(L"../data/TestFileGDB.gdb", geodatabase)) != S_OK)  {    cout << "An error occurred while opening the geodatabase." << endl;    cout << "Error code: " << hr << endl;    return -1;  }  cout << "The geodatabase has been opened." << endl;  Table table;  if((hr = geodatabase.OpenTable(L"//TSType",table)) != S_OK)  {           cout << "An error occurred while open the table." << endl;           cout << "Error code: " << hr <return -1;  }  std::string tableDef;  if(S_OK == table.GetDefinition(tableDef))  {        cout << "the table TSType definition: " << tableDef << endl;  }  // Close the geodatabase before the delete.  if((hr = geodatabase.CloseTable(table)) != S_OK)  {    cout << "An error occurred while closing the table." << endl;    cout << "Error code: " << hr << endl;    return -1;  }  std::string featuredatasetDef;  if(S_OK == geodatabase.GetDatasetDefinition(L"//Drainage",L"Feature Dataset",featuredatasetDef))  {    cout << "the featuredataset Drainage definition is: " << featuredatasetDef << endl;  }  std::string featureclassDef;  if(S_OK == geodatabase.GetDatasetDefinition(L"//Basin_1",L"Feature Class",featureclassDef))  {      cout << "the featureclass Catchment definition is:" << featureclassDef << endl;  }    if ((hr = CloseGeodatabase(geodatabase)) != S_OK)  {    cout << "An error occurred while closing the geodatabase." << endl;    cout << "Error code: " << hr << endl;    return -1;  }  return 0;}
运行结果如下:
The geodatabase has been opened.the table TSType definition: xml version="1.0" encoding="UTF-8"?><DataElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:esri="http://www.esri.com/schemas/ArcGIS/10.0" xsi:type="esri:DETable">  <CatalogPath>/TSTypeCatalogPath>  <Name>TSTypeName>  <ChildrenExpanded>falseChildrenExpanded>  <DatasetType>esriDTTableDatasetType>  <DSID>18DSID>  <Versioned>falseVersioned>  <CanVersion>falseCanVersion>  <ConfigurationKeyword/>  <HasOID>trueHasOID>  <OIDFieldName>OBJECTIDOIDFieldName>  <Fields xsi:type="esri:Fields">    <FieldArray xsi:type="esri:ArrayOfField">      <Field xsi:type="esri:Field">        <Name>OBJECTIDName>        <Type>esriFieldTypeOIDType>        <IsNullable>falseIsNullable>        <Length>4Length>        <Precision>0Precision>        <Scale>0Scale>        <Required>trueRequired>        <Editable>falseEditable>        <AliasName>OBJECTIDAliasName>        <ModelName>OBJECTIDModelName>      Field>      <Field xsi:type="esri:Field">        <Name>TSTypeIDName>        <Type>esriFieldTypeIntegerType>        <IsNullable>trueIsNullable>        <Length>4Length>        <Precision>0Precision>        <Scale>0Scale>        <AliasName>TSTypeIDAliasName>        <ModelName>TSTypeIDModelName>      Field>      <Field xsi:type="esri:Field">        <Name>VariableName>        <Type>esriFieldTypeStringType>        <IsNullable>trueIsNullable>        <Length>255Length>        <Precision>0Precision>        <Scale>0Scale>        <AliasName>VariableAliasName>        <ModelName>VariableModelName>      Field>      <Field xsi:type="esri:Field">        <Name>UnitsName>        <Type>esriFieldTypeStringType>        <IsNullable>trueIsNullable>        <Length>20Length>        <Precision>0Precision>        <Scale>0Scale>        <AliasName>UnitsAliasName>        <ModelName>UnitsModelName>      Field>      <Field xsi:type="esri:Field">        <Name>IsRegularName>        <Type>esriFieldTypeIntegerType>        <IsNullable>trueIsNullable>        <Length>4Length>        <Precision>0Precision>        <Scale>0Scale>        <AliasName>IsRegularAliasName>        <ModelName>IsRegularModelName>        <Domain>          <DomainName>AHBooleanDomainName>          <FieldType>esriFieldTypeIntegerFieldType>          <MergePolicy>esriMPTDefaultValueMergePolicy>          <SplitPolicy>esriSPTDefaultValueSplitPolicy>          <Description/>          <Owner/>          <CodedValues xsi:type="esri:ArrayOfCodedValue">            <CodedValue xsi:type="esri:CodedValue">              <Name>TrueName>              <Code xsi:type="xs:int">1Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>FalseName>              <Code xsi:type="xs:int">0Code>            CodedValue>          CodedValues>        Domain>      Field>      <Field xsi:type="esri:Field">        <Name>TSIntervalName>        <Type>esriFieldTypeIntegerType>        <IsNullable>trueIsNullable>        <Length>4Length>        <Precision>0Precision>        <Scale>0Scale>        <AliasName>TSIntervalAliasName>        <ModelName>TSIntervalModelName>        <Domain>          <DomainName>TSIntervalTypeDomainName>          <FieldType>esriFieldTypeIntegerFieldType>          <MergePolicy>esriMPTDefaultValueMergePolicy>          <SplitPolicy>esriSPTDefaultValueSplitPolicy>          <Description/>          <Owner/>          <CodedValues xsi:type="esri:ArrayOfCodedValue">            <CodedValue xsi:type="esri:CodedValue">              <Name>1MinuteName>              <Code xsi:type="xs:int">1Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>2MinuteName>              <Code xsi:type="xs:int">2Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>3MinuteName>              <Code xsi:type="xs:int">3Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>4MinuteName>              <Code xsi:type="xs:int">4Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>5MinuteName>              <Code xsi:type="xs:int">5Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>10MinuteName>              <Code xsi:type="xs:int">6Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>15MinuteName>              <Code xsi:type="xs:int">7Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>20MinuteName>              <Code xsi:type="xs:int">8Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>30MinuteName>              <Code xsi:type="xs:int">9Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>1HourName>              <Code xsi:type="xs:int">10Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>2HourName>              <Code xsi:type="xs:int">11Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>3HourName>              <Code xsi:type="xs:int">12Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>4HourName>              <Code xsi:type="xs:int">13Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>6HourName>              <Code xsi:type="xs:int">14Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>8HourName>              <Code xsi:type="xs:int">15Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>12HourName>              <Code xsi:type="xs:int">16Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>1DayName>              <Code xsi:type="xs:int">17Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>1WeekName>              <Code xsi:type="xs:int">18Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>1MonthName>              <Code xsi:type="xs:int">19Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>1YearName>              <Code xsi:type="xs:int">20Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>OtherName>              <Code xsi:type="xs:int">99Code>            CodedValue>          CodedValues>        Domain>      Field>      <Field xsi:type="esri:Field">        <Name>DataTypeName>        <Type>esriFieldTypeIntegerType>        <IsNullable>trueIsNullable>        <Length>4Length>        <Precision>0Precision>        <Scale>0Scale>        <AliasName>DataTypeAliasName>        <ModelName>DataTypeModelName>        <Domain>          <DomainName>TSDataTypeDomainName>          <FieldType>esriFieldTypeIntegerFieldType>          <MergePolicy>esriMPTDefaultValueMergePolicy>          <SplitPolicy>esriSPTDefaultValueSplitPolicy>          <Description/>          <Owner/>          <CodedValues xsi:type="esri:ArrayOfCodedValue">            <CodedValue xsi:type="esri:CodedValue">              <Name>InstantaneousName>              <Code xsi:type="xs:int">1Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>CumulativeName>              <Code xsi:type="xs:int">2Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>IncrementalName>              <Code xsi:type="xs:int">3Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>AverageName>              <Code xsi:type="xs:int">4Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>MaximumName>              <Code xsi:type="xs:int">5Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>MinimumName>              <Code xsi:type="xs:int">6Code>            CodedValue>          CodedValues>        Domain>      Field>      <Field xsi:type="esri:Field">        <Name>OriginName>        <Type>esriFieldTypeIntegerType>        <IsNullable>trueIsNullable>        <Length>4Length>        <Precision>0Precision>        <Scale>0Scale>        <AliasName>OriginAliasName>        <ModelName>OriginModelName>        <Domain>          <DomainName>TSOriginsDomainName>          <FieldType>esriFieldTypeIntegerFieldType>          <MergePolicy>esriMPTDefaultValueMergePolicy>          <SplitPolicy>esriSPTDefaultValueSplitPolicy>          <Description/>          <Owner/>          <CodedValues xsi:type="esri:ArrayOfCodedValue">            <CodedValue xsi:type="esri:CodedValue">              <Name>RecordedName>              <Code xsi:type="xs:int">1Code>            CodedValue>            <CodedValue xsi:type="esri:CodedValue">              <Name>GeneratedName>              <Code xsi:type="xs:int">2Code>            CodedValue>          CodedValues>        Domain>      Field>    FieldArray>  Fields>  <CLSID>{7A566981-C114-11D2-8A28-006097AFF44E}CLSID>  <EXTCLSID/>  <RelationshipClassNames xsi:type="esri:Names"/>  <AliasName/>  <ModelName>TSTypeModelName>  <HasGlobalID>falseHasGlobalID>  <GlobalIDFieldName/>  <RasterFieldName/>  <ExtensionProperties xsi:type="esri:PropertySet">    <PropertyArray xsi:type="esri:ArrayOfPropertySetProperty"/>  ExtensionProperties>  <ControllerMemberships xsi:type="esri:ArrayOfControllerMembership"/>  <Indexes xsi:type="esri:Indexes">    <IndexArray xsi:type="esri:ArrayOfIndex">      <Index xsi:type="esri:Index">        <Name>FDO_OBJECTIDName>        <IsUnique>trueIsUnique>        <IsAscending>trueIsAscending>        <FieldArray xsi:type="esri:ArrayOfField">          <Field xsi:type="esri:Field">            <Name>OBJECTIDName>            <Type>esriFieldTypeOIDType>            <IsNullable>falseIsNullable>            <Length>4Length>            <Precision>0Precision>            <Scale>0Scale>            <Required>trueRequired>            <Editable>falseEditable>            <AliasName>OBJECTIDAliasName>            <ModelName>OBJECTIDModelName>          Field>        FieldArray>      Index>      <Index xsi:type="esri:Index">        <Name>G18TSTypeIDName>        <IsUnique>falseIsUnique>        <IsAscending>trueIsAscending>        <FieldArray xsi:type="esri:ArrayOfField">          <Field xsi:type="esri:Field">            <Name>TSTypeIDName>            <Type>esriFieldTypeIntegerType>            <IsNullable>trueIsNullable>            <Length>4Length>            <Precision>0Precision>            <Scale>0Scale>            <AliasName>TSTypeIDAliasName>            <ModelName>TSTypeIDModelName>          Field>        FieldArray>      Index>    IndexArray>  Indexes>DataElement>the featuredataset Drainage definition is: <DEFeatureDataset xsi:type='typens:DEFeatureDataset' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/10.0'><CatalogPath>/DrainageCatalogPath><Name>DrainageName><ChildrenExpanded>falseChildrenExpanded><DatasetType>esriDTFeatureDatasetDatasetType><DSID>19DSID><Versioned>falseVersioned><CanVersion>falseCanVersion><ConfigurationKeyword>ConfigurationKeyword><Extent xsi:nil='true'/><SpatialReference xsi:type='typens:ProjectedCoordinateSystem'><WKT>PROJCS["Clarke_1866_Albers",GEOGCS["GCS_Clarke_1866",DATUM["D_Clarke_1866",SPHEROID["Clarke_1866",6378206.4,294.9786982]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Albers"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-96.0],PARAMETER["Standard_Parallel_1",29.5],PARAMETER["Standard_Parallel_2",45.5],PARAMETER["Latitude_Of_Origin",23.0],UNIT["Meter",1.0]]WKT><XOrigin>-16901099.99967755XOrigin><YOrigin>-6971999.9998109061YOrigin><XYScale>7812.4999927240415XYScale><ZOrigin>0ZOrigin><ZScale>400000ZScale><MOrigin>0MOrigin><MScale>99999.999999999985MScale><XYTolerance>0.0010240000009536744XYTolerance><ZTolerance>2.0000000000000002e-005ZTolerance><MTolerance>2.0000000000000002e-005MTolerance><HighPrecision>trueHighPrecision>SpatialReference>DEFeatureDataset>段错误

这段代码可以显示出Table和FeatureDataset的定义,但是在显示FeatureDataset定义的时候就会crash掉,非常郁闷,感觉像一个bug(也正常,毕竟是beta版呀)。已提交给American Engineer 了。

原创粉丝点击