• Nenhum resultado encontrado

Ahmi, A. (2022). Bibliometric analysis using r for non-coders: A practical handbook in conducting bibliometric analysis studies using Biblioshiny for Bibliometrix R package.

Aria, M., & Cuccurullo, C. (2017). bibliometrix: An R-tool for comprehensive science mapping analysis. Journal of Informetrics, 11(4), 959–975. https://doi.org/10.1016/J.JOI.2017.08.007.

Aria, M., & Cuccurullo, C. (2022). thematicEvolution: Perform a Thematic Evolution Analysis in bibliometrix: Comprehensive Science Mapping Analysis. Available from: from https://rdrr.io/cran/bibliometrix/man/thematicEvolution.html [Accessed July 29, 2022].

De Souza, E., Boerder, K., Matwin, S., & Worm, B. (2016). Improving Fishing Pattern Detection from Satellite AIS Using Data Mining and Machine Learning. PLoS ONE, 11(7).

https://doi.org/10.1371/journal.pone.0158248.

Decreto-Lei nº 198/2006. D.R. I Série, 202 (19-10-2006), 7297-7299.

Cobo, M., Lopez-Herrera, A., Herrera-Viedma, E., & Herrera, F. (2011). An approach for detecting, quantifying, and visualizing the evolution of a research field: A practical application to the fuzzy sets theory field. Journal of Informetrics, 5(1), 146-166.

EMSA (2019). EMSA Traffic Density Mapping Service Methodology. The European Marine Observation and Data Network (EMODnet). Available from: http://emsa.europa.eu/related-projects/tdms/download/5752/3097/23.html [Accessed October 06, 2021].

Ester, M., Kriegel, H., Sander, J., & Xu, X. (1996). A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise. In Proceedings of Second International Conference on Knowledge Discovery and Data Mining, Portland, OR, USA, 226–231.

Gil, M., Wróbel, K., Montewka, J., & Goerlandt, F. (2020). A bibliometric analysis and systematic review of shipboard Decision Support Systems for accident prevention. Safety Science, 128 (1), 1-50. https://doi.org/10.1016/j.ssci.2020.104717.

Graser, A. (2019). MovingPandas: Efficient structures for movement data in Python. GI_Forum, 7(1), 54–68. https://doi.org/10.1553/GISCIENCE2019_01_S54.

Hsu, H. (2014). Safety Domain Measurement for Vessels in an Overtaking Situation. International Journal of E-Navigation and Maritime Economy, 1, 29–38.

https://doi.org/10.1016/J.ENAVI.2014.12.004.

IMO (2015). Revised guidelines for the onboard operational use of shipborne automatic identification systems (AIS). Resolution A.1106(29).

IMO (2020). Keep ships moving, ports open and cross-border trade flowing, urge UN entities.

Available from: https://www.imo.org/en/MediaCentre/PressBriefings/Pages/19-IMO-UNCTAD-.aspx [Accessed April 04, 2021].

40 Jordahl, K., Bossche, J., Fleischmann, M., Wasserman, J., McBride, J., Gerard, J., & Leblanc, F.

(2020). geopandas/geopandas: v0.8.1. Zenodo. http://doi.org/10.5281/zenodo.3946761 Kluyver, T., Ragan-Kelley, B., Pérez, F., Granger, B., Bussonnier, M., Frederic, J., Kelley, K.,

Hamrick, J., Grout, J., Corlay, S., Ivanov, P., Avila, D., Abdalla, S., & Willing, C. (2016).

Jupyter Notebooks – a publishing format for reproducible computational workflows.

Positioning and Power in Academic Publishing: Players, Agents and Agendas, 87–90.

https://doi.org/10.3233/978-1-61499-649-1-87

Lane, R., Nevell, D., Hayward, S., & Beaney, T. (2010). Maritime anomaly detection and threat assessment. 13th International Conference on Information Fusion, 1-8.

https://doi.org/10.1109/ICIF.2010.5711998.

Laxhammar, R. (2008). Anomaly detection for sea surveillance. 11th International Conference on Information Fusion, 1-8.

