抱歉打扰你们,但我坚持了他半天的时间。

我想使用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&amp;v=2&amp;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>


我确定我在创建地图时缺少某些参数,但我真的不知道是哪一个。

最佳答案

您会在这一行中忘记“ 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?

希望对您有帮助。祝您满意!

编辑2:

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

关于javascript - 打开图层LineString不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5032699/

10-12 06:38