很抱歉打扰你们,但我被他的问题困扰了半天。
我想使用LineString对象在OpenLayers中绘制多段线,所以我复制了文档中的示例。它运行正常,但我看不到屏幕上的线条
代码如下所示
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title></title>
<script type="text/javascript" src="http://openlayers.org/api/OpenLayers.js"></script>
<script src="http://www.openstreetmap.org/openlayers/OpenStreetMap.js"></script>
<script src='http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAjpkAC9ePGem0lIq5XcMiuhR_wWLPFku8Ix9i2SXYRVK3e45q1BQUd_beF8dtzKET_EteAjPdGDwqpQ'></script>
<script type="text/javascript">
var map;
var lineLayer ;
var points;
var style;
var polygonFeature
function test()
{
lineLayer = new OpenLayers.Layer.Vector("Line Layer");
style = { strokeColor: '#0000ff',
strokeOpacity: 1,
strokeWidth: 10
};
map.addLayer(lineLayer);
points = new Array();
points[0] =new OpenLayers.LonLat(-2.460181,27.333984 ).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());;
points[1] = new OpenLayers.LonLat(-3.864255,-22.5 ).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());;
var linear_ring = new OpenLayers.Geometry.LinearRing(points);
polygonFeature = new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Polygon([linear_ring]), null, style);
lineLayer.addFeatures([polygonFeature]);
alert("1");
}
function initialize()
{
map = new OpenLayers.Map ("map_canvas", {
controls:[
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.LayerSwitcher(),
new OpenLayers.Control.Attribution()],
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
maxResolution: 156543.0399,
numZoomLevels: 19,
units: 'm',
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326")
});
// Define the map layer
// Here we use a predefined layer that will be kept up to date with URL changes
layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
map.addLayer(layerMapnik);
var lonLat = new OpenLayers.LonLat(0, 0).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
map.zoomTo(3);
map.setCenter(lonLat, 19);
test();
}
</script>
</head>
<body onload="initialize()" >
<div id="map_canvas" style="width: 828px; height: 698px"></div>
</body>
</html>我确信我在创建map或其他东西时遗漏了一些参数,但我真的不知道是哪一个。
发布于 2011-02-18 05:38:01
您在这一行中忘记了's‘字符:
lineLayer.addFeatures([lineFeature]);函数'addFeature‘不存在:OpenLayers.Layer.Vector.addFeatures
要查看该功能,请按住键盘上的Shift键并尝试绘制一个框
编辑:好了,现在我知道你是怎么想的了。
您需要为数据库中的每个点创建一个OpenLayers.Point对象。一种解决方案是使用Ajax调用您自己的PHP函数来检索它们。PHP文件包含获取它们的代码。我建议以JSON格式(例如字符串)返回它们。使用JQuery框架:
$.ajax({
url: 'your_php_file.php',
dataType: JSON // for example, you can use 'string' type too
success: function(coordinates){
}
});现在你已经从你的数据库中得到了很多坐标。现在是绘制多边形的时候了。下面的链接会很有用
OpenLayers - how do I draw a Polygon from existing lonLat points?
我希望它能对你有所帮助。codding快乐!
EDIT2
linear_ring是属于OpenLayers.Geometry.LinearRing类的对象。constructor需要一个OpenLayers.Geometry.Points数组,而您为它提供了OpenLayers.LonLat数组。
您需要修改这一点,在创建每个点之后添加以下行(根据您自己的代码修改索引):
points[0] = new OpenLayers.Geometry.Point(points[0].lon,points[0].lat);因此,您的测试函数如下所示:
function test(){
lineLayer = new OpenLayers.Layer.Vector("Line Layer");
style = { strokeColor: '#0000ff',
strokeOpacity: 1,
strokeWidth: 10
};
points = new Array();
points[0] =new OpenLayers.LonLat(-2.460181,27.333984 ).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());;
points[0] = new OpenLayers.Geometry.Point(points[0].lon,points[0].lat);
points[1] = new OpenLayers.LonLat(-3.864255,-22.5 ).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());;
points[1] = new OpenLayers.Geometry.Point(points[1].lon,points[1].lat);
var linear_ring = new OpenLayers.Geometry.LinearRing(points);
polygonFeature = new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Polygon([linear_ring]), null, style);
lineLayer.addFeatures([polygonFeature]);
map.addLayer(lineLayer);
}结果是:Image result
发布于 2012-01-06 07:10:55
是的,OpenLayers可以通过编程来绘制线条。它的速度甚至足以在一秒内多次绘制新的线条,以便您可以显示实时数据或动画。不管怎样,你的代码中有很多东西在运行。可能是您的样式弄乱了,正在绘制不可见的线,或者您的数据点转换不正确,这条线不在地图上。无论如何,我建议使用这个简单的测试。
创建一张地图,并添加一个矢量层。在名为layerVec的全局变量中保留向量层。然后,运行此代码。
var CreateLine = function()
{
var pList = new Array();
for(var i=0; i<200; i++)
{
var p = new OpenLayers.Geometry.Point();
p.x = i;
p.y = i;
pList.push(p);
}
var g = new OpenLayers.Geometry.LineString(pList);
var f = new OpenLayers.Feature.Vector(g,null,null);
layerVec.addFeatures(f);
};不要担心坐标,这应该是地图中间的一条线。它可能很小,也可能很大,这取决于你的投影,所以放大。
https://stackoverflow.com/questions/5032699
复制相似问题