ThinkGeo.com    |     Documentation    |     Premium Support

Projecting Shapefiles with Google Map Layer

Hello,


I am using the Google map's layer in my mapping application and I am having some trouble understanding how projections work.  I followed the sample application GpsToGoogleDesktop code.thinkgeo.com/projects/show/gpstogoogledesktop.  And I somewhat understand how to project features onto the google map using the Proj4Projection.  But I'm having trouble getting a shapefile to be displayed or projected where i set my current extent to. 


For example i set my map extent to be a view of Michigan using:


 


 



//Sets the projection parameters to go from Geodetic (EPSG 4326) or decimal degrees to Google Map projection (Spherical Mercator).
Proj4Projection proj4 = new Proj4Projection();
proj4.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString( 4326 );
proj4.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();

//Values in Longitude and Latitude.,  For middle of MI
double Longitude = -84.772339;
double Latitude = 43.598693;

proj4.Open();
Vertex vertex = proj4.ConvertToExternalProjection(Longitude, Latitude);
proj4.Close();

double extendWidth = 260000;
double extendHeight = 150000;

winformsMap1.CurrentExtent = new RectangleShape( (vertex.X - extendWidth), (vertex.Y + extendHeight), (vertex.X + extendWidth), (vertex.Y - extendHeight) );

winformsMap1.Refresh();

 


But with the other shapefile i am trying to display, it ends up being  placed in the ocean near Africa.  Is there an example or could you  further explain to me how i need to project other shapefiles onto the  google map?


thanks.


--Andy



We just published a project in the Code Community, Shapefile to Google Map, that responds almost exactely to your request, I think. Please, check it out.


code.thinkgeo.com/projects/s...ogooglemap



Hi Val, Thanks for pointing me to that example, it is pretty much exaclty what i was looking for, except i am still having alot of trouble actually getting the shapefile i am using to display. So i have a few more questions.


1.) I noticed that the shapefile you used in the sample app has uses a pointstyle shapefile.  The shapefile I am using uses polygons, will that make any difference as to the errors i am seeing?


2.) Is there anything with the actual shapefile that has to be set correctly? Such as each feature having a Lat/Long value? if so is there anyway to check this?


3.) The only time i was able to actually able to get the other shapefile to show up was when i didn't set its projection to the proj4Projection i created, and then i manually set the extent of the map based on a hard coded Lat/Long coordinate.  The shapefile was centered in the middle of the ocean (Lat/Long (0,0) im quite sure), is there anyway i could manually set where the shapefile is displayed without using the projection?


Im currently working on a sample application to show my problem, but i keep getting 403 forbidden exceptions, so ill have to put it up at a later time.


thank you for your help.


-- Andy



GPStoGoogleMapDesktop.zip (37.6 KB)

Andy,


Thanks for your post and codes showing your problem.
 
I did not find the data in the attachment, so I cannot make sure the data Delta_Parcels_2008.shp we are trying to use is in DecimalDegree data. If it is , then hope following way by setting the projection for the shape file feature layer will solve the problem.

 

Proj4Projection proj4 = new Proj4Projection();
proj4.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326);
proj4.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();
 
LayerOverlay staticOverlay = new LayerOverlay();
ShapeFileFeatureLayer shapefileLayer = new ShapeFileFeatureLayer(@"C:\Documents and Settings\athielking\Desktop\Delta GIS\BSA\Delta_Parcels_2008.shp");
shapefileLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Green, GeoColor.SimpleColors.Black);
shapefileLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
shapefileLayer.FeatureSource.Projection = proj4;


Any more questions just feel free to let me know.
 
Thanks.
 
Yale

Thank you for your response Yale,


i have tried setting the feature source of my shapefile layer to the proj4Projection i create, and the layer does not show up.  


Sorry for not including the corresponding shapefile, but it says that it is too big to upload, is there any other way i can send it to you?



Andy,


 You can contact support@thinkgeo.com and they can set you up with an FTP account where you can upload your data. But before you do that can you tell me if the shapefile has a PRJ file. If so, can you attached it, the PRJ file has the projection information and that will help a lot to see the different projection parameters. Also can you send us a screenshot of your Delta_Parcels_2008.shp loaded in Map Suite Explorer? By looking at the world coordinate, this is going to give us some ideas on what kind of projection the shapefile is in. Can you also tell us what geographical area that shapefile is supposed to cover?



Thank you.