function MultiGeometryFromSelection($featureSrvc, $map, $selText) { $sel = new MgSelection($map, $selText); $selLayers = $sel->GetLayers(); $geomColl = new MgGeometryCollection(); $agfRW = new MgAgfReaderWriter(); $simplyPolygonOnly = true; for ($i = 0; $i < $selLayers->GetCount(); $i++) { $layer = $selLayers->GetItem($i); $filter = $sel->GenerateFilter($layer, $layer->GetFeatureClassName()); $query = new MgFeatureQueryOptions(); $query->SetFilter($filter); $featureSource = new MgResourceIdentifier($layer->GetFeatureSourceId()); $features = $featureSrvc->SelectFeatures($featureSource, $layer->GetFeatureClassName(), $query); if ($features) { $classDef = $features->GetClassDefinition(); $geomPropName = $classDef->GetDefaultGeometryPropertyName(); $j = 0; while ($features->ReadNext()) { $geomReader = $features->GetGeometry($geomPropName); $geom = $agfRW->Read($geomReader); $type = $geom->GetGeometryType(); if ($type == MgGeometryType::MultiPolygon || $type == MgGeometryType::CurvePolygon || $type == MgGeometryType::MultiCurvePolygon) { $simplyPolygonOnly = false; } else { if ($type != MgGeometryType::Polygon) { continue; } } $geomColl->Add($geom); } } } if ($geomColl->GetCount() == 0) { return null; } $gf = new MgGeometryFactory(); if ($simplyPolygonOnly) { $polyColl = new MgPolygonCollection(); for ($i = 0; $i < $geomColl->GetCount(); $i++) { $polyColl->Add($geomColl->GetItem($i)); } return $gf->CreateMultiPolygon($polyColl); } else { return $gf->CreateMultiGeometry($geomColl); } }
$geomReader = $features->GetGeometry($geomPropName); $geom = $agfRW->Read($geomReader); if (!$merge) { $geomBuffer = $geom->Buffer($dist, $measure); if ($geomBuffer != null) { if ($srsXform != null) { $geomBuffer = $geomBuffer->Transform($srsXform); } AddFeatureToCollection($propCollection, $agfRW, $featId++, $geomBuffer); $bufferFeatures++; } } else { if ($srsXform != null) { $geom = $geom->Transform($srsXform); } $inputGeometries->Add($geom); } } while ($features->ReadNext()); $features->Close(); } } if ($merge) { if ($inputGeometries->GetCount() > 0) { $dist = $srsMap->ConvertMetersToCoordinateSystemUnits($distance); if (!$arbitraryMapSrs) { $measure = $srsMap->GetMeasure(); } else { $measure = null; } $geomFactory = new MgGeometryFactory(); $geomBuffer = $geomFactory->CreateMultiGeometry($inputGeometries)->Buffer($dist, $measure);
$bufferLayer->SetVisible(true); $bufferLayer->ForceRefresh(); $bufferLayer->SetDisplayInLegend(true); $map->Save($resourceService); */ // New way, post MapGuide 2.0 // Get the selected features from the MgSelection object $featureReader = $selection->GetSelectedFeatures($layer, $layer->GetFeatureClassName(), false); // Process each item in the MgFeatureReader. Get the // geometries from all the selected features and // merge them into a single geometry. $inputGeometries = new MgGeometryCollection(); while ($featureReader->ReadNext()) { $featureGeometryData = $featureReader->GetGeometry('SHPGEOM'); $featureGeometry = $agfReaderWriter->Read($featureGeometryData); $inputGeometries->Add($featureGeometry); } $geometryFactory = new MgGeometryFactory(); $mergedGeometries = $geometryFactory->CreateMultiGeometry($inputGeometries); // Add buffer features to the temporary feature source. // Create multiple concentric buffers to show area. // If the stylization for the layer draws the features // partially transparent, the concentric rings will be // progressively darker towards the center. // The stylization is set in the layer template file, which // is used in function CreateBufferLayer(). $commands = new MgFeatureCommandCollection(); for ($bufferRing = 0; $bufferRing < $bufferRingCount; $bufferRing++) { $bufferDist = $srs->ConvertMetersToCoordinateSystemUnits($bufferRingSize * ($bufferRing + 1)); $bufferGeometry = $mergedGeometries->Buffer($bufferDist, $srsMeasure); $properties = new MgPropertyCollection();
$agfTextPoint = $wktReaderWriter->Write($oGeom); //echo "<!-- wkt: ".$agfTextPoint." -->\n"; if (!$merge) { /* use measure to accomodate differences in SRS */ $oNewGeom = $oGeom->Buffer($dist, $measure); $geomProp = new MgGeometryProperty("GEOM", $agfRW->Write($oNewGeom)); $oPropertyColl = new MgPropertyCollection(); $oPropertyColl->Add($geomProp); $oCommandsColl->Add(new MgInsertFeatures($schemaName . ':' . $layerName, $oPropertyColl)); } else { if ($srsXform == null) { $oNewGeom = $oGeom; } else { $oNewGeom = $oGeom->Transform($srsXform); } $inputGeometries->Add($oNewGeom); } } $featureReader->Close(); } if ($merge) { if ($inputGeometries->GetCount() > 0) { $dist = $srsMap->ConvertMetersToCoordinateSystemUnits($distance); if (!$arbitraryMapSrs) { $verMajor = subStr(GetSiteVersion(), 0, 1); if ($verMajor == '1') { $measure = new MgCoordinateSystemMeasure($srsMap); } else { $measure = $srsMap->GetMeasure(); } } else {