基于AIS數據的船舶密度計算與規律研究

參考文獻:[1]陳曉. 基于AIS數據的船舶密度計算與規律研究[D].大連海事大學,2021.DOI:10.26989/d.cnki.gdlhu.2020.001129.

謝謝姐姐的文章!


網格化AIS數據

網格化 AIS 數據是處理和分析船舶軌跡數據的一種有效方法,特別是當涉及到密度計算和模式識別時。以下是網格化 AIS 數據的一些主要好處,以及一些使用 Python 實現這一過程的基本代碼示例。

網格化 AIS 數據的好處

  1. 簡化數據分析

    • 網格化可以將連續的地理空間數據簡化為離散的單元,使得對船舶位置和運動的分析更加直觀和易于處理。
  2. 便于計算密度和分布

    • 通過統計每個網格內的船舶數量,可以更容易地計算和可視化船舶密度分布。計算的不再是所有MMSI船舶各自的航行信息,那個既復雜,又不易計算某地區的船舶密度。
  3. 模式識別和趨勢分析

    • 網格化數據有助于識別特定區域的流量模式、常用航道和潛在擁堵點。
  4. 時間序列分析

    • 通過跟蹤船舶在各個網格中的停留時間,可以分析航行模式和時間上的變化。
  5. 降低數據復雜性

    • 網格化減少了數據的復雜性,使大規模數據集更易于管理和分析。

Python 代碼示例

以下是一個簡單的 Python 代碼示例,展示如何將 AIS 數據網格化并計算每個網格中的船舶數量。

import pandas as pd
import numpy as np# 示例數據
data = {'MMSI': [123456789, 987654321, 123456789],'Timestamp': ['2023-01-01 00:00', '2023-01-01 01:00', '2023-01-01 02:00'],'Longitude': [-122.33, -122.34, -122.35],'Latitude': [37.39, 37.40, 37.41]
}
ais_data = pd.DataFrame(data)# 定義網格大小
grid_size = 0.01  # 假設每個網格的大小為0.01度# 網格化函數
def gridify(longitude, latitude, grid_size):return (np.floor(longitude / grid_size), np.floor(latitude / grid_size))# 應用網格化
ais_data['Grid'] = ais_data.apply(lambda row: gridify(row['Longitude'], row['Latitude'], grid_size), axis=1)# 計算每個網格中的船舶數量
grid_counts = ais_data['Grid'].value_counts()print(grid_counts)

這段代碼首先定義了一個模擬的 AIS 數據集,然后使用一個簡單的網格化函數將船舶的經緯度坐標映射到網格坐標上,并計算每個網格中的船舶數量。可以根據自己的數據集和需求調整網格大小和其他參數。


換算系數——考慮船舶大小

在考慮船舶尺度對交通安全的影響時,僅僅按照船舶的數量來計算密度可能不足以準確反映實際情況。因此,建立基于標準船尺寸的船舶密度計算模型是一種更為合理的方法。這種方法允許不同尺寸的船舶根據它們對空間的占用和潛在的安全風險被不同地權衡。

船舶密度計算模型

  1. 標準船尺寸定義

    • 將特定尺寸范圍內的船舶(例如 50m-100m)定義為標準船尺寸。
    • 這個尺寸范圍代表了一種“平均”或“典型”的船舶大小,用于密度計算的基準。
  2. 換算系數

    • 對于小于或大于標準船尺寸的船舶,分配一個換算系數,以反映它們相對于標準船的大小。
    • 例如,一個 200m 長的船可能被計算為兩艘標準船,而一個 25m 長的船可能只計為半艘標準船。
  3. 船舶密度計算

    • 船舶密度不再簡單地基于船舶數量,而是基于換算后的船舶數量進行計算。
    • 這種方法更準確地反映了船舶對水域空間的占用和潛在的風險。

實際應用

在實際應用中,這種計算方法可以用于評估航道的擁擠程度、規劃航線,以及制定海事安全政策。通過考慮船舶的實際尺寸和占用空間,可以更準確地評估特定水域的安全狀況

Python 代碼示例

