从xml文件获取值后,获取Google地图,热图的数组中的Javascript值(Get Javascript value in array for Google map, heatmap, afte

编程入门 行业动态 更新时间:2024-10-19 02:24:36
从xml文件获取值后,获取Google地图,热图的数组中的Javascript值(Get Javascript value in array for Google map, heatmap, after getting the values from xml file)

我需要使用xml文件中的数据在Google地图中创建一个热图图层。 我的xml文件有纬度和经度,我需要将其放入数组调用taxiData []。

我已经能够通过console.log获取我从xml获得的经度和经度。

但是,如果我在外面登录,我会丢失这些值。 我的lat和lng已被宣布为全球。

如何在数组taxiData中获取它,以便我可以在初始化地图时使用它?

我的代码如下

var map, pointarray, heatmap; var lat, lng; function downloadUrl(url, callback) { var request = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest; request.onreadystatechange = function() { if (request.readyState == 4) { request.onreadystatechange = doNothing; callback(request, request.status); } }; request.open('GET', url, true); request.send(null); } function doNothing() { } downloadUrl("locations_xml.php", function(data) { var xml = data.responseXML; var markers = xml.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { lat = parseFloat(markers[i].getAttribute("lat")); lng = parseFloat(markers[i].getAttribute("lng")); console.log(lat, lng); } }); // console.log(lat, lng); --> does not work //I want to add the above lat and lng to this array below instead of the static values; var taxiData = [ new google.maps.LatLng(-20.037720, 57.602348), new google.maps.LatLng(-20.044815, 57.570076), new google.maps.LatLng(-20.047396, 57.632561), new google.maps.LatLng(-20.055780, 57.600288), new google.maps.LatLng(-20.310350, 57.436180), new google.maps.LatLng(-20.339325, 57.478752) ]; function initialize() { var mapOptions = { zoom: 10, center: new google.maps.LatLng(-20.037720, 57.602348), }; map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); var pointArray = new google.maps.MVCArray(taxiData); heatmap = new google.maps.visualization.HeatmapLayer({ data: pointArray }); heatmap.setMap(map); } function changeGradient() { var gradient = [ 'rgba(0, 255, 255, 0)', 'rgba(0, 255, 255, 1)', 'rgba(0, 191, 255, 1)', 'rgba(0, 127, 255, 1)', 'rgba(0, 63, 255, 1)', 'rgba(0, 0, 255, 1)', 'rgba(0, 0, 223, 1)', 'rgba(0, 0, 191, 1)', 'rgba(0, 0, 159, 1)', 'rgba(0, 0, 127, 1)', 'rgba(63, 0, 91, 1)', 'rgba(127, 0, 63, 1)', 'rgba(191, 0, 31, 1)', 'rgba(255, 0, 0, 1)' ] heatmap.set('gradient', heatmap.get('gradient') ? null : gradient); } google.maps.event.addDomListener(window, 'load', initialize); </script> </head> <body> <div id="map-canvas"></div> </body>

I need to create a heatmap layer in Google map using data from an xml file. My xml file have latitude and longitude which I need to put in an array call taxiData[].

I have been able to console.log the latitudes and longitudes that i am getting from the xml.

However, if i log it outside, i loss the values. My lat and lng have been declared as global.

How do I get it in the array taxiData so that i can use it when initializing the map?

My code is as follows

var map, pointarray, heatmap; var lat, lng; function downloadUrl(url, callback) { var request = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest; request.onreadystatechange = function() { if (request.readyState == 4) { request.onreadystatechange = doNothing; callback(request, request.status); } }; request.open('GET', url, true); request.send(null); } function doNothing() { } downloadUrl("locations_xml.php", function(data) { var xml = data.responseXML; var markers = xml.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { lat = parseFloat(markers[i].getAttribute("lat")); lng = parseFloat(markers[i].getAttribute("lng")); console.log(lat, lng); } }); // console.log(lat, lng); --> does not work //I want to add the above lat and lng to this array below instead of the static values; var taxiData = [ new google.maps.LatLng(-20.037720, 57.602348), new google.maps.LatLng(-20.044815, 57.570076), new google.maps.LatLng(-20.047396, 57.632561), new google.maps.LatLng(-20.055780, 57.600288), new google.maps.LatLng(-20.310350, 57.436180), new google.maps.LatLng(-20.339325, 57.478752) ]; function initialize() { var mapOptions = { zoom: 10, center: new google.maps.LatLng(-20.037720, 57.602348), }; map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); var pointArray = new google.maps.MVCArray(taxiData); heatmap = new google.maps.visualization.HeatmapLayer({ data: pointArray }); heatmap.setMap(map); } function changeGradient() { var gradient = [ 'rgba(0, 255, 255, 0)', 'rgba(0, 255, 255, 1)', 'rgba(0, 191, 255, 1)', 'rgba(0, 127, 255, 1)', 'rgba(0, 63, 255, 1)', 'rgba(0, 0, 255, 1)', 'rgba(0, 0, 223, 1)', 'rgba(0, 0, 191, 1)', 'rgba(0, 0, 159, 1)', 'rgba(0, 0, 127, 1)', 'rgba(63, 0, 91, 1)', 'rgba(127, 0, 63, 1)', 'rgba(191, 0, 31, 1)', 'rgba(255, 0, 0, 1)' ] heatmap.set('gradient', heatmap.get('gradient') ? null : gradient); } google.maps.event.addDomListener(window, 'load', initialize); </script> </head> <body> <div id="map-canvas"></div> </body>

最满意答案

您可以将taxiData定义为全局数组

var map, pointarray, heatmap; var lat, lng; var taxiData = [];

然后在函数downloadUrl()设置它:

downloadUrl("locations_xml.php", function(data) { var xml = data.responseXML; var markers = xml.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { lat = parseFloat(markers[i].getAttribute("lat")); lng = parseFloat(markers[i].getAttribute("lng")); taxiData.push(new google.maps.LatLng(lat, lng)); console.log(lat, lng); } });

并删除静态数组。

更新:因为downloadUrl()调用是异步的, taxiData在函数initialize没有taxiData 。 函数initialize()在回调完成之前启动,收集数据。 一种可能的解决方案是注释掉google.maps.event.addDomListener(window, 'load', initialize); for loop后for loop在回调函数结束时调用函数initialize() 。

You can define taxiData as a global array

var map, pointarray, heatmap; var lat, lng; var taxiData = [];

And then set it in function downloadUrl():

downloadUrl("locations_xml.php", function(data) { var xml = data.responseXML; var markers = xml.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { lat = parseFloat(markers[i].getAttribute("lat")); lng = parseFloat(markers[i].getAttribute("lng")); taxiData.push(new google.maps.LatLng(lat, lng)); console.log(lat, lng); } });

And delete static array.

Update: Because downloadUrl() call is asynchronous, taxiData is not available in function initialize. Function initialize() is started before callback finishes with collecting data. One possible solution is to comment out google.maps.event.addDomListener(window, 'load', initialize); and call function initialize() at the end of callback function after for loop.

更多推荐

本文发布于:2023-07-16 12:48:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1128610.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:组中   热图   地图   文件   Google

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!