默认情况下,openlayers 3缩放控件位于左上角.我怎样才能将它移到右上角?进入选项时,API似乎返回断开的链接.
我正在研究openlayers 3并希望实现一个搜索功能,它获取地点的名称并在地图上定位标记.我能够获得坐标但是当我想在地图上添加它的标记时,我总是得到不同的位置.输入位置的标记未放置在地图的实际坐标上.
这是我一直在工作的代码:
function addmarker(lat, long, pointerimgsrc){
var iconFeature = new ol.Feature({
geometry: new ol.geom.Point(ol.proj.transform([lat, long], 'EPSG:4326', 'EPSG:3857')),
name: 'NULL'
});
var iconStyle = new ol.style.Style({
image: new ol.style.Icon(({
anchor: [0.5, 46],
anchorXUnits: 'fraction',
anchorYUnits: 'pixels',
opacity: 0.75,
//src: 'data/icon.png'
src: pointerimgsrc
}))
});
iconFeature.setStyle(iconStyle);
vectorSource = new ol.source.Vector({
features: [iconFeature]
});
vectorLayer = new ol.layer.Vector({
source: vectorSource
});
map.addLayer(vectorLayer);
}// END addmarkerr()
Run Code Online (Sandbox Code Playgroud)
我希望我已经清楚地解释了我的问题,期待找到解决方案.非常感谢您的时间和支持.
我正在使用OpenLayers 3实现地图导出功能.
但是有一个问题:人们无法确定地图视图是否已完全加载或者是否缺少一些图块.
似乎没有这样的API或事件.最接近的是tileloadstart - tileloadend对.但OpenLayers异步加载切片,并且在切片实际加载之前,不会触发tileloadstart - 也就是说,在切片队列中排队的切片不会在实际加载之前触发该事件.
我可以检测到地图视图是否已完全加载?
http://ol3js.org/en/master/examples/select-features.html
鉴于上面的例子,当选择功能时,有什么扩展点可以用于挂钩?
当我将地图(相同的html,css,js)添加到不同的页面时,地图有时会模糊不清.不同的页面可能包含其他html,css和js.左侧的清晰图片位于第三方添加CSS的页面内.右边的那个没有别人的html,css和js.
我该如何解决这个问题?

在检查细节时我注意到的一件事是第二个例子的画布尺寸要小得多.

编辑[固定!]:
我发现了查看ol.js源代码的问题.在控制台上,模糊图像具有map.frameState_.pixelRatio = 0.89(默认为window.devicePixelRatio),而清晰图像具有map.frameState_.pixelRatio = 1.如果我在初始化地图时设置pixelRatio = 1,则修复了问题:
var map = new ol.Map({pixelRatio: 1, ...});
Run Code Online (Sandbox Code Playgroud)
事实证明,如果你的互联网浏览器放大(例如,90%),window.devicePixelRatio将会改变,这会导致模糊.但是,当您缩放回100%时,地图仍会缩放,直到您刷新页面.
我正在尝试设置矢量图层的单独特征的填充颜色.使用下面的代码,我想我将能够遍历这些功能并单独设置它们的填充样式,但是会出现一个奇怪的问题.如果没有setStyle函数,则会在控制台中记录功能的各种属性.id,名称和几何.大约有5个左右的功能被记录下来.基本上就像
room1
room2
room3
room4
room5
Run Code Online (Sandbox Code Playgroud)
每个下面的额外数据(id,几何)
但是当我添加用于设置功能填充的行时,我遇到了一个奇怪的问题.它似乎将循环挂在第一个功能上,并且控制台填满了该功能属性的日志,例如:
room1
room1
room1
room1
room1
room1
room1
Run Code Online (Sandbox Code Playgroud)
很长一段时间,到达firefox日志限制的点,它告诉我没有显示2000条目!
但从好的方面来说,第一个功能实际上确实改变了它的填充颜色!所以我认为我使用的代码行至少是一半!但肯定存在一些严重错误.
代码:
vector.getSource().on('change', function (evt) {
var source = evt.target;
if (source.getState() === 'ready') {
var features = vector.getSource().getFeatures()
for (var k in features) {
console.log(features[k].getProperties()['name']);
console.log(features[k].getProperties()['id']);
console.log(features[k].getGeometry()['n']);
features[k].setStyle(new ol.style.Style({fill: fill}));
}
}
});
Run Code Online (Sandbox Code Playgroud)
我真的不太了解OL3或造型功能,我通过大量的试验和猜测来达到这个目的.任何人都能指出我正确的方向吗?
我根植了我的三星平板电脑10.1(Android 4.1.2)并使用AutoMacro进行自动触摸.但AutoMacro的屏幕尺寸错误.预期值为1280 X 800,但新值为4096 X 4096.我在其他自动触摸软件中遇到同样的问题.
我已经多次重置我的平板电脑,但这个问题仍然存在.
我用这个命令getevent -p来显示这条消息:
add device 7: /dev/input/event1
name: "sec_touchscreen"
events:
ABS (0003): 002f : value 0, min 0, max 9, fuzz 0, flat 0, resolution 0
0030 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
0035 : value 0, min 0, max 4095, fuzz 0, flat 0, resolution 0
0036 : value 0, min 0, max 4095, fuzz 0, flat 0, resolution 0
0039 : value 0, …Run Code Online (Sandbox Code Playgroud) 这是我在openlayers 3.9.0中的OSM层.
var layer = new ol.layer.Tile({
source: new ol.source.OSM(
{
attributions: [
new ol.Attribution({
html: 'All maps © ' +
'<a href="http://www.opencyclemap.org/">OpenCycleMap</a>'
})
]
}
),
opacity: 0.8,
brightness: 0.8
});
Run Code Online (Sandbox Code Playgroud)
现在我想得到EPSG code图层来检查它,所以我喜欢
var a = layer.getProjection().getCode();
alert(a);
Run Code Online (Sandbox Code Playgroud)
我得到了错误layer.getProjection is not a function.
我错过了什么?
请帮我
将搜索功能实现到OL3映射的最佳方法是什么?
我需要一个搜索输入,它会在搜索时向我显示一些选项,然后平移和缩放到特定的搜索词.非常像谷歌地图.
我需要将谷歌地图集成到我的OL3中吗?
我正在使用openlayer 3.9.0.我有以下代码,我必须在地图上绘制一些叠加.
这些叠加层即将到来,但不是精确的坐标.但是,只要我点击地图,这些叠加移动到正确的位置.
为了克服这一点,我试图在隐藏的div上点击事件,但它不起作用.只有当我点击地图的某个地方,然后只有这些anamoly去tpo正确的位置.
for(var anamolyIndex=0; anamolyIndex< self.anamolyes.array.length ; anamolyIndex++)
{
tmpAnamolyObject = self.anamolyes.array[anamolyIndex];
elem = document.getElementById(tmpAnamolyObject.coordinates);
coordinate = tmpAnamolyObject.coordinates.split(",");
longitude = parseFloat(coordinate[0]);
lattitude = parseFloat(coordinate[1]);
position = ol.proj.transform([longitude, lattitude],'EPSG:4326', 'EPSG:3857');
popup = new ol.Overlay({
//position: position,
element: elem,
stopEvent:true,
positioning : 'center-center'
});
tmpAnamolyObject.type = "ANAMOLY";
popup['identity'] = tmpAnamolyObject;
elem.addEventListener('click', function() {
var coordinates = this.getAttribute('id');
self.send('onAnamolyClick',coordinates);
});
popup.setPosition(position);
self.map.addOverlay(popup);
}
Run Code Online (Sandbox Code Playgroud)