ThinkGeo.com    |     Documentation    |     Premium Support

MapUnit / GoogleMaps

Hello


I use several overlay (Shape,Google,Virtual Earrth, Image with workfile). I wanted all those use MapUnit = DecimalDegree. I activated the MouseCoordinate in order to have the coordinates displayed on the map.


The shape overlay is ok (-180,+180;-90,+90). But every other overlay give me a much more big range (I think it's like MapUnit = Meter)


I would like to know if Google/VirtualEarth/ImageWorkfile Overlay change the MapUnit automatically and if there is a way to make these overlay take DecimalDegree instead of Meter.


Initialisation of overlays :


Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.StandardColors.Blue);

Map1.CurrentExtent = new RectangleShape(-80.5, 68.9, 80, -60.43);

Map1.MapUnit = GeographyUnit.DecimalDegree;


Map1.MapTools.MouseCoordinate.Enabled = true;

Map1.MapTools.PanZoomBar.Enabled = true;


GoogleOverlay google = new GoogleOverlay("GoogleMap");

google.GoogleMapType = GoogleMapType.Normal;

google.JavaScriptLibraryUri = new Uri(ConfigurationManager.AppSettings["GoogleUri"]);

google.IsBaseOverlay = true;


VirtualEarthOverlay ve = new VirtualEarthOverlay("BingMap");

ve.JavaScriptLibraryUri = new Uri(ConfigurationManager.AppSettings["VEUri"]);

ve.VirtualEarthMapType = ThinkGeo.MapSuite.WebEdition.VirtualEarthMapType.Road;

ve.IsBaseOverlay = true;


ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(MapPath("~/SampleData/world/cntry02.shp"));

worldLayer.ZoomLevelSet = new GoogleMapZoomLevelSet();

worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(255, 243, 239, 228), GeoColor.FromArgb(255, 218, 193, 163), 1);

worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

LayerOverlay worldOverlay = new LayerOverlay("ThinkGeo");

worldOverlay.Layers.Add(worldLayer);

worldOverlay.Name = "ThinkGeo";


LayerOverlay geocodeOverlay = new LayerOverlay("GeocodeImageOverlay");

GdiPlusRasterLayer gdiPlusImageLayer = new GdiPlusRasterLayer(MapPath(@"~\SampleData\Geocode\IGN4_CR.jpg"));

gdiPlusImageLayer.UpperThreshold = double.MaxValue;

gdiPlusImageLayer.LowerThreshold = 0;

geocodeOverlay.Layers.Add(gdiPlusImageLayer);

geocodeOverlay.IsBaseOverlay = true;


Map1.CustomOverlays.Add(google);

Map1.CustomOverlays.Add(ve);

Map1.CustomOverlays.Add(geocodeOverlay);



Hi Alexandre,



Actually, google, ve, yahoo... are render based on EPSG:900913; it cannot display correctly in DecimalDegree coordinates technically. But I have a solution for you, to convert the coordinates to decimal degree while mouse moving.



Here is a workaround for you, please paste it to the header tag of your aspx page.


        function OnMapCreating(map){
            OpenLayers.Control.MousePosition = OpenLayers.Class(OpenLayers.Control.MousePosition, {
                formatOutput: function(lonLat) {
                    var newHtml = '';
                    var point = new OpenLayers.Geometry.Point(lonLat.lon, lonLat.lat);
                    var srcProj = new OpenLayers.Projection('EPSG:900913');
                    var desProj = new OpenLayers.Projection('EPSG:4326');
                    var newPoint = OpenLayers.Projection.transform(point, srcProj, desProj);
                    var newHtml = newPoint.x + ',' + newPoint.y
                    return newHtml;
                }
            });
        }



Any questions please let me know.



Thanks,

Howard



 



I want to create shape using TrackMode tools and display them regardless the background overlay (Google,Bing,Image with workfile,ShapeList). 
  
 Is there a way convert  a shape from a projection to another ? 
 Which projection is used for Image with workfile ? 


Alexandre,



Yes, we can project a shape from a projection to another. Please see the following code:
Proj4Projection proj4Projection = new Proj4Projection();
proj4Projection.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326);
proj4Projection.ExternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(2163);
RectangleShape rectangleSource = new RectangleShape(-180, 90, 180, -90);
RectangleShape rectangleTarget = proj4Projection.ConvertToExternalProjection(rectangleSource);



Do you mean workfile is worldfile? Technically, we don't support to project an image with worldfile. But we can do a a little bit change on the world file; for example change the resolution x and y in the world file from decimal degree to meter. I'm not sure whether this is what you want but as far as I know, it's the only way doing this to project an image in our product.



Any questions please let me know.



Thanks,

Howard



Hi Howard,


I have the following code in my javascript to show the mouse position


   
openlayers.control.mouseposition=  
OpenLayers.Class(OpenLayers.Control.MousePosition,   
  formatOutput: function(lonLat)      
   { var newHtml = '';        
       var newPoint = transform(lonLat.lon, lonLat.lat, toInternal);        
        var newHtml = newPoint.y + ', ' + newPoint.x;        
           return newHtml; } } ); 


it works in firefox.. it doesn't seem to work in IE.. do you know why? How do i get it work in IE too?


 


Thanks!


 


Roson



hmmm… sorry. i doesn’t work with IE too…  
 in my case, 
 I think it’s got cut off in the bottom when displayed in the frame of a desk app… 
  
 is there a way to move it up a bit? some change in CSS? 
  
 Thanks a lot!

Hi Roson,


You mean you don’t want to make the mouse coordinate information displayed in lower right corner, just move the mouse position control up a bit? If so, you could set the ‘displayClass’ property of MousePosition control, and set the absolute position anywhere you want in the CSS class.
Please let me know if there is any misunderstanding.
Thanks,
Sun

thanks! =]

Lishan, 
  
 Please feel free to let us know if you have more questions. 
  
 Thanks, 
 Howard

Hi, 
  
 I have another issue with this. Right now, when I keep panning/dragging the map to the right, the x coordinate just keep increasing.  It should probably be back to 0 and increase again from there?  similar for panning to the left the x coordinate just keep decreasing and never reset. probably be the same problem for the y coordinate.   
  
 Is there a way to fix this? 
  
 thanks! 
  
 Roson

Lishan, 
  
 I’m not sure the meaning; because the x coordinate wouldn’t always keep increasing while you keep panning or dragging the map to the right. So, if you want to restrict the current extent, you could set the RestrictedExtent property of the Map control, we have a RestrictedExtent sample in our installed samples which you can find its source code at “Samples\NavigateTheMap\RestrictedExtent.aspx”. If this issue still exists, please provide us how to recreate this issue. 
  
 On the other hand, if you want our map repeats again and again if you keep panning; we would say sorry, because we don’t support it currently. 
  
 Hope it makes sense. 
  
 Thanks, 
 Howard

Thanks! 
  
 Roson

You are always welcome, any more questions please let us know. 
  
 Thanks, 
  
 Sun