[mapguide-users] Set feature properties to a point

Zac Spitzer zac.spitzer at gmail.com
Mon Mar 4 21:54:36 PST 2013


Dear Shoby,

DON'T BE LAZY OR HIJACK THREADS
http://www.gerv.net/hacking/how-to-ask-good-questions/

z







On Tue, Mar 5, 2013 at 4:32 PM, Shoby Shah <shobyshah at hotmail.com> wrote:

>  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
>
> _______________________________________________
> mapguide-users mailing list
> mapguide-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>
>


-- 
Zac Spitzer
Solution Architect / Director
Ennoble Consultancy Australia
+61 405 847 168
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/mapguide-users/attachments/20130305/b2c6a93b/attachment.html>


More information about the mapguide-users mailing list