开发者社区> 问答> 正文

geojson 遇到的诡异问题?报错

我用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导入的。

请各位大虾指点迷津,我已经没方向了

展开
收起
爱吃鱼的程序员 2020-06-06 10:22:10 739 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
                        <p><img height="54" src="https://oscimg.oschina.net/oscnet/d74136cc9dc738631a7c419e82b1c7f1df5.jpg" width="972">这段代码中content-type设置的为application/json,但outputText为json格式字符串,改为text/plain试试</p>
    
    2020-06-06 10:22:30
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载