ThinkGeo.com    |     Documentation    |     Premium Support

ISO Lines

 Hello,


I’m looking into DisplayISOLines sample and wondering if it is possible to make the border of contour colors more smooth.


 Steps between contours are more obvious, when less levels (colors) are defined.


Please see attached example for reference.



 


Thank you,


Inna




DisplayIsoLinesWPF.zip (287 KB)

 Hi Inna,



I guess you can try the versions after 6.0.191.0 to resolve the problem. We did some enhancements to the IsoLine to support ClosedLine of polygon after that version, the result can be rendered using AreaStyle.


I checked the code attached, seems that the un-smooth area is not caused by the result of IsoLine, it should be the IsoLine grid, because it’s polygon type, while the result of IsoLine should be a line. So please use IsoLineType.ClosedLinesAsPolygons when creating the InMemoryGridIsoLineLayer and apply the AreaStyle to it, we should get the expected result.


The attached is the updated code based on your demo ,please check it out.


Thanks,


Johnny



GetGridIsoLineLayer_func.txt (2.75 KB)


Hi Johnny,
 
I tested your example and it still does not look right.
 
Let me explain:
I need to display pressure contours (weather). 
I have gridded data (1x1) for entire world in csv and I need to display only 3 levels:
Level1:  value<1012
Level2:  value=1012
Level3:  value>1012
 
Please see attached csv file.
 
Pressure does not have to be filled, only outlined, but I also need to display  other weather params that have to be filled. 
 
 
Do you have any idea how to achieve this?
 
Thank you,
Inna


Pressure.txt (779 KB)

Hi Inna,


Thanks for your deme code and sorry that I didn't clearify the problem in last post. I think the reason is that the "IsoLineLayer" is overlapped by "GridCellsLayer",  please remove that layer to make it work fine. The attached is the demo code, please check it out.


Screenshot we got:



 


Thanks,


Johnny  



Post11060Sample.txt (16.5 KB)

 Hi Johnny,


 
Thank you for your sample. It works.
 
Please advise how to implement the 3 levels logic for the pressure.csv:
Level1:  value<1012
Level2:  value=1012
Level3:  value>1012
 
I initially thinking about using custom isoLineLevels but I’m not able to see all the lines (especially the first level <1012).
 

  private InMemoryGridIsoLineLayer GetGridIsoLineLayer()
        {
            //Create a grid cell matrix based on the textboxes and the current extent
            CreateGridCellMatrix();
        
            //Load the grid we just created into the GridIsoLineLayer using the number of breaks defines
            //on the screen
            //Collection<double> isoLineLevels1 = GridIsoLineLayer.GetIsoLineLevels(gridCellMatrix, Convert.ToInt32(txtGridIsoLineLevelCount.Text));
            Collection<double> isoLineLevels = new Collection<double>() { 0, 1012, 1013 };
            InMemoryGridIsoLineLayer isoLineLayer = new InMemoryGridIsoLineLayer(gridCellMatrix,  isoLineLevels, 0, double.MaxValue, -9999, IsoLineType.LinesOnly);

          
            
            ClassBreakStyle classBreakLineStyle = new ClassBreakStyle(isoLineLayer.DataValueColumnName);

            classBreakLineStyle.ClassBreaks.Add(new ClassBreak(0, new LineStyle(new GeoPen(GeoColor.SimpleColors.Red, 1))));
            classBreakLineStyle.ClassBreaks.Add(new ClassBreak(1012, new LineStyle(new GeoPen(GeoColor.SimpleColors.Black, 1))));
            classBreakLineStyle.ClassBreaks.Add(new ClassBreak(1013, new LineStyle(new GeoPen(GeoColor.SimpleColors.Blue, 1))));
            isoLineLayer.CustomStyles.Add(classBreakLineStyle);

          
            //Create the text styles to label the lines
            TextStyle textStyle = TextStyles.CreateSimpleTextStyle(isoLineLayer.DataValueColumnName, "Arial", 8, DrawingFontStyles.Bold, GeoColor.StandardColors.Black, 0, 0);
            textStyle.HaloPen = new GeoPen(GeoColor.StandardColors.White, 2);
            textStyle.OverlappingRule = LabelOverlappingRule.NoOverlapping;
            textStyle.SplineType = SplineType.StandardSplining;
            textStyle.DuplicateRule = LabelDuplicateRule.UnlimitedDuplicateLabels;
            textStyle.TextLineSegmentRatio = 9999999;
            textStyle.FittingLineInScreen = true;
            textStyle.SuppressPartialLabels = true;
            isoLineLayer.CustomStyles.Add(textStyle);

            return isoLineLayer;
        }

 
 
Thanks,
Inna

Hi Inna,


We did some changes to the source code to support the specified ISO line levels, please check the attached for details.


Following is the screenshot we got:



Thanks,

Johnny

 



ServicesEditionSample_Isolines_CS_WPF_111115.zip (236 KB)

 Hi,


 
It is exactly what I got using above code.
The problem is that csv contains values less than 1012 and I don’t see them on the map (red contours).
 
Inna

 Hi Inna,


 
It's hard to make the ISO line just display the lines with the values we give, it should be an area, which represents the values that are less than 1012 or more than 2012. So we did a small change to the source code to make sure it shows the area where the values are less than 1012.  the following is the screenshot we got:

The attached is the demo code we do some modification.
 
Thanks,
Johnny
 

Isolines_CS_WPF_sample2.zip (248 KB)

 Hi Johnny,


 
Unfortunately, for pressure contours I have to display lines and not areas. Something like this:
 

Maybe you can suggest other way to draw such lines.
 
Thanks,
Inna

Hi Inna,


I guess here is what you want, please change the "howSectionCount" value if you want more ISO lines. Following is what we got:



Thanks,


Johnny



Hi Johnny, 
  
 This is exactly what I needed. 
 Thank you very much for your help. 
  
 Inna

You are so wellcome, any question please let us know. 
  
 Thanks, 
 Johnny