我正在向服务器使用jsonp请求,该服务器返回包含多行向量几何的字符串。这看起来像这样(我已经截断了一点):
MULTILINESTRING((-0.61122 44.88987,-0.61108 44.88961,-0.6109 44.88926))
在打开图层3中,当我通常创建矢量要素时,我使用以下代码提供包含几何图形的字符串:
var vectorFeature = new ol.Feature({
geometry: new ol.geom.MultiLineString([[-0.11151,21.24112],[-0.11151,81.24112]])
});
注意字符串格式的不同。在Open Layers 3中是否有一种快速重新格式化jsonp请求响应的方法,允许我根据这些数据快速创建一个新的矢量要素,或者我将不得不解析字符串并自己添加[]格式?
修改
如果我直接使用JSONP请求返回的对象作为MultiLineString中的参数(如下所示):
var vectorFeature = new ol.Feature({
geometry: new ol.geom.MultiLineString(data.geometry)
});
然后如果我尝试使用以下方法检索对象的坐标:
console.log(vectorFeature.getGeometry().getCoordinates());
我得到Array [Array [1],Array [1],Array [1] ...]
哪个不正确,而且我指的是所谓的geoJSON对象的格式不正确?
修改2
从JSON请求返回的对象结果是WKT而不是geoJSON,这解释了这些困难。
答案 0 :(得分:1)
在我看来,在这种情况下使用正则表达式是一个很好的解决方案:
var string = 'MULTILINESTRING((-0.61122 44.88987,-0.61108 44.88961,-0.6109 44.88926))',
matches = string.match(/(\-?\d+(\.\d+)?)\s(\-?\d+(\.\d+)?)+/g),
results = [];
matches.forEach(function (match) {
results.push(match.split(' '));
});
将results
作为嵌套数组对象返回:
[
["-0.61122","44.88987"],
["-0.61108","44.88961"],
["-0.6109","44.88926"]
]
关于Plunker的工作示例:http://plnkr.co/edit/mEjuaoPqWM0Zy6Y0RHER?p=preview
旁注,从服务器返回的字符串不是GeoJSON:
MULTILINESTRING((-0.61122 44.88987,-0.61108 44.88961,-0.6109 44.88926))
正确的GeoJSON MultiLineString几何图形如下所示:
{
"type": "MultiLineString",
"coordinates": [
[[100.0, 0.0], [101.0, 1.0]],
[[102.0, 2.0], [103.0, 3.0]]
]
}
答案 1 :(得分:0)
对我来说回复看起来像WKT,不是吗? OpenLayers直接support for it。