如何将 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]]
]
}
回复好像直接WKT to me, isn’t it? OpenLayers have support for it。
我正在对服务器使用 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]]
]
}
回复好像直接WKT to me, isn’t it? OpenLayers have support for it。