基于SpringBoot和leaflet-timeline-slider的歷史敘事GIS展示-以哪吒2的海外國家上映安排為例

目錄

前言

一、哪吒2的海外之路

1、海外征戰歷程

2、上映國家空間查詢

二、后端接口的實現

1、模型層的實現

2、上映時間與國家

3、控制層的實現

三、基于leaflet-timeline-slider的前端實現

1、時間軸控件的引入及定義

2、時間軸綁定事件

3、成果展示

?四、總結


前言

????????在當今數字化時代,地理信息系統(GIS)技術與多種新興技術的融合為信息展示帶來了全新的視角和體驗。本文將探討如何基于 SpringBoot 框架和 leaflet-timeline-slider 插件,構建一個以電影《哪吒2》海外國家上映安排為例的歷史敘事 GIS 展示系統。《哪吒2》作為一部極具影響力和票房號召力的中國動畫電影,其海外上映安排備受關注。該片于 2025 年 2 月 13 日在澳大利亞、新西蘭、斐濟、巴布亞新幾內亞正式上映,2 月 14 日在美國、加拿大正式上映。此后,其海外上映版圖持續擴大,3 月 14 日英國、愛爾蘭開啟點映,3 月 21 日在法國、德國、西班牙、意大利等歐洲 37 個國家及地區的 200 多家電影院上映。此外,該片還將在新加坡、馬來西亞、埃及、南非、巴基斯坦、日本、韓國等多個國家和地區上映。這一系列的海外上映安排不僅是電影發行策略的體現,更是中國文化在全球傳播的重要事件。

????????在技術層面,SpringBoot 作為一個開源 Java 基于 Spring 框架的快速開發平臺,能夠幫助開發者快速搭建穩定、高效的后端服務,為 GIS 展示系統提供強大的數據支持和業務邏輯處理能力。而 leaflet-timeline-slider 插件則為前端地圖展示提供了時間軸滑塊功能,使得用戶可以通過滑動時間軸,直觀地查看不同時間段內《哪吒2》在各個海外國家的上映情況,從而實現歷史敘事與地理信息的有機結合。通過構建這樣一個系統,我們不僅可以清晰地呈現《哪吒2》海外上映的時空分布,還能深入挖掘其背后的文化傳播、市場策略以及觀眾反饋等多維度信息。這不僅有助于電影行業的從業者更好地了解國際市場動態,也為文化研究者提供了豐富的案例分析素材。同時,這種基于 GIS 的歷史敘事展示方式也為其他領域的時空數據可視化提供了借鑒和思路,具有重要的研究和應用價值。

一、哪吒2的海外之路

????????本節將重點介紹《哪吒2之魔童鬧海》這部電影的海外之路。除了在中國本土獲得的巨大成功,這部電影的海外版本也是獲得了很多人的認可。在進行應用程序的開發之前,首先我們來一起回顧一下這部電影的海外之路,也一起看看它的海外征戰日常。

1、海外征戰歷程

????????下面我們從互聯網上查找一下關于哪吒2這部電影的海外征戰歷程。根據互聯網的信息,我們將查找的信息整理成以下的表格,包括電影的上映時間、上映形式(比如IMAX超前點映和正式上映或者點映)、上映國家等。

上映時間國家/地區
2025年2月10日澳大利亞、新西蘭(超前點映)
2025年2月12日北美(IMAX超前點映)
2025年2月13日澳大利亞、新西蘭、斐濟、巴布亞新幾內亞(正式上映)
2025年2月14日美國、加拿大(正式上映)
2025年3月14日英國、愛爾蘭(點映)
2025年3月21日英國、愛爾蘭(正式上映)
2025年3月21日法國、德國、西班牙、意大利等歐洲國家
2025年4月4日日本
2025年4月23日比利時、荷蘭
2025年4月23日德國
2025年4月23日奧地利
2025年4月23日新加坡
2025年4月23日馬來西亞
2025年4月23日埃及
2025年4月23日南非
2025年4月23日巴基斯坦

