ThinkGeo.com    |     Documentation    |     Premium Support

Shapefile Projection Indexes

Hi Guys,


Using version 4, I am trying to create indexes on a shapefile using a projection but the resulting indexes are unusable.  They result in features disappearing as you zoom in, so it looks like I am doing something wrong. 


I am trying to use a projection SRID of 3395 but even if take the code I have and try and rebuild the 2163 projection index on your sample data (Countries02_2163.idx) I get wildly different files to those originally supplied with your sample data.  Can you post a code snippet that would recreate your Countries02_2163.idx and ids so we have a reproducable working example of how to create an index using a projection?


Thanks in advance


Rgds


Graeme



Hi Guys,


To flesh out Graeme’s question.
We have a detailed coastline map of the World, we are more interested in the Oceans and Coastlines that what is on the land. This map consists of three different shape files depending on the zoom level, small, medium and large. These are all EPSG:4326.
The objective of the exercise is to get the WMS server (your product) to deliver the map in either EPSG: 4326 or EPSG:3395 which is a Mercator projection. Maps delivered in thewir native format are always fine, no feature loss.
Simply applying a Proj4 projection to the 4326 based shape files (and indexes) produces maps where large lumps of land appear and disappear as you zoom in and zoom out. This behaviour can be replicated in a Desktop App.
We investigated further and noted that the How Do I example on projections uses a separate index apparently built on the destination projection (EPSG:2163). We tried doing this using our data, the required projection and the BuildIndexFile method. Opening our shape files with these new indexes in a Desktop app produces partial maps and a large number of missing features.
Next we ran the ‘Use a different projection for a feature layer” example and noted that this has the same problems, whole continents appear and disappear as you zoom in and out. Guys this is your example, your data, your product and is does not work!
Can someone supply a lucid explanation of how the projection system is to be used without feature loss?
 Is it necessary to build separate indexes for each projection, if so why, if not so then why does the How Do I example do this?
We can physically re-project the shape files but that seems to defeat the objection of the projection system.

Regards


John



 I am not part of the Map Suite developement team so I cannot tell you with certainty what is going on with some features appearing and disappearing as you zoom in and out. I will get some explanations from the developement team on that.


In the meantime, I think that the solution is to physically save to the projection the shapefiles. ShapeFileFeatureLayer has a static method for that:



ManagedProj4Projection proj4Projection = new ManagedProj4Projection();
proj4Projection.InternalProjectionParameters = ManagedProj4Projection.GetEpsgParameters(4326);
proj4Projection.ExternalProjectionParameters = ManagedProj4Projection.GetEpsgParameters(3395);
ShapeFileFeatureLayer.SaveToProjection(@"..\..\Data\countries02.shp", @"..\..\Data\countries02_3395.shp", proj4Projection, OverwriteMode.Overwrite);

 

By calling ShapeFilefeatureLayer.SaveToProjection, it creates automatically a spatial index file for it.


As you can see in the image below, the projected shapefile on Countries02 results having the Antartica being grossly exagerated due to the nature of the projection. This is normal behavior but I want you to be aware of that.




One more thing I would like to mention. Once the new shapefile is created using ShapeFileFeatureLayer.SaveToProjection, you don't need to apply any projection to it to load it on the map as you can see in the code below:


 



winformsMap1.MapUnit = GeographyUnit.Meter;
ShapeFileFeatureLayer myLayer = new ShapeFileFeatureLayer(@"..\..\Data\countries02_3395.shp");

myLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
myLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(150, GeoColor.StandardColors.Red), GeoColor.StandardColors.Black, 1);

LayerOverlay staticOverlay = new LayerOverlay();
staticOverlay.Layers.Add("MyLayer", myLayer);
winformsMap1.Overlays.Add(staticOverlay);


Hi Val, 
  
 Thanks for the info.   
 We are aware of the possibility of re-projecting the shape files and do realise that the base coastline maps we have are virtually fixed apart from the odd Island that pops up in volcanic areas.  The problem is with the other layers that our map server will deliver, these are more volatile and the thought of having to maintain a separate copy for each projection is more problematic. 
  
 Can you confirm you do see the same problem with the re-projection example as we do?  We are just seeking confirmation that what we are doing is correct.  If it’s a problem it can be fixed; at present we don’t know where the problem is. 
  
 Incidentally what is the difference between a ManagedProj4Projection and a Proj4Projection, the help does not seem to differentiate between them? 
  
 Regards 
  
 John 


I don’t think you are doing anything wrong. I am also seeing the projection problem where some features appear and disappear as you zoom in and out. I am investigating this with the developement team and I will let you know once I know more on that subject.  
   The difference between Proj4Projection and ManagedProj4Projection is that ManagedProj4Projection is entirely in managed code within the .Net framework while Proj4Projection is unmanaged. ManagedProj4Projection being entirely managed by .NET, it ensures that code handles security and memory issues and is therefore safer. I recommend that you use ManagedProj4Projection instead of Proj4Projection. We still have it to be backward compatible.

Hi Val,


Thanks for the update, glad it was not us with the problem, I'm sure the guys will get to the bottom of it.


As for the ManagedProj4 versus Proj4, we kind of guessed that.  I hope that some one updates the help at some future stage.


Regards


John


 



Hi Guys,


Is any progress being made on this one?


Regards


John



John, 
  
   We are still looking into it.  It is a complex problem with few solutions and we are still considering various approaches. 
  
 David

John, 
  
   We have a solution for many of the projection such as Spherical Mercator.  For projections that do not warp the features very much the new solution will work well.  There is still an issue for projections that severely distorted features and we are working on that. I think we will have that tackled in a week or two.  The new solution will go into the code base tomorrow and you can get it the next day form the daily build.  I will update this thread once the changes are in. 
  
 David

Hi David,


Thanks for that I'll keep an eye out for the message.


Regards


John


 


 



Hi David,


Have not tried any of the latest builds, has this been sorted yet?


Regards


John


 



John, 
  
   The changes were tested and put in today so try it tomorrow version 4.0.126.0 or higher.  Sorry for the delay! 
  
 David