使用谷歌地图V3的矢量图瓷砖
我有一堆非常大的多边形,我想叠加在我的Google地图上。我有一个服务GeoJSON功能的瓷砖服务器,它还负责使我的应用程序工作所需的各种几何操作(加入多边形,简化缩放级别,平铺等)。使用谷歌地图V3的矢量图瓷砖
目前,我们只是在地图上显示大的多边形作为数据层,但理想情况下,我们可以在较小的缩放级别显示简化版的多边形,并通过缩放级别增加其内联的复杂性。
我的选择似乎是:
1)数据图层:钩到各个地图改变事件,然后添加/从地图适当除去(其中添加将被取适当的瓦)。这里的困难在于似乎有很多地图变化事件,并且寻找最顺利的方式可能需要付出相当大的努力。另外,感觉就像我在这里使用数据API一样。
2)OverlayView:与上述类似,但是作为绝对尺寸的OverlayView(即全覆盖)。我们的想法是,叠加层将听取绘画事件,获取适当的图块,并根据需要添加/清理。这似乎是一个更可预测的解决方案,但同样有很多。
我对底图如何工作以提供更多洞察力并不了解,但我最终的解决方案(尽可能多地帮助)将需要一个tile服务器URL,然后适合作为尽可能平滑地映射到地图如何加载正确的贴图,获得正确的缩放级别(并且由于它们是矢量图块,我可能会随着缩放级别或位置的改变而逐渐增强/降级)。
任何人都可以摆脱任何见解吗?你会如何处理它?
我来处理获取平铺数据的想法是通过使用overlayMapTypes。 Here's a working example。
就像任何实施MapType interface的对象一样,它期望您定义一个getTile
方法和一个可选的releaseTile
方法。
每当一个图块进入视口时,这种类型的对象调用getTile
传递它的坐标和缩放。每当某个图块退出视口时,它将调用releaseTile
及其被删除的节点元素。因此,使用链接的例子,你只需要一个数据层添加到每个区域,将其删除的瓷砖被释放时:
比方说,你的瓷砖供应后端答案的网址像
'/mytiles/1048/1520/13';
然后,(借用几乎为示例的完整代码),你会宣布overlayMapType作为
function CoordMapType() {
this.tileSize = new google.maps.Size(256, 256);
}
CoordMapType.prototype.getTile = function (coord, zoom, ownerDocument) {
var div = ownerDocument.createElement('div'),
tileUrl = '/mytiles/' + coord.x + '/' + coord.y + '/' + zoom;
div.innerHTML = coord;
div.style.width = this.tileSize.width + 'px';
div.style.height = this.tileSize.height + 'px';
div.style.fontSize = '10';
div.style.borderStyle = 'solid';
div.style.borderWidth = '1px';
div.style.borderColor = '#AAAAAA';
div.dataLayer = new google.maps.Data();
div.dataLayer.loadGeoJson(tileUrl,null, function() {
div.dataLayer.setMap(map);
});
return div;
};
CoordMapType.prototype.releaseTile = function (tile) {
if (tile.dataLayer) {
tile.dataLayer.setMap(null);
}
};
map.overlayMapTypes.insertAt(0, new CoordMapType());
不完全确定你正在尝试做什么。但是你有没有想过KML Layer?它可以作为TileOverlay使用,但是当数据量很大时,它会相当优化。您可以阅读文档,看看它是否适用于您的项目。 https://developers.google.com/maps/documentation/javascript/kmllayer#kml_layer_options – KayAnn 2015-01-29 03:19:08
我已经构建了一个在Google地图上呈现地图框矢量图块的解决方案。我正在开源整个过程,但现在你可以看到渲染的核心部分https://landtechnologies.github.io/Mapbox-vector-tiles-basic-js-renderer/debug/basic/ ......那么这就是一个类似于amenadiel所建议的事情。 – 2018-01-19 10:51:21