????????票房信息

  • 北美票房:1880萬美元。

  • 全球票房:截至2025年3月11日,全球票房突破20.55億美元。

????????回首哪吒2取得的這些驕人戰績,確實為吒兒感到開心。期待后續有更大的突破,給觀眾朋友帶來更好的電影作品。

2、上映國家空間查詢

????????為了方便將上映的國家信息在WebGIS中進行展示,需要我們將關聯全球國家信息表從而可以查詢到具體的國家信息。同時為了準確的對國家位置進行標注,我們選擇國家首都來進行標注(不采用面的中心點的原因是因為有的國家是海島國家,如果采用中心點標注,極可能出現標記位置在海上的情況)。因此要實現上映國家的空間查詢,我們需要關聯三張表,如下表所示:

序號表名說明
1biz_ne_10m_populated_places全球城市信息表
2biz_country_capital全球國家首都信息表
3biz_world_country全球國家信息表

????????為了實現根據國家名稱查詢國家信息以及所屬國家的首都信息(這里以?'澳大利亞', '德國', '法國', '巴基斯坦' 這四個國家為例),實現的SQL腳本如下所示:

SELECT P.NAME,P.name_zh nameZh,P.latitude lat,P.longitude lon,P.max_perkm maxPerkm,wc.full_chinese_name fullChineseName,wc.short_english_name shortEnglishName,st_asgeojson ( wc.geom ) geomJson 
FROMbiz_ne_10m_populated_places P,biz_country_capital ca,biz_world_country wc 
WHEREca.country_id = wc.pk_id AND ca.places_id = P.pk_id and ca.use_flag = 1AND wc.short_chinese_name IN ( '澳大利亞', '德國', '法國', '巴基斯坦' );

????????在客戶端工具中執行以上的SQL語句后,得到的結果如下所示:

?????????以上就是簡單的介紹哪吒2這部電影的海外征戰道路以及如何根據國家中文簡稱來查詢所屬國家及其首都信息。有了這個基礎之后,就可以進行WebGIS相關的可視化成果展示的開發。

二、后端接口的實現

????????本節將重點介紹后端如何來實現哪吒2的海外征戰的相關查詢接口。首先介紹Mapper數據操作層的實現,其次介紹如何來實現時間與國家的信息綁定,最后介紹控制層的具體實現。

1、模型層的實現

作為與海外征戰最直接相關的對象,模型層及其所屬對象是最核心的對象。需要承載著按照國家中文簡稱來查詢其對應的國家及首都信息。Mapper接口層的定義如下所示:

final static String FIND_COUNTRY = "<script>"+ " select p.name,p.name_zh nameZh,p.latitude lat ,p.longitude lon,p.max_perkm maxPerkm " + " ,wc.full_chinese_name fullChineseName,wc.short_english_name shortEnglishName,st_asgeojson(wc.geom) geomJson "+ " from biz_ne_10m_populated_places p,biz_country_capital ca,biz_world_country wc "+ " where ca.country_id = wc.pk_id and ca.places_id = p.pk_id and ca.use_flag = 1"+ " and wc.short_chinese_name in "+ " <foreach item='id' collection='short_chinese_names' open='(' separator=',' close=')'>" +  " #{id} "+ "</foreach>" + "</script>";
/**
* - 根據國家中文簡稱查詢國家信息列表
* @return
*/
@Select(FIND_COUNTRY)
List<CountryCapitalVO> findCountryList(@Param("short_chinese_names") List<String> short_chinese_names);

????????用來接收數據庫的查詢結果集的視圖對象如下:

package com.yelang.project.extend.earthquake.domain;
import java.io.Serializable;
import java.math.BigDecimal;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CountryCapitalVO implements Serializable{private static final long serialVersionUID = 6127335396885639845L;private String name;private String nameZh;private String lat;private String lon;private BigDecimal maxPerkm = new BigDecimal(0);private String fullChineseName;private String shortEnglishName;private String geomJson;
}

