我需要创建一个这样的字符串,以使地图服务器请求工作:
filterobj = "POLYGON((507343.9 182730.8, 507560.2 182725.19999999998, 507568.60000000003 182541.1, 507307.5 182563.5, 507343.9 182730.8))";
如果数字是多边形的地图坐标x
y
,问题在于Javascript和OpenLayer我所拥有的是一个数字数组,如何只删除ODD逗号(首先,第三,第五......)?
目前我已经用这种方式创建了字符串:
filterobj = "POLYGON((" +
Dsource.getFeatures()[0].getGeometry().getCoordinates() + " ))";
结果是:
POLYGON((507343.9, 182730.8,507560.2, 182725.19999999998, 507568.60000000003, 182541.1, 507307.5, 182563.5,507343.9, 182730.8));
这几乎是我需要的,但是,我需要从Dsource.getFeatures()[0].getGeometry().getCoordinates()
数组中删除ODD逗号以使请求有效,我该怎么做?
答案 0 :(得分:2)
您需要的格式是WKT,而OpenLayers附带的类允许您轻松地将其几何体解析为WKT,如下所示:
var wktFormatter = new ol.format.WKT();
var formatted = wktFormatter.writeFeature(Dsource.getFeatures()[0]);
console.log(formatted); // POLYGON((1189894.0370893013 -2887048.988883849,3851097.783993299...
答案 1 :(得分:0)
这个怎么样:
const str = Dsource.getFeatures()[0].getGeometry().getCoordinates()
// str = "1,2,3,4,5,6"
str.split(',').map((v, i) => {
return (i % 2) ? v : v + ','
}).join(' ')
// "1, 2 3, 4 5, 6"
答案 2 :(得分:0)
有两种方法可去,都涉及首先摆脱空白。第一个匹配坐标对,删除逗号,然后将它们粘贴在一起。
第二个分成单个数字,然后用reduce格式化它们。两者都应该是ECMA-262 ed5(2011)兼容,但我没有足够的浏览器来测试它们。
var s = '507343.9, 182730.8,507560.2, 182725.19999999998, 507568.60000000003, 182541.1, 507307.5, 182563.5,507343.9, 182730.8';
var re = /\d+\.?\d*,\d+\.?\d*/g;
// Solution 1
var x = s.replace(/\s/g,'').match(re).map(function(x){return x.replace(',',' ')}).join();
console.log(x);
// Solution 2
var t = s.replace(/\s/g,'').split(',').reduce(function (acc, v, i) {
i%2? (acc[acc.length - 1] += ' ' + v) : acc.push(v);
return acc;
}, []).join(',');
console.log(t);

答案 3 :(得分:0)
查看代码段:
帮助方法:setCharAt, 拿所有逗号, 用i%2 == 0
取所有可能的逗号
// I need to start from somewhere
function setCharAt(str,index,chr) {
if(index > str.length-1) return str;
return str.substr(0,index) + chr + str.substr(index+1);
}
var POLYGON = [507343.9, 182730.8,507560.2, 182725.19999999998, 507568.60000000003, 182541.1, 507307.5, 182563.5,507343.9, 182730.8];
var REZ = "";
REZ = POLYGON.toString();
var all_comma = [];
for(var i=0; i<REZ.length;i++) {
if (REZ[i] === ",") all_comma.push(i);
}
for(var i=0; i<all_comma.length;i++) {
if (i % 2 == 0 ) {
REZ = setCharAt(REZ,all_comma[i],' ');
}
}
console.log(REZ);
// let return nee element intro POLYGON
// reset
POLYGON = REZ.split(',');
console.log(POLYGON);
答案 4 :(得分:0)
一种方法是使用Array.reduce()
:
var input = '1.0, 2.0, 3.0, 4.0, 5.0, 6.0';
var output = input
.split(',')
.reduce((arr, num, idx) => {
arr.push(idx % 2 ? arr.pop() + ' ' + num : num);
return arr;
}, [])
.join(',');
// output = '1.0 2.0, 3.0 4.0, 5.0 6.0'