Lee, J., Han, J., & Li, X. (2008). Trajectory outlier detection: A partition-and-detect framework.

IEEE 24th International Conference on Data Engineering, 140–149.

https://doi.org/10.1109/ICDE.2008.4497422.

Machado, T., Maia, R., Santos, P., & Ferreira, J. (2019). Vessel trajectories outliers. Advances in Intelligent Systems and Computing, 806, 247–255. https://doi.org/10.1007/978-3-030-01746-0_29.

MarineCadastre.gov (2018). AIS Vessel Type and Group Codes. MarineCadastre.gov. Available from: https://marinecadastre.gov/ais/AIS Documents/VesselTypeCodes2018.pdf [Accessed November 15, 2021].

McCauley, D., Woods, P., Sullivan, B., Bergman, B., Jablonicky, C., Roan, A., Hirshfield, M., Boerder, K. & Worm, B. (2016). Ending hide and seek at sea. Science, 351(6278), 1148–

1150. https://doi.org/10.1126/science.aad5686.

Mehri, S., Alesheikh, A., & Basiri, A. (2021). A Contextual Hybrid Model for Vessel Movement Prediction. IEEE Access, 9, 45600–45613. https://doi.org/10.1109/ACCESS.2021.3066463.

Miller, N., Roan, A., Hochberg, T., Amos, J., & Kroodsma, D. (2018). Identifying global patterns of transshipment behavior. Frontiers in Marine Science, 5(JUL), 240.

https://doi.org/10.3389/fmars.2018.00240.

Morris, B., & Trivedi, M. (2008). A survey of vision-based trajectory learning and analysis for surveillance. IEEE Transactions on Circuits and Systems for Video Technology, 18(8), 1114–

1127. https://doi.org/10.1109/TCSVT.2008.927109.

Natale, F., Gibin, M., Alessandrini, A., Vespe, M., & Paulrud, A. (2015). Mapping fishing effort through AIS data. PLoS ONE, 10(6). https://doi.org/10.1371/journal.pone.0130746.

41 NATO (2021). NATO Shipping Centre - AIS (Automatic Identification System) Overview. Available from: https://shipping.nato.int/nsc/operations/news/2021/ais-automatic-identification-system-overview [Accessed November 03, 2021].

Pallotta, G., Vespe, M., & Bryan, K. (2013). Vessel pattern knowledge discovery from AIS data:

A framework for anomaly detection and route prediction. Entropy, 15(6), 2218–2245.

https://doi.org/10.3390/e15062218.

Pereira, R. (2018). AIS Data Visualization applied to the identification of anomalous vessels’

movements on the Portuguese maritime territory. July.

https://estudogeral.sib.uc.pt/handle/10316/83542.

Pinto, R. (2017). Análise de dados da fiscalização da pesca – Estudo da evolução e exploração dos recursos piscícolas no ecossistema marinho português. Master's thesis, Escola Naval, Alfeite.

PJ (2020). Relatório anual 2020 estatística TCD. Polícia Judiciária. Available from:

https://www.policiajudiciaria.pt/wp-content/uploads/2021/04/RelatorioAnual2020-EstatisticaTCD.pdf [Accessed October 20, 2021].

PostGIS (n.d.). About PostGIS. Available from: https://postgis.net [Accessed January 20, 2022].

PostgreSQL Global Development Group (2021). What is PostgreSQL? Documentation - PostgreSQL 14. Available from: https://www.postgresql.org/docs/14/intro-whatis.html [Accessed May 10, 2021].

QGIS.org (2021). QGIS Geographic Information System. QGIS Association. Available from:

http://www.qgis.org [Accessed May 10, 2021].

Ristic, B., La Scala, B., Morelande, M., & Gordon, N. (2008). Statistical Analysis of Motion Patterns in AIS Data: Anomaly Detection and Motion Prediction. 11th International Conference on Information Fusion, 1-7.

Silveira, P., Teixeira, A., & Soares, C. (2013). Use of AIS data to characterise marine traffic patterns and ship collision risk off the coast of portugal. Journal of Navigation, 66, 879–898.