以下是一個基本的 Python 代碼示例,演示如何根據船舶大小調整船舶數量來計算密度:

import pandas as pd# 示例數據
data = {'MMSI': [123456789, 987654321, 456789123],'ShipLength': [30, 80, 150]  # 船舶長度,單位:米
}
ais_data = pd.DataFrame(data)# 定義標準船的大小范圍
standard_ship_min = 50  # 最小長度
standard_ship_max = 100  # 最大長度# 計算換算系數
def calculate_conversion_factor(length):if length < standard_ship_min:return 0.5elif length > standard_ship_max:return 1.5else:return 1  # 標準船尺寸# 應用換算系數
ais_data['ConversionFactor'] = ais_data['ShipLength'].apply(calculate_conversion_factor)# 計算總的“標準船”數量
total_standard_ships = ais_data['ConversionFactor'].sum()
print("Total 'Standard Ships':", total_standard_ships)

AIS數據的定期廣播

AIS(Automatic Identification System)系統定期廣播船舶的動態信息(如位置、速度、航向)和靜態信息(如船舶識別、類型、尺寸)。不同類型的信息具有不同的廣播頻率,如下圖所示。這可能導致在某一特定瞬時時刻,數據庫中不一定包含所有船舶的最新信息。

如果計算瞬時密度時,這一刻船舶的AIS信息還沒接收到,那么可以利用矩估計選擇近似整點時刻。由于最久的靜態信息是6min間隔,故可設置前后6min的信息接受域,并在域中選擇近似整點時刻,如下圖所示:

這種方式的優點是:

  1. 提高數據的完整性:由于 AIS 數據可能不是實時更新,所以在一定時間范圍內統計能夠更全面地捕捉到該時刻附近的船舶情況。

  2. 增加計算的準確性:減少了由于 AIS 更新率不一致而導致的數據缺失或延遲,使得瞬時密度的計算更為準確。

  3. 適應不同類型的船舶和航速:不同類型的船舶和不同航速的船只可能有不同的 AIS 更新頻率,通過擴展統計窗口可以更好地覆蓋這些差異。

這種方法在進行航道交通分析、海上交通管理和航行安全評估等方面是非常實用的。它允許分析人員更準確地估計特定時刻或時間段內的船舶密度,從而為相關的決策提供支持。


解碼AIS數據

處理和解碼 AIS 數據是一個涉及多個步驟的復雜過程。AIS 數據通常以 NMEA 0183 標準格式(一種海事通信協議)傳輸,這些數據包含了各種船舶信息,包括位置、航向、速度等。AIS 消息以特定格式編碼,首先需要將這些編碼的文本數據轉換為二進制格式然后根據相關協議(如 ITU-R M.1371 和 IEC 61162-2)解碼以獲取實際的信息

以下是解碼 AIS 數據的基本步驟:

1. 文本到二進制的轉換

AIS 消息通常使用六位 ASCII 碼表示。這種編碼方式將標準 ASCII 碼映射到六位二進制數。轉換的基本步驟是將每個字符轉換為其相應的六位二進制表示。

2. 根據 IEC 61162-2 協議解碼

一旦文本數據轉換為二進制形式,接下來就需要根據相應的協議解析這些二進制數據。這包括解析船舶的 MMSI、位置坐標、速度、航向等信息。

3. 實現解碼

在 Python 中,這個過程可以通過編寫自定義函數或使用已存在的庫來實現。例如,libais 是一個流行的 Python 庫,可以用于解碼 AIS 消息。

Python 示例

以下是一個使用 libais 庫來解碼 AIS 消息的基本示例。需要先安裝 libais 庫。

import ais# 示例 AIS 消息
ais_message = '!AIVDM,1,1,,B,15N7p<PP00I=0B?4p4p@E=kP058j,0*2C'# 提取消息體和填充位
# msg_parts 是將 AIS 消息按逗號分割后得到的列表。
msg_parts = ais_message.split(',')
# msg_body 是這個列表的第六個元素,即實際的 AIS 數據部分。
msg_body = msg_parts[5]
# fill_bits 是消息中的填充位數,用于告訴解碼器如何正確解析消息。
# 這個例子中填充位數為0,從0*2C中提取出來的
fill_bits = int(msg_parts[6].split('*')[0])# 解碼 AIS 消息
decoded_message = ais.decode(msg_body, fill_bits)print(decoded_message)

