ThinkGeo.com    |     Documentation    |     Premium Support

Shapefile Not Displaying When Projecting

 Hi,


I'm trying to reproject a roads shapefile on top of the world map kit but I'm having some problems getting the shapefile to display.  First let me give you a little background on the shapefile and method I'm using:


The shapefile I'm using has been downloaded from a Pinellas County in Florida.  The native projection of the shapefile is NAD27 Florida West State Plane.  The specific file I'm using is the Roads shapefile.  You can download this file for yourself at:


gis.pinellascounty.org/gisData/gisDataSets.aspx


Since I knew what the projection of the shapefile was, the next step I did was go to SpatialReference.org and find the Proj4 Projection string for this projection so I could reproject it to match the World Map Kit in code.  Below is the information page I found on SpatialRefrence.org that matched the projection I was looking for.


spatialreference.org/ref/epsg/26759/


Ok, at this point I thought everything was great so I started to modify the DisplayASimpleMap sample in the HowDoISamples to see if it would work.  To my expectation the map zoomed into exactly where I was expecting (the county in Florida) which made me think my projection logic worked great.  However to my suprise the roads didn't display on the map.  After looking at the code over and over again to make sure I didn't have a coding error dealing with my styles, I commented out the projection code and the roads displayed fine.  This was a big suprise as I didn't think that projecting a shapefile would have any impact on the display of the styles.  Is this a bug in the control?  I'm using the latest Desktop 4.0 public release (not daily build).  


Below is the code that I'm using so you can try it out for yourself:



        Private Sub DisplayMap_Load(ByVal sender As Object, ByVal e As EventArgs)
            winformsMap1.MapUnit = GeographyUnit.DecimalDegree
            winformsMap1.BackgroundOverlay.BackgroundBrush = New GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean)

            Dim worldMapKitDesktopOverlay As WorldMapKitWmsDesktopOverlay = New WorldMapKitWmsDesktopOverlay()
            winformsMap1.Overlays.Add(worldMapKitDesktopOverlay)

            Dim roadOverlay As New LayerOverlay()
            Dim roadShapeFile As New ShapeFileFeatureLayer("C:\Temp\Roads\ROADS.shp")
            Dim proj As New Proj4Projection()
            proj.InternalProjectionParametersString = "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"
            proj.ExternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326)
            roadShapeFile.FeatureSource.Projection = proj
            roadShapeFile.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.SimpleColors.Red, 2, True)
            roadShapeFile.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20
            roadOverlay.Layers.Add(roadShapeFile)
            winformsMap1.Overlays.Add(roadOverlay)

            roadShapeFile.Open()
            'winformsMap1.CurrentExtent = New RectangleShape(-139.2, 92.4, 120.9, -93.2)
            winformsMap1.CurrentExtent = roadShapeFile.FeatureSource.GetBoundingBox()

            winformsMap1.Refresh()
        End Sub

 


 


Any help would be appreciated.


Thanks!


 


 


 


 



According to the description you gave, I would guess that the code should work fine. Now I have not downloaded the road shapefile yet and i would have to look at the data itself to see what is going on. It might be that the original projection uses feet instead of meter and that might cause the displaying of the layer to not be correct. Let us look at that issue more thoroughly tomorrow morning and we will let you know.

The unit of the projection is Feet, but shouldn’t the MapUnit be set to Decimal Degrees since I want it to match the World Map Kit and that is the projection I’m going too?

I downloaded the road data from the link you indicated and I used your code. The result I have is that the road shapefile is displaying fine on top of the WorldMapKit as you can see in the screen shots. I don't know what is going on on your side. Make sure you build the spatial index before using the shapefile with our map. You can can build the Spatial Index by loading the shapefile into Map Suite Map Explorer or use the static function ShapeFileFeatureLayer.BuildIndex.

 



 





Which version are you using?  I’m using the 4.0 Desktop edition (not a Daily Build version).

Clint, 
  
 Please use the latest version of Map Suite Desktop; it works in the latest version while it is not working as you said in the 4.0.0.0 public release. I will do some research on this later and let you know if I got something. 
  
 Thanks. 
  
 Yale 


Yale, 
  
 I figured out what was going on.  My development machine is 64bit Windows 7 and I had my project set to compile as X86.  If I change it to "Any CPU" everything works fine.  Also if i use the ManagedProjection class instead of the Proj4Projection class it works fine.  I hope this helps. 
  
 Thanks! 
  
 Clint

I am glad you finally have it working. I would add that Proj4Projection should work as well as ManagedProj4Projection, although it is preferable to use ManagedProj4Projection since it is in managed code.