[mapguide-users] Set feature properties to a point
Shoby Shah
shobyshah at hotmail.com
Mon Mar 4 21:32:08 PST 2013
Can u please tell me how can i add layer dynamically from search results, please help me out as i am new user.please give me the steps.thanks.
> Date: Mon, 4 Mar 2013 18:23:58 -0800
> From: mgvillablanca at yahoo.com
> To: mapguide-users at lists.osgeo.org
> Subject: Re: [mapguide-users] Set feature properties to a point
>
> After you have created the properties, you need to create your feature schema
> and add data to the SDF.
>
> Your code looks ok. I did something similar in PHP sometime ago.
>
> See:
>
> function makePoint($id, $x, $y) {
> //makes a point
>
> global $fp;
>
> //debug ($fp, "makePoint():\r\n");
> $name = "Node " . $id;
> $propertyCollection = new MgPropertyCollection();
> //name prop
> $nameProperty = new MgStringProperty("NAME", $name);
> $propertyCollection->Add($nameProperty);
> //id prop
> $idProperty = new MgInt32Property("ID", $id);
> $propertyCollection->Add($idProperty);
>
> //geom
> $wktReaderWriter = new MgWktReaderWriter();
> $agfReaderWriter = new MgAgfReaderWriter();
>
> $geometry = $wktReaderWriter->Read("POINT XY ($x $y)");
> $geometryByteReader = $agfReaderWriter->Write($geometry);
> $geometryProperty = new MgGeometryProperty("GEOM", $geometryByteReader);
> $propertyCollection->Add($geometryProperty);
>
> return $propertyCollection;
> }
>
> function addNodesLayerToGroup($layer, $layerGroupName,
> $layerGroupLegendLabel, &$map) {
>
> global $fp;
>
> // Adds a layer to a layer group. If necessary, it creates the layer
> group.
> // Get the layer group
> $layerGroupCollection = $map->GetLayerGroups();
> if ($layerGroupCollection->Contains($layerGroupName)) {
> $layerGroup = $layerGroupCollection->GetItem($layerGroupName);
> } else {
> // It does not exist, so create it
> $layerGroup = new MgLayerGroup($layerGroupName);
> $layerGroup->SetVisible(true);
> $layerGroup->SetDisplayInLegend(true);
> $layerGroup->GetExpandInLegend();
> $layerGroup->SetLegendLabel($layerGroupLegendLabel);
> $layerGroupCollection->Add($layerGroup);
> //place the group under "Filters"
> //$parentGroup = $layerGroupCollection->GetItem("Filters");
> //$layerGroup->SetGroup($parentGroup);
> }
>
> // Add the layer to the group
> $layer->SetGroup($layerGroup);
> //make the layer and its parents visible
> $elem = $layer;
> while ($elem != NULL) {
> $elem->SetVisible(true);
> $elem->SetDisplayInLegend(true);
> $elem->GetExpandInLegend();
> $elem = $elem->GetGroup();
> }
> }
>
> function addNodesToMap($nodes) {
> //adds nodes to the map
>
> global $sessionId, $mapName, $fp;
>
> try {
> $userInfo = new MgUserInformation($sessionId);
> $siteConnection = new MgSiteConnection();
> $siteConnection->Open($userInfo);
> $resourceService =
> $siteConnection->CreateService(MgServiceType::ResourceService);
> $featureService =
> $siteConnection->CreateService(MgServiceType::FeatureService);
>
> // Open the map
> $map = new MgMap();
> $map->Open($resourceService, $mapName);
>
> // Create a feature source with point data.
> // Create a feature class definition for the new feature source
> $classDefinition = new MgClassDefinition();
> $classDefinition->SetName("Points");
> $classDefinition->SetDescription("Feature class with point data.");
> $classDefinition->SetDefaultGeometryPropertyName("GEOM");
>
> // Create a FeatId property
> $featIdProp = "FeatId";
> $identityProperty = new MgDataPropertyDefinition($featIdProp);
> $identityProperty->SetDataType(MgPropertyType::Int32);
> $identityProperty->SetAutoGeneration(true);
> $identityProperty->SetReadOnly(true);
> // Add the identity property to the class definition
> $classDefinition->GetIdentityProperties()->Add($identityProperty);
> $classDefinition->GetProperties()->Add($identityProperty);
>
> // Create a name property
> $nameProp = "NAME";
> $nameProperty = new MgDataPropertyDefinition($nameProp);
> $nameProperty->SetDataType(MgPropertyType::String);
> // Add the name property to the class definition
> $classDefinition->GetProperties()->Add($nameProperty);
>
> // Create an ID property
> $idProp = "ID";
> $idProperty = new MgDataPropertyDefinition($idProp);
> $idProperty->SetDataType(MgPropertyType::Int32);
> // Add the name property to the class definition
> $classDefinition->GetProperties()->Add($idProperty);
>
> // Create a geometry property
> $geometryProperty = new MgGeometricPropertyDefinition("GEOM");
> $geometryProperty->SetGeometryTypes(MgFeatureGeometricType::Point);
> // Add the geometry property to the class definition
> $classDefinition->GetProperties()->Add($geometryProperty);
>
> // Create a feature schema
> $featureSchema = new MgFeatureSchema("PointSchema", "Point schema");
> // Add the feature schema to the class definition
> $featureSchema->GetClasses()->Add($classDefinition);
>
> // Create the feature source
> $featureSourceName =
> 'Library://SS_testing/Network_analysis/Data/Nodes.FeatureSource';
> $resourceIdentifier = new MgResourceIdentifier($featureSourceName);
> $srs = $map->GetMapSRS();
> $spatialContext = "LL84";
> $sdfParams = new MgCreateSdfParams($spatialContext, $srs,
> $featureSchema);
> $featureService->CreateFeatureSource($resourceIdentifier, $sdfParams);
>
> // We need to add some data to the sdf before using it. The spatial
> context reader must have an extent.
> $batchPropertyCollection = new MgBatchPropertyCollection();
> $wktReaderWriter = new MgWktReaderWriter();
> $agfReaderWriter = new MgAgfReaderWriter();
> $geometryFactory = new MgGeometryFactory();
>
> for ($t=0; $t < count($nodes); $t++) {
> $node = $nodes[$t];
> $x = $node->X;
> $y = $node->Y;
> $id = $node->ID;
> //$coordLL = transformCoordinate("CA83-VF", $spatialContext, $x, $y);
> //$x = $coordLL->GetX();
> //$y = $coordLL->GetY();
> $propertyCollection = makePoint($id, $x, $y);
> $batchPropertyCollection->Add($propertyCollection);
> unset($propertyCollection);
> }
>
> // Add the batch property collection to the feature source
> $cmd = new MgInsertFeatures("Points", $batchPropertyCollection);
> $featureCommandCollection = new MgFeatureCommandCollection();
> $featureCommandCollection->Add($cmd);
>
> // Execute the "add" commands
> $featureService->UpdateFeatures($resourceIdentifier,
> $featureCommandCollection, false);
>
> // Create a new layer
> $factory = new LayerDefinitionFactory();
>
> // Create a mark symbol
> $resourceId =
> 'Library://Samples/Sheboygan/Symbols/BasicSymbols.SymbolLibrary';
> $symbolName = 'PushPin';
> $width = '11'; // unit = points
> $height = '11'; // unit = points
> $color = 'FFFF0000';
> $markSymbol = $factory->CreateMarkSymbol($resourceId, $symbolName,
> $width, $height, $color);
>
> // Create a text symbol
> $text = $idProp; //"ID"
> $fontHeight="12";
> $foregroundColor = 'FF000000';
> $textSymbol = $factory->CreateTextSymbol($text, $fontHeight,
> $foregroundColor);
>
> // Create a point rule.
> $legendLabel = 'Nodes';
> $filter = '';
> //$pointRule = $factory->CreatePointRule($legendLabel, $filter,
> $textSymbol, $markSymbol);//don't use symbols
> $pointRule = $factory->CreatePredefinedPointRule($legendLabel,
> $filter, $text);
>
> // Create a point type style.
> $pointTypeStyle = $factory->CreatePointTypeStyle($pointRule);
>
> // Create a scale range.
> $minScale = '0';
> $maxScale = '1000000000000';
> $pointScaleRange = $factory->CreateScaleRange($minScale, $maxScale,
> $pointTypeStyle);
>
> // Create the layer definiton.
> $featureName = 'PointSchema:Points';
> $geometry = 'GEOM';
> //$layerDefinition =
> $factory->CreateLayerDefinition($featureSourceName, $featureName, $geometry,
> $pointScaleRange);
> //the original class doesn't use mappings for the features' layer
> definition
> $layerDefinition =
> $factory->CreateNodeLayerDefinition($featureSourceName, $featureName,
> $nameProp, $idProp, $featIdProp, $geometry, $pointScaleRange);
>
> // Add the layer to the map
> $newLayer = add_layer_definition_to_map($layerDefinition, "Points",
> "Nodes", $sessionId, $resourceService, $map);
> addNodesLayerToGroup($newLayer, "Analysis", "Analysis", $map);
>
> // Turn on the visibility of this layer.
> // (If the layer does not already exist in the map, it will be visible
> by default when it is added.
> // But if the user has already run this script, he or she may have set
> the layer to be invisible.)
> $layerCollection = $map->GetLayers();
> if ($layerCollection->Contains("Points")) {
> $pointsLayer =$layerCollection->GetItem("Points");
> $pointsLayer->SetVisible(true);
> $pointsLayer->SetSelectable(true);
> }
>
> // Save the map back to the session repository
> $sessionIdName = "Session:$sessionId//$mapName.Map";
> $sessionResourceID = new MgResourceIdentifier($sessionIdName);
> $sessionResourceID->Validate();
> $map->Save($resourceService, $sessionResourceID);
> }
>
> catch (MgException $e) {
> debug ($fp, "\tMgException:" . $e->GetMessage() . "\r\n");
> }
> }
>
>
>
> --
> View this message in context: http://osgeo-org.1560.n6.nabble.com/Set-feature-properties-to-a-point-tp5037772p5038429.html
> Sent from the MapGuide Users mailing list archive at Nabble.com.
> _______________________________________________
> mapguide-users mailing list
> mapguide-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapguide-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/mapguide-users/attachments/20130305/9924c35b/attachment.html>
More information about the mapguide-users
mailing list