标签: openlayers

如何以编程方式移动OpenLayers Vector?

OpenLayers.Feature.Vector的API文档说Vector本身根本就没有方法.

我知道如何通过添加OpenLayers.Control.DragFeature控件来映射用户来移动Vector .因此,如果用户可以移动Vector,那么必须以编程方式移动它.但我无法弄清楚该怎么做.

javascript vector openlayers

9
推荐指数
2
解决办法
8738
查看次数

OpenLayers,图层:平铺与单个图块

每次我们向基于OpenLayers的网站添加新图层(主要由GeoServer服务器提供的数据)时,我们都会讨论是使用单个图块还是平铺图像.

我们评估的一些参数如下:

使用平铺方法我们得到:

  • 缓慢但连续地构建视口
  • 很多小图片
  • 客户端缓存的可能性
  • 阻塞加载管道(一次6个请求)
  • 在负载期间导航时感觉很冷酷

使用单瓦方法我们得到:

  • 在负载期间导航时感觉更平滑
  • 加载图层之前的时间延迟
  • 每层一个大图像
  • 没有缓存单个磁贴

我们在图层中进行了大量的数据编辑,因此图块缓存可能效率不高.

在平铺方面有没有最好的做法

朝着无限快速的硬件无限数据连接的方向发展,讨论变得无关紧要,但您认为哪种配置最令用户满意

tiling user-experience openlayers

9
推荐指数
1
解决办法
8419
查看次数

没有Google API的地理编码?

我无法找到一种方法,可以在使用谷歌地理编码API的情况下将地址转换为长/纬度坐标.我正在使用Open Layers和Open Street Map,并且因为2.500次/天的限制而不得不避免google api.

google-maps geocoding openlayers openstreetmap

9
推荐指数
1
解决办法
2843
查看次数

如何根据缩放级别加载图层?

我想控制OpenLayers中的缩放.

当缩放为3时我想加载KML1,当缩放为4时我想加载KML2.

你能告诉我如何控制变焦事件吗?

openlayers

9
推荐指数
2
解决办法
8544
查看次数

更改openlayers中标记的z-index

我有一个带有多个标记的图层,图标相当大,所以它们重叠.通过地图一侧的列表,用户可以选择一个标记,地图将平移(和缩放)到它.但它仍将落后于其他一些制造商.如何获得个体制造商z-index并设置它?获得最高使用的z-index并添加一个,我会很有用.(另一个解决方案是将标记的总数添加到z-index)

标记(或特征)位于myLib.features数组中.控制台不显示任何z-index类型的功能.

我无法为此找到合适的示例或api函数.

编辑:

我找到了这个例子:http://dev.openlayers.org/examples/ordering.html 我真的不明白它.不知何故,创建的特征通过某些符号化器获取图层给出的下一个z-index.我不知道如何将这种静态排序变成动态排序.

z-index markers openlayers openstreetmap

9
推荐指数
1
解决办法
4929
查看次数

Openlayers/Openstreetmap背景是垂直条纹和压扁

因此,我的openlayers实现的背景似乎被压缩成垂直条纹.奇怪的是它并不总是这样,但即使我把所有的变化都藏回到我知道它正在工作的地方,它仍然被打破了.这让我想知道是否有些东西已经改变了瓷砖资产的交付方式.我已经尝试在使用osm和wms图层之间切换而没有任何改变,任何帮助将不胜感激.

这是相关的代码:

