ThinkGeo.com    |     Documentation    |     Premium Support

Reprojecting Grids and Isolines

Hi,


I am creating grid files in WGS-84 Lat/Long and then attempting to load them into winformsMap using meters for the map unit and a spherical mercator projection.


At first, the GridFeatureLayer and GridIsolineLayer were showing up tiny as the lat/long coordinates were being used rather than the spherical mercator meter units.


My first attempt to solve this problem was to write out the grid file into Spherical Mercator units.  This unfortunately failed because the GenerateGrid method of GridFeatureSource refused to output any valid Z values (all -9999).  For whatever reason, if I leave the input points in WGS-84 Lat/Long, the method works.


My second attempt was to modify the Projection property of the GridFeatureLayer so that the external projection was set to Spherical Mercator.  This worked nicely.  However, I have since been trying to get Isolines to display in the same manner.  Unfortunately, there is no FeatureSource of GridIsolineLayer and hence I can't respecify it's projection.


What do you recommend to get both Grids and Isolines to display on spherical mercator projection?  Also, why does the GenerateGrid method return -9999 for all Z values when spherical mercator coordinates are supplied.


Thanks,

Damian



 Damian,



We wrote a sample for you creating a grid file in SphericalMercator and generate Isolines based on it , with Googlemaps as the background, please have a look.




We didn’t see the -9999 issue in this sample and I think that’s because some of the grids are not covered by your interpolation algorithm and they are then granted as -9999, the default NoDataValue. If you still have this issue even using the methods in this sample, please let us know the detail. 


Because IsoLineLayer is inherited from Layer instead of FeatureLayer, it doesn’t have FeatureSource where we can set the projection. But I think you are right that it might be more convenient if we could set projection directly to a GridIsoLineLayer. I’ve added to our internal tracking system and we’ll see if we can add it.


Ben



GenerateGridFileInSphericalMercator.zip (20 KB)

Hi Ben,


I had actually based my code on the same project from the sample page.  I found the difference though that causes the problem.


Attached is an X,Y, Z tab separated dataset with Lat/Long values sampled at 1000m interval.  If you override the cell size to 1000m and then change the search radius of the GenerateGrid method to 3000m, then you will get all -9999 values even though there should be plenty of data points in this range for the interpolation method to work with.


If you make the following code changes to make the displays in default WGS-84 Lat/Long, you will get good results using the same dataset.


1.  Comment out the line in your code sample that changes the projection of the points to spherical mercator


2.  Update the cell size and search radius to  0.009 and 0.027 (i.e. approximate 1000m and 300m to lat/long by dividing (1852f * 60f))


3.  Update the windows extent based on the min/max point in the dataset


4.  Update Map Unit to DecimalDegree and comment out GoogleMapsOverlay


...then you will see that the method works fine and the grid file has valid results for all data points.


So, I don't understand why the interpolation struggles with meters, but works with Lat/Long.  Maybe there is a unit conversion issue in the interpolation model?


Thanks,

Damian



AmazonBathy.zip (38 KB)

Hi Damian, 
  
 We have recreated your issue and we found it’s a bug in Core. It has been fixed and please get the latest version (6.0.73.0 or 6.0.0.73) and try again. 
  
 Ben 


Thanks Ben!  I confirm the fix works well. 
  
 I appreciate the quick response. 
  
 Regards, 
 Damian

Hello Damian, 
  
 You are welcome, please feel free to let us know your problems. 
  
 Regards, 
  
 Gary


Posted By Ben on 07-24-2012 12:25 AM


 Damian,



We wrote a sample for you creating a grid file in SphericalMercator and generate Isolines based on it , with Googlemaps as the background, please have a look.




We didn’t see the -9999 issue in this sample and I think that’s because some of the grids are not covered by your interpolation algorithm and they are then granted as -9999, the default NoDataValue. If you still have this issue even using the methods in this sample, please let us know the detail. 


Because IsoLineLayer is inherited from Layer instead of FeatureLayer, it doesn’t have FeatureSource where we can set the projection. But I think you are right that it might be more convenient if we could set projection directly to a GridIsoLineLayer. I’ve added to our internal tracking system and we’ll see if we can add it.


Ben




Hi Ben



I am also looking to set a projection directly to a GridIsoLineLayer.



Has this feature been implemented yet?



regards



Murray


Hi Murray, 
  
 Thanks for you post, but I am sorry to say that currently this feature hasn’t been implemented yet, would you please use the walkaround from ben before we implement it, once we have enough resouce, we’ll implement it immediately. 
  
 Best Regards 
  
 Summer