2015-06-11 3 views
0

Я хочу проанализировать простой маркер с KML, поэтому я делал некоторые тесты с помощью geoxml3, все идет идеально, если я использую (импортирую) библиотеку polys/geoxml3.js, но если Я изменяю его на «kmz/geoxml3.js» (потому что позже я хочу использовать некоторую расширеннуюData), я получаю эту ошибку «Не могу прочитать свойство setAnimation» undefined ». Как я могу ее решить, но используя библиотеку «kmz/geoxml3.js»?Geoxml3 issue (kmz library)

<!DOCTYPE html> 
<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no"/> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Geoxml3</title> 
<style> 
    html{height:100%;} 
    body{height:100%;margin:0px;} 
    #map_canvas{height: 90%;width: 90%;} 
</style> 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script type="text/javascript" src="http://geoxml3.googlecode.com/svn/branches/kmz/geoxml3.js"></script> 
<script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script> 
</head> 
<body> 
<div id="map_canvas"></div> 
</div> 
<script type="text/javascript"> 

var geoXml=null, map=null; 
var infowindow = new google.maps.InfoWindow({}); 

function initialize() { 
    var myOptions = { 
     center: new google.maps.LatLng(39.397, -100.644), 
     zoom: 4, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

    geoXml = new geoXML3.parser({ 
     map: map, 
     zoom: true, 
     createMarker: addMyMarker, 
     singleInfoWindow: true, 
     suppressInfoWindows: true 
    }); 

    geoXml.parse('exampleMarker.kml'); 

    function addMyMarker(placemark,doc) { 
     var marker = geoXml.createMarker(placemark); 
     marker.setAnimation(google.maps.Animation.BOUNCE); 
     google.maps.event.addListener(marker, 'click', function() { 
      infowindow.setContent(placemark.description); 
      infowindow.open(map,marker); 
     }); 
     doc.markers.push(marker); 
     return marker; 
    }; 
}; 
google.maps.event.addDomListener(window, 'load', initialize); 

</script> 
</body> 
</html> 

Мой файл KML является:

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://earth.google.com/kml/2.1"> 
<Document> 
<name>Chicago Bike Parking</name> 
<description>A map of 20 bike parking.</description> 
<Style id='bikeParkingIcon'> 
    <IconStyle> 
    <color>ffffffff</color> 
    <colorMode>normal</colorMode> 
    <scale>1.0</scale> 
    <Icon id='bikeParking'> 
     <href>icono.png 
     </href> 
    </Icon> 
    </IconStyle> 
</Style> 
<Placemark> 
    <name>2024 S Western</name> 
    <address>2024 S Western Ave, Chicago, IL 60608</address> 
    <phoneNumber></phoneNumber> 
    <description>1 bike rack installed here. &lt;a href='http://www.chicagobikes.org/bikeparking/rackinfo.php?id=2' title='More info about this Bike Rack location'&gt;More info&lt;/a&gt;.</description> 
    <visibility>1</visibility> 
    <styleUrl>#bikeParkingIcon</styleUrl> 
    <Point> 
    <coordinates>-87.685871,41.854533,1000</coordinates> 
    </Point> 
    <TimeStamp><when>2009-07-24</when> 
</TimeStamp> 
<ExtendedData xmlns:cdot="http://www.chicagobikes.org/data"> 
    <cdot:locName>Salvation Army</cdot:locName> 
    <exampleTag>My data</exampleTag> 
</ExtendedData> 
</Placemark> 
</Document> 
</kml> 
+0

[я получаю сообщение об ошибке.] (Http://meta.stackoverflow.com/questions/296603/how-to-educate-people-to-include-complete-error-messages), какая ошибка? – geocodezip

+0

Я получаю эту ошибку «Не могу прочитать свойство» setAnimation 'undefined'. Но ЕСЛИ i меняет (импортирует) библиотеку polys/geoxml3.js, все идет отлично! Как я могу ее решить, но используя библиотеку «kmz/geoxml3.js»! Спасибо – cholu1217

+0

Пожалуйста, уточните свой вопрос, чтобы включить эту информацию. Это известная проблема с веткой kmz ([выпуск 66] (https://code.google.com/p/geoxml3/issues/detail?id=66)). Код должен определить размер значка, который является асинхронной. Есть ли причина, по которой вы не можете использовать встроенную функцию createMarker? – geocodezip

ответ

0

До сих пор это мое решение, используя «пользовательский» функцию createMarker, таким образом, вы можете использовать и определять собственные маркерные свойства/параметры.

geoXml = new geoXML3.parser({ 
     map: map, 
     zoom: true, 
     createMarker: addMyMarker, 
     singleInfoWindow: true, 
     suppressInfoWindows: true, 
     afterParse: useTheData 
    }); 

    geoXml.parse('exampleMarker.kml'); 

    function addMyMarker(placemark,doc) { 
     var marker = new google.maps.Marker({ 
      title: placemark.name, 
      position: placemark.latlng, 
      map: map, 
      //This case href is the tag in my KML 
      icon: placemark.style.icon.href 
     }); 

     google.maps.event.addListener(marker, 'click', function() { 
      marker.setAnimation(google.maps.Animation.BOUNCE); 
      infowindow.setContent(placemark.description); 
      infowindow.open(map,marker); 
     }); 
     //doc.markers.push(marker); 
     return marker; 
    }; 
    function useTheData(doc){ 
     $.each(doc[0].placemarks, function(index, value) { 
      //Something 
     }); 
    };