フィーチャの周辺にバッファを作成するには、MgGeometry::Buffer() メソッドを使用します。これによって、MgGeometry オブジェクトが返され、さらに詳しい分析に使用できます。テンポラリ フィーチャ ソースにフィーチャを作成し、新しい画層をマップに追加することによって、バッファを表示できます。さらに、空間フィルタの一部として、バッファ ジオメトリを使用することもできます。バッファ領域内で特定の条件に一致するすべてのフィーチャを見つける場合や、バッファ領域を交差するすべての道路を見つける場合があります。
バッファを作成するには、バッファの対象となるフィーチャのジオメトリを取得します。フィーチャが選択項目の一部として MgFeatureReader で処理される場合は、フィーチャ リーダーからジオメトリ データを取得して、それを MgGeometry オブジェクトに変換する必要があります。次に例を示します。
$geometryData = $featureReader->GetGeometry($geometryName); $featureGeometry = $agfReaderWriter->Read($geometryData);
バッファが座標系の単位を使用して計算される場合は、そのマップの座標系から MgCoordinateSystemMeasure オブジェクトを作成します。次に例を示します。
$mapWktSrs = $currentMap->GetMapSRS(); $coordSysFactory = new MgCoordinateSystemFactory(); $srs = $coordSysFactory->Create($mapWktSrs); $srsMeasure = $srs->GetMeasure();
座標系の計測を使用して座標系のバッファ サイズを決定し、バッファの対象となるジオメトリからバッファ オブジェクトを作成します。
$srsDist = $srs->ConvertMetersToCoordinateSystemUnits($bufferDist); $bufferGeometry = $featureGeometry->Buffer($srsDist, $srsMeasure);
マップ内のバッファを表示するには、次の手順を実行します。
クエリーの一部としてバッファを使用するには、バッファ ジオメトリを使用して空間フィルタを作成し、MgFeatureService::SelectFeatures() を呼び出す際にそれを使用します。たとえば、次のコードでは、バッファ領域内のタイプ MFG の区域を選択します。MgFeatureReader を使用して、区域のレポートの作成や各区域に点マーカーを付ける新しい画層の作成などの作業を実行できます。
$queryOptions = new MgFeatureQueryOptions(); $queryOptions->SetFilter("RTYPE = 'MFG'"); $queryOptions->SetSpatialFilter('SHPGEOM', $bufferGeometry, MgFeatureSpatialOperations::Inside); $featureResId = new MgResourceIdentifier( "Library://Samples/Sheboygan/Data/Parcels.FeatureSource"); $featureReader = $featureService->SelectFeatures($featureResId, "Parcels", $queryOptions);