明年九月我将骑自行车在三个月内旅行。我将使用iPhone与移动-X全球定位系统应用程序安装,以记录每天的跟踪。这次旅行的目的是吸引公众的注意,因此,我正在建立一个网站,在这里,我打算上传每天骑自行车散落在谷歌地图上。我不能花太多时间处理文件或执行手动任务。任何事情都需要由一个事件触发。每天都是。到目前一切尚好。
移动X全球定位系统记录全球定位系统的跟踪,并允许通过电子邮件共享它们。通过电子邮件发送的文件是一个gpx文件和一个kmz文件作为附件在一个电子邮件的正文中。那是我的扳机。
在我的网站上,我成功地加载了一个Google (带有Google Api),并绘制了路径点和KmlLayers。我还运行了一个Google脚本,它可以自动下载带有kmz或gpx扩展的电子邮件附件,并将它们保存在Google文件夹中。我还可以通过另一个脚本检索这些文件的permalinks。我想我甚至可以想出每次将一个新的KMZ文件添加到文件夹中时,如何在站点上的javascript代码中添加一个新的层,但我还没有走那么远。
噩梦就从这里开始。
第一步。我能够用KmlLayer在地图上绘制一个KMZ文件。这没问题。但是Google的层数限制在15-20层左右,行程将持续100天左右,每天增加一个新的图层。这意味着,当达到极限时,地图上可能会出现多层停电。由于许多人将访问该网站,我不希望这种情况发生。
第二个选择是有一个脚本,该脚本:
我无法克服第一步。我试图用脚本解压缩驱动器上的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“上引发一个错误。此路径在此结束,除非我找到解压缩和合并文件的选项。
我也尝试过kmz提取器,但是它不承认kmz文件是不可压缩的。我甚至将.kmz文件重命名为.zip,没有成功。
https://github.com/googledrive/zipextractor
第三个选项是绘制gpx文件。在谷歌搜索了几个小时之后,我找到了这个链接来在Google上绘制一个gpx文件:
http://www.jacquet80.eu/blog/post/2011/02/Display-GPX-tracks-using-Google-Maps-API
这是代码片段:
$.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文件。出现一个灰色块而不是地图,或者如果我试图同时绘制其他层,其他层将是可见的,但gpx层不会。我想这与相同的起源策略有关,因为我所指向的URL是Google,而我的URL是Squarespace。
在这一点上,在三个不同的解决方案上达到了一个死胡同,经过了许多小时的搜索和尝试,我再也看不见了。我非常感谢在这个问题上提供任何帮助。从明年9月开始,我的行程安排得很紧。9.同样,任何暗示、建议或评论都将不胜感激。
发布于 2014-08-22 17:53:50
我找到了解决办法。
我已经依赖了几个消息来源,并以某种方式碰到了嵌套KMZ文件。
这给了我一个线索。我尝试使用不同的文件和选项,但结果如下:
就是这样。这是我的脚本代码。用您的数据替换上箱。也许有一种更简单或更聪明的方法来做这件事,但这就是完成的工作。
//This function reads kmz files inside an specific folder in Google Drive and fills "file.kml" with a list of Networklinks for those files. The links refer to a mirror in a synced dropbox public folder
function kmlFileSetContent(){
var contentHeader = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><kml xmlns=\"http://www.opengis.net/kml/2.2\"><Document>"
var contentFooter ="</Document></kml>";
var fileHeader = "<NetworkLink> <Link><href>YOUR_DROPBOX_PERMALINK_FOR_PUBLIC_FOLDER";
var fileFooter = "</href></Link></NetworkLink>"
var kmzFolder = DriveApp.getFolderById("YOUR_FOLDER_ID");
var kmzFiles = kmzFolder.getFilesByType('application/vnd.google-earth.kmz');
while(kmzFiles.hasNext()){
var kmzFile = kmzFiles.next();
var fileName = kmzFile.getName();
var networkLink = fileHeader+fileName+fileFooter;
var networkLinkAll = networkLinkAll+ networkLink;
}
var newContent = contentHeader+networkLinkAll+contentFooter;
Logger.log(newContent);
var kmlFile = DriveApp.getFileById("YOUR_FILEKML_ID");
kmlFile.setContent(newContent);
}https://stackoverflow.com/questions/25438355
复制相似问题