Skip to content

WuZixing/Geo3DML-CPP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Geo3DML-CPP

Geo3DML C++ SDK.

包含三个库:

  1. geo3dml

定义Geo3DML规定的数据结构。 其中,几何数据结构是抽象的,开发者可以基于自有系统的内部数据结构来实现,以期达到导入导出Geo3DML数据时避免内存数据相互转换的目的。

编译&链接:

include_directories(${GEO3DML_INCLUDE_DIRS})
...
target_link_libraries(${xxx} ${GEO3DML_LIBRARIES})
  1. g3dxml

Geo3DML XML文件读写库。仅支持UTF8编码。

编译&链接:

include_directories(${G3DXML_INCLUDE_DIRS})
...
target_link_libraries(${xxx} ${G3DXML_LIBRARIES})
  1. g3dvtk

可选。基于VTK实现了Geo3DML的几何数据结构。

编译&链接:

set(USE_G3DVTK_LIBRARIES ON)
...
include_directories(${G3DVTK_INCLUDE_DIRS})
...
target_link_libraries(${xxx} ${G3DVTK_LIBRARIES})
  1. 示例

基于g3dvtk读取文件。

#include <g3dvtk/ObjectFactory.h>
#include <g3dxml/XMLReader.h>

//......
std::string xmlFilePath = "d:\\data.xml";
// 构造Geo3DML对象工厂。
g3dvtk::ObjectFactory g3dFactory;
// 读取文件。
g3dxml::XMLReader xmlReader(&g3dFactory);
geo3dml::Object* g3dObject = xmlReader.LoadXMLFile(xmlFilePath);  // 该方法可读取工程或者模型。
// 检查返回的对象类型。
geo3dml::Model* model = dynamic_cast<geo3dml::Model*>(g3dObject);
if (model != NULL) {
  // 按模型处理。
  // ......
} else {
  geo3dml::Project* project = dynamic_cast<geo3dml::Project*>(g3dObject);
  if (project != NULL) {
    project->BindFeatureClassesToLayers(&g3dFactory); // 将要素类与图层绑定起来。
    // 按工程中的*geo3dml::Map*和*geo3dml::Model*来处理。
    // ......
  }
}

详细示例可参考项目OpenGeo3D@Github或者OpenGeo3D@Gitee