英雄联盟世界的地图抓取与分析
0.背景
S11比赛正在如火如荼的举行。作为一个S3赛季的老玩家和地理人,我想从另外个角度带你了解LOL的世界。
1.数据获取
1.1数据初探
英雄联盟推出了其世界地图网页版,访问地址为:https://map.leagueoflegends.com/.
鼠标移动到图标上时,会有该地区的行政图:
放大时,该地区会变得清晰,并且有地形的起伏:
因此这个地图应该有一个高分辨率的地图、高分辨率的地图,类似于栅格金字塔。同时有一个DEM数据对地形进行拉伸渲染。
1.2地图抓取
亘古不变的F12键,查看从页面打开时的网页请求,找到png图片:
1.3英雄联盟地图结构解析
通过后期数据的抓取与思考,我粗略的画了一下LOL展示地图的结构:
英雄联盟的地图浏览起来非常丝滑,但是这个地图的原理很复杂。不仅对DEM进行了在线渲染,而且会根据各种掩膜进行判定,比如说被海洋掩膜覆盖的区域,会生成一个“水波荡漾”的效果。
2.本地地图制作
主要分为三个方面:各个城邦矢量图的制作、高分辨率影像图的合成以及DEM数据的重构。
2.1城邦矢量化
从官方网页结构中,我们可以获得矢量图,每一个城邦拥有一个范围栅格图(.png格式,2048*2048像素),比如说诺克萨斯城邦:
我们将其放到arcgis,根据其边界逐一描绘:
2.2 DEM数据的重构
从官网界面,我们可以看到三维的地形数据,实际上是利用了一个DEM图进行了Blender在线渲染,我们从网页中获得的DEM数据是一个Unit8像素深度的栅格图,DEM值的范围是0-255。
DEM的Value值范围为0-146,我们不知道真实的海拔高度。有没有什么办法大致知道DEM的每一个值代表的真实高度?
考虑到德玛西亚城的河谷平原像素值在20左右,以及LOL最高峰应该超过4000米。我们假设每一个像素值代表高度为28米。因此,LOL世界最高山峰的海拔为4116米。
使用栅格计算器,重新计算LOL世界的DEM:
在本地使用Blender对DEM数据渲染效果如下:
2.3 LOL高分辨地图的重制
LOL官网的地图存在两种分辨率,一种是地图总览的低分辨率,一种是放到到局部的高分辨率。高分辨率的地图需要逐个抓取。
我观察到,高分辨率的地图链接是有规律的,因此写了一个脚本将这些图片都爬取下来:
待数据下载完之后,使用我之前写好的镶嵌脚本,逐个对图片进行镶嵌:
#将影像进行镶嵌
import PIL.Image as Image
import osIMAGES_PATH = r'小切片的路径' # 图片集地址
# IMAGES_FORMAT = ['.jpg', '.JPG'] # 图片格式
IMAGES_FORMAT = ['.png'] # 图片格式
IMAGE_SIZE = 256 # 每张小图片的大小
IMAGE_ROW = 7 # 图片间隔,也就是合并成一张图后,一共有几行
IMAGE_COLUMN = 6 # 图片间隔,也就是合并成一张图后,一共有几列
IMAGE_SAVE_PATH = 'predict.jpg' # 图片转换后的地址#按数字大小进行排序
files = os.listdir(IMAGES_PATH)
files.sort(key=lambda x: int(x.split('.')[0]))# 获取图片集地址下的所有图片名称
image_names = [name for name in files for item in IMAGES_FORMAT ifos.path.splitext(name)[1] == item]# 简单的对于参数的设定和实际图片集的大小进行数量判断
if len(image_names) != IMAGE_ROW * IMAGE_COLUMN:raise ValueError("合成图片的参数和要求的数量不能匹配!")
print(image_names)# 定义图像拼接函数
def image_compose():to_image = Image.new('RGB', (IMAGE_COLUMN * IMAGE_SIZE, IMAGE_ROW * IMAGE_SIZE)) # 创建一个新图# 循环遍历,把每张图片按顺序粘贴到对应位置上for y in range(1, IMAGE_ROW + 1):for x in range(1, IMAGE_COLUMN + 1):from_image = Image.open(IMAGES_PATH + image_names[IMAGE_COLUMN * (y - 1) + x - 1]).resize((IMAGE_SIZE, IMAGE_SIZE), Image.ANTIALIAS)to_image.paste(from_image, ((x - 1) * IMAGE_SIZE, (y - 1) * IMAGE_SIZE))return to_image.save(IMAGE_SAVE_PATH) # 保存新图
低分辨率的图片的大小为:20482048,高分辨率的图片的大小为:71686144。
3.数据分析
3.1各个城邦的土地面积分析
使用gis的面积制表工具,统计每一个城邦的个数。
由于LOL世界是否是一个球形星球,也不知道该地图是否有投影变形。我们暂且用像元个数代表每个城邦的面积。诺克萨斯的面积不仅大,还横跨三个大的区域,实力不容小觑。
虽然诺克萨斯的面积是德玛西亚的四倍,但是德玛西亚永不屈服。
3.2各个联邦的地形分析
将LOL世界的海拔进行重分类:
海拔1960米以上就可以视为山脉,可以看看各个城邦的山脉分布图:
从这个图,我们能猜测出克萨斯和德玛西亚打仗最激烈的地方,所谓狭路相逢勇者胜:
4.写到最后
(1)该推文只做学习使用,请勿作为非法用途,任何非法用途与本人无关。
(2)祝愿 EDG 取得好成绩,LPL 加油!
(3)可以前往“地信遥感数据汇”(https://www.gisrsdata.com/)获取更多数据。
英雄联盟世界的地图抓取与分析相关推荐
- 【C#】WinForm 之 DOTA2英雄搭配助手(网页抓取+在线绿色版+源码开放)
睡不着,无聊......再整理点好玩的出来.先上图 效果 碎碎念 自从13级后打出DOTA2的天梯积分以来简直是逆水行舟不进则退啊,室友已经高呼着被游戏玩了!!结果怒删游戏 其实我也发现这游戏不合适我 ...
- 短视频评论的抓取及分析
短视频评论的抓取及分析 一.设计背景 目前,短视频已经成为大多数人娱乐消遣的主要方式.用户在观看视频内容的同时,也同样关注视频评论,并且很多时候评论带给人们的乐趣远远超过视频本身.但是各短视频平台都没 ...
- 穿越火线数据包的抓取和分析及服务器欺骗的实现
几天功夫,我们敬爱的穿越火线从2.5到2.6再到2.7再到现在的2.8,号称全服反外挂(的确是反了的),WPE会被检测为非法模块. 本人就来说一下自己关于穿越火线数据包的抓取和分析及服务器欺骗的实现的 ...
- NetCloud——一个网易云音乐评论抓取和分析的Python库
在17的四月份,我曾经写了一篇关于网易云音乐爬虫的文章,还写了一篇关于评论数据可视化的文章.在这大半年的时间里,有时会有一些朋友给我发私信询问一些关于代码方面的问题.所以我最近抽空干脆将原来的代码整理 ...
- 嘘,我已经瞒着开发解锁APP日志文件抓取及分析啦!
------·今天距2020年87天·------ 这是ITester小栈第49次推文 大家好,我是coco小锦鲤 经过之前的APP系列 我们知道了APP的测试流程 也列举了APP通用测试用例 还解答 ...
- Thread dump文件抓取和分析(JCA工具)
Thread dump文件抓取和分析 接下来分析CentOS下怎么抓取Thread dump文件,JCA怎么分析Thread dump文件. 1.CentOS下抓取Thread dump文件 Cent ...
- log 的抓取与分析
log 的抓取与分 http://blog.csdn.net/yaoming168/article/details/38777727 log 的抓取与分析 一.Android log框架简介 二.lo ...
- 如何用python抓取文献_浅谈Python爬虫技术的网页数据抓取与分析
浅谈 Python 爬虫技术的网页数据抓取与分析 吴永聪 [期刊名称] <计算机时代> [年 ( 卷 ), 期] 2019(000)008 [摘要] 近年来 , 随着互联网的发展 , 如何 ...
- python新闻评论分析_使用 python 抓取并分析京东商品评论数据
本篇文章是python爬虫系列的第三篇,介绍如何抓取京东商城商品评论信息,并对这些评论信息进行分析和可视化.下面是要抓取的商品信息,一款女士文胸.这个商品共有红色,黑色和肤色三种颜色, 70B到90D ...
最新文章
- 完成CitrixVDI架构了解及部署测试
- CentOS系统环境下安装MongoDB
- 数字图像处理实验(11):PROJECT 05-02,Noise Reduction Using a Median Filter
- QT的QGraphicsView类的使用
- jxl简析[ http://www.emlog.net/fei ]
- 2017蓝桥杯省赛---java---B---8(包子凑数)
- mysql与sim900a_sim900a的应用,基于SIM900A-GPRS模块的远程文件传输实例
- Dede 删除文档同时文章中的图片的方法
- idea多级目录不展开的问题
- iPhone开发经典语录
- vue2.0桌面端框架_vue-element-admin
- nodejs项目安装ant design
- js基础-17-解析url的函数,字符串出现的次数最多,并统计它出现几次
- 【原理+实战+视频+源码】马士兵Java高级互联网架构
- 我打算学计算机学英语,英语人教版八年级上册我打算学习计算机科学.doc
- 开始编写寄几的 CSS 基础库
- 代码随想录第十天 LeetCode 232、225(栈,队列)
- 尝鲜——Windows11 安装教程 (无视TMP2.0)
- 扦插技术图解_爱之蔓平卧扦插法(图解)
- 02 - 汽车功能安全系列之概念阶段开发 - Item Definition HARA