如何从KML文件中将一对融合表与GroundOverlays集成?更新了我试图解决的问题(未成功)
how to integrate a pair of fusion tables with GroundOverlays from a KML file? Updated with my attempt to solve (unsuccessful)
我的问题的简短版本:
如何将一对谷歌地图融合表(多边形和标记)与KML文件中的GroundOverlay集成?一切都可以点击。
背景:我正在做一个交互式历史地图项目,该项目使用两层融合表(一层是多边形,另一层是位置标记)。
我还想通过GroundOverlay覆盖旧地图——这目前在融合表中是不可能的——所以我一直在KML文件中尝试GroundOverflow。
我在两个页面上都添加了监听器来控制点击框,这让它变得复杂起来。
我有两个网页:
1.融合表和
2.KML地面覆盖层,
两者都运行良好。
我想做的是将它们集成到一个页面中。我不是一个程序员,对JS的理解也不足以实现这一点。
使用的脚本都是根据网上的例子改编的。
这是我的第一个工作页面:
http://wendysmithtoronto.com/mapping/townofyork-fusiontables2.html
你会在那里找到第二页的链接。
非常感谢您的帮助。非常感谢。Wendy
更新:
以下是我对合并两组数据的努力:
http://wendysmithtoronto.com/mapping/townofyork-merged.html
我试图通过将kmlmaps页面中的一些脚本添加到fusiontables页面来实现这一点,但很明显,我没有把东西放在正确的位置。或者是缺少标点符号(或者混淆了不同类型的脚本,或者?)
此时将显示贴图,多边形和标记都将正确显示。但现在(1)融合表图标不可点击,(2)历史地图不显示。但是,融合表复选框(蓝色表中)确实有效。
我对JS的理解不够好,无法理解。
两个页面中的两组控件都在这里(位于地图上方的蓝色和灰色框中)。每一组控件(监听器和点击框)在自己的微信页面中都运行良好,但现在只有融合表控件可以工作。
孙,谢谢你看这个!(我刚刚找到你的回复。我一直在关注回复通知,但没有检查正确的地方。)
干杯,Wendy
html文件的javascript部分存在重大错误。您真的应该学习同样的基本javascript,尤其是使用带有GMapneneneba API的JS。
您创建了2个全局地图对象。您没有在initialize函数()中封装所有地图和图层创建。所有贴图和图层的创建都必须在initialize(在实体加载时)函数中完成。您必须在初始化函数之外设置全局变量,例如映射、所有层等。最后,您未能在2个KML层上调用layer.setMap(map)
。
尽管如此,我还是修复了你的文件,真的只是重新安排了一下。这只是我必须修复的部分。将所有内容移动到initialize()中
function showbuildings(buildingcheck) {
if (buildingcheck.checked == true)
{
campusmap.setMap(map);
} else {
campusmap.setMap(null);
}
}
function showphilpotts(philpottscheck) {
if (philpottscheck.checked == true)
{
philpotts.setMap(map);
} else {
philpotts.setMap(null);
}
}
function showbeartrail(beartrailcheck) {
if (beartrailcheck.checked == true)
{
beartrail.setMap(map);
} else {
beartrail.setMap(null);
}
}
var infoWindow = new google.maps.InfoWindow();
function openIW(FTevent) {
// infoWindow.setContent(FTevent.infoWindowHtml);
// infoWindow.setPosition(FTevent.latLng);
infoWindow.setOptions(
{
content: FTevent.infoWindowHtml,
position: FTevent.latLng,
pixelOffset: FTevent.pixelOffset
});
infoWindow.open(map);
}
// Globals
//Begin map parameters
var map;
var layer_2;
var layer_1;
var tableid_1 = 2920040; // polygons
var tableid_2 = 3189980; // houses
var zoom = 12;
var center = new google.maps.LatLng(43.652417455515476, -79.37926607055226);
var campusmap;
var philpotts;
var beartrail;
function initialize() {
map = new google.maps.Map(document.getElementById('map_canvas'), {
center: center,
zoom: zoom,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
//End map parameters
campusmap = new google.maps.KmlLayer('http://wendysmithtoronto.com/mapping/1851mapshoreline.kml', {preserveViewport:true, suppressInfoWindows:true});
campusmap.setMap(map);
google.maps.event.addListener(campusmap, 'click', function(kmlEvent) {
document.getElementById('sidebarinfo').innerHTML = kmlEvent.featureData.description;
});
philpotts = new google.maps.KmlLayer('http://wendysmithtoronto.com/mapping/1818maplieutphilpottsd.kml', {preserveViewport:true, suppressInfoWindows:true});
google.maps.event.addListener(philpotts, 'click', function(kmlEvent) {
document.getElementById('sidebarinfo').innerHTML = kmlEvent.featureData.description;
});
philpotts.setMap(map);
beartrail = new google.maps.KmlLayer('http://wendysmithtoronto.com/mapping/1842map-jamescaneb.kml', {preserveViewport:true, suppressInfoWindows:true});
google.maps.event.addListener(beartrail, 'click', function(kmlEvent) {
document.getElementById('sidebarinfo').innerHTML = kmlEvent.featureData.description;
});
beartrail.setMap(map);
layer_2 = new google.maps.FusionTablesLayer({
suppressInfoWindows:true,
query: {
select: 'Location',
from: '3189980'
},
styles: [
{where: "'style' = 14", markerOptions:{ iconName:"star"}},
{where: "'style' = 13", markerOptions:{ iconName:"wht_pushpin"}},
{where: "'style' = 11", markerOptions:{iconName:"red_blank"}}, //town houses
{where: "'style' = 12", markerOptions:{ iconName:"orange_blank"}}, //country homes
{where: "'style' = 15", markerOptions:{ iconName:"target"}},
]});
layer_1 = new google.maps.FusionTablesLayer({
suppressInfoWindows:true,
query: {
select: 'Location',
from: '2920040'
}}),
google.maps.event.addListener(layer_1, "click", openIW);
google.maps.event.addListener(layer_2, "click", openIW);
google.maps.event.addListener(map, "click", function() { infoWindow.close();});
layer_1.setMap(map);
layer_2.setMap(map);
} // end initialize
- Javascript循环不会自我更新
- 添加文字和评论功能更新Div
- AngularJS:ng之后,重复$scope值未按预期更新
- 如何通过数组更新角度子范围
- Ajax聊天消息重复而不仅仅是更新
- 通过CSV文件上载更新数据库表
- 平均值:无法将数据更新到数据库
- $rootScope未使用forEach进行更新
- d3基于用户选择动态更新节点
- 有条件更新d3.js力图中节点的最佳方法
- Angular:更新一次性绑定的数据
- Javascript更新孙窗口中的表单元素
- React,Flux,React路由器调度错误-可能的批更新解决方案
- 在 IE11 中添加子项时未更新空选择器的解决方法
- 我收到一个错误:类型错误:在使用解析 API 更新用户对象时未定义 e.changes.如何解决这个问题
- 如何从KML文件中将一对融合表与GroundOverlays集成?更新了我试图解决的问题(未成功)
- Ember更新导致模板中的承诺不等待解决
- 关于Qualtrics,如何用javascript保存嵌入的数据(考虑到Qualtrics最近已经更新,旧的SO解决方案
- 如何解决克隆上的Datepicker问题?更新:还没有有用的答案…
- 强制CSS:hover在过渡(打开菜单)后更新的解决方案