SSI (2020). Relatório Anual de Segurança Interna de 2020. Governo da República Portuguesa.

Available from: http://www.ansr.pt/InstrumentosDeGestao/Documents/Relatório Anual de Segurança Interna (RASI)/RASI 2016.pdf [Accessed October 20, 2021].

Timonet, D. & Abecasis, D. (2020). An integrated approach for the design of a marine protected area network applied to mainland Portugal. Ocean & Coastal Management, 184, 105014.

https://doi.org/10.1016/J.OCECOAMAN.2019.105014.

Tu, E., Zhang, G., Rachmawati, L., Rajabally, E., & Huang, G. (2018). Exploiting AIS Data for Intelligent Maritime Navigation: A Comprehensive Survey from Data to Methodology. IEEE

42 Transactions on Intelligent Transportation Systems, 19(5), 1559–1582.

https://doi.org/10.1109/TITS.2017.2724551.

UNCTAD (2021). Review of Maritime Transport 2021. Available from:

https://unctad.org/webflyer/review-maritime-transport-2021 [Accessed July 14, 2022].

United Nations (2019) SC/13691 - High Seas Crime Becoming More Sophisticated, Endangering Lives, International Security, Speakers Tell Security Council. Meetings Coverage. Available from: https://www.un.org/press/en/2019/sc13691.doc.htm [Accessed October 14, 2020].

Van Eck, N., & Waltman, L. (2010). Software survey: VOSviewer, a computer program for bibliometric mapping. Scientometrics, 84(2010), 523-538, https://doi.org/10.1007/s11192-009-0146-3.

Wang, K., Liang, M., Li, Y., Liu, J., & Liu, R. (2019). Maritime Traffic Data Visualization: A Brief Review; Maritime Traffic Data Visualization: A Brief Review. 2019 IEEE 4th International Conference on Big Data Analytics (ICBDA), 2019, 67-72.

https://doi.org/10.1109/ICBDA.2019.8713227.

Xiao, F., Ligteringen, H., Van Gulijk, C., & Ale, B. (2015). Comparison study on AIS data of ship traffic behavior. Ocean Engineering, 95, 84–93. https://doi.org/10.1016/J.OCEANENG.

2014.11.020.

Xiao, Z., Fu, X., Zhang, L., & Goh, R. (2020). Traffic Pattern Mining and Forecasting Technologies in Maritime Traffic Service Networks: A Comprehensive Survey. IEEE Transactions on Intelligent Transportation Systems, 21(5), 1796–1825.

https://doi.org/10.1109/TITS.2019.2908191.

43

ANNEXES

A - CONTENT ANALYSIS METHODOLOGIES

Authors Title Citations Methodology

Morris and Trivedi, 2008

A survey of vision-based trajectory learning and

analysis for surveillance 375

Trajectory preprocessing and clustering, path modeling. Automatic activity analysis: speed profiling, path classification, abnormaly detection.

Pallotta et al., 2013

Vessel pattern

knowledge discovery from AIS data: A framework for anomaly detection and route prediction

344

Unsupervised (clustering) model:

TREAD (Traffic Route Extraction and Anomaly Detection). Point-based traffic representation with time integration.

Lee et al., 2008

Trajectory Outlier Detection: A

Partition-and-Detect Framework 341

Trajectory partitioning and detection:

distance-based and density-based approaches. Algorithm TRAOD (TRAjectory Outlier Detection).

Ristic et al., 2008

Statistical analysis of motion patterns in AIS data: Anomaly detection and motion prediction

223

Statistical analysis of vessel motion patterns. Adaptive kernel density estimation to detect motion anomalies.

Predicting the movement of vessels using the Gaussian sum tracking filter.

Silveira et al., 2013

Use of AIS data to characterise marine traffic patterns and ship collision risk off the coast of Portugal

200

Statistical analysis of traffic. Route characterization program and ship collision models (probability of occurrence based on statistical information).

Natale et al., 2015

Mapping fishing effort

through AIS data 123

Analysis of individual vessel’s speed profiles and production of high resolution map of fishing effort.

