上下文:我是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))