目录
一、引言
说到足球,大家想到的往往是群星璀璨的巴西、阿根廷、德国、意大利、西班牙等荣誉等身的著名强队。可是,如果说,世界上最差的国家队是哪支?FIFA国际足联的积分排名给出的答案是——圣马力诺。自2023年11月以来,圣马力诺在该排行榜一直位列210支代表队的倒数第一。这与他们的体量相关——圣马力诺的体量在国际足联成员中排名倒数第二,仅次于欧洲大陆西南角、英国的海外领地直布罗陀(面积6.54km²)。作为一个面积仅有61km²的微型国家,圣马力诺的体量决定了该国在足球领域的孱弱地位。
但是,与四次世界冠军、他们的邻国意大利一样,圣马力诺人仍旧把足球视为该国的第一运动。尽管该国的球员几乎全部是业余选手,只能在各行各业的工作之余进行足球训练,但这并不影响他们对这项运动的热爱。“麻雀虽小,五脏俱全”,与世界上大多数国家一样,该国足球协会组建了自己的足球联赛和青训系统。1985年,该国建立了圣马力诺锦标赛(Campionato Sammarinese di Calcio),来自9个市镇的15支代表队为该国最高的足球锦标展开厮杀。由于国土面积有限,该国联赛所有的球队几乎都没有自己的主场,每场圣马力诺锦标赛的比赛场地将会随机分配在国内的5个足球场内。
在本文中,我们将通过Python的GeoPandas和Matplotlib库,加载圣马力诺足球俱乐部的地理坐标,绘制它们的分布地图,并将俱乐部队徽叠加到地图上。
二、圣马力诺的地理行政概况
圣马力诺共和国(意大利语:Repubblica di San Marino),通称圣马力诺(意大利语:San Marino),位于亚平宁半岛的亚平宁山脉东北侧,处于被意大利包围的国中国状态。圣马力诺国土面积61.2km²,人口33,344人,首都是,最大的城镇是位于塞拉瓦莱的多加纳。
圣马力诺分为9个市镇(在本地称为“堡”,castello),分别为:阿夸维瓦、圣马力诺市、博尔戈马焦雷、基耶萨诺瓦、菲奥伦蒂诺、蒙特贾尔迪诺、塞拉瓦莱、多马尼亚诺、法埃塔诺。
三、数据来源与技术介绍
1. 数据来源
(1)俱乐部位置:所有足球俱乐部的地理位置数据来自圣马力诺足球协会官网(fsgc.sm)。这些地点由官网提供的俱乐部地址手动标记。
(2)行政区划数据:圣马力诺的市镇行政区划数据来源于 GADM(全球行政区数据库),文件格式为 GeoJSON。在本文中,我们将通过Python的GeoPandas和Matplotlib库,对圣马力诺的9个市镇进行划分,并在图中标注出圣马力诺足球俱乐部的地理坐标,绘制它们的分布地图。
2. 所用库及工具介绍
(1)GeoPandas
GeoPandas 是一个开源的 Python 库,专为处理地理空间数据而设计。它扩展了流行的 Pandas 库,使其能够在 GeoDataFrame 中存储和操作地理数据。GeoDataFrame 和标准的 Pandas DataFrame 类似,但它增加了处理几何数据(如点、线、面)的功能。GeoPandas 无缝集成了其他多个地理空间库,是进行空间分析和可视化的强大工具。在本项目中,GeoPandas 用于处理圣马力诺行政区划数据和足球俱乐部的地理坐标。GeoPandas 支持多种地理数据格式,如 GeoJSON、Shapefile 和 KML,并提供了空间连接、数据转换和投影等操作的方法。这些功能对处理地理数据并进行空间分析非常重要,尤其是判断足球俱乐部是否位于某个行政区内。GeoPandas在本项目中的应用包括空间连接(确定每个足球俱乐部属于哪个行政区)、坐标转换(确保所有的空间数据都在相同的坐标参考系统下)和GeoDataFrame 操作(执行缓冲区、溶解和相交等空间分析操作,分析俱乐部的空间分布)。
(2)Matplotlib
Matplotlib 是 Python 中最常用的绘图库之一,可以生成静态、交互式和动画图表。它提供了一个多功能的框架,能够创建各种类型的图形,如折线图、柱状图和散点图。在本项目中,我们使用Matplotlib来绘制圣马力诺的行政区划地图,并将足球俱乐部的分布情况叠加到地图上。在地理空间分析中,Matplotlib常常用于绘制地图并在上面展示空间数据,特别是与其他库(如 GeoPandas)结合使用时。
通过自定义地图样式,实现添加图例和标注(标注不同的足球俱乐部、行政区和其他重要地理特征)、调整绘图样式(更改线条颜色、标记样式和透明度,以提高地图的可读性、叠加点和边界(将足球俱乐部和行政区的边界结合到同一张地图上)。
(3)Shapely
Shapely 是一个用于操作和分析几何对象的 Python 库。它为处理平面几何体提供了强大的工具,常与 GeoPandas 配合使用,以执行更复杂的几何运算。在项目中,Shapely 主要用于定义点数据(表示足球俱乐部的位置为几何点数据,这是可视化俱乐部位置的基础)和空间分析(使用 Shapely 提供的几何操作如相交、距离计算或包含关系检查分析足球俱乐部与行政区之间的空间关系)。
(4)Zipfile & XML.etree.ElementTree
Zipfile 和 XML.etree.ElementTree 是用于处理 KMZ文件的 Python 库。KMZ 文件常用于存储地理空间数据,尤其是在 Google Earth 等应用程序中。KMZ 文件实际上是一个压缩包,里面包含了 KML(Keyhole Markup Language)文件,KML 是一种基于 XML 的格式,存储了地理信息。
在本项目中,Zipfile主要用来解压KMZ提取其中的KML文件,这是访问地理数据的第一步;ElementTree帮助从KML文件中提取地理坐标,如足球俱乐部的经纬度数据。ElementTree能够解析KML文件的XML结构,并提取有用的信息。
(5)Folium
Folium 是一个用于创建交互式地图的 Python 库,可以方便地生成交互式地图,允许用户在网页上查看并与地图中的地理数据进行交互。运用Folium库,用户能够在本项目实现多项交互功能,如:提供地图的交互式操作,使用户可以探索圣马力诺足球俱乐部的地理分布;点击足球俱乐部位置标记时,显示相关信息,如俱乐部名称、主场、历史等;添加颜色编码标记、图例和图层等,以增强地图的互动性和数据呈现效果。
四、核心步骤与技术细节
1. 运用GoogleMyMaps标注并导出对应坐标
步骤说明:
(1)在浏览器中访问 Google 我的地图,登录您的 Google 账户后,点击“创建新地图”。
(2)使用搜索栏进入圣马力诺足协官网中的俱乐部介绍部分,定位到圣马力诺的主要足球俱乐部及其介绍信息。
点击俱乐部队徽,在俱乐部信息中查询到俱乐部总部地址。
(3)在GoogleMyMap的搜索栏中查找对应坐标,并添加对应标记。
(4)点击右上角,导出KMZ格式数据到桌面。
2. 从KMZ文件中提取地理坐标
首先,我们需要从KMZ文件中解压出KML文件,并解析其中的地理坐标。KMZ是KML的压缩格式,包含了地理空间数据。提取出的地理坐标为俱乐部的经纬度。
代码实现:
import zipfile
import os
from xml.etree import ElementTree as ET
# Step 1: 解压 KMZ 文件
kmz_path = r'/Users/username/projects/code/my_location.kmz' # 此处读者应替换成自己的地址
unzip_dir = r'/Users/username/projects/code/extracted_files' # 此处同理
# 解压 KMZ 文件
with zipfile.ZipFile(kmz_path, 'r') as kmz:
kmz.extractall(unzip_dir)
# 找到解压后的 KML 文件
kml_file = None
for filename in os.listdir(unzip_dir):
if filename.endswith('.kml'):
kml_file = os.path.join(unzip_dir, filename)
break
# Step 2: 解析 KML 文件
tree = ET.parse(kml_file)
root = tree.getroot()
# KML 的命名空间
namespace = {'kml': 'http://www.opengis.net/kml/2.2'}
# 提取地理坐标(假设位置在 <coordinates> 标签下)
coordinates = []
for placemark in root.findall('.//kml:Placemark', namespace):
coord_text = placemark.find('.//kml:coordinates', namespace).text
coords = coord_text.strip().split(',')
if len(coords) >= 2:
longitude = float(coords[0])
latitude = float(coords[1])
coordinates.append((longitude, latitude))
# 打印出提取的俱乐部坐标
print(coordinates)
运行结果:
3. 数据转换为 GeoDataFrame
我们将提取的坐标数据转换为 GeoDataFrame,并为其指定 WGS84 坐标系 (EPSG:4326)。
代码实现:
import geopandas as gpd
from shapely.geometry import Point
# 将提取的坐标转换为 GeoDataFrame
geometry = [Point(lon, lat) for lon, lat in coordinates]
clubs_gdf = gpd.GeoDataFrame(geometry=geometry)
# 打印出前几行数据
print(clubs_gdf.head())
运行结果:
4. 获取圣马力诺行政区划信息
要从GADM获得圣马力诺的行政区划信息,可以按以下步骤进行:
(1)访问GADM官网,选择DATA;
(2)选择圣马力诺:在国家列表中找到圣马力诺,选择合适的行政区划级别(圣马力诺分为2级)。
(3)下载数据:选择格式(如Shapefile、GeoJSON),下载数据。
5. 空间连接与地图可视化
为了将俱乐部分布可视化,我们需要加载圣马力诺的行政区划信息。此处使用GADM提供的圣马力诺市镇行政区划作为数据来源,并将其与俱乐部数据进行坐标系统一。
通过空间连接,将足球俱乐部的坐标点数据与行政区划的多边形数据进行匹配,以确定每个俱乐部所属的行政区。最后,我们绘制出体现圣马力诺足球俱乐部分布的行政区划地图。为了将俱乐部分布可视化,我们需要加载圣马力诺的行政区划信息。此处使用GADM提供的圣马力诺市镇行政区划作为数据来源,并将其与俱乐部数据进行一一对照。
代码实现:
import geopandas as gpd
import pandas as pd
from shapely.geometry import Point
import matplotlib.pyplot as plt
# 假设你已经将 KMZ 中的俱乐部位置提取成了经纬度列表
coordinates = [(12.4786801, 43.969171), (12.4782181, 43.9685092), (12.4579495, 43.9102602), (12.4786801, 43.969171), (12.4866796, 43.9103325), (12.4476277, 43.9388239), (12.4517128, 43.9228696), (12.4212625, 43.9059381), (12.4601085, 43.9089314), (12.4529052, 43.9098115), (12.4463789, 43.9333692), (12.4184458, 43.94568), (12.468332, 43.9519191), (12.5076142, 43.9842311), (12.4977704, 43.9265166)]
# Step 1: 将俱乐部坐标转换为 GeoDataFrame
geometry = [Point(lon, lat) for lon, lat in coordinates]
clubs_gdf = gpd.GeoDataFrame(geometry=geometry)
# Step 2: 设置俱乐部坐标系为 WGS84 (EPSG:4326)
clubs_gdf.crs = "EPSG:4326"
# Step 3: 加载圣马力诺的行政区划数据(此处应替换成您的对应地址)
admin_boundaries = gpd.read_file(r'C:\Users\Desktop\gadm41_SMR_1.json\gadm41_SMR_1.json')
# Step 4: 确保两者的坐标系一致
clubs_gdf = clubs_gdf.to_crs(admin_boundaries.crs)
# Step 5: 执行空间连接,将俱乐部数据与行政区划数据匹配
clubs_with_admin = gpd.sjoin(clubs_gdf, admin_boundaries, how="inner", predicate='intersects')
# Step 6: 可视化行政区划和俱乐部分布
# 创建一个图形
fig, ax = plt.subplots(figsize=(10, 10))
# 使用离散颜色来区分行政区
admin_boundaries.plot(ax=ax, column='NAME_1', cmap='tab20', edgecolor='black', legend=True)
# 绘制俱乐部位置
clubs_gdf.plot(ax=ax, color='red', markersize=10)
# 添加行政区名称
for idx, area in admin_boundaries.iterrows():
# 获取每个行政区的几何中心
centroid = area['geometry'].centroid
# 获取行政区名称
region_name = area['NAME_1']
# 在中心位置添加文本
ax.text(centroid.x, centroid.y, region_name, fontsize=10, ha='center', va='center', zorder=10)
# 添加首都标记
capital_coords = (12.4477, 43.9333) # 圣马力诺市(首都)坐标
ax.scatter(capital_coords[0], capital_coords[1], color='blue', s=100, label='Capital', zorder=5)
ax.text(capital_coords[0], capital_coords[1], ' Capital', fontsize=12, ha='left', va='bottom', color='blue')
# 添加标题
plt.title('Football Club Distribution and Administrative Boundaries with Capital')
# 调整图例显示方式
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5), title="Administrative Regions")
# 显示图形
plt.show()
运行结果:
6. 总结
通过以上步骤,我们成功解析了 KMZ 坐标文件中的地理信息,并结合圣马力诺的行政区划绘制了俱乐部分布地图。下一步可以进一步扩展,如统计每个行政区的俱乐部数量,或在地图中添加更多交互功能。通过对圣马力诺的足球俱乐部和行政区划进行地理可视化分析,我们能够直观地了解这一小国的足球地理分布及其与地方行政单位的关联。这种分析为进一步研究该国足球联赛的发展情况及其在地方社会中的作用提供了信息支持。
五、补充:圣马力诺足球联赛及俱乐部介绍
圣马力诺足球锦标赛(Campionato Sammarinese di Calcio)一共有 15 支球队,按规则,分成A组和B组。A组有 7 支球队,B组有 8 支球队。同区球队对赛两次,不同区则对赛一次,即 A 区进行20轮比赛、B 区进行21轮比赛,胜者得 3 分,平者得 1 分,负者不得分,视积分高低,每个区的前三名进入冠军附加赛,即6支球队。以双淘汰制赛事,决出圣马力诺联赛冠军。联赛冠军获得欧洲冠军联赛资格赛参赛资格,杯赛冠军则获得欧洲协会联赛资格赛参赛资格。
具体的介绍如下:
1. 蒙特贾尔迪诺鲜花(S.P. La Fiorita)
成立年份:1967年
总部地点:蒙特贾尔迪诺
队服颜色:蓝色和黄色
故事与成就:
蒙特贾尔迪诺鲜花的历史可以追溯到1936年,当时是青年体育组织的一部分,代表圣马力诺最小的城堡蒙特贾尔迪诺参赛。俱乐部因二战中断,直到1967年才由一群充满热情的年轻人重新组建,并选用了“鲜花”(Fiorita)作为队名,象征希望与活力。
俱乐部于1986年赢得首个联邦杯,1987年成为圣马力诺历史上第一支实现“三冠王”(联赛冠军、提塔诺杯、联邦杯)的球队。近年来,鲜花队活跃于欧战赛场,2017年更是在欧冠预选赛中取得历史性积分,成为圣马力诺足球的代表性力量。
2. 圣马力诺三笔(S.P. Tre Penne)
成立年份:1956年
总部地点:圣马力诺首都
队服颜色:蓝色和白色
故事与成就:
圣马力诺三笔俱乐部的名字来源于提塔诺山的三座山峰,象征着稳固与团结。其历史可追溯至1937年,作为“Serenissima”参加首届提塔诺杯并取得第三名。战后,俱乐部重建,并以“三笔”为名开启了新的旅程。
俱乐部在1967年赢得首个提塔诺杯,并培养了圣马力诺历史上首位进入意大利青年队的球员马尔科·马奇纳。三笔队在国内赛事中屡次斩获冠军,同时多次代表圣马力诺参加欧联杯,以稳定的表现成为国内足球的中坚力量。
3. 穆拉塔(S.S. Murata)
成立年份:1966年
总部地点:穆拉塔村
队服颜色:黑色和白色
故事与成就:
穆拉塔队由当地居民在1966年创立,最初以吸纳未能进入三笔队的球员为主。俱乐部的黑白配色受到了尤文图斯的影响,展现了简洁与专业的风格。
在2005至2008年间,穆拉塔队连续三年夺得圣马力诺联赛冠军,成为国内足坛的霸主之一。同时,在欧洲赛场上,穆拉塔队创造了圣马力诺俱乐部在欧冠中的最佳成绩,其坚韧的表现为国内足球注入了信心。
4. 菲奥伦蒂诺三花(S.P. Tre Fiori)
成立年份:1949年
总部地点:菲奥伦蒂诺
队服颜色:蓝色和黄色
故事与成就:
菲奥伦蒂诺三花俱乐部因家乡的徽章而得名,其蓝黄队服象征了辉煌与希望。俱乐部不仅在国内赛事中表现出色,还为圣马力诺足球提供了首个照明足球场,成为国家青训中心的重要基地。
近年来,三花队屡次赢得联赛冠军和提塔诺杯,并积极参与欧战,成为圣马力诺足球的常青树。
5. 青年多加纳(A.C. Juvenes/Dogana)
成立年份:2000年
总部地点:多加纳
队服颜色:浅蓝色、红色和白色
故事与成就:
青年多加纳由两支历史悠久的俱乐部合并而成,是圣马力诺唯一一支参加过意大利联赛的球队。其名字“Juvenes”意为“青年”,体现了对未来的寄望。
俱乐部以培养年轻球员而著称,并曾为尤文图斯输送了圣马力诺最伟大的球员马西莫·博尼尼。他的成功为圣马力诺足球注入了国际化的色彩。
6. 多马尼亚诺(F.C. Domagnano)
成立年份:1966年
总部地点:多马尼亚诺
队服颜色:红色和黄色
故事与成就:
多马尼亚诺俱乐部由一群热爱足球的地方居民创建,其红黄色队服借鉴了多马尼亚诺城堡的标志。俱乐部不仅注重竞技成绩,还在青训方面投入大量资源,为圣马力诺足球培养了大批优秀球员。
20世纪80年代,多马尼亚诺队成为国内赛事中的主力军,并继续在地方足球中扮演重要角色。
7. 法埃塔诺(S.C. Faetano)
成立年份:1962年
总部地点:法埃塔诺
队服颜色:黄色和蓝色
故事与成就:
法埃塔诺俱乐部的成立得到了当地神父Don Marco Gaspari的大力推动。他不仅主持了俱乐部的首场会议,还促成了其队服和场地的建立。
俱乐部在1985/1986赛季赢得首个联赛冠军,随后多次斩获提塔诺杯,成为国内足坛的传统劲旅。
8. 博尔戈马焦雷自由(A.C. Libertas)
成立年份:1928年
总部地点:博尔戈马焦雷
队服颜色:红色和白色
故事与成就:
作为圣马力诺最古老的足球俱乐部,Libertas不仅是国内首支参加提塔诺杯的球队,还凭借稳定的表现主导了赛事早期阶段。
1980年代,俱乐部开始注重青训,为圣马力诺国家队输送了大量球员。其“自由”的名字和红白队服,象征着对体育精神的追求。
9. 蔡伦戈(S.P. Cailungo)
成立年份:1974年
总部地点:博尔戈马焦雷
队服颜色:红色和绿色
故事与成就:
蔡伦戈俱乐部由当地居民创立,红绿配色代表劳动节的精神和地方特色。作为圣马力诺最年轻的俱乐部之一,蔡伦戈一直专注于推动社区足球的发展,并以其独特的队徽和文化为标志。
10. 法尔西亚诺闪电(S.P. Folgore)
成立年份:1972年
总部地点:法尔西亚诺
队服颜色:红色、黄色和黑色
故事与成就:
法尔西亚诺闪电俱乐部以其青训计划闻名,致力于培养地方年轻球员。其红黄黑队服象征地方社区的多样性和活力。
俱乐部在国内赛事中屡次崭露头角,同时通过与地方合作,进一步促进了足球文化在法尔西亚诺地区的发展。
11. 宇宙(S.P. Cosmos)
成立年份:1979年
总部地点:塞拉瓦莱
队服颜色:黄色和绿色
故事与成就:
宇宙俱乐部的名字源于纽约宇宙队(New York Cosmos),向传奇球员贝利致敬。队服的黄绿色不仅呼应巴西国家队的经典配色,也象征着俱乐部的国际化抱负。成立仅一年后,宇宙队便赢得了提塔诺杯,迅速成为圣马力诺足坛的新星。
俱乐部由不满于青年多加纳的球员创立,其中的领军人物是圣马力诺历史上第一位职业球员但丁·迈亚尼。他不仅是球队的核心球员,还担任过教练,为宇宙俱乐部奠定了坚实基础。
12. 维尔图斯(S.P. Virtus)
成立年份:1964年
总部地点:阿夸维瓦
队服颜色:绿色和黑色
故事与成就:
维尔图斯的名字来源于拉丁语“Virtus”,意为力量与美德。俱乐部的绿色和黑色队服设计受到了意大利威尼斯队的启发,象征着希望与坚定。
早期,由于阿夸维瓦地区球员较少,维尔图斯在组建球队时面临诸多挑战。然而,这家俱乐部通过不懈努力,为地方足球注入了生机。在其发展的过程中,曾因对手的戏称“奶厂队”(因阿夸维瓦是圣马力诺奶制品工厂的所在地)而备受调侃,但维尔图斯用实力回应,逐渐成为国内赛事的重要力量。
13. 圣乔瓦尼(S.P. San Giovanni)
成立年份:1948年
总部地点:博尔戈马焦雷
队服颜色:红色和黑色
故事与成就:
圣乔瓦尼俱乐部由当地教区神父创立,旨在为孩子们提供安全的活动场所。创立初期,球员们自行整修了位于教堂后的简易球场,并借助教区的支持获得了首批红黑色球衣,象征力量与热情。
俱乐部的标志融合了提塔诺山的“三笔”与守护足球的美洲狮,这一独特设计体现了传统与创造力的结合。虽然俱乐部在早期曾一度中断活动,但在1957年复出后,始终活跃于圣马力诺足球锦标赛。
14. 菲奥兰蒂诺(S.P. Montevito)
成立年份:1974年
总部地点:菲奥伦蒂诺
队服颜色:白色和绿色
故事与成就:
作为菲奥伦蒂诺的第二支球队,菲奥兰蒂诺俱乐部的初期发展并不顺利,成立三年后曾被迫暂停活动。然而,1980年代在“三花”俱乐部的支持下,菲奥兰蒂诺重返赛场并逐步稳定发展。
俱乐部的白绿色队服象征着纯洁与希望,而其技术与管理的稳定性也逐渐提升,使其成为地方足球发展的重要代表之一。
15. 佩纳罗萨(S.P. Pennarossa)
成立年份:1968年
总部地点:基耶萨诺瓦
队服颜色:红色和白色
故事与成就:
佩纳罗萨的名字和标志直接源自基耶萨诺瓦城堡的徽章,象征着红色的热情与白色的纯洁。俱乐部的成立得到了地方企业和社区的支持,早期由主席兼教练阿尔菲耶罗·瓦格尼尼一手推动,他甚至亲自招募球员。
尽管在20世纪80年代曾一度陷入低谷,俱乐部凭借外部支持重组,并于1990年代重返基耶萨诺瓦,开启了新的发展阶段。佩纳罗萨不仅在提塔诺杯中表现不俗,还在推动社区参与足球运动方面发挥了重要作用。