【发布时间】:2015-08-05 06:55:43
【问题描述】:
在我的应用程序中,我将 GeoJSON 文件加载到 Google 地图中。该文件可以正确加载而不会出现问题,但我希望应用折线对象而不是 Feature 对象固有的其他样式。我想要做的是设置线串的样式以包含多个图标和虚线。我已经阅读了有关 GeoJSON 和虚线的 post 并且它有效,但我不希望折线是单个实体;我希望渲染的多段线驻留在一个对象(数据层)中。我想要实现的目标是可能的吗?有解决办法吗?
** 更新 **
我使用了geocodezip中的代码并修改为工厂工作,有两种类型:标记和折线。
function LayerFactory() {
this.entities = [];
this.labelLayerName = "";
}
LayerFactory.prototype.layerType = PolylineLayer;
LayerFactory.prototype = new google.maps.MVCObject();
LayerFactory.prototype.changed = function (key) {
if (this.entities) {
for (var i = 0; i < this.entities.length; i++) {
this.entities[i].overlay.set(key, this.get(key));
}
}
};
LayerFactory.prototype.addEntity = function (entity) {
this.entities.push(entity);
if (this.layerType === PolylineLayer) {
for (var i = 0; i < entity.overlays.length; i++) {
var overlay = entity.overlays[i];
//add events here
}
}
else if (this.layerType === MarkerLayer) {
//add events here
}
};
LayerFactory.prototype.setMap = function (map) { this.set('map', map); };
LayerFactory.prototype.getMap = function () { return this.get('map'); };
LayerFactory.prototype.createLayer = function (options) {
this.labelLayerName = options.labelLayerName;
switch (options.layerType) {
case "polyline":
//set options
break;
case "marker":
//set options
break;
case "label":
//set options
break;
}
return new this.layerType(options);
};
初始化图层时,我会为标签添加图层名称,以便我可以根据可见性单独切换每个图层。
myLayer = new LayerFactory();
myLayer.createLayer({ map: gmap, layerType: "marker", labelLayerName: "MyLabels" });
现在,当切换图层时,我只需拉出所需的图层并将地图设置为 null/gmap:
yourMapLayer.setMap(/* gmap OR null => show/hide */);
我希望这对遇到我遇到的问题的人有所帮助。祝你好运。
【问题讨论】:
标签: google-maps google-maps-api-3