我用nodejs-v8.15.0和tilestrata-2.1.2搭建了一个地图服务,现在在调试geojson的输出,遇到一个诡异的问题。
我的后端代码如下:
```
query=`SELECT ST_ASGEOJSON(ST_INTERSECTION( ST_TRANSFORM(ST_SETSRID(way, 900913),4326) , ST_SETSRID(ST_MAKEENVELOPE(121.5966796875,31.12819929911195,121.61865234375,31.109388560814956), 4326) ) ) AS geometry, tags AS properties FROM planet_osm_roads WHERE ST_INTERSECTS( ST_TRANSFORM(ST_SETSRID(way, 900913),4326), ST_SETSRID(ST_MAKEENVELOPE(121.5966796875,31.12819929911195,121.61865234375,31.109388560814956), 4326) ) AND highway <> ''`;
pgPool.query(query, function(err, result) {
if (err) {
console.log(query, err.message, err.stack)
var err = new Error('An error occurred');
err.statusCode = 500;
return callback(err);
}
var outputText = '{"type":"FeatureCollection","features":[' +
result.rows.map(function(row) {
if (row.geometry) {
var featureString = '{"type":"Feature","geometry":' + row.geometry;
if (row.properties != ''){
var rowpro = row.properties;
rowpro = rowpro.replace(/=>/g,':');
featureString = featureString + ',"properties":' + '{'+ rowpro + '}}';
}
else{
featureString = featureString + ',"properties":""}';
}
delete row;
return featureString;
}
}).join(',') +']}';
//在此处的outputText得到的数据是完整的,总共4372个字符,也是可以正常解析的
callback(null, outputText, {'Content-Type': 'application/json'});
});
```
然后在浏览器中输入 http://192.168.56.180:8767/geojson/14/13726/6700/road.json
你会发现head中的Content-Length是4372,但RAW DATA中只显示了4324个字符,后面的消失了,导致报错:SyntaxError: JSON.parse: unterminated string at line 1 column 4325 of the JSON data
并不是所有的语句都会被截断,但有些就会这样,如果我把row.properties这部分代码去除则不会出错,但是加了row.properties这部分代码后生成的outputText是正确的,一到浏览器那就可能出错,我找不出规律
附:数据来源是openstreetmap下载的shanghai的pbf,此问题在我这是可以复现的,浏览器是chrome-71.0.3578.80(64 位)和firefox-63.0.3 (64 位),数据是用osm2pgsql导入的。
请各位大虾指点迷津,我已经没方向了
<p><img height="54" src="https://oscimg.oschina.net/oscnet/d74136cc9dc738631a7c419e82b1c7f1df5.jpg" width="972">这段代码中content-type设置的为application/json,但outputText为json格式字符串,改为text/plain试试</p>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。