【问题标题】:Google Maps polyline array from mySQL来自 mySQL 的 Google Maps 折线数组
【发布时间】:2014-02-23 08:06:53
【问题描述】:

我正在使用 api 页面 (https://developers.google.com/maps/articles/phpsqlajax_v3) 上的指南通过 XML 文件从 mySQL 数据库中读取标记。

如果可能,我不确定如何从 xml 文件中获取折线路径。不过,我可以让标记正常工作。

我现有的代码在这里:

<script type="text/javascript">
    //<![CDATA[
        function load() {       
            //Retrieve generated xml file containing marker data
                downloadUrl("phpsqlajax_genxml.php", function(data) {
            var xml = data.responseXML;
            var markers = xml.documentElement.getElementsByTagName("marker");

            //Create map, find center from marker array
            var map = new google.maps.Map(document.getElementById("map"), {
                center: new google.maps.LatLng(parseFloat(markers[0].getAttribute("latitude")),
                    parseFloat(markers[0].getAttribute("longitude"))),
                zoom: 5,
                scaleControl:true,
                mapTypeId:google.maps.MapTypeId.ROADMAP,
                });
                var infoWindow = new google.maps.InfoWindow;
            var imgnum=1;
            //Loop through markers array, using its length to find points and create markers on map
            for (var i = 0; i < markers.length; i++) {
                var point = new google.maps.LatLng(
                    parseFloat(markers[i].getAttribute("latitude")),
                    parseFloat(markers[i].getAttribute("longitude")));
                var image = new google.maps.MarkerImage('http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=' + imgnum + '|FF0000|000000'
); 
                imgnum++;               
                var marker = new google.maps.Marker({
                    map: map,
                        position: point,
                    icon: image,                
                });       

            }

            //var polylinep = [new google.maps.LatLng(parseFloat(markers[0].getAttribute("latitude")), parseFloat(markers[0].getAttribute("longitude"))),new google.maps.LatLng(parseFloat(markers[1].getAttribute("latitude")), parseFloat(markers[1].getAttribute("longitude")))];    

            for(var i = 0; i < markers.length; i++){
                new google.maps.LatLng(parseFloat(markers[i].getAttribute("latitude")), parseFloat(markers[i].getAttribute("longitude")));
            }   

            var polyline = new google.maps.Polyline({
                path: polylinep,
                geodesic: true,
                strokeColor: "#FF0000",
                strokeOpacity: 0.8,
                strokeWeight: 2
            });     

            polyline.setMap(map);

            });
        }

        //Infowindow creator - unimplemented
        function bindInfoWindow(marker, map, infoWindow, html) {
            google.maps.event.addListener(marker, 'click', function() {
                infoWindow.setContent(html);
                infoWindow.open(map, marker);
                });
        }

        //Get xml file
        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() {}

            //]]>

        </script>

提前致谢。

编辑:这是使用 PHP 脚本生成的 xml 文件:

<markers>
<marker latitude="-4.06865" longitude="52.3994"/>
<marker latitude="-4.06865" longitude="52.3994"/>
<marker latitude="-4.06493" longitude="52.4162"/>
<marker latitude="-4.06493" longitude="52.4162"/>
</markers>

【问题讨论】:

  • JSON 是一种在 Javascript 中比 XML 更容易阅读的格式。您的 PHP 是否有可能生成 JSON 而不是 XML?另外,您能否发布一个 PHP 输出示例(XML 或 JSON)?
  • @SteveJansen 可能,但我不确定这是怎么发生的。另外,我花了一段时间尝试实现我当前的代码,所以我不想这样做。
  • 你能发布一个你的 XML 输出示例吗?
  • @SteveJansen 我会把它添加到原帖中。
  • 我会使用Mike Williams' XML format(在他的v2 tutorial 中进行了描述。该示例使用已弃用的v2 API,但XML 格式将在v3 中工作,并且翻译the handling to v3 并不难.

标签: php mysql xml google-maps-api-3 mysqli


【解决方案1】:

将您的 XML 解析为数组并使用以下代码:

  function initialize() {
    var myLatlng = new google.maps.LatLng(52.113252, 5.410767);
    var mapOptions = {
        zoom: 12,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

    var infoWindow = new google.maps.InfoWindow({
      content: ''
    });

    <?php foreach($items as $item): ?>
      var marker = new google.maps.Marker({
          position: new google.maps.LatLng(<?=(float)$item['x'];?>, <?=(float)$item['y'];?>),
          map: map,
          flat: true,
          draggable: false
      });
      google.maps.event.addListener(marker, 'mouseover', function() {

        infoWindow.setContent("<?=$item['content']?>");
        infoWindow.open(map, this);
      });
      google.maps.event.addListener(marker, 'mouseout', function() {
        infoWindow.close();
      });
    <?php endforeach; ?>
  }

  google.maps.event.addDomListener(window, 'load', initialize);

【讨论】:

  • 标记工作正常,问题是我不确定如何使用标记创建折线。
猜你喜欢
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多