Javascript OpenLayers的新增功能,涉及缩放、属性和命中检测建议
我不熟悉客户端编程。到目前为止,我只编写了基于asp和php的解决方案。但现在我需要从json中检索数据并绘制在地图上(我还不知道如何做到这一点,但这是以后的事情) 经过几天的搜索,我认为OpenLayers可以满足我的需要 我已经浏览了dev.openlayers站点上的示例(比如这一个),还搜索了(并找到了一些)stackoverflow上的解决方案,但它们没有为我的问题提供解决方案) 请查看我迄今为止所做的工作: canvas.js如下所示:Javascript OpenLayers的新增功能,涉及缩放、属性和命中检测建议,javascript,html,mobile,openlayers,Javascript,Html,Mobile,Openlayers,我不熟悉客户端编程。到目前为止,我只编写了基于asp和php的解决方案。但现在我需要从json中检索数据并绘制在地图上(我还不知道如何做到这一点,但这是以后的事情) 经过几天的搜索,我认为OpenLayers可以满足我的需要 我已经浏览了dev.openlayers站点上的示例(比如这一个),还搜索了(并找到了一些)stackoverflow上的解决方案,但它们没有为我的问题提供解决方案) 请查看我迄今为止所做的工作: canvas.js如下所示: // create some sample
// create some sample features
var Feature = OpenLayers.Feature.Vector;
var Geometry = OpenLayers.Geometry;
var features = [
new Feature(new Geometry.Point(-220, -60),attributes = { name: "Mercury",align: "cm",xOffset:10,yOffset:50 }),
new Feature(new Geometry.Point(-70, 120),attributes = { name: "Venus" }),
new Feature(new Geometry.Point(0, 0),attributes = { name: "Earth" }),
new Feature(new Geometry.Point(160, -100),attributes = { name: "Mars",align: "cm",xOffset:10,yOffset:50 })];
// create rule based styles
var Rule = OpenLayers.Rule;
var Filter = OpenLayers.Filter;
var style = new OpenLayers.Style({
pointRadius: 10,
strokeWidth: 3,
strokeOpacity: 0.7,
strokeColor: "#ffdd77",
fillColor: "#eecc66",
fillOpacity: 1,
label : "${name}",
fontColor: "#f0f0f0",
fontSize: "12px",
fontFamily: "Calibri, monospace",
labelAlign: "${align}",
labelXOffset: "${xOffset}",
labelYOffset: "${yOffset}",
labelOutlineWidth : 1
},
{
rules: [
new Rule({
elseFilter: true,
symbolizer: {graphicName: "circle"}
})
]
});
var layer = new OpenLayers.Layer.Vector(null, {
styleMap: new OpenLayers.StyleMap({'default': style,
select: {
pointRadius: 14,
strokeColor: "#e0e0e0",
strokeWidth: 5
}
}),
isBaseLayer: true,
renderers: ["Canvas"]
});
layer.addFeatures(features);
var map = new OpenLayers.Map({
div: "map",
layers: [layer],
center: new OpenLayers.LonLat(50, 45),
zoom: 0
});
var select = new OpenLayers.Control.SelectFeature(layer);
map.addControl(select);
select.activate();
我有什么问题:
马斯奇我想我已经设法解决了大部分问题
var wms = new OpenLayers.Layer.WMS("NASA Global Mosaic",
"http://hendak.seribudaya.com/starmap.jpg",
{
layers: "modis,global_mosaic",
}, {
opacity: 0.5,
singleTile: true
});
var context = {
getSize: function(feature) {
return feature.attributes["jejari"] / map.getResolution() * .703125;
}
};
var template = {
pointRadius: "${getSize}", // using context.getSize(feature)
label : "\n\n\n\n${name}\n${jarak}",
labelAlign: "left",
labelXOffset: "${xoff}",
labelYOffset: "${yoff}",
labelOutlineWidth : 0
};
var style = new OpenLayers.Style(template, {context: context});
我在新的OpenLayers.Geometry.Point(x,y)下声明了xoff&yoff,{jejari:5,xoff:-10,yoff:-15}
2) 放大点要素
这是一个奇怪的问题。无论如何,我在xoff和yoff旁边声明了一个称为jejari的半径,如上面的代码所示。然后将pointRadius从静态数字修改为“${getSize}”,然后将getSize函数添加到检索当前半径的var模板中。我想这就是我所做的一切。但是标签到处都是,我还没有解决这个问题
3) 在html中检测命中并更改另一个命中
这将添加选择点要素后对点发生的情况
layer.addFeatures(特征);
layer.events.on({“featureselected”:函数(e){
kemasMaklumat(‘maklumat’,“”)+
e、 feature.attributes.name+
“这是在选择某个功能时显示的文本”;
maklumat.style.color=“黑色”;
layer.redraw();
}
});
map.addLayers([layer]);
在html中,和kemasMaklumat函数声明为
功能kemasMaklumat(id,内容){
var container=document.getElementById(id);
container.innerHTML=内容;
}
在这里写点东西
这个问题的第二部分是更改所有未选定功能的标签,即修改所有非选定功能的属性。为此,我在所有功能中添加了一个for循环,并检查它是否与选定功能具有相同的标签,这是在“featureselected”上的layer.events.on下完成的正如本问题上文第1部分所述
layer.addFeatures(特征);
layer.events.on({“featureselected”:函数(e){
kemasMaklumat(‘maklumat’,“”)+
e、 feature.attributes.name+
“这是在选择某个功能时显示的文本”;
maklumat.style.color=“黑色”;
对于(var i=0,l=layer.features.length;i
layer.addFeatures(features);
layer.events.on({ "featureselected": function(e) {
kemasMaklumat('maklumat', "<FONT FACE='Calibri' color='#f0f0f0' size=5><center>"+
e.feature.attributes.name+
"<p>This is displayed text when a feature has been selected";
maklumat.style.color="black";
layer.redraw();
}
});
map.addLayers([layer]);
<script type="text/javascript">
function kemasMaklumat(id,content) {
var container = document.getElementById(id);
container.innerHTML = content;
}
</script>
<td valign="top"><div id="maklumat" style="border-radius:25px; background-color:#000000;box-shadow: 8px 8px 4px #686868;">
Write Something Here<P>
</div></td>
layer.addFeatures(features);
layer.events.on({ "featureselected": function(e) {
kemasMaklumat('maklumat', "<FONT FACE='Calibri' color='#f0f0f0' size=5><center>"+
e.feature.attributes.name+
"<p>This is displayed text when a feature has been selected";
maklumat.style.color="black";
for (var i = 0, l = layer.features.length; i < l; i++) {
var feature = layer.features[i];
if (feature.attributes.name!=e.feature.attributes.name) {
feature.attributes.name="I was not selected"; }}
layer.redraw();
}
});
map.addLayers([layer]);