首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Google中获取KML位置标记值?

如何在Google中获取KML位置标记值?
EN

Stack Overflow用户
提问于 2013-12-10 05:18:05
回答 3查看 2.6K关注 0票数 1

亲爱的,我是谷歌地图API的新手。我在中使用GeoXML3解析了一个KML层。现在,如何在Google 中获取KML的位置标记值(地名),单击。就像当kml层加载到google地图上,我点击任何标记时,我应该能够在警告框中获取标记的放置值。请找到帮助我在上解析kml的代码。请指点。

代码语言:javascript
运行
复制
<!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>KML Layer</title>
<link href="/maps/documentation/javascript/examples/default.css" rel="stylesheet"      type="text/css" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript"   src="http://geoxml3.googlecode.com/svn/branches/polys/geoxml3.js"></script>
<style type="text/css">
  html { height: 100% }
  body { height: 100%; margin: 0; padding: 0 }
  #map_canvas { height: 100% }
</style>

<script type="text/javascript">
function initialize() 
{
var chicago = new google.maps.LatLng(75.602836700999987,32.261890444473394);
var myOptions = {
zoom: 2,
center: chicago,
mapTypeId: google.maps.MapTypeId.ROADMAP }

var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
//var transitLayer = new google.maps.TransitLayer();   
//transitLayer.setMap(map);
   var geoXml = new geoXML3.parser({map: map, singleInfoWindow: true});
   geoXml.parse('kmload.kml'); 
   var geoXml1 = new geoXML3.parser({map: map, singleInfoWindow: true});
   geoXml1.parse('lines.kml'); 

   }
</script>
</head>
<body onload="initialize()">
 <div id="map_canvas"></div>
</body>
</html>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-10 07:38:39

这就是你要找的吗?我在onclick函数中添加了警报,它在警报框中显示了placemark的名称。如果你发现任何问题,请检查并通知我。

代码语言:javascript
运行
复制
<!DOCTYPE>
<html>
<head>
       <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&libraries=places"></script>
        <script type="text/javascript" src="http://geoxml3.googlecode.com/svn/branches/polys/geoxml3.js"></script>
        <script type="text/javascript" src="http://geoxml3.googlecode.com/svn/trunk/ProjectedOverlay.js"></script>


<title>KML Placement Value Test</title>
<style> 
html, body, #map_canvas {
    height: 100%;
    margin:  0;
    padding: 0;
}

#panel {
    top: 5px;
    left: 85%;
    margin-left: -180px;
    z-index: 5;
    background-color: #fff;
    padding: 5px;
    border: 1px solid #999;
}
.infowindow * {font-size: 90%; margin: 0}
</style>

 <script type="text/javascript" >
    geocoder = new google.maps.Geocoder();
    var geoXml = null;
    var geoXmlDoc = null;
    var map = null;
    var myLatLng = null;
    var myGeoXml3Zoom = true;
    var marker = [];
    var polyline;


    function initialize() 
    {
          myLatLng = new google.maps.LatLng(37.422104808,-122.0838851);
          var test;
          var lat = 37.422104808;
          var lng = -122.0838851;
          var zoom = 18;
          var maptype = google.maps.MapTypeId.ROADMAP;
          if (!isNaN(lat) && !isNaN(lng)) 
          {
                myLatLng = new google.maps.LatLng(lat, lng);
           }
                var myOptions = {zoom: zoom,center: myLatLng,mapTypeId: maptype};
                map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);        
                infowindow = new google.maps.InfoWindow({}); 
                geoXml = new geoXML3.parser({map: map,infoWindow: infowindow,singleInfoWindow: true,zoom: myGeoXml3Zoom, markerOptions: {optimized: false},createMarker: createMarker});
                geoXml.parse('test.kml');             
    };




    var createMarker = function (placemark, doc) {

        var markerOptions = geoXML3.combineOptions(geoXml.options.markerOptions, {
          map:      geoXml.options.map,
          position: new google.maps.LatLng(placemark.Point.coordinates[0].lat, placemark.Point.coordinates[0].lng),
          title:    placemark.name,
         zIndex:   Math.round(placemark.Point.coordinates[0].lat * -100000)<<5,
         icon:     placemark.style.icon,
         shadow:   placemark.style.shadow 
        });

        // Create the marker on the map
        var marker = new google.maps.Marker(markerOptions);
        if (!!doc) {
        doc.markers.push(marker);
        }

        // Set up and create the infowindow if it is not suppressed
        if (!geoXml.options.suppressInfoWindows) {
          var infoWindowOptions = geoXML3.combineOptions(geoXml.options.infoWindowOptions, {
            content: '<div class="geoxml3_infowindow"><h3>' + placemark.name + 
                     '</h3><div>' + placemark.description + '</div></div>',
            pixelOffset: new google.maps.Size(0, 2)
          });
          if (geoXml.options.infoWindow) {
            marker.infoWindow = geoXml.options.infoWindow;
          } else {
            marker.infoWindow = new google.maps.InfoWindow(infoWindowOptions);
          }
          marker.infoWindowOptions = infoWindowOptions;

          // Infowindow-opening event handler
          google.maps.event.addListener(marker, 'click', function() 
        {            
              alert(placemark.name);           
            this.infoWindow.close();
            marker.infoWindow.setOptions(this.infoWindowOptions);
            this.infoWindow.open(this.map, this);

          });
        }
        placemark.marker = marker;
        return marker;
      };


    </script>
