ThinkGeo.com    |     Documentation    |     Premium Support

Projection problems

Hello,


I am trying to add a shapefile to a one of my maps.  I got the Shapefile form the State of Oregon.  Its an Shapefile containing the political districts, one for the state house and one for the state senate.  Looking in the XML file that came with the shapefile, it appears to be NAD83 Lamebert Conformal Conical projection.  I tried making a striped down project that jsut loads the shapefile.  I was not able to display it in feet, meters or decimaldegree as mapunits.  I made a projection object and tried to project it.  I am familar with using your projection object.  I have been using it successfully.


 



ManagedProj4Projection proj4 = new ManagedProj4Projection();
            proj4.InternalProjectionParameters = ManagedProj4Projection.GetEpsgParameters(4326);
            proj4.ExternalProjectionParameters = ManagedProj4Projection.GetGoogleMapParameters();

            ManagedProj4Projection proj5 = new ManagedProj4Projection();
            proj5.InternalProjectionParameters = ManagedProj4Projection.GetEpsgParameters(2226);
            proj5.ExternalProjectionParameters = ManagedProj4Projection.GetGoogleMapParameters();

I guess what I need to know is the code for this projection.  I did some research and it look slike I should be using 2991 or 2992.  Both of which did not work.  I also tried just epsg 83 and 8901 which also didnt work.


Any ideas.  I am attaching a screenshot of the XML for the shapefile that contains the projection information.



Thanks,


Leon


 



Leon,


 I did a search in spatial-reference.org to see if there is a standard projection used for Oregon. The closest thing I could find according to the parameters I saw in your XML is EPSG 2992 spatial-reference.org/ref/epsg/2992/proj4/ as you did. But i notice that the false easting parameters is different: 



+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs 

So, I would try  the following string with the change in the false easting value:



+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=1312336 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs 

 If you are still having trouble, you would need to send us the shapefile itself so that we can test directly on it. Thank you.



Thanks for the reply Val,


How would I code that string into a projection?



+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=1312336 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs 

Here is the code for my basic page that I am using to try and see the shapefile.


 


Thanks for your help,


Leon


 



//Setting up the Map
                Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));
                //Map1.CurrentExtent = new RectangleShape(-118.19, 34.8, -117.6, 32.7);
                Map1.MapUnit = GeographyUnit.DecimalDegree;
                Map1.MapTools.MeasureMapTool.Enabled = true;
                Map1.MapTools.MeasureMapTool.MeasureType = MeasureType.None;
                Map1.MapTools.AnimationPanMapTool.Enabled = true;

                ManagedProj4Projection proj6 = new ManagedProj4Projection();
                proj6.InternalProjectionParameters = ManagedProj4Projection.GetEpsgParameters(2992);
                proj6.ExternalProjectionParameters = ManagedProj4Projection.GetEpsgParameters(4326);

                ShapeFileFeatureLayer layer2 = new ShapeFileFeatureLayer(MapPath("app_data/2000house_districts.shp"));
                ShapeFileFeatureLayer.BuildIndexFile(MapPath("app_data/2000house_districts.shp"));
                layer2.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.Canal1;
                layer2.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                layer2.FeatureSource.Projection = proj6;

                //Define a Layer Overlay object
                LayerOverlay ShapeFiles1 = new LayerOverlay();
                ShapeFiles1.IsBaseOverlay = false;
                //Add the Shape Layer to the Layer Overlay Object
                //ShapeFiles1.Layers.Add(layer1);
                ShapeFiles1.Layers.Add(layer2);
                
                Map1.CustomOverlays.Add(ShapeFiles1);


Leon,


Please try this code:


ManagedProj4Projection proj6 = new ManagedProj4Projection();
proj6.InternalProjectionParameters = "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=1312336 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"; 
proj6.ExternalProjectionParameters = ManagedProj4Projection.GetEpsgParameters(4326);

Thanks,


James



Hi James,


thanks for your help.  I did not realize that you could put the projection information directly into the object as a string.


I tried your code snippet but its not working.  I am attaching the shapefile that I got from the Oregon state website.  Could you please look at it.  I think there must be something I am missing or the shapefile is bad.


thanks


I can not attach the zip file because it is over 500kb.  I am posting the link to the website where I got the file


sos.state.or.us/election...eshape.zip


 


 


 


 


 


 



Leon, 
  
  We will look at that Oregon data tomorrow. Thank you for your interest in Map Suite.

Leon, 
  
  I am still working on this. You should have an answer tomorrow morning. Thank you for your patience.

Thank you Val, I appreciate your assistance. 
  
 Leon

Leon,


I reviewed all of the comments above and I checked the shape files what you attached, I found out a problem in your code, actually, your shape file is the multi polygon shapes, but you render it used the line style, obviously, the shape file cannot be displayed correctly whatever the mapunit, please use the following code to try again with your shape file:



 //Setting up the Map
                Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));

                Map1.MapUnit = GeographyUnit.Feet;
                Map1.MapTools.MeasureMapTool.Enabled = true;
                Map1.MapTools.MeasureMapTool.MeasureType = MeasureType.None;
                Map1.MapTools.AnimationPanMapTool.Enabled = true;

                ShapeFileFeatureLayer layer2 = new ShapeFileFeatureLayer(MapPath("app_data/2000house_districts.shp"));
                layer2.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
                layer2.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                layer2.Open();
                Map1.CurrentExtent = layer2.GetBoundingBox();
                layer2.Close();

                //Define a Layer Overlay object
                LayerOverlay ShapeFiles1 = new LayerOverlay();
                ShapeFiles1.IsBaseOverlay = false;
                ShapeFiles1.Layers.Add(layer2);

                Map1.CustomOverlays.Add(ShapeFiles1);
You can see I didn't use any code for projection, I just set the mapunit to Feet and change the line style to area style then the shape file can be displayed correctly, according to your first comment, I think this is your real problem,


If you still have any other questions please let us know,


Thanks,


Scott,



Oh wow!!  how did I miss that one.  Ok now that is embarassing. 
  
 Thanks to everyone who replied to this ticket.  I appreciate everyone’s help and for pointing out my mistake. 
  
 Leon

Leon,


 I am glad Scott helped you solve the style problem.


I would like to bring the projection issue you are having and bring one correction. For the internal projection parameters, you have to pass a string due to the custom parameters used for the Oregon projection. The false Easting is always expressed in meters in the Proj4 string, as opposed to the prj file were it can be expressed in feet. So the false easting is going to be 400 000 (not 1 312 336).



"+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"



;

And I could display fine your shapefile on the WorldMapKit. See the screen shot below: