1

ご迷惑をおかけして申し訳ありませんが、私は彼の問題に半日立ち往生しています。

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>

マップなどの作成でいくつかのパラメーターが欠落していることは確かですが、実際にはどれを理解することはできません。

4

2 に答える 2

3

この行の「s」文字を忘れました:

lineLayer.addFeatures([lineFeature]);

関数'addFeature'は存在しません:OpenLayers.Layer.Vector.addFeatures

この機能を表示するには、キーボードのShiftキーを押しながら、ボックスを描画してみてください

編集:わかりました、今私はあなたがどのように望んでいたかを知っています。

DB内のポイントごとに1つのOpenLayers.Pointオブジェクトを作成する必要があります。1つの解決策は、Ajaxを使用して独自のPHP関数を呼び出し、それらを取得することです。PHPファイルには、それらを取得するためのコードが含まれています。JSON形式(おそらく文字列)で返すことをお勧めします。JQueryフレームワークの使用:

$.ajax({
   url: 'your_php_file.php',
   dataType: JSON // for example, you can use 'string' type too
   success: function(coordinates){

   }
});

これで、DBから多くの座標が得られました。ポリゴンを描く時が来ました。次のリンクが役立つ場合があります

OpenLayers-既存のlonLatポイントからポリゴンを描画するにはどうすればよいですか?

お役に立てば幸いです。ハッピーコーディング!

EDIT2

linear_ringは、OpenLayers.Geometry.LinearRingクラスに属するオブジェクトです。コンストラクターには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);

 }

結果は次のとおりです。画像の結果

于 2011-02-17T21:38:00.793 に答える
0

はい、OpenLayersはプログラムで線を引くことができます。ライブデータやアニメーションを表示できるように、1秒間に複数回新しい線を描くのに十分な速さです。とにかく、あなたはあなたのコードでたくさんのことが起こっています。おそらく、スタイルが台無しになって見えない線を描画しているか、データポイントが正しく変換されておらず、線がマップから外れている可能性があります。とにかく、私はこの簡単なテストを提案します。

マップを作成し、ベクターレイヤーを追加します。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);
};

まだ座標について心配する必要はありません。これはマップの中央にある線である必要があります。投影によっては小さい場合もあれば大きい場合もあるので、ズームインします。

于 2012-01-05T23:10:55.067 に答える