示例#1
0
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);
    }
}
示例#2
0
文件: buffer.php 项目: kanbang/Colt
                     }
                     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);
         if ($geomBuffer != null) {
             AddFeatureToCollection($propCollection, $agfRW, $featId, $geomBuffer);
             $bufferFeatures = 1;
         }
     }
 }
 if ($propCollection->GetCount() > 0) {