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

时间:2015-03-03 11:18:59

标签: jquery jsonp geojson openlayers-3

我正在向服务器使用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,这解释了这些困难。

2 个答案:

答案 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]]
    ]
}

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

答案 1 :(得分:0)

对我来说回复看起来像WKT,不是吗? OpenLayers直接support for it