gpt4 book ai didi

javascript - Google Maps API 和 KML 文件 LocalHost 开发选项

转载 作者:可可西里 更新时间:2023-11-01 01:42:34 24 4
gpt4 key购买 nike

Google map JavaScript 第 3 版 API library documentation clearly explains :

The Google Maps API supports the KML and GeoRSS data formats for displaying geographic information. These data formats are displayed on a map using a KmlLayer object, whose constructor takes the URL of a publicly accessible KML or GeoRSS file.

关于如何加载本地数据甚至有几个 Stack Overflow 问题:

一些答案​​指向第三方库,这些库可以在本地解析 KML 而无需公开文件:

虽然如果您需要保持数据的私密性,这些解决方案很好,但我只是想让开发更容易。在本地运行时,我显然无法解析我的 KML,因此失去了我试图测试的功能。我已经在一个公开的网站上发布了一个通用的 KML 文件,但是在真正运行时必须有不同的开发代码来渲染一个东西与另一个东西。

本地开发有哪些选项可以呈现公开可用的动态生成的 KML 文件?

最佳答案

看来您已经很好地概述了这些选项:

如果您想使用本地数据,而不涉及可公开访问的网络服务器,您需要使用基于 javascript 的方法来解析 KML 并将其加载到 map 上。虽然这不会完美地复制 Google 功能,但如果您只关心显示 KML 功能,它可能足以用于初始开发。在这种情况下,我可能会设置一个 stub 类,如下所示:

    // I'll assume you have a global namespace called MyProject
MyProject.LOCAL_KML = true;

MyProject.KmlLayer = function(url) {
// parse the KML, maybe caching an array of markers or polygons,
// using one of the libraries you list in your question
};

// now stub out the methods you care about, based on
// http://code.google.com/apis/maps/documentation/javascript/reference.html#KmlLayer
MyProject.KmlLayer.prototype.setMap = function(map) {
// add the markers and polygons to the map, or remove them if !map
}
// etc

现在要么在代码中放置一个开关,要么注释/取消注释,要么使用构建脚本进行开关,或者无论您当前的流程是在开发代码还是生产代码之间切换:

    var kmlPath = "/my.kml";
var kmlLayer = MyProject.LOCAL_KML ?
new MyProject.KmlLayer(MyProject.LOCAL_KML_HOST + kmlPath) :
new google.maps.KmlLayer(MyProject.PRODUCTION_KML_HOST + kmlPath);
kmlLayer.setMap(myMap);

另一方面,如果您需要 Google KmlLayer 中的所有功能,或者您想要确保一切都适用于生产设置,或者您不想费心删除 Google 提供的功能,那么您需要将其上传到公开可用的服务器,以便 Google 可以进行服务器端处理。

除了明显的选项(FTP、用于上传新 KML 文件的命令行脚本等)之外,大多数选项都要求您在加载 map 页面之前手动执行某些操作,您可以考虑将更新构建到您正在加载的页面。根据您使用的平台,这可能更容易在后端或前端完成;关键是在您的公共(public)服务器上有一个允许更新 KML 的脚本:

  1. 从 request.POST 获取 KML 字符串
  2. 验证 KML 字符串(这样您就不会向攻击开放您的服务器)
  3. 写入单个文件,例如“我的.kml”

然后,当您查看 map 页面时,根据来自 localhost 的数据更新远程 KML。这是一个使用 jQuery 的客户端版本:

// again, you'd probably have a way to kill this block in production
if (MyProject.UPDATE_KML_FROM_LOCALHOST) {
// get localhost KML
$.get(MyProject.LOCAL_KML_HOST + kmlPath, function(data) {
// now post it to the remote server
$.post(
MyProject.DEV_KML_HOST + '/update_kml.php',
{ kml: data },
function() {
// after the post completes, get the KML layer from Google
var kmlLayer new google.maps.KmlLayer(MyProject.DEV_KML_HOST + kmlPath);
kmlLayer.setMap(myMap);
}
);
})
}

不可否认,这里有很多往返(页面 -> 本地主机,页面 -> 远程服务器,Google -> 远程服务器,Google -> 页面),所以这会很慢。但它可以让 Google 的代码正确呈现在本地主机上生成的动态 KML 数据,而无需在每次重新加载页面时都执行单独的手动步骤。

关于javascript - Google Maps API 和 KML 文件 LocalHost 开发选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6092110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com