如何将 geoJSON 格式从 jsonp 请求转换为 Open Layers 3 友好格式

How to convert geoJSON format from jsonp request to Open Layers 3 friendly format

我正在对服务器使用 jsonp 请求,该服务器返回包含多线向量几何图形的字符串。这看起来像这样(我把它截短了一点):

MULTILINESTRING((-0.61122 44.88987,-0.61108 44.88961,-0.6109 44.88926))

在 Open Layers 3 中,当我通常创建矢量特征时,我会使用以下代码提供包含几何图形的字符串:

var vectorFeature = new ol.Feature({
    geometry: new ol.geom.MultiLineString([[-0.11151,21.24112],[-0.11151,81.24112]])
});

注意字符串格式的不同。 Open Layer 3 中是否有一种方法可以快速重新格式化来自 jsonp 请求的响应,以允许我基于此数据快速创建一个新的矢量特征,或者我是否必须自己解析字符串并添加 [] 格式?

编辑:

如果我直接使用JSONP请求返回的对象作为MultiLineString的参数(如下):

var vectorFeature = new ol.Feature({
geometry: new ol.geom.MultiLineString(data.geometry)
});

然后如果我尝试使用以下方法检索对象的坐标:

console.log(vectorFeature.getGeometry().getCoordinates());

我得到数组[数组[1]、数组[1]、数组[1]...]

哪个是不正确的,对我来说是指向所谓的 geoJSON 对象的格式不正确?

编辑 2

从 JSON 请求返回的对象结果是 WKT 而不是 geoJSON 这解释了困难。

在我看来,在这种情况下使用正则表达式是一个很好的解决方案:

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(' '));
});

Returns 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]]
    ]
}

参考规范:http://geojson.org/geojson-spec.html#id6

回复好像直接WKT to me, isn’t it? OpenLayers have support for it