【发布时间】:2014-08-22 01:31:37
【问题描述】:
明年 9 月我将骑自行车旅行三个月。我将使用装有 Motion-X GPS 应用程序的 iPhone 来记录每天的轨迹。这次旅程旨在引起一些公众的注意,因此我正在使用 Squarespace 建立一个网站,我打算在其中将每天的骑行路线上传到谷歌地图上。我不能花太多时间处理文件或执行手动任务。一切都需要由单个事件触发。每天。到目前为止一切顺利。
Motion-X GPS 记录 GPS 轨迹并允许通过电子邮件共享它们。通过电子邮件发送的文件是一个 gpx 文件和一个 kmz 文件作为单个电子邮件正文中的附件。那是我的触发器。
在我的网站中,我设法加载了 Google 地图(使用 Google Maps Javascript Api)并绘制了航点和 KmlLayers。我还运行了一个 Google Drive 脚本,它自动下载带有 kmz 或 gpx 扩展名的电子邮件附件,并将它们保存在 Google Drive 文件夹中。我还可以通过另一个脚本检索这些文件的永久链接。我想我什至可以弄清楚每次将新的 KMZ 文件添加到文件夹时如何在网站上的 javascript 代码中添加一个新层,但我还没有走那么远。
噩梦从这里开始。
第一种方法。我可以使用 KmlLayer 在我的地图上绘制 KMZ 文件。没问题。但谷歌地图有大约 15-20 层的限制,旅程将持续大约 100 天,每天都会增加一个新层。这意味着当达到限制时,地图上有很多层,并且可能会出现停电。由于会有很多人访问该网站,我不希望这种情况发生。
第二种选择是有一个脚本:
- 解压缩 KMZ。
- 将解压后的 KML 保存在另一个文件夹中。
- 将所有 KML 合并到一个 KML 中。
我无法完成第 1 步。我尝试使用脚本在 Drive 上解压缩我的 KMZ 文件,但我无法完成。这是我测试时使用的代码:
function unZip() {
var kmzs = DriveApp.getFilesByType('application/vnd.google-earth.kmz');
while (kmzs.hasNext()){
var kmz = kmzs.next();
var zipBlob = kmz.getBlob();
var unzipBlob = Utilities.unzip(zipBlob);
var unzipBlobName = unzipBlob[1].getName();
Logger.log(unzipBlobName);
}
}
这会在“unzipBlob”上引发错误。除非我找到解压缩然后合并文件的选项,否则此路径到此结束。
我也尝试过 zipextractor,但它无法将 kmz 文件识别为可解压缩文件。我什至将 .kmz 文件重命名为 .zip,但没有成功。
https://github.com/googledrive/zipextractor
第三个选项是绘制 gpx 文件。经过数小时的谷歌搜索,我找到了在谷歌地图上绘制 gpx 文件的链接:
http://www.jacquet80.eu/blog/post/2011/02/Display-GPX-tracks-using-Google-Maps-API
这是代码sn-p:
$.ajax({
type: "GET",
url: "URL to the GPX file",
dataType: "xml",
success: function(xml) {
var points = [];
var bounds = new google.maps.LatLngBounds ();
$(xml).find("trkpt").each(function() {
var lat = $(this).attr("lat");
var lon = $(this).attr("lon");
var p = new google.maps.LatLng(lat, lon);
points.push(p);
bounds.extend(p);
});
var poly = new google.maps.Polyline({
// use your own style here
path: points,
strokeColor: "#FF00AA",
strokeOpacity: .7,
strokeWeight: 4
});
poly.setMap(map);
// fit bounds to track
map.fitBounds(bounds);
}
});
但是,我无法使用该代码绘制我的任何 Google Drive gpx 文件。出现灰色块而不是地图,或者如果我尝试同时绘制其他图层,其他图层将可见但 gpx 图层不会。我想这与同源策略有关,因为我指向的 URL 是 Google 而我的是 Squarespace。
此时,在三种不同的解决方案上已经走到了死胡同,经过数小时的搜索和尝试,我看不到更远的地方。我非常感谢有关此问题的任何帮助。自从明年 9 月 9 日旅程开始以来,我的日程安排很紧。同样,任何提示、建议或评论都将不胜感激。
【问题讨论】:
-
仍在努力,我发现这是相关的:stackoverflow.com/questions/2109555/nesting-kmz-files
标签: javascript google-maps-api-3 google-apps-script google-drive-api kmz