通过位置信息生成图片

大概是这样一个情况:
我们采用定位技术给施工的车辆安装一个定位装置,然后实时采集这个车辆在某一个指定范围内的施工情况,主要是收集来回碾压的遍数。然后这个区域可能 1-N 个车辆同时施工。施工结束以后我想统计出来整个范围内那些区域已经碾压了,碾压的区域碾压了多少变(1-10 变用不同颜色),大概效果图是这样的

img

我们现在采用的方式是:
将整个区域划分成 10*10cm 的小格子,
然后通过扫描上传数据形成的栅格,
然后将栅格转换成行列, 然后判断这个行列在那个小格子里面,
如果在某个小格子里面就设置这个小格子的对象对应的一些属性。
最后遍历这个区域内的所有小格子 然后用 JAVA 绘图的方式绘制整个区域的图片。

目前这种方式处理时,在区域比较大的时候特别缓慢(一个区域可能上 10W 条数据,区域面积在 300M*300M 这个面积),我想了解一下有没有什么其他处理方式。

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7490714
  • 除此之外, 这篇博客: C语言实现八大排序算法详解及其性能之间的中的 我们老师给我们花了100个星星的重要,那就是非常重要,快速排序。名字就很嚣张。。。言归正传,快排采用了分治算法。把大问题,分解成小问题。首先我们先找一个基准值,基准值的寻找法,有很多,这里我先用一个取边上值得方法,找到基准值以后呢拿着这个基准值和所有数组比较,使这个数组中比基准值小的都放左边,比基准值大的都放到右边,然后就把原来数组分成三块,中间基准值,左边都是比它小的,右边都是比它大的。然后这两个数组,继续分,一直分。直到他的终止条件,也就是小数组有序了就停止,那么什么时候有序停止呢?小区间长度为1或者长度为0的时候,就是有序了。所有小数组都有序了,那么就是整个数组有序了。只是原理,那么问题,又来了,怎么放左放右呢?我目前会三种。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 算法思想

  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答:

    由于问题比较抽象,这里我提供几种解决方案供参考。

    1. 利用地图API生成图片 可以通过地图API获取指定范围内的地图截图,结合车辆位置信息,在图片上绘制点或热力图等形式展示车辆分布情况。具体步骤如下:

    1)选择合适的地图API,比如高德地图、百度地图、谷歌地图等,申请相应的API Key。以高德地图为例,在地图截图API中可以选择指定坐标、缩放级别等参数,生成对应的地图截图。

    2)根据车辆位置信息,在地图截图上绘制点或热力图。可以使用Java的Graphics2D类,将截图加载到内存中,根据坐标信息绘制点或热力图。

    3)将绘制好的图片保存到本地或者返回前端展示。

    1. 利用离线地图工具生成图片 由于在线地图API有访问频率限制,可能无法满足高并发的需求,可以考虑使用离线地图工具生成图片。步骤如下:

    1)选择合适的离线地图工具,比如Mapbox、TileMill等,根据官方文档安装配置。

    2)下载地图数据,生成地图瓦片。可以使用开源的Mapbox Studio或者TileMill进行离线地图制作。生成的瓦片可以放到服务器上,方便快速加载。

    3)根据车辆位置信息和瓦片坐标计算出对应的坐标位置,使用Java的Graphics2D类,在瓦片上绘制点或热力图。

    4)将绘制好的图片保存到本地或者返回前端展示。

    1. 利用分布式计算框架进行计算 由于区域较大时处理较慢,可以考虑使用分布式计算框架进行计算,提高处理速度。步骤如下:

    1)选择合适的分布式计算框架,比如Hadoop、Spark等,根据官方文档安装配置。

    2)将区域划分成多个小格子,将车辆位置信息通过网络传输到集群中。

    3)在集群中进行计算,使用Java进行编程,对车辆位置信息进行处理,得到已经碾压的区域和对应遍数的统计结果。

    4)将结果保存到Hadoop或者Spark对应的文件系统中。

    5)根据结果文件生成相应的图片或在前端展示。

    以上是几种解决方案的具体步骤,需要结合实际的场景选择合适的方案,并根据具体需求进行相应的改进和优化。