是否可以使用SignalR更新Google Map中的标记?

尼克拉斯·普伊·温格

如标题所述,是否可以使用SignalR / jquery更新地图标记的颜色?

我正在一个网站上工作,在该网站上地图会显示具有实时状态变化的不同单位,并且标记颜色应将其反映为功能的一部分。

可以通过某种方式完成操作,还是将颜色设置为“运行时”的唯一方法?目前,地图以蓝色很好地显示了我所有的标记。

<script src="~/Scripts/GoogleAPI/markerclusterer.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<script src="~/Scripts/GoogleAPI/oms.min.js"></script>
<script>
    var markerArray = [];    
    var usualColor = '0000FF';
    var spiderfiedColor = 'ffee22';
    var iconWithColor = function(color) {
        return 'http://chart.googleapis.com/chart?chst=d_map_xpin_letter&chld=pin|+|' +
            color + '|000000|ffff00';
    };
    var shadow = new google.maps.MarkerImage(
        'https://www.google.com/intl/en_ALL/mapfiles/shadow50.png',
        new google.maps.Size(37, 34), // size   - for sprite clipping
        new google.maps.Point(0, 0), // origin - ditto
        new google.maps.Point(10, 34) // anchor - where to meet map location
    );

    function initialize() {
        var bounds = new google.maps.LatLngBounds();
        var iw = new google.maps.InfoWindow();
        var mapOptions = {
            zoom: 12,
            panControl: false,
            zoomControl: false,
            scaleControl: false,
            mapTypeControlOptions: {
                style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
            },
            streetViewControl: false,
            overviewMapControl: true,
            mapTypeId: google.maps.MapTypeId.TERRAIN
        };

        var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
        var oms = new OverlappingMarkerSpiderfier(map);
        var mcOptions = {
            maxZoom: 12
        };
        var markerCluster = new MarkerClusterer(map, [], mcOptions);

        //Overlapping marker spiderfier
        oms.addListener('click', function(marker) {
            iw.setContent(marker.desc);
            iw.open(map, marker);
        });
        oms.addListener('spiderfy', function(markers) {
            for (var i = 0; i < markers.length; i++) {
                markers[i].setIcon(iconWithColor(spiderfiedColor));
                markers[i].setShadow(null);
            }
            iw.close();
        });
        oms.addListener('unspiderfy', function(markers) {
            for (var i = 0; i < markers.length; i++) {
                markers[i].setIcon(iconWithColor(usualColor));
                markers[i].setShadow(shadow);
            }
        });

        //Populate data section
        var addMarker = function(lat, lon, name, locationName, unitHref, wellName, runNo, taskDesc, lastDepth, activityMessage, modeMessage) {
            var myLatlng = new google.maps.LatLng(parseFloat(lat), parseFloat(lon));

            bounds.extend(myLatlng);

            // COMMENTED OUT CUSTOM MARKER DESCRIPTION TO SAVE SPACE

            var marker = new google.maps.Marker({
                position: myLatlng,
                map: map,
                icon: iconWithColor(usualColor),
                shadow: shadow,
                maxWidth: 200
            });
            marker.desc = content;

            oms.addMarker(marker);
            markerArray.push(marker);
        };
        var populateUnits = function() {
            @foreach (var location in Model.Location)
            {
                if (location.Value != null && location.Key != null)
                {
                    @:addMarker('@location.Value.Latitude', '@location.Value.Longitude', '@location.Key.UnitName', '@location.Value.Name', '#', '@location.Key.ViewUnitContract.CurrentRun.Operation.WellContract.Name', '@location.Key.ViewUnitContract.CurrentRun.Id', '@location.Key.ViewUnitContract.CurrentRun.RunTask', '@location.Key.Depth', '@location.Key.ActivityMessage', '@location.Key.ModeMessage');
                }
            }
        };

        //Populate the units
        populateUnits();
        //Add cluster
        markerCluster.addMarkers(markerArray, true);
        //Fit map
        map.fitBounds(bounds);
    }
    google.maps.event.addDomListener(window, 'load', initialize);
</script>

这是我遍历数组的方式。

function changeMarkers(myArray) {
    for (var i = 0; i < myArray.length; i++) {
        myArray[i].setIcon(iconWithColor('a51720'));
    };
}

现在,在这一点上,我刚刚changeMarkers在脚本执行时调用了该函数,函数起作用了。我已经将markerArray从initialize函数中移出了,但这也不起作用。

让我澄清一下我想做什么。假设页面已加载,我与SignalR的连接开始旋转,并且没有可用的实时数据。我可能需要10秒或10个小时才能更新标记的颜色。

例如,假设已经过去了两个小时,这就是我想做的;

function someFunc() {
    // Get a reference to the map object
    // Loop through its array of markers
    // if match between marker-id and SignalR data-id
    // update color of marker
}

如果我在脚本第一次执行markerArray任何给定时间循环浏览,则每次都会返回一个空集。我有点迷失在这里:)

在此处输入图片说明

朱Chu

您可以通过调用设置标记颜色setIcon()就您而言,当您从SignalR获得更新时,请执行以下操作...

