2010-04-29 99 views
30

我已经看到了如何绘制线的示例here,但示例仅显示如何使用鼠标单击来绘制线条。使用JavaScript在OpenLayers中使用一条线绘制路径

我想要做的是给出一个经度和纬度坐标列表使用JavaScript手动绘制线条。

我无法在上面的链接中提供的源代码的原因是,他们只在该功能上调用activate,然后让用户指向并单击地图。

有没有人以编程方式在OpenLayers地图上绘制路径?

我想要做的就是这个:http://openspace.ordnancesurvey.co.uk/openspace/example4.html,但没有使用OpenSpace。

回答

51

您将需要利用LineString对象

这里有一个例子:

var lineLayer = new OpenLayers.Layer.Vector("Line Layer"); 

map.addLayer(lineLayer);      
map.addControl(new OpenLayers.Control.DrawFeature(lineLayer, OpenLayers.Handler.Path));          
var points = new Array(
    new OpenLayers.Geometry.Point(lon1, lat1), 
    new OpenLayers.Geometry.Point(lon2, lat2) 
); 

var line = new OpenLayers.Geometry.LineString(points); 

var style = { 
    strokeColor: '#0000ff', 
    strokeOpacity: 0.5, 
    strokeWidth: 5 
}; 

var lineFeature = new OpenLayers.Feature.Vector(line, null, style); 
lineLayer.addFeatures([lineFeature]); 

假设map是你的地图对象和lonlat是浮点值。

+4

我不得不使用'new OpenLayers.Geometry.Point(lon,lat).transform(new OpenLayers.Projection(“EPSG:4326”),map.getProjectionObject());'而不是仅仅使用'new OpenLayers.Geometry.Point (lon1,lat1)'因为我有wsg84坐标 – yankee 2012-06-16 21:07:10

+2

工作示例(通过Mannaz +小修改)http://jsfiddle.net/4q7vx/25/ – aatdark 2013-07-27 01:41:57

+1

良好的示例。 DrawFeature实际上不需要,“map.addControl(.... DrawFeature ...)”行;“可以省略。 – dube 2013-08-15 12:53:15

0

我从来没有做过自己之前,但我知道OpenSteetMap做到了。例如:

http://www.openstreetmap.org/?way=23649627

不知道这将是多么困难,通过他们的代码工作。

+0

是的,我确实看到了OpenStreetMap的例子,但我试图只用OpenLayers做到这一点 – 2010-04-29 09:04:37

+0

好的。抱歉,不能帮助你。 – RoToRa 2010-04-29 09:10:24

1

this page is a classic example动画通过JavaScript使用openlayers。

它使用过滤器策略来定义什么时候显示什么。

完整的JavaScript可用。

+1

经典! :) 404 – 2015-04-20 12:50:55

+0

@HenryAloni感谢您的提升。更改了URL以反映openlayers.org新的Web结构(从子目录到子域)中的更改。 ;) – 2015-04-30 17:14:02