[mapguide-users] Re: How to change Existing Max scale for a layer

Kenneth Skovhede ks at geograf.dk
Sun Feb 28 07:49:23 EST 2010


The MgLayer instance actually keeps a copy of the ScaleRange values.
I assume that this is used to select what layers to render and speed up 
the process.
Unfortunately there are no relevant properties exposed on the MgLayer class,
so you cannot change the values.

Instead, you can create a new MgLayer instance, and copy all the 
properties from
the original MgLayer to the new MgLayer.
Then remove the original MgLayer and insert the new one in the same 
position as
the previous one.

You should file a bug report stating that the scale ranges cannot be 
refreshed from the API.

If you use the MaestroAPI, the values are exposed as a an array of 
doubles, and thus modify-able.

Regards, Kenneth Skovhede, GEOGRAF A/S



SriRam007 skrev:
> Hi Kenneth,
>
> I m trying with the Sheboygan
>
> +Sheboygan
>     +Layers
>        . Buildings
>        . CityLimits
>        . Roads
>
> Here road layer is having Scale ranges like 
>
>  Range       From     To 
>  ------------------------- 
>  1            0            10000 
>  2            10000      24000 
>
> Am showing all the ranges to let the user edit at runtime . And changing
> scale below 24000 is working 
> but beyond 24000 it is not working.
>
> And its XML file is like below. And I am changing the bold line 
>
> <?xml version="1.0" encoding="UTF-8"?>
> <LayerDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xsi:noNamespaceSchemaLocation="LayerDefinition-1.3.0.xsd" version="1.3.0">
>   <VectorLayerDefinition>
>    
> <ResourceId>Library://Samples/Sheboygan/Data/RoadCenterLines.FeatureSource</ResourceId>
>     <FeatureName>SHP_Schema:RoadCenterLines</FeatureName>
>     <FeatureNameType>FeatureClass</FeatureNameType>
>     <Geometry>SHPGEOM</Geometry>
>     <VectorScaleRange>
>       <MaxScale>10000</MaxScale>      <LineTypeStyle>
>         <LineRule>
>           <LegendLabel>
>           </LegendLabel>
>           <Label>
>             <Unit>Points</Unit>
>             <SizeContext>DeviceUnits</SizeContext>
>             <SizeX>0</SizeX>
>             <SizeY>8</SizeY>
>             <Text>"NAME"</Text>
>             <FontName>Verdana</FontName>
>             <ForegroundColor>FF000000</ForegroundColor>
>             <BackgroundColor>FFFFFFFF</BackgroundColor>
>             <BackgroundStyle>Transparent</BackgroundStyle>
>             <HorizontalAlignment>'Center'</HorizontalAlignment>
>             <VerticalAlignment>'Baseline'</VerticalAlignment>
>             <AdvancedPlacement>
>               <ScaleLimit>0.5</ScaleLimit>
>             </AdvancedPlacement>
>           </Label>
>           <LineSymbolization2D>
>             <LineStyle>Solid</LineStyle>
>             <Thickness>0.5</Thickness>
>             <Color>FFFF00FF</Color>
>             <Unit>Millimeters</Unit>
>             <SizeContext>DeviceUnits</SizeContext>
>           </LineSymbolization2D>
>         </LineRule>
>       </LineTypeStyle>
>     </VectorScaleRange>
>     <VectorScaleRange>
>       <MinScale>"10000"</MinScale>
>       <MaxScale>24000</MaxScale>
>       <LineTypeStyle>
>         <LineRule>
>           <LegendLabel>
>           </LegendLabel>
>           <LineSymbolization2D>
>             <LineStyle>Solid</LineStyle>
>             <Thickness>0.5</Thickness>
>             <Color>FF808080</Color>
>             <Unit>Millimeters</Unit>
>             <SizeContext>DeviceUnits</SizeContext>
>           </LineSymbolization2D>
>         </LineRule>
>       </LineTypeStyle>
>     </VectorScaleRange>
>   </VectorLayerDefinition>
> </LayerDefinition>
>
>
>
> After modification my XML file :::
>
>  Range       From     To        style(BK color)
>  ------------------------------------------
>  1            0            11000    Pink
>  2            11000      25000    Green
>
> <?xml version="1.0" encoding="UTF-8"?>
> <LayerDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xsi:noNamespaceSchemaLocation="LayerDefinition-1.3.0.xsd" version="1.3.0">
>   <VectorLayerDefinition>
>    
> <ResourceId>Library://Samples/Sheboygan/Data/RoadCenterLines.FeatureSource</ResourceId>
>     <FeatureName>SHP_Schema:RoadCenterLines</FeatureName>
>     <FeatureNameType>FeatureClass</FeatureNameType>
>     <Geometry>SHPGEOM</Geometry>
>     <VectorScaleRange>
>       <MiniScale>0</MiniScale>
>       <MaxScale>11000</MaxScale>      <LineTypeStyle>
>         <LineRule>
>           <LegendLabel>
>           </LegendLabel>
>           <Label>
>             <Unit>Points</Unit>
>             <SizeContext>DeviceUnits</SizeContext>
>             <SizeX>0</SizeX>
>             <SizeY>8</SizeY>
>             <Text>"NAME"</Text>
>             <FontName>Verdana</FontName>
>             <ForegroundColor>FF000000</ForegroundColor>
>             <BackgroundColor>FFFFFFFF</BackgroundColor>
>             <BackgroundStyle>Transparent</BackgroundStyle>
>             <HorizontalAlignment>'Center'</HorizontalAlignment>
>             <VerticalAlignment>'Baseline'</VerticalAlignment>
>             <AdvancedPlacement>
>               <ScaleLimit>0.5</ScaleLimit>
>             </AdvancedPlacement>
>           </Label>
>           <LineSymbolization2D>
>             <LineStyle>Solid</LineStyle>
>             <Thickness>0.5</Thickness>
>             <Color>FFFF00FF</Color>
>             <Unit>Millimeters</Unit>
>             <SizeContext>DeviceUnits</SizeContext>
>           </LineSymbolization2D>
>         </LineRule>
>       </LineTypeStyle>
>     </VectorScaleRange>
>     <VectorScaleRange>
>       <MinScale>"11000"</MinScale>
>       <MaxScale>25000</MaxScale>
>       <LineTypeStyle>
>         <LineRule>
>           <LegendLabel>
>           </LegendLabel>
>           <LineSymbolization2D>
>             <LineStyle>Solid</LineStyle>
>             <Thickness>0.5</Thickness>
>             <Color>FF808080</Color>
>             <Unit>Millimeters</Unit>
>             <SizeContext>DeviceUnits</SizeContext>
>           </LineSymbolization2D>
>         </LineRule>
>       </LineTypeStyle>
>     </VectorScaleRange>
>   </VectorLayerDefinition>
> </LayerDefinition>
>
> And i m saving like
> resourceService.SetResource(layerResId, new MgByteReader(layerDefinition,
> "text/xml"), null);
>             layer.SetLayerDefinition(layerResId, resourceService);
>             map.Save(resourceService);
> then refreshing the map by mapFrame.Refresh();
>
>
> But the second range is visible upto 24000.
> If i will give below 24000 instead of beyond 24000 then everything is
> working 
> Layer is showing with its style
> (0 - 11000  :Pink color 
> And 11000 - 24000 (Or below) : Green Color is showing) 
> for the respective ranges.
>
> thanks
>
>
>
>
>
>
>
>
>
>
>   


More information about the mapguide-users mailing list