geoxml3: как загрузить пользовательские значки - PullRequest
3 голосов
/ 01 ноября 2011

Мне нужно загрузить пользовательский файл kml в карту Google, код практически не изменился из соответствующих ресурсов:

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

  var geoXml = new geoXML3.parser({map: map, processStyles: true});
  geoXml.parse('test.kml');
};

.kml идет прямо из Google Maps и содержит несколько маркеров, все с пользовательскими значками, например:

<Style id="sn_1">
    <IconStyle>
        <scale>1.1</scale>
        <Icon>
            <href>http://maps.google.com/mapfiles/kml/paddle/Z.png</href>
        </Icon>
        <hotSpot x="32" y="1" xunits="pixels" yunits="pixels"/>
    </IconStyle>
    <ListStyle>
        <ItemIcon>
            <href>http://maps.google.com/mapfiles/kml/paddle/Z-lv.png</href>
        </ItemIcon>
    </ListStyle>
</Style>

Другие значки определяются как (существующие) локальные пути, например:

<Icon>
<href>img/marker/5.png</href>
</Icon>

Однако, хотя на карте все в порядке, значки не загружаются, вместо этого я получаю только значки Google Maps по умолчанию. Любая помощь в этом будет принята с благодарностью, так как мои знания JavaScript довольно ограничены, и я чувствую, что нахожусь в такой точке, где больше никуда не денется ...

Приветствия:)

Ответы [ 2 ]

2 голосов
/ 13 апреля 2014

Ответ, предоставленный grigno , хорошо работает для меня, но все маркеры в файле KML должны иметь такой стиль или проверить, не определено ли placemark.style.icon перед передачей в функцию:

<Document>
<name>myKml.kml</name>
<Style id="My_Style">
    <IconStyle> 
        <Icon> 
            <href>office-building.png</href>
        </Icon>
    </IconStyle>
</Style>

и в разделе меток:

<Placemark>
   <name><![CDATA[iMEX0011]]></name>
   <description><![CDATA[MARKER TITLE]]></description>
   <styleUrl>#My_Style</styleUrl> 
   <Point>
       <coordinates>-99.2232472,25.4413972,0</coordinates>
   </Point>
</Placemark>
1 голос
/ 03 апреля 2013

Я решил с помощью этого кода:

var marker = new google.maps.Marker ({position: point, icon: placemark.style.icon});

это полная инициализация:

        //Construct a geoXML3 parser
        var myParser = new geoXML3.parser({
                map: map, 
                singleInfoWindow:true,
                processStyles: true,
                createMarker:function(placemark){
                    //Constructing marker for each Placemark node, and then add it to the markclustere
                    var point = new google.maps.LatLng(placemark.point.lat, placemark.point.lng);
                    var marker = new google.maps.Marker({position:point,icon: placemark.style.icon});

                    google.maps.event.addListener(marker, "click", function(){
                        //console.log(placemark.name);
                        infoWindow.content = placemark.description;
                        infoWindow.open(map, marker);
                    });

                    markerclusterer.addMarker(marker);
                }
        });
...