ThinkGeo.com    |     Documentation    |     Premium Support

Are Isolines working correctly?

Hi,


I am not sure that theIsolines feature is working correctly.


I have loaded some of my own data and as you see on the attached image. The isolines are pretty dense in the top left corner, with number of lines between 50 and 100 values. But there are none in the lower right where there shold have been some between the 58 and 102 points, south of the 6.145 isoline.


Isoline level count, rows and columns are all set to 180.


Am I doing something wrong or is there a bug?


 



 


 



Hi Jakub, 
  
 From your image, it looks your center point in the left upper is 108000, can you make sure that? 
  
 I think the isoline should looks correct because the 108000 is too large than other number. 
  
 Regards, 
  
 Don

That is correct. The values go from 0 to 108000. It should still draw the isolines correctly since they are generated on a grid 
 . 


Hi Jakub,  
  
 As my understanding of isoLine, it should be a group of lines which with the same value. And the difference value should be keep the same. 
  
 So if you have a center point of 108000, and most point are less than 100, I think the isolines should be very very dense between the 108000 point. 
  
 Please let me know if I misunderstand something. 
  
 Regards, 
  
 Don

Don  
 A contour line (also isoline or isarithm) is a curve along which the elevation (concentration in my case) has a constant value. 
 That means that if I have a value of 50 and 100 there should be an isoline between them (based on predefined parameters)  
  
 You are correct the isolines between around 108000 are very dense. That part seems to work fine. But the gridding function also calculated an isoline between values 50 and 100  (on 74.616 value) in the NW corner (near the 108000 value). Based on that there also should be isoline between 58 and 102 in the lower center of the image above since value 74.616 falls between 58 and 102. 
 That is why I am questioning the isolines functionality.  
  
 Also: 
 Is there a way to prdefine the isoline values so they are round numbers? 


This isoline also does not look correct.


It displays value 18.686 but it is drawn between points with values 48.6 and 52.5 on one side and 45 and 97.7 and 26800 on the other side. That does not make sense. There are some very high values inside the isoline as well.


what is happening?




Jakub, 
  
   In order to see why the lines were formed that way they were we first have to look at the grid that was generated from your point data.  Can you send us the point data and the code of how you setup the isolines?  Another option would be to create the grid from your points and send is the grid file and the parameters you used for the IsoLine class.  We are going to need something besides the screenshots.   
  
   On another note you can specify the isoline breaks yourself.  There is a static method I believe that will look at your data and suggest breaks and then you can go in there an round them all and then set those breaks for the IsoLineLayer itself. 
  
 Thanks, 
  
 David

Attached is source data in CSV and the GRID file generated. See the ZIP. The parameters are 150 for Isoline level count, Row count and Column count.


I was not able to replicate previous image so the data is related to this set of isolines. As you can see there is a still issue there is a 7.425 isoline between points 236 and 52.6 as an example


 


 


 



Isoline.zip (190 KB)

Oh, the isolines were generated using your code as in Isoline example in btnGenerateWithFixedBreaks_Click procedure. Only translated to VB

Oh, the isolines were generated using your code as in Isoline example in btnGenerateWithFixedBreaks_Click procedure. Only translated to VB

Jakub, 
  
 Thanks for posting your data and questions! 
  
 After your looking at the csv file you provided I think I know what the issue is.  It looks like most of your data is around the value of 50 with a a few records sprinkled in with very high values like  1100000.  Because there is such a big range in your data values the GetIsoLineLevels function is returning a result I don’t think you want.   The GetIsoLineLevels function will try to return a good set of breaks to use but in your case I don’t think you will want to use this method and instead setup your breaks manually. 
  
 Based on the data you provided I would comment out the line below anywhere it exists in your project and instead setup the isoLineLevels how you want them manually. 
  
 Collection<double> isoLineLevels = GridIsoLineLayer.GetIsoLineLevels(wellDepthPointData, Convert.ToInt32(txtGridIsoLineLevelCount.Text)); 
  
 Based on your data I would probably have my breaks like the following: 
  
 0 
 40 
 50 
 60 
 70 
 80 
 90 
 100 
 200 
 300 
 400 
 500 
 600 
 700 
 800 
 900 
 1000 
 2000 
 3000 
 4000 
 5000 
 6000 
 7000 
 8000 
 9000 
 10000 
 20000 
 30000 
 40000 
 50000 
 60000 
 70000 
 80000 
 90000 
 100000 
 1000000 
  
 I think once you setup these breaks you will see a better result.  Let us know if you have any questions. 
  
 Thanks! 
  


Thanks for your answer. Yes i would like to set the braks manually. What is the correct syntax to do that? 


Jakub, 
  
   On all of the types of IsoLineLayers there is a IsoLineLevels property that is a collection of doubles.  Clear this and add your breaks in from low to high.  Make sure you comment out any code that sets this somewhere else.  There are many ways to analyze the point data to pick breaks and we just chose one.  In many cases its best to show your user a histogram of the data and then they can choose the breaks to best suite their intended output.  What I am trying to say is that it is hard to have a one size fits all system. :-)  Let us know how we can help, Isolines are a science in and of themselves. 
  
 David

I already have algorithm to determine the break I was asking for syntax on how to load it into IsoLineLevels 
 I know about isolines being science, that is why I was so excited about you incorporating it into the Map Suite. It puts it way ahead of competition. 
 Look into Kriging as a method for generating isolines. That is generally accepted process for spatial data. 
 Thanks 


Jakub, 
  
 To load your own IsoLineLevels you would comment out this line of code: 
  
 Collection<double> isoLineLevels = GridIsoLineLayer.GetIsoLineLevels(wellDepthPointData, Convert.ToInt32(txtGridIsoLineLevelCount.Text)); 
  
 And replace it with this code where you manually set the levels: 
  
         Collection<double> isoLineLevels = new Collection<double>(); 
  
         isoLineLevels.Add(40); 
         isoLineLevels.Add(50); 
         isoLineLevels.Add(60); 
         ect… 
          
 Hope this helps, Thanks!

Brilliant. It worked great.


Thanks!




Jakub, 
  
   Excellent, the image looks great!  We had considered Kriging as one of the interpolation algorithms at the start but decided to do Inverse Distance Weighted first.  I suppose Kriging could also be used in two dimensions to fit a curve to a histogram. :-)  If you would like the Kriging for the interpolation let us know and we can see if we can add that. 
  
 David

Yes, I would like to have a kriging as an option as it is a de-facto standard in environmental sciences. My customers would appreciate the choice of different algorithms, especially one they are familiar with.  It will make MapSuite that much stronger product. 

thanks 

 



Yes, I would like to have a kriging as an option as it is a de-facto standard in environmental sciences. My customers would appreciate the choice of different algorithms, especially one they are familiar with.  It will make MapSuite that much stronger product. 

thanks 

 


 



Hello Jakub, 
  
 Thanks for your advise and further information, we will consider to add this. 
  
 Feel free to let us know if you meet any problems again. 
  
 Regards, 
  
 Gary