17

コンテキスト: 私は OpenLayers を始めて数時間の初心者です。お手柔らかにお願いします。

基本的に、いくつかの描画オブジェクトを含むマップがあります。物事を正しく理解していれば、いくつかの OpenLayer.Feature.Vector (レイヤー?) があり、その上にいくつかの OpenLayer.Geometry "もの" (LinearRing など) があります。

現時点では、.toString() を使用して、ジオメトリの適切な表現を取得できるようです。はい、私はそれを間違っていると思います-お気軽に正しい方向に向けてください。

これにより、次のような非常に人間が読み取り可能で、データベースに保存可能な文字列が生成されます。

  • ポイント(-104.74560546875 44.2841796875)

  • ポリゴン ((-96.52783203125 44.6796875、-96.52783203125 45.734375、-92.22119140625 45.734375、-92.22119140625 44.6796875、-96.52783403125) 6) 6)

  • Linestring(-105.71240234375 44.6796875、-106.06396484375 42.658203125、-103.55908203125 42.7021484375、-103.475140625 45.55757575755757557575575757575755757575757575757575757575757575757575757575757575757575755757575757575757575757575757575757575年にわたる

これらを元のオブジェクト形式に戻す逆の方法はありますか?

JSON を使用したいのですが、GeoJSON に OpenLayer.Feature.Vector オブジェクトを受け入れさせることができないようです (これは、内部を覗き込んだときに CLASS_NAME プロパティが示すものです)。

どうもありがとう。

4

2 に答える 2

29

Openlayers.GeometryオブジェクトのtoStringメソッドは、それらをWKT ( Well-Known Text) に適切に変換します。データベースの上に GIS レイヤーを使用する場合 (PostGres 用の PostGIS、SQL Server 用の SQL Spatial、SQLite 用の Spatialite など)、それらは WKT を処理できる機能を提供する必要があります。

ただし、その WKT をOpenlayers.Geometry(ブラウザで) 新しいオブジェクトに変換する場合は、次のfromWKT関数を使用できます。

var point = OpenLayers.Geometry.fromWKT('POINT(-104.74560546875 44.2841796875)');
alert(point.toString()); // POINT(-104.74560546875 44.2841796875)

ここで、変数には、元のオブジェクトと同じプロパティを持つpoint新しいオブジェクトが含まれます。Openlayers.GeometrytoString()

関数に配列を渡すとfromWKT、生成されたすべてのジオメトリを含む GeometryCollection が返されます。

var geometryTexts = [
      'POINT(-104.74560546875 44.2841796875)'
    , 'POLYGON((-96.52783203125 44.6796875,-96.52783203125 45.734375,-92.22119140625 45.734375,-92.22119140625 44.6796875,-96.52783203125 44.6796875))'
    , 'LINESTRING(-105.71240234375 44.6796875,-106.06396484375 42.658203125,-103.55908203125 42.7021484375,-103.47119140625 45.55859375,-104.65771484375 45.20703125)'
    ],
    collection = OpenLayers.Geometry.fromWKT(geometryTexts);

この後collection.toString()、次のようになります。

GEOMETRYCOLLECTION(POINT(-104.74560546875 44.2841796875),POLYGON((-96.52783203125 44.6796875,-96.52783203125 45.734375,-92.22119140625 45.734375,-92.22119140625 44.6796875,-96.52783203125 44.6796875)),LINESTRING(-105.71240234375 44.6796875,-106.06396484375 42.658203125,-103.55908203125 42.7021484375,-103.47119140625 45.55859375、-104.65771484375 45.20703125))

于 2011-03-04T11:43:56.203 に答える
17

私の他の答えでは、あなたが言及したので、私はWKTを使いました。GeoJSON を好むようです。

ベクター レイヤーまたはOpenlayers.Geometryオブジェクトを GeoJSON 文字列に変換するには、 OpenLayers.Format.GeoJSON.write関数を使用する必要があります。

var geoJSON = new OpenLayers.Format.GeoJSON(),
    geoJSONText = geoJSON.write(geometryObject);

(ドキュメントによると) OpenLayers.Feature.Vector と OpenLayers.Geometry または機能の配列を受け入れるため、オブジェクトをこの関数に渡すことができるはずであることに注意してください。

逆に、GeoJSON 文字列を取得した場合は、 OpenLayers.Format.GeoJSON.read関数を使用してそれをオブジェクトに戻すことができます。

var geometry = geoJSON.read(geoJSONText, 'Geometry');

2 番目のパラメーターを使用すると、返されるオブジェクトのタイプを指定できます。詳細については、リンクされているドキュメントを参照してください。

また、より広範な例については、このデモをご覧ください。(ページのソースを表示して、彼らがどのようにそれを行っているかを確認してください)。

于 2011-03-04T12:04:00.670 に答える