大概是这样一个情况:
我们采用定位技术给施工的车辆安装一个定位装置,然后实时采集这个车辆在某一个指定范围内的施工情况,主要是收集来回碾压的遍数。然后这个区域可能 1-N 个车辆同时施工。施工结束以后我想统计出来整个范围内那些区域已经碾压了,碾压的区域碾压了多少变(1-10 变用不同颜色),大概效果图是这样的
我们现在采用的方式是:
将整个区域划分成 10*10cm 的小格子,
然后通过扫描上传数据形成的栅格,
然后将栅格转换成行列, 然后判断这个行列在那个小格子里面,
如果在某个小格子里面就设置这个小格子的对象对应的一些属性。
最后遍历这个区域内的所有小格子 然后用 JAVA 绘图的方式绘制整个区域的图片。
目前这种方式处理时,在区域比较大的时候特别缓慢(一个区域可能上 10W 条数据,区域面积在 300M*300M 这个面积),我想了解一下有没有什么其他处理方式。
问题解答:
由于问题比较抽象,这里我提供几种解决方案供参考。
1)选择合适的地图API,比如高德地图、百度地图、谷歌地图等,申请相应的API Key。以高德地图为例,在地图截图API中可以选择指定坐标、缩放级别等参数,生成对应的地图截图。
2)根据车辆位置信息,在地图截图上绘制点或热力图。可以使用Java的Graphics2D类,将截图加载到内存中,根据坐标信息绘制点或热力图。
3)将绘制好的图片保存到本地或者返回前端展示。
1)选择合适的离线地图工具,比如Mapbox、TileMill等,根据官方文档安装配置。
2)下载地图数据,生成地图瓦片。可以使用开源的Mapbox Studio或者TileMill进行离线地图制作。生成的瓦片可以放到服务器上,方便快速加载。
3)根据车辆位置信息和瓦片坐标计算出对应的坐标位置,使用Java的Graphics2D类,在瓦片上绘制点或热力图。
4)将绘制好的图片保存到本地或者返回前端展示。
1)选择合适的分布式计算框架,比如Hadoop、Spark等,根据官方文档安装配置。
2)将区域划分成多个小格子,将车辆位置信息通过网络传输到集群中。
3)在集群中进行计算,使用Java进行编程,对车辆位置信息进行处理,得到已经碾压的区域和对应遍数的统计结果。
4)将结果保存到Hadoop或者Spark对应的文件系统中。
5)根据结果文件生成相应的图片或在前端展示。
以上是几种解决方案的具体步骤,需要结合实际的场景选择合适的方案,并根据具体需求进行相应的改进和优化。