initMap: function() {
  var view = this;
  var map = this.map = new OpenLayers.Map();
  map.render(this.$map[0]);

  var wmsLayer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
    "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'});

  var osmLayer = new OpenLayers.Layer.OSM();

  this.layers = {
    point: new OpenLayers.Layer.Vector("Point Layer"),
    line: new OpenLayers.Layer.Vector("Line Layer"),
    polygon: new OpenLayers.Layer.Vector("Polygon Layer")
  };

  this.setValue(this.value);

  map.addLayers([this.layers.point, this.layers.line, this.layers.polygon, osmLayer]);

  drawControls = {
    point: new OpenLayers.Control.DrawFeature(this.layers.point,
      OpenLayers.Handler.Point),
    line: new OpenLayers.Control.DrawFeature(this.layers.line,
      OpenLayers.Handler.Path),
    polygon: new OpenLayers.Control.DrawFeature(this.layers.polygon,
      OpenLayers.Handler.Polygon)
  };

  this.layers[this.layerType].events.on({'sketchcomplete': function(feature) {

    if (!view.multiple) {
      // deactivate polygon layer once …
Run Code Online (Sandbox Code Playgroud)

javascript maps openlayers openstreetmap

9
推荐指数
2
解决办法
2849
查看次数

使用Openlayers禁用缩放

我正在使用OpenLayers在我的网站上显示自定义OSM地图.

我有一点要尊重:地图必须修复(意味着我们无法拖动或缩放它).

我有缩放问题,我无法用鼠标禁用缩放.有人有小费吗?

map = new OpenLayers.Map('map');
map.events.remove("move");
map.events.remove("movestart");
map.events.remove("moveend");
map.events.remove("zoomend");
map.events.remove("mouseover");
map.events.remove("mouseout");
map.events.remove("mousemove");
map.events.remove("zoomstart");
var nav = new OpenLayers.Control.Navigation({
  defaultDblClick: function(event) { return ; }
});
map[index].addControl(nav);
Run Code Online (Sandbox Code Playgroud)

此外,如果有人提示删除所有导航事件比这更容易,将不胜感激.

zoom mousewheel openlayers

9
推荐指数
3
解决办法
1万
查看次数

openlayers矢量特征获取像素位置

获取OpenLayers.Feature.Vector像素坐标的最快方法是什么?我的意思是,我希望获得相对于已绘制特征的地图容器的像素(顶部,左侧)位置,如果可能的话,不进行计算,因为性能改进.

谢谢和问候,拉斐尔.

openlayers

9
推荐指数
1
解决办法
1万
查看次数

如何在OpenLayers-3中将SVG图像用作地图标记?

我正在尝试使用SVG图像在OpenLayers-3(OL3)中创建地图"pin-drops"(即地图标记).

目前,我正在使用PNG图像作为引用ol.style.Icon源("src")属性属性的pindrops.但是,这使用SVG图像失败.有没有其他方式以相同的方式使用SVG?也许通过使用ol.style.Icon之外的参考甚至?在Open Layers中已经有很多内置的SVG,所以这应该是可能的,但我还没有找到一种方法让它在OL3中运行.在OL3中还有其他一些我应该考虑的方法吗?

请注意:我们已经尝试使用ol.Vector图层,但是当用户放大/缩小时,SVG图像的大小会增大/缩小,这是一种不适当的解决方法.


OL3(失败):

var createMapMarkerImage = function() {
    return function(feature, resolution) {
        var iconStyle = new ol.style.Style({
            image: new ol.style.Icon( ({
                src: 'img/map_pindrop.svg'   // OL3 doesn’t like this, but accepts a .PNG just fine
            }))
        });
        return [iconStyle];
    };
};
Run Code Online (Sandbox Code Playgroud)

非常类似的功能,是我在网上找到的以下示例,如果不是因为该示例使用OpenLayers-2(OL2)功能调用openlayers.js库(而不是OL3的ol.js库),则几乎是完美的.遗憾的是,交换这些javascript文件失败了.


OL2(工作 - 但是旧的 OL库):

http://dev.openlayers.org/sandbox/camptocamp/tipi/examples/vector-symbols.html


在线搜索解决方案似乎只会产生其他困惑的人在寻找解决方案.

请帮忙,

FreeBeer

svg openlayers openlayers-3

9
推荐指数
4
解决办法
7936
查看次数

Openlayers 4:更改所选要素的绘制顺序

我在OpenLayers 4(4.4.1)中有一个矢量图层.该图层具有几个LineString几何特征.一些功能重叠.

如果我在要素重叠的点处单击,我只希望将其中一个要素绘制为选定的.其他应该仍然可供以后选择(通过单独的UI选择列表中的功能ID).

如果我单击另一个要素ID(在单独的UI选择列表中),该要素应绘制为选中,并且先前选择的不应绘制为选中,但仍可在选择列表中使用.

这是有效的,但它只是第一个(默认)选定的功能,似乎在顶部绘制.

下图显示了功能ID 10049被标记为已选中的情况. 选择中的第一个元素是正确绘制的

下图显示了功能ID 10048被标记为已选中的情况. 选择中的第二个元素绘制在第一个元素下面

如果我点击它们不重叠的最南部特征上的某个位置,则会在顶部选中时正确绘制.

如果在没有重叠的情况下单击,则会正确绘制最南端的要素

要跟踪需要在视觉上选择的功能,有一个变量:

var multiselectPrimaryId = 0;
Run Code Online (Sandbox Code Playgroud)

我使用以下selectInteraction代码:

selectInteraction.on('select', function (e) {
    e.deselected.forEach(function (feature) {
        feature.setStyle(null);
    });
    if (e.selected.length <= 1) {
        $("#multipleHitWindow").hide();
        multiselectPrimaryId = 0;
        if (e.selected.length == 0) {
            return;
        }
    }
    var features = e.selected;
    if (multiselectPrimaryId == 0) {
        multiselectPrimaryId = features[0].getId();
    }
    if (features.length > 1) {
        var text = "Multiple hits: ";
        features.forEach(function (elem, index, array) {
            text += "<a href='javascript:changeSelectedFeature("
                 + elem.getId() + …
Run Code Online (Sandbox Code Playgroud)

javascript vector openlayers

9
推荐指数
1
解决办法
631
查看次数