wm/slides-2021-06-02.tex

437 lines
12 KiB
TeX
Raw Normal View History

2021-05-24 19:36:27 +03:00
\documentclass[14pt]{beamer}
\usetheme{default}
\usepackage[L7x,T1]{fontenc}
\usepackage[lithuanian]{babel}
\usepackage{graphics}
\usepackage{biblatex}
\usepackage{tabularx}
2021-05-29 00:07:11 +03:00
\usepackage[labelfont={color=vupurple},labelformat=empty,justification=centering]{caption}
2021-05-24 19:36:27 +03:00
\usepackage{tikz}
2021-05-27 17:28:08 +03:00
\usepackage{minted}
2021-05-29 00:07:11 +03:00
\usepackage{subcaption}
2021-05-24 19:36:27 +03:00
\definecolor{vulightgrey}{RGB}{220,220,220}
\definecolor{vudarkgrey}{RGB}{65,65,65}
\definecolor{vupurple}{RGB}{123,0,63}
\definecolor{darkgreen}{RGB}{32,96,32}
\setbeamercolor{title}{fg=vupurple}
\setbeamercolor{frametitle}{fg=vupurple}
2021-05-27 08:53:17 +03:00
\setbeamercolor{abstract title}{fg=vupurple}
2021-05-24 19:36:27 +03:00
\setbeamercolor{item}{fg=vupurple}
\setbeamercolor{navigation symbols dimmed}{fg=vulightgrey}
\setbeamercolor{navigation symbols}{fg=vulightgrey}
\setbeamercolor{normal text}{fg=vudarkgrey}
2021-05-27 17:37:53 +03:00
\usefonttheme{serif}
2021-05-29 00:07:11 +03:00
\AtBeginEnvironment{minted}{%
\renewcommand{\fcolorbox}[4][]{#4}}
\usetikzlibrary{shapes.geometric,arrows,positioning}
2021-05-24 19:36:27 +03:00
\newcommand{\DP}{Douglas \& Peucker}
\newcommand{\VW}{Visvalingam--Whyatt}
\newcommand{\WM}{Wang--M{\"u}ller}
\mode<presentation>{
\setbeamertemplate{navigation symbols}{
\insertslidenavigationsymbol
\insertframenavigationsymbol
\hspace{0.2cm}
\begin{minipage}[c]{0.5cm}
\vspace{-0.1cm}
{\strut\insertframenumber{}/\inserttotalframenumber\strut}
\end{minipage}
}
}
\newcommand{\twocols}[2]
{
\begin{columns}[c]
2021-05-27 17:05:51 +03:00
\begin{column}{0.45\textwidth}
2021-05-24 19:36:27 +03:00
#1
\end{column}
2021-05-27 16:56:25 +03:00
%\hspace{0pt} \vrule{}
2021-05-27 17:05:51 +03:00
\begin{column}{0.55\textwidth}
2021-05-24 19:36:27 +03:00
#2
\end{column}
\end{columns}
}
%% =============================================================================
\title{
\Large\textsc{wangmüller algoritmo realizacija
kartografinei upių generalizacijai}
}
\author{\small \bf Motiejus Jakštys \\[4ex]
\includegraphics[height=4em]{vu}
}
\date{\small 2021-06-02}
2021-05-27 08:53:17 +03:00
2021-05-24 19:36:27 +03:00
\begin{document}
2021-05-27 08:53:17 +03:00
2021-05-24 19:36:27 +03:00
\AtBeginSection[]
{
\begin{frame}
\frametitle{Turinys}
\tableofcontents[currentsection]
\end{frame}
}
\begin{frame}
\titlepage
\end{frame}
2021-06-01 21:07:38 +03:00
\begin{frame}
\begin{abstract}
2021-06-01 21:31:11 +03:00
Dabartiniai linijų paprastinimo algoritmai prastai tinka upėms. Šis darbas
realizuoja {\WM} algoritmą. Jis geriau tinka upėms.
2021-06-01 21:07:38 +03:00
\end{abstract}
\end{frame}
2021-05-27 08:53:17 +03:00
2021-05-24 19:36:27 +03:00
\section{Problema}
2021-05-27 09:05:21 +03:00
\begin{frame}{Linijų paprastinimo algoritmų problemos}
2021-05-27 16:56:25 +03:00
\twocols{
\begin{figure}[ht]
2021-05-30 11:02:54 +03:00
\includegraphics[width=\textwidth]{salvis-dp64overlaid-2x50k}
\includegraphics[width=\textwidth]{salvis-dpchaikin64overlaid-2x50k}
2021-05-27 16:56:25 +03:00
\end{figure}
}{
2021-06-01 21:07:38 +03:00
\begin{itemize}[<+->]
2021-05-27 16:56:25 +03:00
\item Nepritaikyti gamtiniams objektams: upėms, krantų linijoms.
\item Prarandami raiškūs gamtinių objektų elementai: vingiai, kilpos.
2021-05-24 19:36:27 +03:00
\end{itemize}
2021-05-27 16:56:25 +03:00
}
2021-05-24 19:36:27 +03:00
\end{frame}
\section{Uždaviniai}
2021-05-27 17:05:51 +03:00
\begin{frame}{Uždaviniai: algoritmų vertinimas}
2021-05-27 16:56:25 +03:00
\twocols{
2021-05-30 11:02:54 +03:00
\includegraphics[width=\textwidth]{amalgamate1}
2021-05-27 16:56:25 +03:00
}{
2021-05-27 09:05:21 +03:00
\begin{itemize}
2021-05-27 16:56:25 +03:00
\item Įvertinti prieinamus linijų paprastinimo algoritmus.
\item Įvardinti prieinamų algoritmų problemas.
2021-05-24 19:36:27 +03:00
\end{itemize}
2021-05-27 16:56:25 +03:00
}
2021-05-24 19:36:27 +03:00
\end{frame}
2021-05-27 16:56:25 +03:00
\begin{frame}{Uždaviniai: {\WM} realizacija}
\twocols{
\begin{figure}[ht]
\includegraphics[width=\textwidth]{wang125-2}
\caption{{\WM} siūlomas metodas.}
\end{figure}
2021-05-28 07:17:46 +03:00
2021-05-27 16:56:25 +03:00
}{
2021-06-01 21:07:38 +03:00
\begin{itemize}[<+->]
2021-05-27 16:56:25 +03:00
\item Apibrėžti algoritmo techninės realizacijos metodiką.
\item Teoriškai ir techniškai realizuoti algoritmą.
2021-05-27 09:05:21 +03:00
\item Išbandyti su skirtingais duomenų rinkiniais.
\item Palyginti su valstybiniais duomenų rinkiniais.
2021-05-24 19:36:27 +03:00
\end{itemize}
2021-05-27 16:56:25 +03:00
}
2021-05-24 19:36:27 +03:00
\end{frame}
2021-05-28 07:17:46 +03:00
\section{Aktualumas}
2021-05-28 06:44:22 +03:00
\begin{frame}[fragile]{Aktualumas: praplečiama teorija}
2021-05-27 17:40:09 +03:00
\begin{columns}[c]
2021-05-27 18:00:21 +03:00
\begin{column}{.3\textwidth}
2021-05-28 07:17:46 +03:00
\begin{figure}[ht]
\includegraphics[width=\textwidth]{selfcrossing-1}
\end{figure}
2021-05-27 17:40:09 +03:00
\end{column}
2021-05-27 18:00:21 +03:00
\begin{column}{.7\textwidth}
2021-06-01 21:07:38 +03:00
\begin{itemize}[<+->]
2021-05-28 07:17:46 +03:00
2021-06-01 21:31:11 +03:00
\item Praplečia kartografinės teorijos žinias apie gamtinių objektų
generalizavimą atsižvelgiant į jų raiškumą.
2021-05-28 07:17:46 +03:00
\item {\WM} straipsnis sprendimų nedetalizuoja taip, kad būtų
2021-05-27 18:00:21 +03:00
galima pritaikyti. Šis darbas tai padaro.
2021-05-28 07:17:46 +03:00
2021-05-27 18:00:21 +03:00
\end{itemize}
2021-05-27 17:40:09 +03:00
\end{column}
\end{columns}
2021-05-27 17:28:08 +03:00
\end{frame}
2021-05-27 17:05:51 +03:00
2021-05-24 19:36:27 +03:00
\begin{frame}{Aktualumas: panaudojimas}
2021-05-28 07:17:46 +03:00
\begin{columns}[c]
\begin{column}{.3\textwidth}
\begin{figure}[ht]
\includegraphics[width=\textwidth]{github-wm}
\end{figure}
\end{column}
\begin{column}{.7\textwidth}
\begin{itemize}
2021-06-01 21:31:11 +03:00
\item Papildomas atviro kodo sprendimas automatiniams generalizavimo
2021-05-28 07:17:46 +03:00
uždaviniams.
2021-06-01 21:31:11 +03:00
\item Be kliūčių gali būti pritaikytas kartografų.
2021-05-28 07:17:46 +03:00
\end{itemize}
\end{column}
\end{columns}
2021-05-24 19:36:27 +03:00
\end{frame}
\section{Metodika}
\begin{frame}{Techninė implementacija: aplinka}
2021-05-28 07:17:46 +03:00
\begin{columns}[c]
\begin{column}{.3\textwidth}
\begin{figure}[ht]
2021-05-29 00:07:11 +03:00
\begin{subfigure}[b]{\textwidth}
\centering
\includegraphics[width=.7\textwidth]{postgis-logo}
\end{subfigure}
\\[1ex]
\begin{subfigure}[b]{\textwidth}
\centering
2021-05-28 07:17:46 +03:00
\includegraphics[width=.5\textwidth]{postgresql-logo}
2021-05-29 00:07:11 +03:00
\end{subfigure}
\\[1ex]
\begin{subfigure}[b]{\textwidth}
\centering
\includegraphics[width=.6\textwidth]{osi-logo}
\end{subfigure}
2021-05-28 07:17:46 +03:00
\end{figure}
\end{column}
\begin{column}{.7\textwidth}
2021-06-01 21:07:38 +03:00
\begin{itemize}[<+->]
2021-05-28 07:17:46 +03:00
\item Realizacija kurta PostGIS.
2021-05-24 19:36:27 +03:00
\item PostGIS yra PostgreSQL duomenų bazės papildinys darbui su GIS.
2021-05-28 07:17:46 +03:00
\item Atviro kodo nemokama programinė įranga.
2021-05-24 19:36:27 +03:00
2021-05-28 07:17:46 +03:00
\item PostGIS sprendimai veikia iš praktiškai bet kokios programavimo
kalbos, todėl yra universalūs.
\end{itemize}
\end{column}
\end{columns}
2021-05-24 19:36:27 +03:00
\end{frame}
2021-05-28 07:17:46 +03:00
2021-05-29 00:24:26 +03:00
\begin{frame}[fragile]{Techninė implementacija: algoritmas}
\begin{minted}[fontsize=\small]{sql}
CREATE FUNCTION ST_SimplifyWM(
geom geometry,
dhalfcircle float,
) RETURNS geometry AS $$
...
END $$ LANGUAGE plpgsql;
\end{minted}
2021-05-24 19:36:27 +03:00
2021-05-29 00:24:26 +03:00
\vspace{2em}
2021-05-24 19:36:27 +03:00
2021-05-29 00:24:26 +03:00
\textsc{dhalfcircle}: pusskritulio skersmuo. Analogiško ir didesnio ploto
linkių, nei šis pusapskritimis, nepaprastina.
2021-05-24 19:36:27 +03:00
\end{frame}
\begin{frame}{Algoritmo realizacijos procesas}
\tikzset{
startstop/.style={trapezium,text centered,minimum height=2em,
trapezium left angle=70,trapezium right angle=110,draw=black,fill=red!20},
proc/.style={rectangle,minimum height=2em,text centered,draw=black,
fill=orange!20},
decision/.style={diamond,minimum height=2em,text centered,aspect=3,
draw=black,fill=green!20},
arrow/.style={thick,->,>=stealth},
}
\begin{figure}
\centering
\scalebox{.35}{
\begin{tikzpicture}[node distance=2cm,auto]
\node (start) [startstop] {Nuskaityti \textsc{linestring}};
\node (detect) [proc,below of=start] {Aptikti linkius};
\node (inflections) [proc,below of=detect] {Sutvarkyti nežymius išlinkimus};
\node (selfcrossing) [proc,below of=inflections] {Pašalinti save kertančias vietas};
\node (mutated1) [decision,below of=selfcrossing] {Koreguotas?};
\node (bendattrs) [proc,below of=mutated1] {Apskaičiuoti linkio savybes};
\node (exaggeration) [proc,below of=bendattrs] {Didinti linkį};
\node (mutated2) [decision,below of=exaggeration] {Koreguotas?};
\node (elimination) [proc,below of=mutated2] {Pašalinti linkį};
\node (mutated3) [decision,below of=elimination] {Koreguotas?};
\node (stop) [startstop,below of=mutated3] {Pabaiga};
\coordinate [right of=mutated1,node distance=5cm] (mutated1y) {};
\coordinate [right of=mutated2,node distance=5cm] (mutated2y) {};
\coordinate [right of=mutated3,node distance=5cm] (mutated3y) {};
\draw [arrow] (start) -- (detect);
\draw [arrow] (detect) -- (inflections);
\draw [arrow] (inflections) -- (selfcrossing);
\draw [arrow] (selfcrossing) -- (mutated1);
\draw [arrow] (mutated1) -| node [near start] {Taip} (mutated1y) |- (detect);
\draw [arrow] (mutated1) -- node[anchor=west] {Ne} (bendattrs);
\draw [arrow] (bendattrs) -- (exaggeration);
\draw [arrow] (exaggeration) -- (mutated2);
\draw [arrow] (mutated2) -| node [near start] {Taip} (mutated2y) |- (detect);
\draw [arrow] (mutated2) -- node[anchor=west] {Ne} (elimination);
\draw [arrow] (mutated3) -| node [near start] {Taip} (mutated3y) |- (detect);
\draw [arrow] (mutated3) -- node[anchor=west] {Ne} (stop);
\draw [arrow] (elimination) -- (mutated3);
\end{tikzpicture}
}
\end{figure}
\end{frame}
2021-05-29 00:07:11 +03:00
\begin{frame}{Automatiniai testai padeda tęstinumui}
\tikzset{
arrow/.style={thick,->,>=stealth},
}
\begin{figure}
\begin{tikzpicture}[auto]
\onslide<1->{
\node (before) []{
\includegraphics[width=.4\textwidth]{isolated-1-before.pdf}
};
}
\onslide<2->{
\node(after) [right=2cm of before.east]{
\includegraphics[width=.4\textwidth]{isolated-1-after.pdf}
};
}
\onslide<2->{
\draw[arrow] (before) -- node[anchor=south] {\footnotesize Programa} (after);
}
\end{tikzpicture}
\end{figure}
\onslide<3->{
\begin{itemize}
\item<3-> Iš duomenų ir rezultato sukuriamas testas.
\item<4-> Testai patikrina, ar programa veikia teisingai.
\item<4-> Išsaugomas tęstinumas ją keičiant.
\end{itemize}
}
\end{frame}
\section{Įgyvendinimas}
\begin{frame}{Pasiruošimas}
2021-06-01 21:07:38 +03:00
\begin{itemize}[<+->]
2021-06-01 21:31:11 +03:00
\item Duomenų, pagalbinių funkcijų, \\ testavimo logikos paruošimas.
2021-05-29 00:07:11 +03:00
\item Upių sujungimas.
\end{itemize}
\end{frame}
\begin{frame}{Algoritmo etapai}
2021-06-01 21:07:38 +03:00
\begin{itemize}[<+->]
2021-05-29 00:07:11 +03:00
\item Linkių aptikimas ir sutvarkymas.
2021-06-01 21:31:11 +03:00
\item Linkių keitimo operatoriai: \\ eliminavimas ir didinimas.
2021-05-29 00:07:11 +03:00
\item Jungimas neimplementuotas.
\end{itemize}
\end{frame}
\section{Rezultatai}
\begin{frame}{GRPK10 ir {\WM}}
\includegraphics[width=\textwidth]{salvis-wm75--grpk10-1x50k}
\end{frame}
\begin{frame}{GRPK10, GRPK50 ir {\WM}}
\includegraphics[width=\textwidth]{salvis-wm75-grpk50-grpk10-1x50k}
\end{frame}
\begin{frame}{GRPK250 ir {\WM}}
\begin{figure}[h!]
\centering
\begin{subfigure}[b]{.49\textwidth}
\includegraphics[width=\textwidth]{salvis-grpk250-2x}
\caption{GRPK250.}
\end{subfigure}
\hfill
\begin{subfigure}[b]{.49\textwidth}
\centering
\includegraphics[width=\textwidth]{salvis-wm220}
\caption{{\WM}.}
\end{subfigure}
\end{figure}
\end{frame}
\begin{frame}{{\DP}}
\includegraphics[width=\textwidth]{salvis-wm75-dp64-grpk10-1x50k}
\end{frame}
\begin{frame}{{\DP}+Chaikin}
\includegraphics[width=\textwidth]{salvis-wm75-dpchaikin64-grpk10-1x50k}
\end{frame}
\begin{frame}{Išbandymas internete}
\centering
\includegraphics[width=.75\textwidth]{openmap-wm-good.png}
\includegraphics[width=.3\textwidth]{openmap-wm-bad.png}
2021-05-24 19:36:27 +03:00
2021-05-29 00:07:11 +03:00
{\tiny https://dev.openmap.lt/webgl/wm.html}
2021-05-24 19:36:27 +03:00
\end{frame}
2021-05-29 00:32:01 +03:00
\begin{frame}{Faktai}
\begin{itemize}
\item $>1000$ eilučių procedūrinio SQL.
\item $\sim500$ eilučių Python, Awk, GNU Make.
\item Susidomėjimas atsirado iš karto (web versija).
\end{itemize}
\end{frame}
\section{Išvados ir pasiūlymai ateičiai}
2021-06-01 21:07:38 +03:00
\begin{frame}{Realizacijos išvados}
\begin{itemize}[<+->]
2021-05-29 00:15:08 +03:00
2021-06-01 21:31:11 +03:00
\item Prienami linijų paprastinimo algoritmai ne itin tinka upėms.
\item Raiškūs upių linkiai pašalinami.
2021-06-01 21:07:38 +03:00
\item Aprašant metodą {\WM} realizacijai pastebėti trūkstami žingsniai.
2021-05-29 00:15:08 +03:00
\end{itemize}
\end{frame}
2021-06-01 21:07:38 +03:00
\begin{frame}{Palyginimo išvados}
Realizacija Šalčiai--Visinčiai palyginta su:
\begin{description}[<+->]
\item[D\&P, V--W (+Chaikin):] labiau išlaikoma natūrali
upės forma.
\item[GRPK50:] beveik nesiskiria nuo GRPK10.
\item[GRPK250:] padėjo atskleisti realizacijos klaidų smulkiuose
masteliuose.
\end{description}
\end{frame}
2021-05-29 00:15:08 +03:00
\begin{frame}{Pasiūlymai ateičiai}
2021-06-01 21:07:38 +03:00
\begin{itemize}[<+->]
2021-06-01 21:31:11 +03:00
\item Implementuoti kombinavimo operatorių.
2021-05-29 00:15:08 +03:00
\item Rasti ir aprašyti geresnius kriterijus izoliuotiems linkiams.
\item Pagerinti algoritmo laiko ir atminties sąnaudas.
\item Pilnesnė kartografinė generalizacija, įskaitant topologiją.
\end{itemize}
\end{frame}
\begin{frame}{Ačiū}
2021-06-01 21:07:38 +03:00
\url{https://github.com/motiejus/wm} \\[.5em]
\url{https://dev.openmap.lt/webgl/wm.html}
2021-05-29 00:15:08 +03:00
\end{frame}
2021-05-24 19:36:27 +03:00
\end{document}