SPS*_*SPS 3 javascript kml infowindow google-maps-api-3
您好:我在Google地图上取得了进展(请参阅我以前的帖子:Google Maps API v3上缺少KML标记:出了什么问题?),但我现在卡住了,希望能得到帮助.
我的自定义样式地图来自一个包含大约20个地标的KML文件.
出于设计原因,我希望我的地标在锚点的右侧打开,而不是默认的顶部/中心.我试着用一种简单的方法来寻找这个; 我最接近的是:当选择另一个KML图层时,infowindows保持活动状态的问题 - Google Maps API V3,我无法为我工作.
以下是我正在寻找的一个例子:http://nationaltreasures.aircanada.com/(其InfoWindows向右开放).
我想我需要压缩默认的InfoWindow,创建我自己的拉取KML数据,然后为我的自定义InfoWindow指定pixelOffset,但我无法弄清楚如何做到这一点.
先感谢您!
function initialize() {
var styles = [ ]; // Styles removed to simplify code
var styledMap = new google.maps.StyledMapType(styles,
{name: "HEPAC"});
var mapOptions = {
zoom: 7,
center: new google.maps.LatLng(46.69504, -67.69751),
panControl: false,
mapTypeControl: false,
streetViewControl: false,
noClear: true,
zoomControlOptions: {
position: google.maps.ControlPosition.TOP_RIGHT
},
mapTypeControlOptions: {
mapTypeIds: ['map_style', google.maps.MapTypeId.ROADMAP]
}
};
google.maps.visualRefresh = true;
var map = new google.maps.Map(document.getElementById("map-canvas"),mapOptions);
map.mapTypes.set('map_style', styledMap);
map.setMapTypeId('map_style');
var opt = { minZoom: 7, maxZoom: 9 }; // Sets minimum & maximum zoom level
map.setOptions(opt);
var ctaLayer = new google.maps.KmlLayer({
url: 'http://hepac.ca/wp-content/mapping/wellnessnetworksl.kml?f=3',
preserveViewport: true,
});
ctaLayer.setMap(map);
}
google.maps.event.addDomListener(window, 'load', initialize);
Run Code Online (Sandbox Code Playgroud)
SPS*_*SPS 10
感谢@SeanKendle指出我正确的方向.通过将其添加到我的原始代码中,或多或少找到了我想要的内容.
google.maps.event.addListener(ctaLayer, 'click', function(kmlEvent) {
showInContentWindow(kmlEvent.latLng, kmlEvent.featureData.description);
});
function showInContentWindow(position, text) {
var content = "<div>" + text + "</div>";
var infowindow = new google.maps.InfoWindow({
content: content,
position: position,
pixelOffset: new google.maps.Size(300, 0),
})
infowindow.open(map);
}
Run Code Online (Sandbox Code Playgroud)
antyrat在这里用标记右侧的infoWindow发布了这个:
请参阅接受的答案中的链接.
编辑:这是一个例子.显然,您需要在页面上包含InfoBox.js才能访问该插件.我希望这有效,我没有测试它,但它可能会指向正确的方向:
function initialize() {
var styles = [ ]; // Styles removed to simplify code
var styledMap = new google.maps.StyledMapType(styles,
{name: "HEPAC"});
var mapOptions = {
zoom: 7,
center: new google.maps.LatLng(46.69504, -67.69751),
panControl: false,
mapTypeControl: false,
streetViewControl: false,
noClear: true,
zoomControlOptions: {
position: google.maps.ControlPosition.TOP_RIGHT
},
mapTypeControlOptions: {
mapTypeIds: ['map_style', google.maps.MapTypeId.ROADMAP]
}
};
google.maps.visualRefresh = true;
var map = new google.maps.Map(document.getElementById("map-canvas"),mapOptions);
map.mapTypes.set('map_style', styledMap);
map.setMapTypeId('map_style');
var opt = { minZoom: 7, maxZoom: 9 }; // Sets minimum & maximum zoom level
map.setOptions(opt);
var ctaLayer = new google.maps.KmlLayer({
url: 'http://hepac.ca/wp-content/mapping/wellnessnetworksl.kml?f=3',
preserveViewport: true,
});
ctaLayer.setMap(map);
google.maps.event.addListener(ctaLayer, 'click', function(kmlEvent) {
var text = kmlEvent.featureData.description; // ALTER THIS TO POINT TO THE DATA YOU WANT IN THE INFOBOX
var infoBox = new InfoBox({content: text, latlng: kmlEvent.position, map: map});
});
}
Run Code Online (Sandbox Code Playgroud)
Google Maps API说:
此外,单击KML要素会生成KmlMouseEvent,它会传递以下信息:position表示将InfoWindow锚定到此KML要素的纬度/经度坐标.此位置通常是多边形,折线和GroundOverlays的单击位置,但是标记的真正原点.pixelOffset指示从上面的位置偏移以锚定InfoWindow"tail".对于多边形对象,此偏移通常为0,0但对于标记,则包括标记的高度.featureData包含KmlFeatureData的JSON结构.
有关详细信息,请参阅此页面:KML功能详细信息
| 归档时间: |
|
| 查看次数: |
12020 次 |
| 最近记录: |