結果如下:?

然后根據相關規定,篩除不滿足真實要求的AIS數據,規定如下:?

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

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

相關文章

C++_對C數據類型的擴展

結構體 c中定義結構體變量&#xff0c;可以省略struct關鍵字 c結構提重可以直接定義函數&#xff0c;謂之成員函數&#xff08;方法&#xff09; #include <iostream> using namespace std; struct stu {int num;char name[24];void price(void) {cout << "…

Vue3+Antd實現彈框顯示內容并加入復制按鈕

使用Vue3antd實現點擊彈框出現內容并可復制內容的功能&#xff1a; HTML部分&#xff1a; <a-button type"primary" click"showModel">打開彈框 </a-button><!-- ok 是彈框中確定按鈕的操作&#xff0c;cancel 是彈框中取消按鈕的操作 --…

Redis數據已經刪除了,為什么內存占用還是很高?

Redis數據已經刪除了&#xff0c;為什么內存占用還是很高&#xff1f; Redis做了數據刪除操作&#xff0c;為什么使用top命令時&#xff0c;還是顯示Redis占了很多內存&#xff1f; 沒做相關功課的人覺得這個問題有問題&#xff0c;刪了數據還說占著內存&#xff0c;面試官不…

【學一點兒前端】真機調試本地公眾號網頁項目

前言 微信公眾號網頁開發的真機調試一直是很頭疼的事情。 原因一 微信公眾號配置的JS安全域名只有三個&#xff0c;一個大中型的公眾號這三個JS安全域名都是生產的域名&#xff0c;不可能預留域名用于開發和調試。 原因二 在微信里面只有訪問正確的安全域名才能調用wx.config用…

vuepress-----18、圖片縮放

圖片引入兩種方式 地址 # 圖片縮放插件 # 實戰 md文件引入圖片 <img class"zoom-custom-imgs" :src"$withBase(/favicon.ico)" alt"favicon">安裝配置插件 vuepress/medium-zoom: {selector: img.zoom-custom-imgs,},效果展示

AI:89-基于卷積神經網絡的遙感圖像地物分類

?? 本文選自專欄:人工智能領域200例教程專欄 從基礎到實踐,深入學習。無論你是初學者還是經驗豐富的老手,對于本專欄案例和項目實踐都有參考學習意義。 ??? 每一個案例都附帶有在本地跑過的核心代碼,詳細講解供大家學習,希望可以幫到大家。歡迎訂閱支持,正在不斷更新…

MVCC是什么

程序員的公眾號&#xff1a;源1024&#xff0c;獲取更多資料&#xff0c;無加密無套路&#xff01; 最近整理了一波電子書籍資料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虛擬機》&#xff0c;《重構改善既有代碼設計》&#xff0c;《MySQL高性能-第3版》&…

ChibiOS簡介1/5

ChibiOS簡介1/5 1. 源由2. ChibiOS基礎知識1/52.1 Chapter 1 - Introduction2.1.1 Priciple&#xff08;設計原則&#xff09;2.1.2 Fundamental requirements&#xff08;基本需求&#xff09; 2.2 Chapter 2 - Real Time Systems Concepts2.2.1 System&#xff08;系統&#…

flutter TextPainter 的用法

本文章基于 Flutter 3.16.2 Dart SDK 3.2.2。 TextPainter 是 Flutter 中用于在 Canvas 上繪制文本的類。它允許您在自定義的 CustomPainter 中使用 drawText 方法來繪制文本&#xff0c;并可以控制文本的位置、顏色、字體等屬性。 import package:flutter/material.dart;cla…

【NEON】學習資料匯總

