ThinkGeo.com    |     Documentation    |     Premium Support

Shapefile not being displayed

I have a large shapefile with polygons, 200MB with around 600,000 entries and I can not get any results to be displayed. At first I thought it was still loading, but I've left it overnight and nothing was displayed. Here is the code I am using...


            Map1.MapBackground.BackgroundBrush = New GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"))

            Map1.CurrentExtent = New RectangleShape(-12481012.91026, 3958451.87724, -12478170.40996, 3956216.09549)

            Map1.MapUnit = GeographyUnit.Meter


            Map1.MapTools.OverlaySwitcher.Enabled = True

            Map1.MapTools.MouseCoordinate.Enabled = True


            Dim bingMapsOverlay As New BingMapsOverlay("BingMaps Map", BingMapsStyle.Hybrid, "bingKey")

            Map1.CustomOverlays.Add(bingMapsOverlay)


            Dim parcelBoundary As ShapeFileFeatureLayer = New ShapeFileFeatureLayer("D:\Book100\Book100.shp")

            parcelBoundary.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.BrightYellow))

            parcelBoundary.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20


            Dim proj4 As New Proj4Projection() 'not sure if this section is needed

            proj4.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326)

            proj4.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString()

            parcelBoundary.FeatureSource.Projection = proj4


            Dim staticOverlay As New LayerOverlay("Parcel Boundary", False, TileType.MultipleTile)

            staticOverlay.Layers.Add("ParcelBoundary", parcelBoundary)

            Map1.CustomOverlays.Add(staticOverlay)




I tried to stream the file as well but I got a divide by zero error. Also, this is the first of 4 files that I need to load and they are all similiar sizes. Is there a better way to handle displaying the results? I do have access to SQL Server 2008 R2, but I haven't played around with the spatial data much.



Brandi,


  I did a test with a similar sized shapefile using your code and I am not running into problem. Of course, the shapefile has to be in decimal degrees as internal projection to be displayed properly because of the projection code you have so I would make sure of the following first before going any futher:


-You need to make sure that your shapefile Book100.shp is in decimal degrees (Geodetic, EPSG code 4326). If it is not in decimal degrees, you need to find out the exact projection in order to be able to display properly the shapefile on top of Bing Map.


If this is not a projection issue, we may need to get your shapefile and see if it may have a problem that causes the Map control to not behave as expected. Thank you.



Here is the contents of the prj file. 
 PROJCS[“NAD_1983_HARN_StatePlane_Arizona_Central_FIPS_0202_Feet_Intl”,GEOGCS[“GCS_North_American_1983_HARN”,DATUM[“D_North_American_1983_HARN”,SPHEROID[“GRS_1980”,6378137.0,298.257222101]],PRIMEM[“Greenwich”,0.0],UNIT[“Degree”,0.0174532925199433]],PROJECTION[“Transverse_Mercator”],PARAMETER[“False_Easting”,700000.0],PARAMETER[“False_Northing”,0.0],PARAMETER[“Central_Meridian”,-111.9166666666667],PARAMETER[“Scale_Factor”,0.9999],PARAMETER[“Latitude_Of_Origin”,31.0],UNIT[“Foot”,0.3048]] 
  
 One of the other files was considerably smaller at 8MB, but I was not able to get it to load either so I think something in my code is wrong. 
 I tried changing MapUnit to Feet and set the external projection 102718 (spatialreference.org/ref/esri/102249/) but I still am unable to get anything to display. Here is my latest code with changes.  
  
  
            Map1.MapBackground.BackgroundBrush = New GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"))
            Map1.MapUnit = GeographyUnit.Feet
            Map1.CurrentExtent = New RectangleShape(-12516185.63083, 3996519.64471, -12425531.36422, 3925891.8687) 'phoenix map

            Map1.MapTools.OverlaySwitcher.Enabled = True
            Map1.MapTools.MouseCoordinate.Enabled = True

            Dim bingMapsOverlay As New BingMapsOverlay(“BingMaps Map”, BingMapsStyle.Hybrid, “bingKey”)
            Map1.CustomOverlays.Add(bingMapsOverlay)

            Dim parcelBoundary As ShapeFileFeatureLayer = New ShapeFileFeatureLayer(“D:\Book100\Book400.shp”)
            parcelBoundary.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.BrightYellow, GeoColor.FromArgb(100, GeoColor.SimpleColors.BrightYellow))
            parcelBoundary.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.Red, 3, GeoColor.StandardColors.Black, 5, True)
            parcelBoundary.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20

            ShapeFileFeatureLayer.BuildIndexFile(“D:\Book100\Book400.shp”, BuildIndexMode.DoNotRebuild)

            Dim proj4 As New Proj4Projection()
            proj4.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326)
            proj4.ExternalProjectionParametersString = Proj4Projection.GetEsriParametersString(102249) 'Proj4Projection.GetGoogleMapParametersString()
            parcelBoundary.FeatureSource.Projection = proj4
            
            Dim staticOverlay As New LayerOverlay(“Parcel Boundary”, False, TileType.SingleTile)
            staticOverlay.Layers.Add(parcelBoundary)
            Map1.CustomOverlays.Add(staticOverlay)

 
  
 I went ahead and sent the zipped shapefile contents of this smaller book to support@thinkgeo.com.

Brandi,


 You had several things wrong in your code:


-MapUnit: It needs to be in meters because you have your map in meters with Bing Map as background map which is in Spherical Mercator projection ( as Google Map, Bing Map, Open Street Map) and it uses meters.


-The internal projection of your shapefile: It needs to be ESRI 102649 (NAD83 StatePlane Arizona central fips 0202 feet. If the internal projection is set wrong, the projection conversion will not work and the layer will not display properly on the Spherical Mercator map


-The Spatial index: The spatial index (.idx and .ids files) were not build causing some performance issues. The spatial index is recommended to be build when the layer is used in Map Suite control.


 As, you can see in the screen shots below, I have your Book400 shapefile displaying correctly on Bing Map now. You can also see the code I used. Thank you.


 



 


 



This is the code I used:


 



Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));
Map1.MapUnit = GeographyUnit.Meter;

//I had to build the spatial index first.
//ShapeFileFeatureLayer.BuildIndexFile(@"C:\ThinkGeo\Support\Posts\9956\Book400.shp");

BingMapsOverlay bingMapsOverlay = new BingMapsOverlay();
Map1.CustomOverlays.Add(bingMapsOverlay);

ShapeFileFeatureLayer Layer1 = new ShapeFileFeatureLayer(@"C:\ThinkGeo\Support\Posts\9956\Book400.shp");
Layer1.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
Layer1.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(100, GeoColor.SimpleColors.Red), 
                                                                                        GeoColor.SimpleColors.Black);
Proj4Projection proj4 = new Proj4Projection();
//NAD83 StatePlane Arizona central fips 0202 feet: spatialreference.org/ref/esri/102649/
proj4.InternalProjectionParametersString = Proj4Projection.GetEsriParametersString(102649);
//Spherical Mercator (Google Map, Open Street Map, Bing Map)
proj4.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();

Layer1.FeatureSource.Projection = proj4;

LayerOverlay staticOverlay = new LayerOverlay();
staticOverlay.IsBaseOverlay = false;
staticOverlay.Layers.Add(Layer1);
Map1.CustomOverlays.Add(staticOverlay);

Layer1.Open();
Map1.CurrentExtent = Layer1.GetBoundingBox();
Layer1.Close();