</head>
<body onload="initialize()">
<div id="map_canvas" style="float: left; width: 70%; height: 100%;"></div>
</body>
</html>
票数 1
EN

Stack Overflow用户

发布于 2013-12-10 07:11:10

如果使用"afterParse“函数将单击侦听器添加到标记中,则可以访问数据(如果使用函数闭包),例如访问名称:

代码语言:javascript
运行
复制
// assign "useTheData" as the after parse function
var geoXml = new geoXML3.parser({map: map, singleInfoWindow: true, afterParse: useTheData});
geoXml.parse('kmload.kml'); 

// function to retain closure on the placemark and associated text
function bindPlacemark(placemark, text) {
  google.maps.event.addListener(placemark,"click", function() {alert(text)});
}

// "afterParse" function, adds click listener to each placemark to "alert" the name
function useTheData(doc) {
  for (var i = 0; i < doc[0].placemarks.length; i++) {
    var placemark = doc[0].placemarks[i].polygon || doc[0].placemarks[i].marker || doc[0].placemarks[i].polyline;
    bindPlacemark(placemark, doc[0].placemarks[i].name);
  }
};

工作实例

票数 1
EN

Stack Overflow用户

发布于 2013-12-10 05:23:10

希望能有所帮助;)

代码语言:javascript
运行
复制
 /**
  * map
  */
  var myLatlng = new google.maps.LatLng(39.980278, 4.049835);
  var myOptions = {
    zoom: 10,
    center: myLatlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    scrollwheel: false
  }
 var map = new google.maps.Map(document.getElementById('mapa'), myOptions);

 var infoWindow = new google.maps.InfoWindow();
 var markerBounds = new google.maps.LatLngBounds();
 var markerArray = [];

 function makeMarker(options){
   var pushPin = new google.maps.Marker({map:map});
   pushPin.setOptions(options);
   google.maps.event.addListener(pushPin, 'click', function(){
     infoWindow.setOptions(options);
     infoWindow.open(map, pushPin);
   });
   markerArray.push(pushPin);
   return pushPin;
 }

 google.maps.event.addListener(map, 'click', function(){
   infoWindow.close();
 });

 function openMarker(i){
   google.maps.event.trigger(markerArray[i],'click');
 };

 /**
 *markers
 */
 makeMarker({
   position: new google.maps.LatLng(39.943962, 3.891220),
   title: 'Title',
   content: '<div><h1>Lorem ipsum</h1>Lorem ipsum dolor sit amet<div>'
 });

openMarker(0);
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20486724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档