private void UseRotationProjectionForAFeatureLayer_Load(object sender, EventArgs e) { winformsMap1.MapUnit = GeographyUnit.Meter; winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean); string connectString = yourconnectionstring; myfeatuerlayer sql2008Layer = new myfeatuerlayer(); sql2008Layer.ConnectionString = connectString; sql2008Layer.TableName = TableName; sql2008Layer.FeatureIdColumn = FeatureIdColumn; UnmanagedProj4Projection prj = new UnmanagedProj4Projection(); prj.InternalProjectionParametersString = UnmanagedProj4Projection.GetEpsgParametersString(3395); prj.ExternalProjectionParametersString = UnmanagedProj4Projection.GetGoogleMapParametersString(); prj.Open(); sql2008Layer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1; sql2008Layer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; rotateProjection = new RotationProjection(); sql2008Layer.FeatureSource.Projection = prj; (sql2008Layer.FeatureSource as MyFeatureSource).rotateProjection = rotateProjection; sql2008Layer.Open(); rotateProjection.Open(); LayerOverlay worldOverlay = new LayerOverlay(); worldOverlay.Drawn += new EventHandler(worldOverlay_Drawn); worldOverlay.Layers.Add("WorldLayer", sql2008Layer); winformsMap1.Overlays.Add("WorldOverlay", worldOverlay); winformsMap1.ZoomLevelSnapping = ZoomLevelSnappingMode.None; winformsMap1.CurrentExtent = rotateProjection.GetUpdatedExtent(sql2008Layer.GetBoundingBox()); winformsMap1.Refresh(); } void worldOverlay_Drawn(object sender, DrawnOverlayEventArgs e) { UnmanagedProj4Projection prj = new UnmanagedProj4Projection(); prj.InternalProjectionParametersString = UnmanagedProj4Projection.GetEpsgParametersString(3395); prj.ExternalProjectionParametersString = UnmanagedProj4Projection.GetGoogleMapParametersString(); prj.Open(); ((sender as LayerOverlay).Layers[0] as MsSql2008FeatureLayer).FeatureSource.Projection = prj; } class myfeatuerlayer : MsSql2008FeatureLayer { public myfeatuerlayer() { FeatureSource= new MyFeatureSource(); } } class MyFeatureSource : MsSql2008FeatureSource { public RotationProjection rotateProjection; protected override Collection GetFeaturesForDrawingCore(RectangleShape boundingBox, double screenWidth, double screenHeight, System.Collections.Generic.IEnumerable returningColumnNames) { Collection features = base.GetFeaturesForDrawingCore(boundingBox, screenWidth, screenHeight, returningColumnNames); Collection convertedFeatures=new Collection(); UnmanagedProj4Projection prj = new UnmanagedProj4Projection(); prj.InternalProjectionParametersString = UnmanagedProj4Projection.GetEpsgParametersString(3395); prj.ExternalProjectionParametersString = UnmanagedProj4Projection.GetGoogleMapParametersString(); prj.Open(); foreach (Feature feature in features) { convertedFeatures.Add(prj.ConvertToExternalProjection(feature)); } this.Projection = rotateProjection; return convertedFeatures; } } private void btnRotateCounterclockwise_Click(object sender, EventArgs e) { rotateProjection.Angle += 20; winformsMap1.CurrentExtent = rotateProjection.GetUpdatedExtent(winformsMap1.CurrentExtent); winformsMap1.Refresh(winformsMap1.Overlays["WorldOverlay"]); } private void btnRotateClockwise_Click(object sender, EventArgs e) { rotateProjection.Angle -= 20; winformsMap1.CurrentExtent = rotateProjection.GetUpdatedExtent(winformsMap1.CurrentExtent); winformsMap1.Refresh(winformsMap1.Overlays["WorldOverlay"]); }