?????????以上是數據查詢的核心之所在,實現了與數據庫查詢結果的映射。同時在前端進行數據展示時,以上的屬性也是至關重要,請務必掌握。

2、上映時間與國家

????????在進行時空數據分析時,上映時間與國家是一個非常重要的映射關系。我們需要根據上一節整理的表格來將時間和空間即上映時間與上映國家的映射關系對應好。為了演示方便,這里就不將相關數據存儲到數據庫中進行存儲,而是采用臨時的內存管理方式,在后臺進行查詢時,使用HashMap的方式來進行查找,這種查找方式是O(1)的復雜度,查找很快速。定義時間和空間的映射Map的實例代碼如下:

private Map<String,String> getAbroadMap(){Map<String,String> result = new HashMap<String, String>();result.put("250210", "澳大利亞、新西蘭");result.put("250212", "美國");result.put("250213", "澳大利亞、新西蘭、斐濟、巴布亞新幾內亞");result.put("250214", "美國、加拿大");result.put("250314", "英國、愛爾蘭");result.put("250321", "英國、愛爾蘭");result.put("250404","日本");result.put("250423", "比利時、荷蘭、德國、奧地利、新加坡、馬來西亞、埃及、南非、巴基斯坦");return result;
}

????????以上方法定義好之后,將在后續的控制層來進行調用。?

3、控制層的實現

????????作為與前端交互的最重要組件,控制層承擔著將時間轉為為查詢參數,調用業務層和數據庫訪問層來實現空間數據的展示的作用。控制層的方法核心代碼如下:

@RequiresPermissions("cl:boxoffice:abroadmap")
@GetMapping("/abroadmap")
public String abroadmap(){return prefix + "/abroadmap";
}@RequiresPermissions("cl:boxoffice:abroadlist")
@GetMapping("/abroadlist")
@ResponseBody
public AjaxResult abroadlist(String dayValue){String queryDay = StringUtils.isNotEmpty(dayValue) ? dayValue : "250210";String abroadCountry = getAbroadMap().get(queryDay);List<String> countriesParams = Arrays.asList(abroadCountry.split("、"));List<CountryCapitalVO> countries = wCountryService.findCountryList(countriesParams);return AjaxResult.success().put("data", countries);
}

????????為了簡化業務層的實現,這里我們直接調用前面提到過的上映國家與時間的映射關系。

三、基于leaflet-timeline-slider的前端實現

????????最后一步我們來重點介紹一下如何基于leaflet-timeline-slider來進行WebGIS的可視化實現。通過本節,將使用前后端的集成,可以實現基于時間軸的點擊,同時切換展示哪吒2的不同時間對應的上映國家信息。

1、時間軸控件的引入及定義

????????首先我們需要在頁面中引入時間軸控件以及定義時間軸對象。引入leaflet-timeline-slider的代碼如下:

<!-- leaflet-timeline-slider.js add by yelangking-->
<script th:src="@{/js/plugins/timeline/leaflet-timeline-slider.js}"></script>

????????然后在Javascript中來定義組件,定義對象的核心代碼如下:

$(document).ready(function () {//初始化時間軸的控制單元L.control.timelineSlider({timelineItems: ["250210", "250212", "250213", "250214", "250314", "250321","250404","250423"], changeMap: getDataAddMarkers,extraChangeMapParams: {exclamation: "exclamation"} }).addTo(mymap); 
});

2、時間軸綁定事件

????????要想實現在時間軸上點擊不同的日期可以切換不同的國家,這里就需要進行點擊事件的綁定操作。在上一個小節中已經有了簡單的介紹,更詳細的是如何進行事件的響應,這里給出詳細的代碼:

getDataAddMarkers = function( {label, value, map, exclamation} ) {$("#day").html(label);showBoxOffice(label);
};