一、資料鏈接 Guide &#xff1a; http://www.heenes.de/ro/material/arm/DEN0018A_neon_programmers_guide_en.pdf csdn博文1&#xff0c;基礎案例&#xff1a; https://blog.csdn.net/kakasxin/article/details/103912832? csdn博文2&#xff0c;內部函數&#xff1a; ht…

css 輸入框動態特效

先上圖 代碼 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>css 輸入框動效</title><style>.inputBox {position: relative;width: 250px;}.inputBox input {width: 100%;padding: 10px…

使用git push太慢怎么辦

使用git push太慢怎么辦 修改host文件&#xff1a; windows 的路徑應該在 C:\Windows\System32\drivers\etc\hosts 在host文件的最后一行加上 151.101.72.249 github.global.ssl.fastly.nethost不允許修改就復制一份&#xff0c;修改好了再替換掉&#xff0c;可能會讓你輸入…

028:簡單的foreach

028:簡單的foreach 總時間限制: 1000ms 內存限制: 65536kB 描述 編寫MyForeach模板&#xff0c;使程序按要求輸出 不得編寫 MyForeach函數 #include <iostream> #include <string> using namespace std; // 在此處補充你的代碼 void Print(string s) {cout <…

【面試經典150 | 二叉樹】對稱二叉樹

文章目錄 寫在前面Tag題目來源解題思路方法一&#xff1a;遞歸方法二&#xff1a;迭代 寫在最后 寫在前面 本專欄專注于分析與講解【面試經典150】算法&#xff0c;兩到三天更新一篇文章&#xff0c;歡迎催更…… 專欄內容以分析題目為主&#xff0c;并附帶一些對于本題涉及到的…

第6講、Hyper-V體系結構和相關管理程序文件及服務:

1、Hyper-V的體系結構 1、CPU能力在服務器虛擬化實現中扮演著一個重要角色&#xff0c;Intel/AMD型號的CPU定義了一些權限 級別&#xff0c;稱為ring。在傳統模型中&#xff0c;ring0級別最高權限最大。Windows內核和設備驅動程序 使用這個級別…

【優選算法系列】【專題一雙指針】第三節.611. 有效三角形的個數和LCR 179. 查找總價格為目標值的兩個商品

文章目錄 前言一、有效三角形的個數 1.1 題目描述 1.2 題目解析 1.2.1 算法原理 1.2.2 代碼編寫 1.2.3 題目總結二、查找總價格為目標值的兩個商品 2.1 題目描述 2.2 題目解析 2.2.1 算法原理 …

0008-【PID學習筆記 8 】控制系統的分析方法

寫在前面 前面已經完成了控制系統的性能指標學習&#xff0c;從這節開始繼續學習控制系統的分析方法&#xff0c;本文重點介紹分析方法概述和時域分析法。 一、控制系統的基本分析方法 控制系統的基本分析方法包括&#xff1a; 古典方法&#xff08;經典控制理論&#xff09;…

獨孤思維:賺錢需要獨一無二的支點,而不是技多不壓身的堆料

賺錢需要找到屬于自己獨一無二&#xff0c;且超乎常人的支點&#xff0c;而不應該一味追求大而全&#xff0c;技多不壓身的堆料。 凡是考了一堆證書&#xff0c;以為掌握多項技能&#xff0c;就能賺到錢的都是學生思維。 尤其是很多剛入職場的年輕人&#xff0c;為了職場晉升…

2024山東健博會,濟南健康展,5月中國大健康展,健康管理展

China-DJK山東健博會&#xff1a;5月黃金招商季&#xff0c;攜千家參展商、萬余款產品精彩亮相&#xff1b; DJK 2024第6屆中國&#xff08;濟南&#xff09;國際大健康產業博覽會 The 2024 sixth China (Jinan) International Big Health Industry Expo 時間&#xff1a;2024…

LLaMA-Factory微調ChatGLM3報錯: Segmentation fault (core dumped)

SFT訓練模型的命令 CUDA_VISIBLE_DEVICES0 python src/train_bash.py \--stage sft \--model_name_or_path models/chatglm3-6b \--do_train \--dataset self_cognition \--template chatglm3 \--finetuning_type lora \--lora_target query_key_value \--output_dir output/c…