Wal*_*ner 17 persistence json geospatial openlayers geojson
背景:我是OpenLayers的一个只有几个小时的新手,请保持温柔.
从根本上说,我有一个地图上有一些绘制的对象.如果我理解正确,我有一些OpenLayer.Feature.Vector(layers?),上面有许多OpenLayer.Geometry"thing"(如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属性在我进入内部时所说的).
非常感谢.
Mar*_*ijn 29
该Openlayers.Geometry对象的toString方法,很好地将它们转换为WKT(熟知文本).如果你对你的数据库上使用地理信息系统层(如PostGIS的Postgres的,SQL空间为SQL Server,Spatialite SQLite的,等等),他们应该提供的功能,使您能够处理高铁总站.
但是如果要将WKT转换为新Openlayers.Geometry对象(在浏览器中),可以使用以下fromWKT函数:
var point = OpenLayers.Geometry.fromWKT('POINT(-104.74560546875 44.2841796875)');
alert(point.toString()); // POINT(-104.74560546875 44.2841796875)
Run Code Online (Sandbox Code Playgroud)
这里,变量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);
Run Code Online (Sandbox Code Playgroud)
在此之后,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))
Mar*_*ijn 17
在我的另一个答案中,我和WKT一起去了,因为你提到了它.我现在看到你似乎更喜欢GeoJSON.
要将矢量图层或Openlayers.Geometry对象转换为GeoJSON字符串,您应该使用OpenLayers.Format.GeoJSON.write函数:
var geoJSON = new OpenLayers.Format.GeoJSON(),
geoJSONText = geoJSON.write(geometryObject);
Run Code Online (Sandbox Code Playgroud)
请注意,您应该能够将对象传递给此函数,因为(根据文档)它接受OpenLayers.Feature.Vector以及OpenLayers.Geometry或一系列功能.
相反,当您有一个GeoJSON字符串时,可以使用OpenLayers.Format.GeoJSON.read函数将其转换回对象:
var geometry = geoJSON.read(geoJSONText, 'Geometry');
Run Code Online (Sandbox Code Playgroud)
第二个参数用于指示您要返回的对象类型.阅读链接的文档以获取更多信息.
另外,请查看此演示以获取更广泛的示例.(查看页面的来源以了解他们是如何做到的).
| 归档时间: |
|
| 查看次数: |
18016 次 |
| 最近记录: |