gpt4 book ai didi

javascript - 我可以通过 JS API 从 Google map (再次)加载 KML 数据吗?

转载 作者:行者123 更新时间:2023-12-03 10:03:51 25 4
gpt4 key购买 nike

我一直在开发一个小型 ember 应用程序,它从本地报纸 API 加载文章并以漂亮的布局呈现。由于这些文章都是关于旅行目的地的,因此导航基于页面背景中带有标记的大 map 。最初我是从一张传单 map 开始的。为每篇文章添加标记没有问题,因为我知道它们的坐标,因为它们与每篇文章一起保存并可通过 API 访问。

当我意识到一些作者将小型 Google map 嵌入到他们的副本中并带有漂亮站点、酒吧等标记时,情况变得更加复杂。由于我不想在传单 map 上显示 Google map ,因此我正在搜索如何从 Google map 获取标记数据并在我的 Leaflet 上使用它。我最终使用的解决方案非常疯狂,但实现了我所希望的:我意识到,对 Google map 嵌入 url 的 HTTP 请求(请求参数“output”设置为“kml”)为我提供了一个 KML/XML 文件,其中包含与 map 一起使用的 KML 图层的所有数据。为了避免跨域请求的问题,我通过雅虎的 YQL 服务间接请求 KML 数据,该服务也将数据转换为 JSON。

一切都很好。直到事实并非如此。自从实现了 API 的最新更改(特别是关于 KML 内容)后,我的请求返回 KMZ(压缩的 KML)数据。当然,YQL 转换和我的 Ember 应用程序都无法处理现在的二进制数据。

似乎没有什么办法可以让我再次获得未压缩的数据。至少有一种方法可以让我的主 map (现在也是 Google map )从另一个由嵌入 URL 标识的 map 加载 kml 图层吗?任何提示都是受欢迎的,并且非常感激。谢谢!

最佳答案

我自己找到了解决方案。由于 Google 仅提供压缩的 KML 数据 (KMZ),因此似乎没有任何方法可以获取实际的原始图层数据来从头开始动态构建 map ,同时能够访问和操作每个标记等。

至少可以通过更改 map 的嵌入网址来加载 KML 图层,以使请求传递 KMZ 数据。

对于带有 msid 参数的旧嵌入网址,请使用:

https://maps.google.com/maps/ms?ie=UTF8&msa=0&output=kml&msid= {MSID}

对于最近带有 mid 参数的嵌入网址,请使用:

https://www.google.com/maps/d/u/0/kml?mid= {中}

然后,这些 url 可用于使用 Google map 的 JavaScript API 创建 kmlLayer 对象,如下所示:

// set up map
var map = new google.maps.Map(document.getElementById('map-canvas'),{ … });

// create kmlLayer object from URL
var kmlUrl = 'https://www.google.com/maps/d/u/0/kml?mid=zWcxp2-PLDWQ.k8l5tfHg76WQ';
var kmlLayer = new google.maps.KmlLayer({ url: kmlUrl });

// add layer to map
kmlLayer.setMap(map);

这将设置 View 并加载与 URL 标识的自定义 map 一起保存的所有标记和叠加层。因此,您可以使用通过 Google map 创建的每个自定义 map 作为 KML/KMZ 数据源来定义可以使用 JS API 在单个 Canvas 上显示和切换的 map View 。为我的案例工作。

关于javascript - 我可以通过 JS API 从 Google map (再次)加载 KML 数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30458329/

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