バッファを作成する

フィーチャの周辺にバッファを作成するには、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);