예제 #1
0
        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);
                }
            }
        }
예제 #2
0
    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();
    }