【问题标题】:Adjust igMap Marker Size调整 igMap 标记大小
【发布时间】:2015-09-08 16:46:46
【问题描述】:

我正在尝试使用 ignite UI 的 igMap 控件绘制某些数据点。我想要发生的是基于每小时较大的实现率,使地图标记更大或更小。通过 infragistics 的文档似乎并没有太多涉及,所以如果有人有意见,我将不胜感激

@model IEnumerable<OpsOverallGeoMapViewModel>

<style>
#tooltipTable {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    width: 100%;
    border-collapse: collapse;
}

    #tooltipTable td, #tooltipTable th {
        font-size: 9px;
        border: 1px solid #28b51c;
        padding: 3px 7px 2px 7px;
    }

    #tooltipTable th {
        font-weight: bold;
        font-size: 11px;
        text-align: left;
        padding-top: 5px;
        padding-bottom: 4px;
        background-color: #28b51c;
        color: #ffffff;
    }
</style>
<script id="tooltipTemplate" type="text/x-jquery-tmpl">
<table id="tooltipTable">
    <tr><th class="tooltipHeading" colspan="2">${item.Country}</th></tr>
    <tr>
        <td>Total Hours:</td>
        <td>${item.Hours}</td>
    </tr>
    <tr>
        <td>Total Billing:</td>
        <td>${item.Billing}</td>
    </tr>
    <tr>
        <td>Realized Rate Per Hour:</td>
        <td>${item.RealizedRatePerHour}</td>
    </tr>
</table>
</script>


<div id="map"></div>

<script>

    $(function () {


        var model = @Html.Raw(Json.Encode(Model));

        $("#map").igMap({
            width: "700px",
            height: "500px",
            windowRect: { left: 0.225, top: 0.1, height: 0.6, width: 0.6 },
            series: [{
                type: "geographicSymbol",
                name: "worldCities",
                dataSource: model, //JSON Array defined above
                latitudeMemberPath: "Latitude",
                longitudeMemberPath: "Longitude",
                markerType: "automatic",
                markerOutline: "#28b51c",
                markerBrush: "#28b51c",
                showTooltip: true,
                tooltipTemplate: "tooltipTemplate"

            }],

        });
    });
</script>


<div id="map"></div>