????????這里主要注意的是,在函數中傳遞的label字段,其值就是:20250314這樣的字符串。然后將label字符串傳入到國家信息查詢接口中,調用控制層中的API接口來實現,詳細的方法如下:

  function showBoxOffice(dayInfo){$.ajax({  type:"get",  url:prefix + "/abroadlist?dayValue=" + dayInfo,  data:{},  dataType:"json",async: false, // 設置為 false 以同步執行cache:false,processData:false,success:function(result){if(result.code == web_status.SUCCESS){showLayerGroup.clearLayers();var legendData = new Array();for(var i = 0;i< result.data.length;i++){var countryData = result.data[i];var color = getRandomColor();var areaLayer = L.geoJSON(JSON.parse(countryData.geomJson),{style: {color:color,weight:3,opacity:0.85,fillOpacity: 0.8}}).addTo(showLayerGroup);var myIcon = L.divIcon({iconSize: null,className: '',popupAnchor:[5,5],shadowAnchor:[5,5],html: "<div class='marsBlackPanel' style='background:" + color + ";' animation-spaceInDown><div class='marsBlackPanel-text'>" + countryData.fullChineseName+"<span class='temperature'></span></div><div class='marsBlackPanel-text'>"+countryData.shortEnglishName + "\t首都:"+ countryData.nameZh+"<span class='temperature'></span></div></div>"});//中心點位L.marker(L.latLng(countryData.lat, countryData.lon), { icon: myIcon}).addTo(showLayerGroup);legendData.push({label: "\xa0\xa0"+countryData.fullChineseName,type: "rectangle",radius: 12,color: color,fillColor: color,fillOpacity: 0.8,weight: 2});}initLegend(legendData);mymap.setView(showLayerGroup.getBounds().getCenter(),3);//同時設置中心位置和級別}},error:function(){$.modal.alertWarning("獲取空間信息失敗");}});
}

????????至此就基本實現了在頁面中點擊時間后,地圖將切換到不同的國家來進行展示。

3、成果展示

????????下面將結合前端開發的結果,來看一下我們實現的最終效果:

2025年2月10在澳大利亞和新西蘭進行上映

2025年2月14在美國和加拿大上映

2025年3月14在愛爾蘭和英國進行上映

2025年4月4號在日本進行上映

????????2025年4月23日是上映比較多的,包括馬來西亞、奧地利、南非、新加坡、荷蘭、巴基斯坦、比利時、埃及和德國。?

?四、總結

?????????以上就是本文的主要內容,本文將探討如何基于 SpringBoot 框架和 leaflet-timeline-slider 插件,構建一個以電影《哪吒2》海外國家上映安排為例的歷史敘事 GIS 展示系統。《哪吒2》作為一部極具影響力和票房號召力的中國動畫電影,其海外上映安排備受關注。通過構建這樣一個系統,我們不僅可以清晰地呈現《哪吒2》海外上映的時空分布,還能深入挖掘其背后的文化傳播、市場策略以及觀眾反饋等多維度信息。這不僅有助于電影行業的從業者更好地了解國際市場動態,也為文化研究者提供了豐富的案例分析素材。同時,這種基于 GIS 的歷史敘事展示方式也為其他領域的時空數據可視化提供了借鑒和思路,具有重要的研究和應用價值。行文倉促,定有不足之處,歡迎各位朋友在評論區批評指正,不勝感激。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915457.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915457.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915457.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

tar 解壓:Cannot change ownership to uid 1000, gid 1000: Operation not permitted

tar 解壓 tar.gz 壓縮包報錯&#xff1a; # tar xzf $INPUT_FOLDER/archive.tar.gz -C /mnt/test-nas/[..] tar: xx.jpg: Cannot change ownership to uid 1000, gid 1000: Operation not permitted原因是用普通用戶執行的解壓縮腳本&#xff0c;用root用戶執行tar解壓縮&…

騰訊客戶端開發面試真題分析

以下是針對騰訊客戶端開發工程師面試問題的分類與高頻問題分析&#xff08;基于??105道問題&#xff0c;總出現次數118次??&#xff09;。按技術領域整合為??7大類別??&#xff0c;按占比排序并精選高頻問題標注優先級&#xff08;1-5&#x1f31f;&#xff09;&#x…

線上問題排查之【CPU飆高100%】

目錄 案例 發現問題 排查問題 步驟一 步驟二 步驟三 案例 import java.util.concurrent.TimeUnit;/*** 簡單寫一個CPU飆高的案例*/ public class CpuLoadUp {// 這里定義了一個標識private volatile static int flag 0;public static void main(String[] args) {// 執行…

c語言 進階 動態內存管理

動態內存管理1. 為什么存在動態內存分配2. 動態內存函數的介紹?2.1 malloc 和 freemalloc 函數free 函數2.2內存泄漏2.3 calloc2.4 realloc3. 常見的動態內存錯誤3.1 對NULL指針的解引用操作3.2 對動態開辟空間的越界訪問3.3 對非動態開辟內存使用free釋放3.4 使用free釋放一塊…

Redis的五大基本數據類型

一、Redis基本知識與Redis鍵&#xff08;key&#xff09;常用操作命令。redis的默認端口6379。mysql默認端口號3306。 默認16個數據庫&#xff0c;類似數組的下標從0開始&#xff0c;初始默認使用0號庫。可以使用select index來切換數據庫&#xff0c;如&#xff1a;select 1&a…

達夢數據庫JSON_TABLE使用說明

在達夢數據庫&#xff08;DM Database&#xff09;中&#xff0c;將 JSON 數據轉換為表格形式可以使用內置的 JSON_TABLE 函數。以下是詳細步驟和示例&#xff1a;1. 核心函數&#xff1a;JSON_TABLE JSON_TABLE 用于將 JSON 數據解析為關系表結構&#xff0c;支持從 JSON 對象…

A316-1926-V1 USB多路高清音頻解碼器模組技術解析

隨著數字音頻技術的不斷發展&#xff0c;高品質音頻解決方案的需求日益增長。本文將介紹一款基于XMOS技術的高性能USB音頻解碼器模組——A316-1926-V1&#xff0c;這是一款專為高清音頻應用設計的專業模組。核心技術與特性A316-1926-V1是一款集成了多項先進技術的USB多路高清音…

.NET 8 中的 KeyedService

.NET 8 中的 KeyedService&#xff1a;新特性解析與使用示例 一、引言 在 .NET 8 的 Preview 7 版本中&#xff0c;引入了 KeyedService 支持。這一特性為開發者提供了按名稱&#xff08;name&#xff09;獲取服務的便利&#xff0c;在某些場景下&#xff0c;開發者無需再自行…

Paimon對比基于消息隊列(如Kafka)的傳統實時數倉方案的優勢

弊端&#xff1a;數據重復 -> 優勢&#xff1a;Paimon 主鍵表原生去重原方案弊端 (Kafka)問題: 消息隊列&#xff08;Kafka&#xff09;是僅支持追加&#xff08;Append-Only&#xff09;的日志流。當 Flink 作業發生故障恢復&#xff08;Failover&#xff09;或業務邏輯迭代…

Linux Shell 命令 + 項目場景

shell 命令1. 基礎文件操作命令1.1 ls - 列出目錄內容1.2 find - 文件搜索2. 版本控制命令2.1 git - 版本控制系統2.2 高級 Git 操作3. 文本搜索命令3.1 grep - 文本搜索3.2 高級搜索技巧4. Android 構建系統命令4.1 source - 加載環境變量4.2 lunch - 選擇構建目標4.3 m - And…

A316-Mini-V1:超小尺寸USB高清音頻解碼器模組技術探析

引言 隨著便攜式音頻設備的普及&#xff0c;對小型化、高性能音頻解決方案的需求日益增長。本文將介紹一款極致小型化的高性能USB音頻解碼器模組——A316-Mini-V1&#xff0c;這是一款基于XMOS XU316芯片的微型音頻處理模組。產品概述 A316-Mini-V1是一款專為小尺寸產品設計的M…

低代碼平臺買saas好還是私有化好

選擇低代碼平臺采用SaaS還是私有化部署&#xff0c;應根據企業具體情況考慮安全性、成本控制、維護難度、擴展需求等因素。 其中&#xff0c;安全性是決定企業選擇的重要因素之一。私有化部署意味著企業能夠完全掌控數據和系統的安全管理&#xff0c;更適合對數據安全要求極高的…

基于SkyWalking的微服務APM監控實戰指南

基于SkyWalking的微服務APM監控實戰指南 1. 業務場景描述 隨著微服務在生產環境中大規模應用&#xff0c;系統鏈路復雜、實例彈性伸縮、灰度發布等特點都給性能監控和問題診斷帶來了新的挑戰。傳統的單機或輕量級監控方案已無法滿足微服務環境下的全鏈路、分布式追蹤和實時告警…

Python 進階(五): Excel 基本操作

目錄 1. 概述2. 寫入 2.1 使用 xlwt2.2 使用 XlsxWriter 3. 讀取4. 修改 1. 概述 在現實中&#xff0c;很多工作都需要與數據打交道&#xff0c;Excel 作為常用的數據處理工具&#xff0c;一直備受人們的青睞&#xff0c;而大部分人都是手動操作 Excel&#xff0c;如果數據量…

32、鴻蒙Harmony Next開發:使用動畫-動畫概述

???屬性動畫轉場動畫粒子動畫組件動畫動畫曲線動畫銜接動畫效果幀動畫&#xff08;ohos.animator&#xff09; UI&#xff08;用戶界面&#xff09;中包含開發者與設備進行交互時所看到的各種組件&#xff08;如時間、壁紙等&#xff09;。屬性作為接口&#xff0c;用于控制…

【STM32】485接口原理

485 通信實驗 這篇文章是對 RS485通信 的原理、硬件連接、接口芯片&#xff08;SP3485&#xff09;、總線結構等都有詳盡的說明。我們在此處進行清晰有條理的講解整理&#xff0c;便于學習和實驗操作。 在了解485接口通信原理之前&#xff0c;我們先復習一下串口&#xff1a;串…

亞馬遜二審攻防全攻略:預防、應對與長效合規之道

當店鋪收到二審通知&#xff0c;不少賣家會陷入焦慮與慌亂&#xff0c;只要掌握科學的預防策略與應對方法&#xff0c;不僅能降低二審風險&#xff0c;即便遭遇審核也能順利突圍。一、未雨綢繆&#xff1a;預防二審的四大核心策略夯實資料真實性根基資料的真實性與一致性是亞馬…

添加狀態信息

1首先在數據字典里加入可借閱和不可借閱狀態2導入數據字典export default {name: "Book",dicts: [book_borrow_status],//導入數據字典data() {return {formData: {name: null,author: null,num: null,price: null,typeId: null,status:null//新加狀態屬性},3設置狀態…

234、回文鏈表

題目&#xff1a;解答&#xff1a;對143稍作修改即可&#xff0c;判斷兩個指針指向的是否一直相等。終止條件為不等或者head2nullptrclass Solution { public:ListNode *rev(ListNode *head){ListNode *cur head;ListNode *pre nullptr;while(cur){ListNode * nxt cur->n…

第15次:商品搜索

實現用戶在頁面可自由搜索某個商品的功能。 第1步&#xff1a;準備搜索功能用到的庫 pip install whoosh pip install jieba pip install django-haystackwhoosh是搜索引擎&#xff0c;對英文支持較好&#xff0c;但對中文效果不佳。jieba為中文分詞庫&#xff0c;彌補whoosh…