上下文:我是OpenLayers刚好几个小时的新手,请保持温柔。

从根本上讲,我有一张地图,上面有一些绘制的对象。如果我对事情的理解正确,那么我上面有许多OpenLayer.Feature.Vector(图层?),上面有许多OpenLayer.Geometry“事物”(例如LinearRing)。

目前,我似乎可以使用.toString()获得几何的漂亮表示。是的,我怀疑我做错了-请随时为我指明正确的方向。

这样就产生了非常易于阅读且可存储的字符串,例如:


要点(-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)


是否有相反的方法可以将它们从它们那里带回到对象格式?

我很想使用JSON,但似乎无法让GeoJSON接受我的OpenLayer.Feature.Vector对象(这是我在内部窥视时CLASS_NAME属性所表示的意思)。

非常感谢。

最佳答案

Openlayers.Geometry对象的toString方法可以将它们很好地转换为WKT(知名文本)。如果您在数据库之上使用GIS层(如PostGIS的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.Geometry对象,该对象的属性与使用toString()的对象相同。

如果将数组传递给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.6796875375)1034.5127.679.257.257.257.257.257.257.257.257.257.125.257.257.257.125.257.257.257.125.257.257.125.257.257.125.257.257.125.257.125.257.125.147.257.125.257.125.147.257.257.125.125.179.257.125.147.257.257.125.125.179.257.257 45.55859375,-104.65771484375 45.20703125))

08-25 23:06