var markerToChange = findMarker(markerArray, dataFromSignalR); // implement findMarker()
markerToChange.setIcon(iconWithColor(dataFromSignalR.color));

文档中的更多详细信息... https://developers.google.com/maps/documentation/javascript/reference#Marker

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Android中的Google Map v2中将标记的圆形图标标记

来自分类Dev

在Google Map中的自定义标记上编号

来自分类Dev

如何在Android中从Google Map删除特定标记

来自分类Dev

将标记放在google-map中的行尾

来自分类Dev

在Google Map v2中显示多个标记

来自分类Dev

如何访问google.map对象中的“标记”对象?

来自分类Dev

Fluter-Google Maps,是否可以使用“材质图标”作为地图标记?

来自分类Dev

在Rails中,是否可以限制谁可以使用api登录到Google?

来自分类Dev

.net framework 2.0中可以使用SignalR吗?

来自分类Dev

是否可以使用Google Drive API列出Google Drive中指定目录中的文件?

来自分类Dev

是否可以使用Google表格中的数据创建Google表单回复?

来自分类Dev

是否可以使用Java中的JESS更新本体(扩展名为.pprj)中的实例?

来自分类Dev

是否可以使用Rstudio中的SpatStat向3D点图案添加标记?

来自分类Dev

是否可以使用jQuery从段落中删除所有锚标记?

来自分类Dev

是否可以使用链接表中的值更新本地表?

来自分类Dev

是否可以使用oracle中的触发来更新2个表的2列?

来自分类Dev

是否可以使用新值更新“ Tcl / Tk”组合框中的值?

来自分类Dev

是否可以使用Graph更新保存到我的数据库中的实体?

来自分类Dev

是否可以使用 Symfony 1.4 中的 schema.yml 更新数据库结构?

来自分类Dev

是否可以使用Office SpellCheck API进行POS标记?

来自分类Dev

是否可以使用CSS访问定位标记的文本?

来自分类Dev

使用Google Map utils中的Map Cluster按下标记后,在InfoWindow中自定义信息

来自分类Dev

是否可以使用meta列出Google Cloud Storage中的对象?

来自分类Dev

是否可以使用Cloud Datalab中Google apiclient的发现模块?

来自分类Dev

Google Chrome浏览器中是否可以使用Firefox替代debug()函数?

来自分类Dev

是否可以使用 AVRO 为 Kafka 中的 Google Pub/Sub 主题定义模式?

来自分类Dev

是否可以使用更新的列值来更新SQL Server表中的另一列?

来自分类Dev

Google Map,样式不适用于带有类的标记img,但可以使用img [src]

来自分类Dev

Google Map,样式不适用于带有类的标记img,但可以使用img [src]

Related 相关文章

  1. 1

    在Android中的Google Map v2中将标记的圆形图标标记

  2. 2

    在Google Map中的自定义标记上编号

  3. 3

    如何在Android中从Google Map删除特定标记

  4. 4

    将标记放在google-map中的行尾

  5. 5

    在Google Map v2中显示多个标记

  6. 6

    如何访问google.map对象中的“标记”对象?

  7. 7

    Fluter-Google Maps,是否可以使用“材质图标”作为地图标记?

  8. 8

    在Rails中,是否可以限制谁可以使用api登录到Google?

  9. 9

    .net framework 2.0中可以使用SignalR吗?

  10. 10

    是否可以使用Google Drive API列出Google Drive中指定目录中的文件?

  11. 11

    是否可以使用Google表格中的数据创建Google表单回复?

  12. 12

    是否可以使用Java中的JESS更新本体(扩展名为.pprj)中的实例?

  13. 13

    是否可以使用Rstudio中的SpatStat向3D点图案添加标记?

  14. 14

    是否可以使用jQuery从段落中删除所有锚标记?

  15. 15

    是否可以使用链接表中的值更新本地表?

  16. 16

    是否可以使用oracle中的触发来更新2个表的2列?

  17. 17

    是否可以使用新值更新“ Tcl / Tk”组合框中的值?

  18. 18

    是否可以使用Graph更新保存到我的数据库中的实体?

  19. 19

    是否可以使用 Symfony 1.4 中的 schema.yml 更新数据库结构?

  20. 20

    是否可以使用Office SpellCheck API进行POS标记?

  21. 21

    是否可以使用CSS访问定位标记的文本?

  22. 22

    使用Google Map utils中的Map Cluster按下标记后,在InfoWindow中自定义信息

  23. 23

    是否可以使用meta列出Google Cloud Storage中的对象?

  24. 24

    是否可以使用Cloud Datalab中Google apiclient的发现模块?

  25. 25

    Google Chrome浏览器中是否可以使用Firefox替代debug()函数?

  26. 26

    是否可以使用 AVRO 为 Kafka 中的 Google Pub/Sub 主题定义模式?

  27. 27

    是否可以使用更新的列值来更新SQL Server表中的另一列?

  28. 28

    Google Map,样式不适用于带有类的标记img,但可以使用img [src]

  29. 29

    Google Map,样式不适用于带有类的标记img,但可以使用img [src]

热门标签

归档