Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 超过15 KML的图层在基于Google Maps API的页面上不可见_Javascript_Google Maps_Google Maps Api 3_Kml - Fatal编程技术网

Javascript 超过15 KML的图层在基于Google Maps API的页面上不可见

Javascript 超过15 KML的图层在基于Google Maps API的页面上不可见,javascript,google-maps,google-maps-api-3,kml,Javascript,Google Maps,Google Maps Api 3,Kml,我有一个奇怪的问题:我必须从单独的KML文件到单个地图窗口生成许多KML层。数量从一对夫妇到不到50人不等。目前,当我将1、4或15 KML文件(作为URI)作为一个数组时,我的代码产生了正确的行为。好的,基本上我知道我的代码是功能性的,我的KML文件足够有效 下面是我如何使用23 KML URI数组调用映射初始化的示例: 但是,当我给代码提供一个包含十六(16)个或更多KML URI的数组时,就会出现问题。然后这些KML文件将永远不会在地图画布上渲染。然而,任何地方都不会出现错误,而且:我知

我有一个奇怪的问题:我必须从单独的KML文件到单个地图窗口生成许多KML层。数量从一对夫妇到不到50人不等。目前,当我将1、4或15 KML文件(作为URI)作为一个数组时,我的代码产生了正确的行为。好的,基本上我知道我的代码是功能性的,我的KML文件足够有效

下面是我如何使用23 KML URI数组调用映射初始化的示例:

但是,当我给代码提供一个包含十六(16)个或更多KML URI的数组时,就会出现问题。然后这些KML文件将永远不会在地图画布上渲染。然而,任何地方都不会出现错误,而且:我知道KML文件“在地图上”。我怎么知道的?正如您所看到的,我的代码为每个KML文件生成了一个信息窗口,因为我知道一些KML文件应该位于何处,所以我可以单击该窗口,即使它们不可见或尚未渲染,信息窗口也会出现。一如所愿

下面是我的map_display.js的完整内容,它包含被调用的函数initmap()

函数初始化映射(URL){
//为地图创建选项对象
var mylatng=new google.maps.LatLng(63.349501,26.817627);
变量选项={
缩放:6,
中心:myLatlng,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
//初始化地图
var map=new google.maps.map(document.getElementById('map_canvas'),选项);
如果(URL!=null){

对于(var i=0;i我使用Google提供的默认KML层的成功率有限。我建议尝试使用或(不是同一个项目)。我将GeoXML3用于,并为我自己的教育创建了一个。

kml层的工作方式是,每个磁贴的url中都包含thr kml的url。当您添加这么多kml层时,磁贴url将超过2048个字符,这是url的限制。您可以尝试缩短kml层的url。

来自:

可以在屏幕上显示的KML图层数量有限制 一张谷歌地图。如果你超过了这个限制,你的所有图层都没有 将显示。限制基于所有URL的总长度 传递给Kmlayer类,因此将根据 应用程序;平均而言,您应该能够加载10到20个 在没有达到极限的情况下分层

function initmap(urls){
    // Creating an option object for the map
    var myLatlng = new google.maps.LatLng(63.349501, 26.817627);
    var options = {
        zoom: 6,
        center: myLatlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    // Initializing the map
    var map = new google.maps.Map(document.getElementById('map_canvas'), options);

    if(urls != null) {
        for(var i=0;i<urls.length;i++) {
            var url = urls[i];
            url = url+"?dummy="+(new Date()).getTime();
            var ctaLayer = createKML(url);
            ctaLayer.setMap(map);
        }
    }

    function createKML(url){

        var ctaLayer = new google.maps.KmlLayer(url, {suppressInfoWindows: true, preserveViewport: true});

        // Creating a correct reference for project edit URL
        var editUrl = urls[i];
        var s1 = editUrl.indexOf("project");
        s1 = s1+7;
        var s2 = editUrl.indexOf(".kml");
        editUrl = editUrl.substring(s1, s2);

        var baseUrl = getbaseUrl();

        var infoItems = new Array();
        infoItems = getInfo(editUrl);

        editUrl = '<b>' + infoItems[1] + '</b><br />' + infoItems[0] + '<br /><br /><a href="' + baseUrl + '/frontend/viewproject/' + editUrl + '">Katso projektin tiedot</a>';
        // Creating an InfoWindow object
        var infowindow = new google.maps.InfoWindow({ content: editUrl });

        google.maps.event.addListener(ctaLayer, 'click', function(kmlEvent) {
            var clickPos = kmlEvent.latLng;
            var posX = new google.maps.LatLng(clickPos.lat(), clickPos.lng());

            infowindow.close();
            infowindow.setPosition(posX);
            infowindow.open(map);

        });

        return ctaLayer;
    }

    function getbaseUrl(){

        var baseUrl = "https://" + window.location.hostname;
        var firstpath = window.location.pathname;
        var first_slash = firstpath.indexOf("/", 1);
        firstpath = firstpath.substring(0, first_slash);
        baseUrl = baseUrl + firstpath;

        return baseUrl;
    }

    function getInfo(pid){

        var jsoninfo = new Array();

        var xmlhttp;
        if (window.XMLHttpRequest)
        {
            xmlhttp=new XMLHttpRequest();
        }
        else
        {// code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }

        var json_location = getbaseUrl() + '/frontend/project_json/' + pid;

        xmlhttp.open("GET",json_location,false);
        xmlhttp.send();

        var json_answer = eval('(' + xmlhttp.responseText + ')');

        jsoninfo[0] = json_answer["projectName"];
        jsoninfo[1] = json_answer["builder"];

        return jsoninfo;
    }

}