创建要素源

前端之家收集整理的这篇文章主要介绍了创建要素源前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

@H_301_1@MapGuide Stuido提供了非常友好的用户界面来创建一个要素源,使用起来也非常简单,所以本节中不会介绍如何使用MapGuide Studio来创建要素源,而是介绍如何以编程的方式创建一个要素源。

@H_301_1@最简单的编程式创建要素源的方法调用MgFeatureService::CreateFeatureSource(…),它的方法签名如下所示,其中参数resource用于指定新建要素源的IDsourceParams用于指定创建要素源所需的参数。目前,此方法支持创建SDF类型的要素源,它首先会创建一个SDF文件,然后创建要素模式,最后为此SDF文件创建一个要素源。MapGuide的下一个版本(开源版2.2)即将支持创建SHPsqlite类型的要素源。

@H_403_90@

void CreateFeatureSource(

MgResourceIdentifier resource,

MgFeatureSourceParams sourceParams);

@H_301_1@如下的代码展示了如何创建一个SDF的要素源,在调用方法CreateFeatureSource(…)之前需要创建一个MgCreateSdfParams的对象实例,MgCreateSdfParams继承自MgFeatureSourceParams,指定了新建SDF文件的要素模式、Spatial Context名称和空间参考系。

@H_403_90@

$classDef = new MgClassDefinition();

$classDef->SetName("Buffer");

$classDef->SetDescription("Feature class for buffer layer");

$classDef->SetDefaultGeometryPropertyName("GEOM");

$identityProperties = $classDef->GetIdentityProperties();

$properties = $classDef->GetProperties();

$prop = new MgDataPropertyDefinition("KEY");

$prop->SetDataType(MgPropertyType::Int32);

$prop->SetAutoGeneration(true);

$prop->SetReadOnly(true);

$identityProperties->Add($prop);

$properties->Add($prop);

$prop = new MgDataPropertyDefinition("NAME");

$prop->SetDataType(MgPropertyType::String);

$properties->Add($prop);

$ propGeom = new MgGeometricPropertyDefinition("GEOM");

$propGeom->SetGeometryTypes(MgFeatureGeometricType::Surface);

$properties->Add($propGeom);

$schema = new MgFeatureSchema("BufferSchema","Temporary buffer schema");

$schemaClasses = $schema->GetClasses();

$schemaClasses->Add($classDef);

$wkt = "LOCAL_CS[/"Non-Earth (Meter)/",LOCAL_DATUM[/"Local Datum/",0],

UNIT[/"Meter/",1],AXIS[/"X/",EAST],AXIS[/"Y/",NORTH]]";

$params = new MgCreateSdfParams("ArbitraryXY",$wkt,$schema);

$resource = new MgResourceIdentifier(

@H_301_352@"Library://Samples/Data/CreateFeatureSourceTest.FeatureSource");

$featureService->CreateFeatureSource($resource,$params);

@H_301_1@如果打算创建其它类型的要素源,或者为已经存在的空间数据创建要素源,那么方法CreateFeatureSource(…)无法实现这些功能,此时我们需要调用资源服务MgResourceService::SetResource()来创建一个要素源。如果是文件类型的要素源,例如SHPSDFsqlite,还需要调用MgResourceService::SetResourceData()文件上传MapGuide资源库中。

@H_301_1@如下的代码展示了如何根据一个已经存在的SDF文件创建要素源。

@H_403_90@

$resId = new MgResourceIdentifier(

"Library://Samples/Data/Sheboygan_Parcels.FeatureSource");

@H_301_1@ // 设置要素源

$contentSource = new MgByteSource("Sheboygan_Parcels.FeatureSource");

$contentReader = contentSource->GetReader();

$resourceService->SetResource($resId,$contentReader,null);

@H_301_1@// 上载要素源数据到资源库

$sdfFileName = "c:/Samples/Sheboygan_Parcels.sdf";

$dataSource = new MgByteSource($sdfFileName);

$dataReader = dataSource->GetReader();

$featureService->SetResourceData($resId,"Sheboygan_Parcels.sdf","File",$dataReader);

@H_301_1@上面的代码中使用的要素源定义文件Sheboygan_Parcels.FeatureSource”的内容如下,在指定FDO连接参数“File”的值时,此要素源定义使用了资源标签%MG_DATA_FILE_PATH%,要素服务在使用此要素源时,会将其替换为SDF文件MapGuide服务器上实际的存储路径,关于更多资源标签的信息,请参考第六章2.5节资源标签

@H_403_90@

<?xml version="1.0" encoding="UTF-8"?>

<FeatureSource version="1.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "

xsi:noNamespaceSchemaLocation="FeatureSource-1.0.0.xsd">

@H_301_1@ <Provider>OSGeo.SDF.3.4</Provider>

@H_301_1@ <Parameter>

@H_301_1@ <Name>File</Name>

@H_301_1@ <Value>%MG_DATA_FILE_PATH%Sheboygan_Parcels.sdf</Value>

@H_301_1@ </Parameter>

@H_301_1@ <Parameter>

@H_301_1@ <Name>ReadOnly</Name>

@H_301_1@ <Value>TRUE</Value>

@H_301_1@ </Parameter>

</FeatureSource>

原文链接:https://www.f2er.com/sqlite/203055.html

猜你在找的Sqlite相关文章