Moduły MMnet1001 i MMnet1002 (dalej zwane jako MMnet1000) firmy Propox przygotowane są do uruchomienia linuxa.
Dostarczone są przez producenta z zainstalowanym oprogramowaniem: U-Boot-2009.01, linux-kernel-2.6.29.3, OpenWrt KAMIKAZE r13340. Oprogramowanie to jest,delikatnie rzecz ujmując, niezbyt aktualne, natomiast dowodzi, że linux na tym sprzęcie faktycznie działa i jak na początek wystarcza do zabawy. Ciekawe własności tego modułu pozwalają zrobić za jego pomocą potencjalnie wiele interesujących rzeczy.
MMnet1000 – komputer wbudowany
Linux na systemy wbudowane
Motywacją opanowania tematu stało się to, iż używam Linuksa na serwerach i desktopach, więc czemu by nie rozszerzyć tego na urządzenia wbudowane (gdzie do tej pory używałem głównie C dla AVR). Do szybkiego prototypowania urządzeń wykorzystanie Linuksa może mieć dużą przewagę.
Jest to moje pierwsze podejście do opanowania tematu Linuksa na urządzenia wbudowane, więc artykuły/opinie będą zapewne pod wpływem tego faktu. Wszystkie informacje po stronie komputera PC będą dotyczyły systemu Ubuntu w wersji 11.10, a jako wbudowany Linux będzie używany OpenWRT. Dodatkowo w domyśle mam używanie (jeśli to możliwe) tylko i wyłącznie wolnego oprogramowania.
Read more …
Bardzo prosty serwer http indexem katalogów
Serwer ma za zadanie serwować statyczne pliki i indeksy katalogów.
Po przetestowaniu kilku rozwiązań to wydało mi się najprostrze.
Do uruchomienia potrzebny jest zainstalowany Ruby, testowałem na wersji 1.9.2.
Uwaga: pliki rack-a potrzebują rozszerzenia .ru
Funkcje geodezyjne na elipsojdzie (Vincenty T.) języku w C
Funkcje geodezyjne na dowolnej elipsojdzie do obliczania:
- Odległości i azymutu, gdy dane są dwa punkty o współrzędnych (LatLon)
- Współrzędnych punktu docelowego, gdy dane są: punkt początkowy, azymut oraz odległość.
Źródło algorytmu:
T Vincenty, „Direct and Inverse Solutions of Geodesics on the Ellipsoid with application of nested equations”, Survey Review, vol XXII no 176, 1975; http://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf
Read more …
Ekstrakcja granic administracyjnych z geoportal.gov.pl
Nieodzownym elementem pracy z danymi geoprzestrzennymi jest posiadanie danych nadających się na podkład. Interesujące są dane o granicach administracyjnych (województw, powiatów, gmin, itp.).
Dane takie udostępnia geoportal.gov.pl w postaci sewera WFS.
Read more …
Pozyskiwanie wysokości budynków z NMT i NMPT wykonanych w technologii LIDAR za pomocą oprogramowania GIS.
Problem pozyskiwania wysokości budynków z opracowań LIDAR-owych składających się z produktów będących interpolowaną mapą ciągłą wartości odpowiadających Numerycznemu Modelowi Terenu (NMT) oraz Numerycznemu Modelowi Powierzchni Terenu (NMPT) spotykany jest w przypadku gdy dla celów obliczeń akustycznych niezbędne są nam rzeczywiste wysokości budynków. Wydawać by się mogło iż pozyskanie takich informacji w dobie technik skanowania laserowego (LIDAR) jest czynnością stosunkowo prostą i wymagająca od użytkownika niewiele więcej jak zdefiniowanie parametrów i pozostawienie obliczeń komputerowi. Co jednak można uczynić w przypadku gdy nie dysponujemy źródłowymi danymi z skanera laserowego w postaci chmury punktów a jedynie przetworzeniem danych dyskretnych na dane ciągłe w postaci interpolowanego materiału rastrowego ? Na pierwszy rzut oka rozwiązanie jest proste – mając obrysy budynków pozyskane z mapy zasadniczej czy też za pomocą metod fotogrametrycznych szukamy wśród punktów znajdujących się w obrysie najwyższej wartości piksela i przyjmujemy ją jako maksymalną wysokość budynku. Jest jednak kilka drobnych niedogodności związanych z dostępnymi materiałami, NMPT zawiera z reguły także oprócz obiektów antropogenicznych także obiekty środowiska przyrodniczego takie jak zadrzewienia i zakrzaczenia. Ponadto w odpowiednich przepisach prawnych tj. ROZPORZĄDZENIE MINISTRA INFRASTRUKTURY z dnia 12 kwietnia 2002 r. sprawie warunków technicznych, jakim powinny odpowiadać budynki i ich usytuowanie (Dz. U. Nr 75, poz. 690)
uaktualnione o
ROZPORZĄDZENIE MINISTRA INFRASTRUKTURY z dnia 12 marca 2009 r. (Dz. U. Nr 75, poz. 690, z późn. zm.4)) zmieniające rozporządzenie w sprawie warunków technicznych, jakim powinny odpowiadać budynki i ich usytuowanie (Dz. U. z dnia 7 kwietnia 2009 r.)
Wysokość budynku zdefiniowana jest jako:
„Wysokość budynku, służącą do przyporządkowania temu budynkowi odpowiednich wymagań rozporządzenia, mierzy się od poziomu terenu przy najniżej położonym wejściu do budynku lub\ jego części, znajdującym się na pierwszej kondygnacji nadziemnej budynku, do górnej powierzchni najwyżej położonego stropu, łącznie z grubością izolacji cieplnej i warstwy ją osłaniającej, bez uwzględniania wyniesionych ponad tę płaszczyznę maszynowni dźwigów i innych pomieszczeń technicznych, bądź do najwyżej położonego punktu stropodachu lub konstrukcji przekrycia budynku znajdującego się bezpośrednio nad pomieszczeniami przeznaczonymi na pobyt ludzi. „
Tak więc automatycznie przy mierzeniu jej powinniśmy stosować się do powyższych warunków i w przypadku zabudowy nie pobierać wysokości dobudówek, kominów, itp będących de facto najwyższymi elementami w obrysie dachu budynku. Jest to warunek dość trudny do spełnienia w przypadku pomiaru w pełni automatycznego.
Innym rozwiązaniem jakie można by zastosować jest pomiar wysokości obiektu w określonym punkcie. W tym miejscu należy się zastanowić nad sposobem pozyskania owego punktu pomiarowego, możliwe są dwie drogi albo automatyczne wygenerowanie tzw. centroidu obiektu poligonowego lub też ręczne wstawienie punktu w określonym przez operatora miejscu. Oba rozwiązania mają swoje wady i zalety (zależy jak dokładnie mają zostać pozyskane wartości wysokości):
- metoda automatyczna generowania punktów pomiarowych nie zawsze daje nam gwarancje że punkt zostanie umieszczony w interesującym nas miejscu. W przypadku dachów dwuspadzistych symetrycznych kalenica przebiega z grubsza przez środek budynku więc jest szansa że punkt zostanie umieszczony w odpowiednim miejscu, pewne ale stanowią kominy. Metoda nie sprawdzi się natomiast zupełnie w przypadku dachów jednospadzistych, wielospadzistych lub dwuspadzistych niesymetrycznych. Pewnym zagrożeniem dokładności pobranych danych są także drzewa rosnące w pobliżu budynków, których korony częściowo przesłaniają dachy. Zaletami tej metody jest szybkość generowania punktów pomiarowych co z reguły nie zajmuje więcej niż kilka minut nawet dla dużych zbiorów obiektów.
- metoda manualna generowania punktów pomiarowych powinna dać nam najbardziej wiarygodne wyniki gdyż operator mogący się dodatkowo posiłkować ortofotomapą i własną interpretacją pikseli w obrysie budynku powinien dac radę wstawić punkt pomiarowy na kalenicy budynku omijając takie „pułapki” jak kominy czy inne konstrukcje które nie powinny brać udziału w pomiarze. W ten sam sposób operator może wstawić punkt w obszarze nie przykrytym koronami drzew czy innymi obiektami przesłaniającymi widok. Poważną wadą tej metody jest wysoka czaso i pracochłonność, wyszkolony operator jest w stanie posykać od kilkuset do tysiąca obiektów na godzinę. Dodatkowo jednym z błędów występujących w tej metodzie jest tzw. błąd ludzki wynikający ze zmęczenia czy różnic interpretacyjnych.
Posiadając pozyskane punkty w których będziemy mierzyć wysokość budynku możemy w dalszym procesie użyć oprogramowania GIS do pozyskania odpowiednich wartości pixela z NMT i NMPT, których różnica da nam w efekcie oczekiwaną wysokość budynku.
Zastosowanie oprogramowania firmy ESRI czyli ArcGIS Desktop wymaga od nas posiadania rozszerzenia 3D Analyst które pozwoli nam na konwersję punktów do punktów 3D co automatycznie powoduje przypisanie wartości piksela położonego pod danym punktem z wskazanego materiału rastrowego NMT i NMPT, jak od razu widać operację trzeba wykonać dwa razy osobno dla NMT i osobno dla NMPT. Posiadając warstwy punktowe 3D musimy w następnym kroku przekształcić wartości ShapeZM do wartości dostępnych w tabeli. W tym celu konieczne jest utworzenie nowej kolumny np. typu float i wykonanie przy pomocy kalkulatora pól w zakładce właściwości zaawansowane następującego kodu:
W części pre-logic script edit box:
dim pGeometry as ipoint
set pGeometry = [shape]
W części ‘<new fieldname> =’ box:
pGeometry.z
Metoda ta sprawdza się na grupach punktów pomiarowych o liczebności maksymalnie kilku tysięcy, powyżej tej wartości problemy zaczyna sprawiać VBA. Ominięcie tych ograniczeń jest możliwe poprzez zastosowanie skryptu konwersji dostępnego w ArcToolbox -> 3D Analyst -> Conversion -> Freature Class Z to ASCII. Wybranie odpowiednich parametrów konwersji pozwoli nam na otrzymanie pliku ASCII zawierającego wartości XYZ oddzielone spacjami. Dalsza droga polega na konwersji pliku tekstowego do punktowego pliku shapefile przy pomocy dowolnego programu GIS (Quantum GIS, ArcGIS, Map Window itp.).
Pozyskanie podobnych danych z NMT i NMPT w oprogramowaniu Quantum GIS można zrealizować za pomocą pluginu Point Sampling Tool pozwalającego na pobranie i przypisanie wartości do punktu z piksela rastra umieszczonego pod nim. Narzędzie to jest w wersji rozwojowej i potrafi sprawiać problemy na większych partiach danych.
Dalsza droga do uzyskania jednej warstwy reprezentującej wysokość budynku umieszczoną w punktowej warstwie pomiarowej odbywa się poprzez wykonanie operacji Spatial Join pozwalającej na połączenie tabel dwóch warstw przestrzennych po lokalizacji przestrzennej obiektów. Możliwe jest oczywiście zdefiniowanie bufora w jakim ma nastąpić złączenie. Po wykonaniu operacji złączenia tabel kolejnym i ostatnim krokiem jest wykonanie operacji matematycznej na kolumnach tabeli warstwy punktowej tj. różnicy NMPT i NMT co w efekcie pozwoli nam otrzymać wysokość obiektu wyrażoną w jednostkach mapy.
Materiały wykorzystane do opracowania
Plik pomocy programu Quantum GIS
ESRI Knowledge Base Article ID 22597
ROZPORZĄDZENIE MINISTRA INFRASTRUKTURY z dnia 12 marca 2009 r.
Czytanie i zapisywanie plików tekstowych w języku Ruby
Sposób na czytanie i zapisywanie plików tekstowych w języku Ruby.
#czytanie (raczej oczywiste) var = File.read "file_name" #zapisywanie (tu mały helper który upraszcza zadanie) class String #zapisuje zawartość stringa do pliku def write(fname) File.open(fname, 'w' ){|out| out.write self.to_s ; out.close } end #dopisuje zawartość stringa do pliku def write_a(fname) File.open(fname, 'a' ){|out| out.write self.to_s ; out.close } end end #przykłady wykorzystania: "ala ma kota".write "out_filename.txt" ['line1','line2','line3'].join("\n").write_a "out_filename.txt" {:a=>'b',:c=>'d'}.to_yaml.write "out_file.yaml"
SSHfs z prawami użytkownika root na Ubuntu
W celu skopiowania danych (dużo, kilkaset GB) między HOST-A i HOST-B jako root pod Ubuntu, tak żeby zachowały się prawa, ale bez nadawania możliwości logowania się użytkownikowi root (jeśli robi się to akcydentalnie) można wykorzystać SSHfs + Midnight Commander (jak się robi porządki, a nie kopiuje wszystko jak leci). Osobiście wybrałem SSHfs, gdyż często go używam i się sprawdza, brakowało mi tylko praw roota. Read more …
LaTeX: Beamer – zmiana wyglądu slajdu
Beamer to nazwa LaTeX-owej klasy, pomyślanej jako pomoc w tworzeniu prezentacji multimedialnych. Beamer oferuje kilka wbudowanych schematów slajdów oraz schematów kolorów, pozwala też na definiowanie własnych kompozycji.
