将GeoJson面域转换成PPT可编辑的多段线

事件背景

前段时间小明(化名)找到我,说他有一个面域文件是.json后缀名的,想导入到PPT里面进行编辑颜色、调整透明度等操作,问我有没有什么方法。我当然是没有办法了…,我还是第一次听到这种需求,但是——这么有趣的事情,好奇心驱使我必然要去试一试啊~~😁

我大概了解了他的需求:原来是他要做汇报PPT,涉及到一些地理区域的分析图,从网上找到的分析数据下载下来是.json格式的,无法导入到PPT中,而且他还需要叠加不同区域,所以还要能自定义面域的颜色、透明度等。

解决过程

  • GeoJson介绍

    这个网上都搜得到,具体介绍的肯定比我详细,百度百科可点击这里,官网首页可点击这里

  • 第一次尝试

    因为PPT支持常见的格式插入,因此首先想到的是将 json 文件转换成常见的文本格式。

    首先将json文件导入到QGIS中,然后利用QGIS导出成中间格式。这里QGIS可导出的文件格式有:图片、PDF、DXF。

    QGIS是一款用户界面友好的、轻量级的、跨平台的、开源的GIS工具。官网点击这里,可下载最新版本。

    你问我为什么要用QIGS转换文件?——没有为什么,因为当时小明正在用它。。。

    导入到QGIS的界面

    image-20210424000835684

​ 然后在QGIS的【工程】>【导入/导出】中导出为DXF格式,之后利用CAD转存为.dwg,这下可以在PPT中导入dwg文件了。——但是,导进去之后是图片格式… 无法满足可编辑的需求

  • 再次尝试——成功了!

    由于QGIS可导出的文件中只有DXF是可编辑性最强的,所以我还是把目标放在了从CAD到PPT上面。于是我再次找到了万能的度娘,得到了这样的结果,然后我又看到了这个不起眼的问答,看到了下面这个解答:

    image-20210424003058269

    原来是图元文件!

    豁然——想试一试~

    所以我在CAD中把面域的填充删除,只留下了边线,然后导出wmf文件,直接拖到PPT中,再解组!解组!解组,删掉多余的框框,只留下边线。效果如下,可进行填充和更改颜色:

    image-20210424003826943

总结

技术路线其实就是这样的:

QGIS转换
CAD转换
导入
解组
.json
.DXF
.wmf
PPT
结束

不知道常见的解决方案是什么样的,这仅仅是我自己胡乱尝试的一次总结,仅以记录。

如有相同或者类似的需求,或者有更好更专业的解决方案,欢迎交流!

对了,我感觉开源的QGIS应该有点意思,后面可以研究研究,看看有没有什么好玩的操作,hei~ hei!~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将GeoJSON转换为图片并在OpenLayers中加载,可以按照以下步骤进行操作: 1. 在Java中读取GeoJSON文件并将其转换为FeatureCollection对象。可以使用Jackson库来读取和解析GeoJSON文件。 2. 使用Java绘图库(例如Java2D)创建一个图像对象并将FeatureCollection绘制到图像上。您可以使用Feature对象的几何数据来绘制不同的形状。 3. 将图像保存为文件(例如PNG或JPEG格式)。 4. 在OpenLayers中创建一个ImageLayer,并将图像文件的URL设置为图层的源。 以下是Java代码的示例: ``` // 读取GeoJSON文件 ObjectMapper objectMapper = new ObjectMapper(); File file = new File("path/to/geojson/file.json"); FeatureCollection featureCollection = objectMapper.readValue(file, FeatureCollection.class); // 创建图像对象 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = image.createGraphics(); // 绘制FeatureCollection for (Feature feature : featureCollection) { Geometry geometry = feature.getGeometry(); // 根据几何类型绘制不同的形状 if (geometry instanceof Point) { Point point = (Point) geometry; g2d.drawOval((int) point.getX(), (int) point.getY(), 10, 10); } else if (geometry instanceof LineString) { LineString lineString = (LineString) geometry; int[] xPoints = new int[lineString.getCoordinates().size()]; int[] yPoints = new int[lineString.getCoordinates().size()]; for (int i = 0; i < lineString.getCoordinates().size(); i++) { xPoints[i] = (int) lineString.getCoordinates().get(i).getX(); yPoints[i] = (int) lineString.getCoordinates().get(i).getY(); } g2d.drawPolyline(xPoints, yPoints, lineString.getCoordinates().size()); } else if (geometry instanceof Polygon) { Polygon polygon = (Polygon) geometry; int[] xPoints = new int[polygon.getExteriorRing().getCoordinates().size()]; int[] yPoints = new int[polygon.getExteriorRing().getCoordinates().size()]; for (int i = 0; i < polygon.getExteriorRing().getCoordinates().size(); i++) { xPoints[i] = (int) polygon.getExteriorRing().getCoordinates().get(i).getX(); yPoints[i] = (int) polygon.getExteriorRing().getCoordinates().get(i).getY(); } g2d.drawPolygon(xPoints, yPoints, polygon.getExteriorRing().getCoordinates().size()); } } // 保存图像到文件 File output = new File("path/to/image/file.png"); ImageIO.write(image, "png", output); // 在OpenLayers中创建ImageLayer ImageLayer imageLayer = new ImageLayer(); imageLayer.setSource(new ImageStatic("path/to/image/file.png", null, extent, pixelRatio)); map.addLayer(imageLayer); ``` 请注意,此示例中的代码仅用于演示目的,并且可能需要进行修改以适应您的具体情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值