【问题讨论】:

    标签: asp.net-mvc infragistics ignite-ui


    【解决方案1】:

    我通过运行基础设施网站上的标记模板示例找到了答案。通过改变标记的圆半径,它会变成一种热图,这正是我正在寻找的

    $(function () {
    
    
        var model = @Html.Raw(Json.Encode(Model.OrderBy(x => x.Billing)));
    
        $("#map").igMap({
            width: "700px",
            height: "500px",
            windowRect: { left: 0.1, top: 0.1, height: 0.7, width: 0.7 },
            // specifies imagery tiles from BingMaps
            backgroundContent: {
                type: "bing",
                key: "Masked Purposely",
                imagerySet: "Road", // alternative: "Road" | "Aerial"
            },
            series: [{
                type: "geographicSymbol",
                name: "ratesGraph",
                dataSource: model, //JSON Array defined above
                latitudeMemberPath: "Latitude",
                longitudeMemberPath: "Longitude",
                markerType: "automatic",
                markerCollisionAvoidance: "fade",
                markerOutline: "#1142a6",
                markerBrush: "#7197e5",
                showTooltip: true,
                tooltipTemplate: "customTooltip",
                //  Defines marker template rendering function
                markerTemplate: {
                    measure: function (measureInfo) {
                        measureInfo.width = 10;
                        measureInfo.height = 10;
                    },
                    render: function (renderInfo) {
                        createMarker(renderInfo);
                    }
                }
    
            }]
    
        });
    });
    
    
    
    
    function createMarker(renderInfo) {
        var ctx = renderInfo.context;
        var x = renderInfo.xPosition;
        var y = renderInfo.yPosition;
        var size = 10;
        var heightHalf = size / 2.0;
        var widthHalf = size / 2.0;
        if (renderInfo.isHitTestRender) {
            //  This is called for tooltip hit test only
            //  Rough marker rectangle size calculation
            ctx.fillStyle = renderInfo.data.actualItemBrush().fill();
            ctx.fillRect(x - widthHalf, y - heightHalf, size, size);
        } else {
            var data = renderInfo.data;
            var name = data.item()["CountryName"];
            var type = data.item()["Country"];
            var billing = data.item()["Billing"];
            //  Draw text
            ctx.textBaseline = "top";
            ctx.font = '8pt Verdana';
            ctx.fillStyle = "black";
            ctx.textBaseline = "middle";
            wrapText(ctx, name, x + 3, y + 6, 80, 12);
    
            //  Draw marker
            ctx.beginPath();
            //SET THE CIRCLE RADIUS HERE*******
            var circleRadius = 3;
            var radiusFactor = billing / 100000;
            if (radiusFactor > 4)
                circleRadius = radiusFactor;
            if (circleRadius > 10)
                circleRadius = 10;
            ctx.arc(x, y,circleRadius, 0, 2 * Math.PI, false);
    
    
    
            ctx.fillStyle = "#36a815";
    
            ctx.fill();
            ctx.lineWidth = 1;
            ctx.strokeStyle = "black";
            ctx.stroke();
        }
    }
    
    //  Plots a rectangle with rounded corners with a semi-transparent frame
    function plotTextBackground(context, left, top, width, height) {
        var cornerRadius = 3;
        context.beginPath();
        //  Upper side and upper right corner
        context.moveTo(left + cornerRadius, top);
        context.lineTo(left + width - cornerRadius, top);
        context.arcTo(left + width, top, left + width, top + cornerRadius, cornerRadius);
        //  Right side and lower right corner
        context.lineTo(left + width, top + height - cornerRadius);
        context.arcTo(left + width, top + height, left + width - cornerRadius, top + height, cornerRadius);
        //  Lower side and lower left corner
        context.lineTo(left + cornerRadius, top + height);
        context.arcTo(left, top + height, left, top + height - cornerRadius, cornerRadius);
        //  Left side and upper left corner
        context.lineTo(left, top + cornerRadius);
        context.arcTo(left, top, left + cornerRadius, top, cornerRadius);
        //  Fill white with 75% opacity
        context.globalAlpha = 1;
        context.fillStyle = "white";
        context.fill();
        context.globalAlpha = 1;
        //  Plot grey frame
        context.lineWidth = 1;
        context.strokeStyle = "grey";
        context.stroke();
    }
    
    //  Outputs text in a word wrapped fashion in a transparent frame
    function wrapText(context, text, x, y, maxWidth, lineHeight) {
        var words = text.split(" ");
        var line = "";
        var yCurrent = y;
        var lines = [], currentLine = 0;
    
        //  Find the longest word in the text and update the max width if the longest word cannot fit
        for (var i = 0; n < words.length; i++) {
            var testWidth = context.measureText(words[i]);
            if (testWidth > maxWidth)
                maxWidth = metrics.width;
        }
        //  Arrange all words into lines
        for (var n = 0; n < words.length; n++) {
            var testLine = line + words[n];
            var testWidth = context.measureText(testLine).width;
            if (testWidth > maxWidth) {
                lines[currentLine] = line;
                currentLine++;
                line = words[n] + " ";
            }
            else {
                line = testLine + " ";
            }
        }
        lines[currentLine] = line;
        //  Plot frame and background
        if (lines.length > 1) {
            //  Multiline text
            plotTextBackground(context, x - 2, y - lineHeight / 2 - 2, maxWidth + 3, lines.length * lineHeight + 3);
        }
        else {
            //  Single line text
            var textWidth = context.measureText(lines[0]).width;    //  Limit frame width to the actual line width
            plotTextBackground(context, x - 2, y - lineHeight / 2 - 2, textWidth + 3, lines.length * lineHeight + 3);
        }
        //  Output lines of text
        context.fillStyle = "black";
        for (var n = 0; n < lines.length; n++) {
            context.fillText(" " + lines[n], x, yCurrent);
            yCurrent += lineHeight;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      • 2015-01-02
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 2013-03-19
      相关资源
      最近更新 更多