ThinkGeo.com    |     Documentation    |     Premium Support

What is the difference between map Units Meter and Decimal degree

 when i need to use  Map1.MapUnit = GeographyUnit.DecimalDegree;


and when i need to use  Map1.MapUnit = GeographyUnit.Meter;


what is the diffenence between Meter and Decimal degree.in which situvation i need to use meter and DecimalDegree


shall we find the Map Unit From shape file.whether it is decimaldegree or Meter.



Hi rajanikanth,  
  
 Thanks for your question! 
  
 The MapUnit is used to inform the Map Control what unit of measurement your datasources use. This unit of measure varies depending on the projection of the data or the unit that was used to originally record the data. For example the OpenStreetMap data provided by our our OpenStreetMap Data Server provides data in Geodetic/WGS84. This projection/datum uses DecimalDegrees for its coordinate system. So if you are loading our OpenStreeetMap data you would want to set your Map1.MapUnit = GeographyUnit.DecimalDegree. 
  
 A scenario in which you would set your MapUnit = Meters would be if you were loading data that was in the SphericalMercator projection and this projection uses Meters for its coordinate system. Both GoogleMaps and Bing Maps use this projection so your MapUnit should be set to Meters if you are loading either of these datasets. 
  
 The question then raised is what if you want to use Google/Bing Map as a background Overlay/Layer and you also have shapefile data that uses DecimalDegrees for its coordinate system? Do you set the MapUnit to Meters or DecimalDegrees? 
 There are a couple of options but all of them involve modifying one of the datasets you wish to display. 
  
 My recommendation would be to reproject all of your shapefile data to the Spherical Mercator projection. Using the Proj4 library you can reprojection your DecimalDegree shapefile data to the Spherical Mercator projection ‘on-the-fly’, or use the ShapeFileFeatureLayer.SaveToProjection() method to create a new reprojected shapefile that contains all the data of the original shapefile. 
 With your shapefile data now in the same projection as Google/Bing Maps you can safely set the MapUnit of the Map to Meters as all of your data now utilzes Meters as the measurement unit. 
  
 If you have locally stored raster images that you wish to use for a background map you could use our recently release Raster Reprojection methods to reproject the images to the same projection as your shapefile data. So if your raster background images were SphericalMercator/Meters you could project them to Geodetic/DecimalDegrees, which is projection/coordinate system of your shapefiles. In this case you would set your MapUnit = DecimalDegrees as all of your data now uses DecimalDegrees for its measurement system.

heloo ryan


Thanks for your clear explaination.how to find wheher the shape file unit is DEcimaldegree or Meter.can we find the shape file geography unit Based on Shape file.


why means for my application my clients provide shape layers.accordind to those shape layers i need to load the map.so if i use decimal degree means Meter Shape files are not loading.if i use meter means Decimal degree files are not loading.so my question is based on shape file can we find the geography unit.so that we can mention correct geography unit.



 Please give me a answer  whether we can find geography unit based on shape file whether it is decomaldegree or Meter



rajanikanth,


One way you could find out the unit system of your shapefile is to parse the .prj file that is included with many shapfiles. This file should contain the projection, datum, unit system and other information about your shapefile.

A method that makes it easy to convert all of your data to the same projection is the ConvertPrjToProj4() method. With this method you can pass in the path to a shapefile's .prj file and Map Suite will convert it to a Proj4 string you can use as an InternalProjectionParametersString for your Proj4 object.


Check out the following sample from the Wiki demonstrating the ConvertPrjToProj4() method here: wiki.thinkgeo.com/wiki/Map_S...g_Prj_File



 thanks Ryan,


when i use geography Unit as meter iam getting different latitudue and longitude values(915362.34567,852182.34567) when compare with decimaldegree latitude and longitude valyes(-84.868668,31.234567).why it shows different lat and longitude values.so iam not able add markers on the Map.if i use decimal degree at that time the markers are added on the Map based on lat and long values.if i use Meter Iam not able  to see markers on the Map.Here the map is loading but markers are not showing.based on latitude and longitude values iam adding marker on the map.so if i use meter means based lat and longitude values markers are not displaying in the map.so how to show markers on Map when i use mapunit as Meter.for ex iam having a location of (Dollar,Alabama,Us) for this iam getting lat and longitude values.when i use decimal degree the marker shows on the map.if i use meter then it is not showing on the Map.



 Helo Ryan,


please give me reply for this one.when i use map unit meter iam not able display markers on the map.is there any way to convert all map unit shape files to decimal degree.



Hi rajanikanth,


If you want to specify your Markers' locations in Decimal Degree and have them display in the proper locations on a 'Meters' Map you will need to convert your Decimal Degree - Lat/Long values to Meters - Lat/Long values. You can do this using the Proj4 class as shown below:



PointShape myPointShape = new PointShape(-84.868668,31.234567);
Proj4Projection proj4Projection = new Proj4Projection();
                proj4Projection.InternalProjectionParametersString = Proj4Projection.GetWgs84ParametersString();
                proj4Projection.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();
proj4Projection.Open();
PointShape newPointShape = (PointShape)proj4Projection.ConvertToExternalProjection(myPointShape);
Marker testMarker = new Marker(newPointShape.X,newPointShape.Y);
 

You can convert all of your meters-based shapefiles to DecimalDegrees by using the Proj4 class:



shapefileConversionProjection.InternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();
shapefileConversionProjection.ExternalProjectionParametersString = Proj4Projection.GetWgs84ParametersString();
shapefileConversionProjection.Open();
worldLayer.FeatureSource.Projection = shapefileConversionProjection;


 even here also iam not able to add markers of Meter lat and Longitude values. only  converted decimla degree Lat/Long value  markers are showing in Map.how to show both Meter and decimal degree markers on the Map.



Are you using the ConvertToExternalProjection() on points that use Meter - Lat/Long values?

You should only use this method in the form that I supplied above if your source points are in Decimal Degrees.


If your user specifies a point using Meters then you do not need to convert it; you can just add it as a PointShape using the Meters Lat/Long values.