De souza et al., 2016

Improving fishing pattern detection from satellite AIS using data mining and machine learning

110

Hidden Markov Model: vessel speed as variable; data mining inspired on animal movement; multi-layered filtering based on vessel speed.

44 Laxhammar,

2008

Anomaly detection for

sea surveillance 94

Unsupervised clustering of traffic patterns. Gaussian Mixture Model and Expectation-Maximization algorithm.

Tu et al., 2018

Exploiting AIS Data for Intelligent Maritime

Navigation: A

Comprehensive Survey

from Data to

Methodology

93

Data mining (statistical methods, neural networks and machine learning): traffic anomaly detection, route estimation, collision prediction, and path planning.

Lane et al., 2010

Maritime anomaly detection and threat

assessment 87

Bayesian network to calculate probability of anomalous ship behaviours. Gaussian mixture model (clustering) and kernel density estimator.

Table A - 1 – Top-10 manuscripts per citations

45

B – CODE FOR CONSTRUCTING SHIP TRAJECTORIES

#Loading geodata and convert to GeoDataFrame t_start = datetime.now()

gdf_orig = gpd.read_file('D:/ais/ais_ptsat_d18.shp')

print("Finished reading {} rows in {}".format(len(gdf_orig),datetime.now() - t_start))

#Convert multipoint to point

gdf_p=gdf_orig.explode(index_parts=True)

#Discard mmsi= 0

print("Original size: {} rows".format(len(gdf_p))) gdf_p1 = gdf_p[(gdf_p.mmsi!=0)]

x=len(gdf_p)-len(gdf_p1)

print("Reduced to {} rows after removing {} mmsi records".format(len(gdf_p1),x))

#Discard values less than zero and values greater than 30 print("Original size: {} rows".format(len(gdf_p1)))

gdf = gdf_p1[(gdf_p.speed_over>=0)&(gdf_p1.speed_over<=30)]

x=len(gdf_p1)-len(gdf)

print("Reduced to {} rows after removing {} speed records".format(len(gdf),x)) print("Reduced to {} rows after removing {} speed records".format(len(gdf),x))

#Calculate x and y coordinates gdf["x"] = gdf["geometry"].x gdf["y"] = gdf["geometry"].y

#Create a temporal index to convert the GeoDataFrame to Trajectories:

gdf['t'] = pd.to_datetime(gdf['instant'], format='%Y-%m-%d %H:%M:%S') gdf = gdf.set_index('t')

#Create trajectories t_start = datetime.now()

traj_collection = mpd.TrajectoryCollection(gdf,'mmsi', t='t', x='x', y='y')

print("Finished creating {} trajectories in {}".format(len(traj_collection),datetime.now() - t_start))

#Return a GeoDataFrame with one row per Trajectory within the TrajectoryCollection def to_traj_gdf(self, wkt=False):

gdfs = [traj.to_traj_gdf(wkt) for traj in self.trajectories]

gdf_t = pd.concat(gdfs)

gdf_t.reset_index(drop=True, inplace=True) return gdf_t

export_traj_gdf=to_traj_gdf(traj_collection, wkt=False)

export_traj_gdf.to_file("D:/ais/traj_gdf_d", layer='trajectories', driver="GPKG")

#The trajectories layer was stored in postgreSQL database through the postgis extension in QGIS

46

C – CODE FOR SHIP ENCOUNTERS MODEL

#create connection to GIS database conn = psycopg2.connect(

host="localhost", database="GIS", user="postgres", password="****")

#store the result of the query into GeoDataFrame import_sql = "select * from tese.trajectories"

#add the coast costa_sql = """

select * from "DADOS_BASE"."NC_Paises_LR_level0_PL"

