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
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapguide-users

Reply via email to