ThinkGeo.com    |     Documentation    |     Premium Support

Contour issues

 Hi,


 


I have two issues/question with contour.


1- How I can turn off the GridFeatureLayer lines?

2- Why the GridIsoLineLayer has some open polylines?


I attached  two files for you which one of them has been created by Thinkgeo, you can see polyline are not close shape on Thinkgeo one.


Regards,


Ben



Contour.png (42.3 KB)
ThinkgeoContour.JPG (85.5 KB)

Ben, 



To turn off the GridFeatureLayer lines you can do a few things. You can set the Layer.IsVisible= False which should suppress the drawing. You can also remove the layer from the overlay collection. You can also remove the styles from zoomlevel1. 



For the second question we currently only support ISO Lines and not polygons. We have not found a good algorithm to close up the end lines around the ends. If you want to get the interior polygons you can call the GetIsoFeatures on the layer and select the IsoLineType property and specify "ClosedLinesAsPolygons" which will return the closed lines as polygons. If you have suggestions as to how we should close them up I would be interesting in hearing them. 



David



Hi David, 
  
 about the first Question, I don’t want to completely suppress the GridFeatureLayer. I want to hide grid-lines only in the other word I want to hide that horizontal and vertical lines. 
  
 About the second question, we have a few ideas which I will outline below: - 
  
 1) The current red features lines are not required as they only show the boundary between the contour value that can be used. 
 2) We need a polygon to be drawn around the edge of the contour area - this will be used to interest the open polylines on the edge of the boundary.  This polygon will be hidden and used for the next stage. 
 3) Where this boundary interests with polylines, these need to be closed off between each linear interest.  The polygon will then have to share that intersect line where it goes into the contour zone to complete the polygon for that value. So this would then allow one of the contour feature layers to be exported as a complete polygon - with holes in the middle to show where another feature appeared. 
  
 Regards, 
 Ben

 Ben,


Thanks very much for the sharing. Following your way I can find the intersecting points between the boundary and polylines, but still I can hardly decide which side of the boundary I need to close a polygon. For example in area ABCD I got 2 contour lines with height of 10 and 20, I then got the intersecting points E,F and G,H. Now the problem is the returned polygon should be ECFE/GCHG, or EFDABE/GHDABG, or EFDABE/GHCG.  You got any idea about this?


  


Thanks,


 Ben



 I can throw  out how we addressed this.    When we generate the grid-cells, we extend a few cells past the actual extent in which we are interested.  And then we make sure that the outer ring of cells has a value that is lower than any other value on the surface.   By doing this, we effectively force all of the isolines to be closed.   They are nearly stacked on top of each other at this outer area, but we are going to throw away that part of the polygon, so it doesn't matter.


These two illustrations show a field, with the original soil test values, the boundary (in black) and the isolines that are generated using this method.


 


 



 


 Once we were able to force closed isolines in this manner, it became easy to clip each of these isoline rings to the original black boundary, giving me a polygon of coverage within the field.   Of course, the rings may be overlapping, so we simply sort them by area, and then subtract any ring from a ring that is/was larger (before subtracting any other rings from it).   This was a poor illustration, as there are no interior holes, but you can get the idea.


 


 



Ted, 
  
 Thanks very much for the sharing! That’s very smart to close a polygon by setting the outer ring of cells with a lower value; we will give it a short.  I’m not sure if it can completely solve the issue I raised above for all the cases but we will try and see.  
  
 Ben 


Hi Ted,


This is a great example of how to get the contour to work, my main concern would be overlapping contours, you say you subtract a contour ring from another ring, i guess this gets rid of the overlap?


With regards to the original diagram, I would close each of the boundary's off to look like the image below.



So one polygon would be E,F,H,G,E and the other would be G,H,C,G - this would assume the orange would be for example everything up to a value i.e. 10, and the green line would be up t value 20, you would then be able to tell the difference by the numerical split. Does that make sense?


 



I did not have any luck determining the value of the green or orange area based upon the values of the isolines.  I just wasn't ever able to figure a consistent rule that I could use.   How would I know if an inner island was a depression or a peak? 



But... I did not try very hard on it, because our users actually want the value of the green or the orange areas to represent the values of the actual data that lies within those areas.   So, if the green represents an area between 10 and 20, they prefer to have the value be 15.76, and acquire this value by querying for all of the grid-cell values that fall within the green polygon.    Because we pursued that route, I had no need to wrestle with the issue you are now attempting to address.   Sorry. 



As to the overlaps... yes.   We do a subtract to eliminate them.    To do this we: 



1) Sort the resultant features into a list, ordering by the area, descending.   And our assumption is that a polygon with a given area for its outer ring could never overlap or contain a polygon of a larger area. 



2) Iterate the list, from the smallest to the largest polygon, until we have determined that the smallest polygon is not contained within any larger polygon, or that the smaller polygon is contained within a larger polygon.    In the latter case, we are sure that the polygon is not contained by any other polygon (the nature of isolines), so subtract it from the containing polygon and break out of the iteration.    In either case the original polygon can now be added to the final list, and removed from the sorted list, and you can start the iteration with the new smallest polygon in the list.   When there are no more polygons in the sorted list, you are done. 



3) Go acquire the value to populate for each resultant polygon.


After all is done:






The performance is not horrible if you use the SQL Server components (I think that's what your new geometry classes are?).    It is very painful if you use NTS.



Hi Ted, 
  
 Thanks for the response, yes we are looking to create the contours based on a range of values in that area. 
  
 Many thanks for the information on removing the overlaps, this could provide useful if ThinkGeo are unable to assist. 
  
 Thanks, 
  
 Ben

Hi Ben, 
  
 Just wondering if you had any further thoughts on this?

Ben,  
  
 I think Ted’s idea is pretty good and in fact, we are in the middle of implementing it. It would take a couple days to finish and I will keep you updated here. 
  


Ben,  
  
 I think Ted’s idea is pretty good and in fact, we are in the middle of implementing it. It would take a couple days to finish and I will keep you updated here. 
  


Hi Ben,


We followed Ted's suggestions and made a sample, it returns the polygon looks pretty good, here is the screenshot



And please get the 6.0.180.0  and try with the sample attached.


Regards,


Edgar


 



DisplayIsoLine.zip (204 KB)

Hi, 
  
 Ok great, look forward to trying it out, however it seems that 6.0.180.0 is not yet posted? 
  
 Regards, 
  
 Ben

Ben, 
  
 Let us know what you think about it. By getting the average value for all the cells within each polygon, we get an accurate value for each of it. That takes time though as we need to call Polygon.Contains() many times, let me know if you have any good idea.

Ben, 
  
 The daily build is in process and it should be ready to download 4 hours from now. :)

 Ben and Ted,


 
In case you are interested, we just upgraded our IsoLines sample on wiki and make it available to return only polygons. Check it here: 
 
wiki.thinkgeo.com/wiki/Map_Suite_Se...s#Isolines
 
 
 

Hi, with the contour being created, is there anyway we can change the column header of the isoline feature from heightvalue to contour value? 
  
 Thanks, 
  
 Dan

Hi Dan, 



Thanks for your suggestion, we updated the IsoLineLayer.DataValueColumnName's default value to "ContourValue" and it can be changed to any name. Please get the 6.0.204.0 and have a try. 



Regards. 

Edgar



Hi, 
  
 I am trying to get the isolines as polygons using version 6.0.243.0 of MapSuiteCore Services but the IsoLineType.Polygons enumeration entry is not available as in the example DisplayIsoLines by Edgar.  
  
 Was this feature removed? 
  
 Thanks, 
  
 Marius