"""

trajectories_gdf = gpd.GeoDataFrame.from_postgis(import_sql, conn) costa = gpd.GeoDataFrame.from_postgis(costa_sql, conn)

#closes the connection conn.close()

#create area to restrict map size

polygon = Polygon([(-10, 36), (-7, 36), (-7, 38), (-10, 38), (-10, 36)])

#function to select trajectories with speed equal to or less than 5 knots, and which are more than 5 NM from the coast

def low_speed_5coast(trajectories,polygon_extent,coast_polygon):

traj_5kn = trajectories[(trajectories['speed_over'] <=5)]

x = len(trajectories)-len(traj_5kn)

print("Reduced to {} rows after removing {} speed records".format(len(traj_5kn),x)) poly_gdf = gpd.GeoDataFrame ([1], geometry=[polygon_extent], crs=coast_polygon.crs) coast = coast_polygon.clip(poly_gdf)

coast_proj = coast.to_crs(3857)

coast_buf = coast_proj.buffer(9260) #5NM coast_buf = coast_buf.to_crs(4326)

coast_gdf = gpd.GeoDataFrame(geometry = gpd.GeoSeries(coast_buf)) traj_filter = gpd.overlay(traj_5kn, coast_gdf, how = 'difference')

return traj_filter, coast

#Function execution

traj_new, c = low_speed_5coast(trajectories_gdf,polygon,costa)

#Database connection to import geodataframes to PostgreSQL table

engine = create_engine('postgresql+psycopg2://postgres:****@localhost:5432/GIS') conn = engine.connect()

#Import traj_new to PostgreSQL table

traj_new.to_postgis(name='traj_filter', con = conn, schema = 'tese',if_exists = 'replace')

#Closes the connection conn.close()

#Connect to GIS database conn = psycopg2.connect(

host="localhost",

47 database="GIS",

user="postgres", password="****")

#Create a cursor object called cur cur = conn.cursor()

#Create index to improve performance

idx="""CREATE INDEX mmsi_idx_tr ON tese.traj_filter (mmsi);

CREATE INDEX inst_idx_tr ON tese.traj_filter (instant);

CREATE INDEX id_idx_tr ON tese.traj_filter (id_0, mmsi, instant);

"""

#Execute query cur.execute(idx)

#Store the result of the query into table

#Selects pairs of ships that are within 300 yards of each other, and the timestamp difference is less than 20 minutes

meet = """CREATE TABLE tese.meet AS (SELECT t1.mmsi as mmsi_1,

t2.mmsi as mmsi_2, t1.id_0 as id_0_1, t2.id_0 as id_0_2, t1.instant as instant_1, t2.instant as instant_2, t1.geom as geom_1, t2.geom as geom_2

FROM tese.traj_filter as t1, tese.traj_filter as t2 WHERE

t1.mmsi > t2.mmsi -- para navios diferentes

AND ST_DWithin(t1.geom, t2.geom, 0.0025) -- 300 jj AND t1.id_0 > t2.id_0 -- para pontos diferentes AND t1.instant > t2.instant

AND t1.instant-t2.instant < '20 minutes'::interval -- cuja diferença de tempo é pequena );"""

#Execute query cur.execute(meet)

#Import meetings table

import_meet = "select * from tese.meet"

#Store the result of the query into GeoDataFrame

meet_gdf = gpd.GeoDataFrame.from_postgis(import_meet, con=conn, geom_col="geom_1")

#Store the result of the query into table

#From the previously selected pairs of ships, filter those that have been close for at least 1 hour and join the trajectory segments by ship identification

group = """

create table tese.group AS (SELECT t1.* FROM ( SELECT mmsi_1, mmsi_2,

MAX(instant_1)-MIN(instant_1) as inter_1, MAX(instant_2)-MIN(instant_2) as inter_2, ST_Union(geom_1) as geom1,

ST_Union(geom_2) as geom2 FROM tese.meet

GROUP BY

48 mmsi_1,

mmsi_2) t1

where inter_1 > '1 hour' OR inter_2 > '1 hour');

"""

#Execute query cur.execute(group)

#Import grouped meetings table

import_group = "select * from tese.group"

#Store the result of the query into GeoDataFrame

meet1_gdf = gpd.GeoDataFrame.from_postgis(import_group, con=conn, geom_col="geom1") meet2_gdf = gpd.GeoDataFrame.from_postgis(import_group, con=conn, geom_col="geom2")

#Closes the connection conn.close()

Documentos relacionados