-
-
-
Potrzebuje pomocy napisania na papierze algorytmu tzw pseudokod, opisowo.
Mam wymyśłeć algorytm do autoamtycznej generalizacji map wektorowych,
tak aby nasze mapy w gpsach były dokładniejsze, chodzi o drogi i rzeki,
jakie propozycje mozna przedstawić?
Na podstawie mapy polski w mapedit.
Prosze o jakies rady, wsazowki, pomozcie!
[ Dodano: 2012-01-26, 23:57 ]
Witam!
Potrzebuje pomocy, napisania pseudokodu takiego algorytmu . Mam juz opisowo opracowany mniej wiecej moj algorytm do pracy , tylko
musze go przedstawić za pomoca pseudokodu tylko, pomoze mi ktos? A wiec to jest ten moj algorytm:
W taki sposób tworze algorytm:
- usuwamy drogi i rzeki najniższej kategorii,
if warunek then
ciąg instrukcji:
for rodzaj drogi na mapie
{
for odpowiedni dla konkretnej drogi odpowiedni punkt drogi na mapie
{
if usuwamy drogi najniższej kategorii
jeżeli droga ma kategorię mniejszą niż minimalna kategoria dla skali to
usuń drogę
then zostają nam drogi, które będziemy rozpatrywać
else wynik nas zadawala
W taki sam sposób robimy takie czynności:
- usuwamy ronda i łączymy drogi prowadzące do ronda,
- usuwamy rampy,
- usuwamy krótkie odcinki dróg i łączymy węzły tych odcinków,
Teraz używamy algorytmu grupowania gdyż:
- grupujemy drogi o podobnych typach i nadajemy im jeden wspólny typ
if
jeżeli droga ma typ drogi ekspresowej to ustawiamy taki typ drogi
Następnie po uzyskaniu grupowania robimy kolejny krok:
- łączymy odcinki ze wspólnym węzłem i identycznym typem drogi.
A więc na wejściu mamy tak:
po znalezieniu dwóch odcinków ze wspólnym węzłem (końcowym) i
identycznym typem sprawdzamy:
- czy wspólny punkt jest w pierwszym odcinku ostatni, a w drugim odcinku
czy jest pierwszy
- jeśli nie, zamieniamy je miejscami (nazwami) i wracamy do sprawdzania -
albo zamieniamy tylko ich określenie /pierwszy/drugi
- jeśli nadal nie, odwracamy kolejność punktów w tym, który tymczasem
uznamy za „pierwszy”.
Możemy to sprawdzanie zrobić jeszcze tak:
- sprawdzamy, które punkty "pierwszy-ostatni" się pokrywają, i
zależnie od tego nazywamy je sobie "pierwszy-drugi" i robimy
odwracanie kolejności punktów nazwanego jako pierwszy
- kasujemy (pomijamy) w jednym z nich jedno z powtarzających się
wystąpień tej współrzędnej wspólnej
- łączymy ciągi współrzędnych "jeden+drugi".
Powstaje nam wyjście - jeden odcinek połączony.
Tak robimy dla kolejnych odcinków dróg, aż uzyskamy zamierzony cel.
Poniżej widzimy zalecaną „gradacje” typów, poziomów i symboli dla
dróg:
TYPE 0x01
12345 4 ~[0x2b]a4 # autostrada
TYPE 0x02
23456 4 ~[0x2c]s7 # droga szybkiego ruchu/krajowe >=2 pasy w 1
stronę
TYPE 0x03
34567 3 ~[0x2c]12 # krajowe 1- i 2-cyfrowe
45678 3 ~[0x2d]345 # niektóre ważniejsze 3-cyfrowe
TYPE 0x04
56789 2 ~[0x2d]345 # większość 3-cyfrowych
TYPE 0x05
67890 2 # lokalne, bez numerów
TYPE 0x06
78999 1 # osiedlowe w miastach, zupełnie boczne we wsiach itp.
Rozwiązanie dla każdej linii typu rzeka:
- bierzemy współrzędne pierwszego punktu,
- przeglądamy wszystkie punkty innych rzek czy są takie same
(porównując xx.yy,zz.ww),
- jeśli znajdziemy jako pierwszy lub ostatni punkt, ale raz, to są to
kolejne odcinki tej samej rzeki (można współrzędne ustawić w
odpowiedniej kolejności zależnie które punkty się pokrywają),
- jeżeli znajdziemy dwa punkty, to jest to rozwidlenie rzek lub rzeki
spływają się (wtedy pozostawiamy to bez zmian).
Można to opisać tak:
dla każdego pierwszego i ostatniego punktu rzeki (linii typu rzeka jest
kilka) szukamy punktu położonego w tych samych współrzędnych, w
promieniu (może być kwadratowo) 0.001 stopnia = około 100 metrów.
Jeśli znajdziemy, i on będzie końcowym dla innego odcinka, to są to
kolejne odcinki tej samej rzeki. Można sklejać w odpowiedniej kolejności
(ale musimy pamiętać czasem kolejność punktów rzeki jest "pod
prąd"). Jeżeli będzie jakimś "środkowym", to mamy
ostatni odcinek dopływu tej drugiej rzeki. Do tego możemy dołożyć
kilka przypadków szczególnych, np. rzeka rozpływa się na dwa koryta, a
potem spływa, albo dwie rzeki łączą się w trzecią (unikalne, ale
teoretycznie możliwe), albo rzeka do której wpada nie ma narysowanego w
tym miejscu punktu. Rzeki są rysowane liniami łamanymi.
Spróbuje mi Pan to jakoś w pseudokodzie przedstawić, z góry dziekuje.
d41d8cd98f00b204e9800998ecf8427e
Powered by phpBB modified by Przemo © 2003 phpBB Group. Then, after many years modified again, this time by Piotrek © 2014 Strona wygenerowana w 11,2ms. Zapytań do SQL: 16
|