Google Map javascript Маркеры MarkerManager не отображаются - PullRequest
0 голосов
/ 26 марта 2012

У меня есть карта, которая читает файл XML; это все очень просто и скопировано отсюда: http://geochalkboard.wordpress.com/2009/03/30/reading-xml-files-with-the-google-maps-api/

Моя версия здесь: http://www.cloudfund.me/maps/mashup.html и файл данных, который он читает, находится здесь: convert.xml в том же каталоге.

У меня вообще нет очков, когда я запускаю его. Я включил консоль, чтобы посмотреть, смогу ли я что-то увидеть, но, насколько это возможно, он просто проходит без помех. Файл загружается нормально, и я могу наблюдать за циклом кода через все строки (208 в этом примере) без каких-либо проблем.

Я получаю предупреждение only : «Ресурс интерпретируется как другой, переданный как неопределенный»; Изучив некоторые другие потоки, я не вижу ничего, что может помочь - никаких пустых ссылок src и т. д. Насколько я могу судить, это также не должно помешать маркировке точек.

Вот настоящий кикер - пытаясь отследить эту ошибку, я установил точную копию исходного кода на своем собственном сервере и получил ошибку о пустых полях, к которой я добавил условный код для сортировки; эта версия работает на моем сервере. Это austin.html в той же директории (извините, я не могу сделать больше двух ссылок в моих первых сообщениях!)

Итак, мой код такой:

<title>Test </title>


<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key=AIzaSyDgybFoyn3i5j_6d7ul7p2dPNQ5b1xOWnk"
        type="text/javascript">console.log("Loaded Maps API");</script>

            <script src="http://gmaps-utility-library.googlecode.com/svn/trunk/markermanager/release/src/markermanager.js">console.log("MarkerManager");</script>


<script type="text/javascript">
console.log("Into Main Script");
function initialize() {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map_canvas"));
    map.setCenter(new GLatLng(51.39906378, -2.449545605), 13);
    map.setUIToDefault();
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addMapType(G_PHYSICAL_MAP);
    map.setMapType(G_PHYSICAL_MAP);
    console.log("Reached end of map initialising");
    addMarkersFromXML();
    console.log("MarkersfromXML")
  }
}

function addMarkersFromXML(){
   var batch = [];
   mgr = new MarkerManager(map); 

   var request = GXmlHttp.create();
   console.log("About to open converted.xml")
   request.open('GET', 'converted.xml', true);
   console.log("Opened Converted.xml")
   request.onreadystatechange = function() {
  if (request.readyState == 4 && request.status == 200) 
{
    var xmlDoc = request.responseXML;
    var xmlrows = xmlDoc.documentElement.getElementsByTagName("row");

    for (var i = 0; i < xmlrows.length; i++) {
        var xmlrow = xmlrows[i];
        console.log("Running through row number",i)
        var xmlcellLongitude = xmlrow.getElementsByTagName("longitude")[0];
        console.log(xmlcellLongitude);
        var xmlcellLatitude = xmlrow.getElementsByTagName("latitude")[0];
        var point = new GLatLng(parseFloat(xmlcellLatitude.firstChild.data),parseFloat(xmlcellLongitude.firstChild.data));

        //get the PAO
        var xmlcellAssetName = xmlrow.getElementsByTagName("pao")[0];
        console.log(xmlcellAssetName);
        var celltextAssetName = xmlcellAssetName.firstChild.data;

        //get the area
        var xmlcellArea = xmlrow.getElementsByTagName("area")[0];
        console.log(xmlcellArea);
        var celltextArea = xmlcellArea.firstChild.data;

        //get the land type
        var xmlcellLandType = xmlrow.getElementsByTagName("landtype")[0];
        console.log(xmlcellLandType);
        var celltextLandType = xmlcellLandType.firstChild.data;

        //get the Planning Permissions
        var xmlcellPlanning = xmlrow.getElementsByTagName("planning")[0];
        console.log(xmlcellPlanning);
        var celltextPlanning = xmlcellPlanning.firstChild.data;

        var htmlString = "Asset Name: " + celltextAssetName + "<br>" + "Size: " + celltextArea + "<br>" + "Land Type: " + celltextLandType + "<br>" + "Planning Permissions: " + celltextPlanning;
        //var htmlString = 'yes'
        var marker = createMarker(point,htmlString);
        batch.push(marker);

    }

    mgr.addMarkers(batch,50);
    mgr.refresh();

  }
    }
request.send(null);

  }

 function createMarker(point,html) {
       var marker = new GMarker(point);
       GEvent.addListener(marker, "click", function() {
         marker.openInfoWindowHtml(html);
       });
       return marker;
 }
  </script>
 </head>
  <body onload="initialize()" onunload="GUnload()">
    <div id="map_canvas" style="width: 1100px; height: 700px"></div>
  </body>
</html>

1 Ответ

0 голосов
/ 26 марта 2012

Думаю, у вас есть опечатка. В своем коде вы извлекаете неполный URL для API:

<script src="//maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key=AIzaSyDgybFoyn3i5j_6d7ul7p2dPNQ5b1xOWnk"

Этот ошибочный //, кажется, сбрасывает код.

Хотя, если честно, исходный пример (и austin.html) работает не совсем так, как можно было бы предположить. Точки отображаются, но при уменьшении масштаба эффективная кластеризация не происходит. Подозреваю, что ветвь API 2.0 была перенесена на более новую версию и создала некоторую несовместимость.

Рекомендую переписать это в API версии 3. Есть менеджер кластеров, который работает для него довольно хорошо.

См. http://tools.voanews2.com/nuclear_reactors/

...