private void DrawPoints(MapViewport map, IEnumerable <DataRow> features, Bitmap dot, Bitmap image) { var size = new Size(dot.Width, dot.Height); foreach (FeatureDataRow row in features) { var heatValue = HeatValueComputer(row); if (heatValue <= 0) { continue; } if (heatValue >= 1f) { heatValue = 1; } var c = row.Geometry.PointOnSurface.Coordinate; if (CoordinateTransformation != null) { c = GeometryTransform.TransformCoordinate(c, CoordinateTransformation.MathTransform); } var posF = map.WorldToImage(c); var pos = Point.Round(posF); //var pos = Point.Round(PointF.Subtract(posF, halfSize)); using (var tmpDot = ApplyHeatValueToImage(dot, heatValue)) { ImageBlender.BlendImages(image, pos.X, pos.Y, size.Width, size.Height, tmpDot, 0, 0, BlendOperation.BlendMultiply); } } }
protected void ddlProjection_SelectedIndexChanged(object sender, EventArgs e) { //Transform current view to new coordinate system and zoom to the transformed box string PreviousProj = ViewState["currentProj"].ToString(); string SelectedProj = ddlProjection.SelectedValue; //Points defining the current view Point left = new Point(myMap.Envelope.MinX, myMap.Center.Y); Point right = new Point(myMap.Envelope.MaxX, myMap.Center.Y); Point center = myMap.Center; if (PreviousProj != "Pseudo") { //Transform current view back to geographic coordinates ICoordinateTransformation trans = GetTransform(PreviousProj); left = GeometryTransform.TransformCoordinate(new Point(myMap.Envelope.MinX, myMap.Center.Y), trans.MathTransform.Inverse()); right = GeometryTransform.TransformCoordinate(new Point(myMap.Envelope.MaxX, myMap.Center.Y), trans.MathTransform.Inverse()); center = GeometryTransform.TransformCoordinate(myMap.Center, trans.MathTransform.Inverse()); } //If both PreviousSRID and SelectedSRID are projected coordsys, first transform to geographic if (SelectedProj == "Pseudo") { myMap.Center = center; myMap.Zoom = Math.Abs(right.X - left.X); } else //Project coordinates to new projection { //Transform back to geographic and over to new projection ICoordinateTransformation trans = GetTransform(SelectedProj); left = GeometryTransform.TransformCoordinate(left, trans.MathTransform); right = GeometryTransform.TransformCoordinate(right, trans.MathTransform); center = GeometryTransform.TransformCoordinate(center, trans.MathTransform); myMap.Center = center; myMap.Zoom = Math.Abs(right.X - left.X); var envelopeGcs = GeometryTransform.TransformBox(myMap.Envelope, trans.MathTransform.Inverse()); litEnvelopeLatLong.Text = envelopeGcs.ToString(); } GenerateMap(); }