sobota, 10 grudnia 2011

Rozszerzenia dla GeoServer

GeServer.org posiada kilka ciekawych rozszerzeń. Można wejść na stronę
http://gridlock.opengeo.org/geoserver/2.1.x/community-latest/
i pobrać te rozszerzenia, które Cię interesują. Po rozpakowaniu pliki trzeba skopiować do
/usr/local/tomcat/webapps/geoserver/WEB-INF/lib




piątek, 9 grudnia 2011

GeoServer i zmienne środowiskowe w Ubuntu

Nie udało mi się zmusić Tomcat'a 6 w Ubuntu, żeby czytał zmienne środowiskowe. Nie działa dla zmiennych ustawionych za pomocą polecenia:
export GEOSERVER_DATA_DIR=/var/geoserver_conf
oraz dla zmiennych ustawianych w pliku
/etc/environment

Po wielu próbach uznałem, że najlepszą metodą jest utalenie tych zmiennych bezpośrednio w pliku konfiguracyjnym Tomcat'a - gdzieś na początku pliku /etc/init.d/tomcat6 trzeba dodać linijki ze zmiennymi:
JAVA_OPTS="-server -Xms128m -Xmx512m"
GEOSERVER_DATA_DIR=
/var/geoserver_conf
export GEOSERVER_DATA_DIR


Warto też poczytać:
http://docs.geoserver.org/stable/en/user/production/linuxscript.html

niedziela, 4 grudnia 2011

XBMC - Dostosowywanie

Wyświetlanie tła podczas odtwarzania muzyki:


\usr\share\xbmc\addons\skin.confluence\720p\MusicVisualisation.xml
Początek pliku musi być taki:


<window id="2006">
<defaultcontrol>-</defaultcontrol>
<allowoverlay>no</allowoverlay>
<controls>
<control type="visualisation" id="2">
<description>visualisation</description>
<posx>0</posx>
<posy>0</posy>
<width>1280</width>
<height>720</height>
</control>
<control type="image">
<description>Fanart image</description>
<posx>0</posx>
<posy>0</posy>
<width>1280</width>
<height>720</height>
<texture fallback="special://skin/backgrounds/music.jpg">$INFO[MusicPlayer.Property(Fanart_Image)]</texture>
</control>

Wyświetlanie częstotliwości próbkowania:



<control type="group">
<posx>370</posx>
<posy>180r</posy>
<control type="grouplist">
<description>Media Codec Flagging Images</description>

(...)


</control>
<!-- begin js-mod -->

<control type="label"> <description>Bitrate Label</description> <width>80</width> <align>right</align> <label>$INFO[musicplayer.Samplerate,,kHz]$INFO[musicplayer.Bitrate,[CR],kb/s]</label> </control>
<!-- end js-mod -->
</control>



Aktualizowanie sterowników NVIDIA ION w  XBMC-10.1/Ubuntu 10.04:

sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
sudo apt-get update
sudo apt-get install nvidia-current nvidia-current-modaliases nvidia-settings


Uciążliwe przełączanie do trybu okienkowego (xbmc jest wyświetlany w lewym górnym rogu) po naciśnięciu klawisza "\" można wyłączyć w pliku

/usr/share/xbmc/system/keymaps/Keymap.xml

poprzez skomentowanie/usunięcie linijki


      <!-- <backslash>ToggleFullScreen</backslash> -->


Rodzaj i typ karty graficznej można sprawdzić poleceniem
lspci

Klient Torrent:
http://1000umbrellas.com/2010/04/21/transmission-install-on-ubuntu-10-04-server-lucid




sobota, 3 grudnia 2011

XBMC - W lewym górnym erkanie

Gdy wciśniesz klawisz "\" podczas używania XBMC to program wyjdzie z trybu full screen i pojawi się w lewym górnym rogu ekranu. Niestety po restarcie będzie pamiętał tą pozycję, ale można to zmienić:

w userdata/advancedsettings.xml

<advancedsettings>
<fullscreen>true</fullscreen>
</advancedsettings>

A najlepiej zmienić konfigurację tego klawisza:
http://kubaszostak.blogspot.com/2011/12/xbmc-dostosowywanie.html

niedziela, 27 listopada 2011

XBMC - Samba

Logujemy się do terminala (ALT + CTRL + F1) i wpisujemy :
sudo apt-get install samba





Po zainstalowaniu samby edytujemy plik konfiguracyjny:
sudo nano /etc/samba/smb.conf

W sekcji [global] należy przeedytować zmienne



workgroup = GRUPA_ROBOCZA
browseable = yes
local master = yes
domain master = yes
security = share


Potem trzeba utworzyć sekcję udostępnianego udziału


[public]
path = /public
browseable = yes
guest ok = yes
read only = no
create mask = 0755



Trzeba też utworzyć udostępniany folder


 sudo mkdir -p /public
 sudo chown nobody.nogroup /public

i zrestartować sambę
  service smbd restart
  service nmbd restart

Na koniec można sprawdzić parametry konfiguracji samby:
sudo testparm


Teraz można się zalogować z komputera połączonego w sieci wpisując adres \\XBMCLive



Można też dodać dostęp do całego dysku
[hdd]
path = /
writeable = yes
read only = no
create mode = 0755
directory mode = 0755
force user = xbmc
guest ok = yes


Można też uzyskać dostęp do całego dysku za pomocą filleZilla. Najpierw w terminalu ustal hasło dla root:
sudo passwd root 


Potem uruchom FileZilla i podaj parametry
Host: sftp://xxx.xxx.xxx.xxx (lub xbmcLive) 
Port: 22 
Username: root 
Password: twojeTajneHasło














sobota, 26 listopada 2011

XBMC - SSH

Jeżeli chcesz mieć możliwość administracji zdalnym komputerem na którym postawiony jest XBMC Live / Ubuntu to musisz zapewnić sobie dostęp do terminala:

Przełaczasz się na komputerze z XBMC do terminala CTRL + ALT + F1 i wpisujesz:
sudo apt-get install ssh

Teraz możesz się łączyć z tym komputerem za pośrednictwem dowolnego klienta SSH, np. PuTTy lub innym


piątek, 25 listopada 2011

Konfiguracja XBMC - WiFi

XBMC to doskonały Media Center. Gdy kożystasz z prekonfigurowanej edycji XBMC Live opartej na dystrybucji Ubuntu musisz jeszcze skonfigurować pewne elementy systemu.

Sieć bezprzewodowa WIFI

Najperw trzeba zainstalować odpowiednie biblioteki. W tym celu przechodzimy do konsoli (CTRL+ALT+F1) i wpsiujemy:
# sudo apt-get install wireless-tools
lub
# sudo apt-get install wpasupplicant

Potem konfigurujemy sieć. W tym celu użyjemy edytora nano:
# sudo nano /etc/network/interfaces

Na końcu pliku należy dopisać następujące linijki
auto wlan0
iface wlan0 inet dhcp
wpa-ssid NAZWA_SIECI_WIFI
wpa-psk HASŁO


Żeby zapisać plik klikamy CTRL+X, Y, ENTER. Restartujemy usługi:
# /etc/init.d/networking restart
lub
# service networking restart

Na koniec możemy sprawdzić jak  działa nasze WiFi
# iwconfig wlan0


http://wiki.xbmc.org/index.php?title=HOW-TO:Play_internet_video_and_audio_streams

czwartek, 13 października 2011

Jak dodać w ArcGIS dwa rastry o różnych zakresach (extent)

Gdy dodajesz dwa rastry o różnym zakresie to raster wynikowy jest domyślnie przycinany do tego takiego rastra, który zawiera zakresy wszystkich rastrów.


Jednak najczęściej zależy nam aby to było połączenie dwóch rastrów nawet w tych miejscach gdy jeden z nich nie ma wartości (NoData/NULL)


Żeby to osiągnąć trzeba ustawić zmienną Processing Extent -> Extent -> Union of Inputs w Enviroment Settings.


Gdy do tego użyjesz  Raster Calculator z odpowiednimi formułami, np.
Con(IsNull("nmt1"), 0.0, "nmt1") + Con(IsNull("nmt2"), 0.0, "nmt2")
to na pewno wszystko zadziała tak jak powinno.

poniedziałek, 10 października 2011

Jak ustawić wartość NULL w ArcGIS za pomocą Raster Calculator

Aby ustawić wartość NULL (NoValue) dla komórek o zadanej wartości wystarczy w ArcGIS Raster Calculator wpisać odpowiednią formułę, np.:

SetNull("nmt" < 1.0, "nmt") 





Można też użyć po prostu polecenia SetNull








Jeżeli natomiast chcemy dla wszyskich komórek o wartości NoValue przypisać jakąś wartość np. 0 to należy wpisać formułę

Con(IsNull("nmt"), 0.0, "nmt")







wtorek, 9 sierpnia 2011

Jak dodać własny link do wyników wyszukiwania w Geoportalu Esri

Domyślnie Esri Geoportal Server wyświetla standadowe linki na liście wyszukiwania. Geoportal sam próbuje się domyślać jaki jest cel danego linku (czy po kliknięciu ma się wyświetlić mapa z podglądem, czy okno pobierania danych) ale nie zawsze mu to wychodzi. Standardowe linki można w prosty sposób wyłączyć. W tym celu w pliku geoportal\WEB-INF\classes\gpt\search\profiles\CSW_2.0.2_OGCCORE_ESRI_GPT_GetRecords_Response.xslt należy dodać sekcję : 
...
 </Types>
 <Links>
   <Link gptLinkTag="addToMap" show="false"/>
   <Link gptLinkTag="preview" show="false"/>    
   <Link gptLinkTag="open" show="false"/>
 </Links>
</Record>

Trudniej sprawa wygląda gdy chcemy dodać własne linki. Sporo informacji na ten temat można zlaleźć na stronach wsparcia Esri. Zobacz w jaki sposób można to zrobić dla metadanych o profilu inspire.

indexables.xml
Najpierw w pliku geoportal\WEB-INF\classes\gpt\metadata\iso\inspire\inspire-apiso-indexables.xml należy dodać indeksowanie interesujących nas danych. W tym celu należy dodać elementy , które wskazują nazwę indeksowanych wartości oraz ich ścieżkę dostępu w pliku metadanych. Ścieżkę najlepiej wyszukać bezpośrednio w Geoportalu

Edytowanie wartości w pliku metadanych
Otwieranie pliku metadanych
Wyszukiwanie ścieżki dostępu do wartości









W naszym przypadku ścieżka dostępu do danych wygląda tak:
/gmd:MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/gmd:linkage/gmd:URL
Tak się składa, że takich wartości w jednym pliku metadanych może być więcej, np. inne dla wartości
<gmd:CI_OnLineFunctionCode>information</gmd:CI_OnLineFunctionCode>
<gmd:CI_OnLineFunctionCode>download</gmd:CI_OnLineFunctionCode>
itd.

Gdy zostaną ustalone elementy, które mają być zindeksowane trzeba dodać element <property> do pliku geoportal\WEB-INF\classes\gpt\metadata\iso\inspire\inspire-apiso-indexables.xml, oraz ustawić nazwę elementu i ścieżkę dostępu. W naszym przykładzie zostały dodane następujące linie:
<property meaning="apiso:distribution" xpath="/gmd:MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource">
<property meaning="distribution.information.url" xpath="gmd:linkage/gmd:URL[../../gmd:function/gmd:CI_OnLineFunctionCode/@codeListValue='information']"/>
<property meaning="distribution.search.url" xpath="gmd:linkage/gmd:URL[../../gmd:function/gmd:CI_OnLineFunctionCode/@codeListValue='search']"/>
<property meaning="distribution.order.url" xpath="gmd:linkage/gmd:URL[../../gmd:function/gmd:CI_OnLineFunctionCode/@codeListValue='order']"/>
<property meaning="distribution.download.url" xpath="gmd:linkage/gmd:URL[../../gmd:function/gmd:CI_OnLineFunctionCode/@codeListValue='download']"/>
<property meaning="distribution.offline.url" xpath="gmd:linkage/gmd:URL[../../gmd:function/gmd:CI_OnLineFunctionCode/@codeListValue='offlineAccess']"/>
</property>



Czyli zostało ustawione, że np. property o nazwie distribution.information.url wskazuje na odpowiedni zapis w pliku metadanych.

Żeby nowe wartości zostały prawidłowo zaindeksowane trzeba:

  1. Zapisać plik inspire-apiso-indexables.xml
  2. Zatrzymać serwer
  3. Usunąć pliki z folderu lucene (czytaj więcej)
  4. Uruchomić serwer
  5. Zalogować się do Geoportalu
  6. Zaaprobować wszystkie pliki metadanych w panelu administracyjnym Geoportalu - to spowoduję ponowną indeksację wszystkich wartości

property-meanings.xml
Następnie trzeba dodać elementy <property-meaning> do pliku  geoportal\WEB-INF\classes\gpt\metadata\property-meanings.xml. Trzeba poprzednio przypisane nazwy elementów przypisać do odpowiednich elementów <dc>, w naszym przykładzi został po prostu dodany przedrostek "dc:" :


  <property-meaning name="distribution.information.url" valueType="String" comparisonType="value">
    <dc name="dc:distribution.information.url"/>
  </property-meaning>

  <property-meaning name="distribution.search.url" valueType="String" comparisonType="value">
    <dc name="dc:distribution.search.url"/>
  </property-meaning>

  <property-meaning name="distribution.order.url" valueType="String" comparisonType="value">
    <dc name="dc:distribution.order.url"/>
  </property-meaning>

  <property-meaning name="distribution.download.url" valueType="String" comparisonType="value">
    <dc name="dc:distribution.download.url"/>
  </property-meaning>

  <property-meaning name="distribution.offline.url" valueType="String" comparisonType="value">
    <dc name="dc:distribution.offline.url"/>
  </property-meaning>
Trzeba również dodać  element <meaning-names> w sekcji <propertySets>:

<propertySets>
  ...
  <full>
    <dc>
    ...
    <meaning-names>resource.url,website.url,thumbnail.url,xml.url</meaning-names>
        <meaning-names>distribution.order.url,distribution.download.url,distribution.information.url,distribution.offline.url,distribution.search.url</meaning-names>
    </dc>
  </full>
</propertySets>


CSW_2.0.2_OGCCORE_ESRI_GPT_GetRecords_Response.xslt
Teraz wracamy do pliku CSW_2.0.2_OGCCORE_ESRI_GPT_GetRecords_Response.xslt i dodajemy kolejne elementy <Link>. W naszym przykładzie dodamy:

<Link label="catalog.mdCode.onLineFunctionCode.offlineAccess">
 <xsl:value-of select="dc:distribution.offline.url"/>
</Link >
<Link label="catalog.mdCode.onLineFunctionCode.download">
 <xsl:value-of select="dc:distribution.download.url"/>
</Link >
<Link label="catalog.mdCode.onLineFunctionCode.order">
 <xsl:value-of select="dc:distribution.order.url"/>
</Link >
<Link label="catalog.mdCode.onLineFunctionCode.search">
 <xsl:value-of select="dc:distribution.search.url"/>
</Link >  
<Link label="catalog.mdCode.onLineFunctionCode.information">
 <xsl:value-of select="dc:distribution.information.url"/>
</Link >

dc:distribution.offline.url to poprzednio zdefiniowana wartość w pliku property-meanings.xml. Wartość catalog.mdCode.onLineFunctionCode.offlineAccess to wyświetlana etykieta linku zdefiniowana w pliku geoportal\WEB-INF\classes\gpt\resources\gpt.properties.

Wynik tych działań wyglądać może tak:


czwartek, 30 czerwca 2011

Projekty rozporządzeń do ustwy o IIP

MSWiA Opublikowało projekty rozporządzeń:

- Projekt rozporządzenia MSWiA w sprawie bazy danych obiektów topograficznych oraz bazy danych ogólnogeograficznych, a także standardowych opracowań kartograficznych;
[bip.mswia.gov.pl]

- Projekt rozporządzenia MSWiA w sprawie baz danych zobrazowań lotniczych i satelitarnych oraz ortofotomapy i numerycznego modelu terenu
[bip.mswia.gov.pl]

- Projekt rozporządzenia Rady Ministrów w sprawie państwowego rejestru granic i powierzchni jednostek podziałów terytorialnych kraju
[bip.mswia.gov.pl]

- Projekt rozporządzenia MSWiA w sprawie standardów technicznych wykonywania geodezyjnych pomiarów sytuacyjnych i wysokościowych oraz opracowywania i przekazywania wyników tych pomiarów do państwowego zasobu geodezyjnego
[bip.mswia.gov.pl]

Więcej informacji:
[www.gisplay.pl]

poniedziałek, 27 czerwca 2011

Model grawitacji ziemii

HTML Footer

http://www.lwis.net/journal/2008/02/08/pure-css-sticky-footer/

Do events

http://www.codeproject.com/KB/cs/DispatcherFrame.aspx

Dont block Your UI
http://www.codeproject.com/KB/WPF/WpfNonblockingUI.aspx

Design Patterns
http://www.devlake.com/

Floating Window

http://www.codeproject.com/KB/silverlight/FloatingWindow.aspx

Custom error tracking

http://www.codeproject.com/Articles/52443/Custom-error-tracking-library-in-asp-net-using-XML.aspx

Jak obliczyć datę, w której decyzja staję się ostateczna


Wszystko jest wyjaśnione tutaj:
http://www.freelex.pl/index.php/artykuly/52-jak-obliczy-dat-w-ktorej-decyzja-staj-si-ostateczna

wtorek, 21 czerwca 2011

Przeliczanie wysokości pomiędzy zerem amsterdamskim oraz zerem kronsztadzkim


ROZPORZĄDZENIE MINISTRA TRANSPORTU I GOSPODARKI MORSKIEJ z dnia 1 czerwca 1998 r. w sprawie warunków technicznych, jakim powinny odpowiadać morskie budowle hydrotechniczne i ich usytuowanie (DZIENNIK USTAW Z 1998 R. NR 101 POZ. 645)


§ 17. 1. Poziom zerowy morza (Pz) odpowiada zeru amsterdamskiemu (Amst) wodowskazu, położonemu o 16,2 cm wyżej od poziomu średniego Morza Północnego, wyznaczonemu na podstawie obserwacji przeprowadzonych od 1701 do 1871 r. na stacji mareograficznej w Amsterdamie.
2. Poziom zerowy morza (Pz), o którym mowa w ust. 1, podaje się w geodezyjnym systemie odniesienia NN55 (Normal Null) odpowiadającym zeru głównego reperu wyjściowego dla obszaru Polski, umieszczonemu na Ratuszu Miejskim w Toruniu i wyznaczonemu na podstawie wyników niwelacji precyzyjnej przeprowadzonej w latach 1955-1957.
3. Poziom zerowy morza (Pz) odniesiony do wodowskazu w porcie morskim Kronsztadt oznacza się jako zero kronsztadzkie (Kron).
4. Do przeliczania wysokości pomiędzy zerem amsterdamskim (HAmst.) oraz zerem kronsztadzkim (HKron.) stosuje się, wyrażoną w metrach, zależność:

HKron. = HAmst. + 0,08

5. W projekcie budowlanym należy każdorazowo zestawiać podstawowe charakterystyczne poziomy morza, o których mowa w § 14, oraz poziom zerowy morza (Pz), o którym mowa w ust. 1 i ust. 3, do którego odniesiono i oznaczono rzędne konstrukcji budowli morskiej.



środa, 15 czerwca 2011

Tłumaczenie polskiej wersji gpt.properties - native2ascii

Żeby utworzyć polską wersję zasobów dla Esri Geoportal Server należy skopiować plik gpt.properties z katalogu \\webapps\geoportal\WEB-INF\classes\gpt\resources\ i nadać mu nazwę gpt_pl.properties. Przeglądarka automatycznie wybierze język dla "polskich przeglądarek". Występuje jednak problem konwersji polskich czcionek. Można go rozwiązać w następujący sposób:
1. Tworzymy plik gpt_pl-utf.properties, który edytowany np. Programmers Notepad jest zapisywany jako UTF-8.
2. Tworzymy plik native2ascii.bat, w którym wpisujemy
"C:\Program Files\Java\jdk1.6.0_24\bin\native2ascii.exe" -encoding UTF-8 gpt_pl-utf.properties gpt_pl.properties
pause
3. Klikamy native2ascii.bat i dostajemy prawidłowo sformatowany plik zasobów.


---


http://help.arcgis.com/en/geoportal_extension/10.0/help/index.html#//00t000000015000000.htm

piątek, 10 czerwca 2011

Narzędzia dla ArcGIS

ArcGIS for AutoCAD
http://www.esri.com/software/arcgis/arcgis-for-autocad/demos.html

Geodatabase Toolset (GDBT)
http://www.esri.com/software/arcgis/extensions/gdbt/demo.html

Eksport jednej warstwy do wielu na podstawie atrybutów
http://www.goldenline.pl/forum/2408217/eksport-jednej-warstwy-do-wielu-na-podstawie-atrybutow

czwartek, 9 czerwca 2011

Przelcizanie współrzędnych GPS w formacie LQQ, GGA

Zadzwonił kolega męża koleżanki z pytaniem, czy nie wiem jak przeliczyć współrzędne elipsoidalne GPS do lokalnego układu współrzędnych płaskich. Trochę czasu upłynęło zanim wyjaśniliśmy sobie co rozumiemy przez układ globalny, lokalny, czym się różnią współrzędne elipsoidalne XYZ od płaskich XY. W końcu zaproponowałem takie rozwiązanie:

1. Przeliczenie współrzędnych elipsoidalnych
do dowolnego układu współrzędnych płaskich. Zaproponowałem odwzorowanie Merkatora z punktem przyłożenia w pobliżu obszaru opracowania. Najpiew trzeba odczytać współrzędne geograficzne z formatu GGA- Global Positioning System Fix Data. Opis tego formatu wygląda tak:

GGA - essential fix data which provide 3D location and accuracy data.

 $GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47

Where:
     GGA          Global Positioning System Fix Data
     123519       Fix taken at 12:35:19 UTC
     4807.038,N   Latitude 48 deg 07.038' N
     01131.000,E  Longitude 11 deg 31.000' E
     1            Fix quality: 0 = invalid
                               1 = GPS fix (SPS)
                               2 = DGPS fix
                               3 = PPS fix
                   4 = Real Time Kinematic
                   5 = Float RTK
                               6 = estimated (dead reckoning) (2.3 feature)
                   7 = Manual input mode
                   8 = Simulation mode
     08           Number of satellites being tracked
     0.9          Horizontal dilution of position
     545.4,M      Altitude, Meters, above mean sea level
     46.9,M       Height of geoid (mean sea level) above WGS84
                      ellipsoid
     (empty field) time in seconds since last DGPS update
     (empty field) DGPS station ID number
     *47          the checksum data, always begins with *
Najważniejsza informacja dotyczy oczywiście sekcji w której jest zapisana długość i szerokość elipsoidalna. Gdy już wiadomo jak je odczytać to algorytm obliczania współrzędnych płaskich wygląda tak:


        const double PI = 3.14159265358979323846264;
        //const double R0 = 6367449.1458234154;  // Elipsoida WGS-84  
        const double R0 = 6364566.797;  // Kombinowane WGS-84->Krasowski         
 
        // W pobliĹźu obszaru opracowania, 
        //tak aby poprawki odzorowawcze były jak najmniejsze 
        const double LOrigin = 19.51 * PI / 180.0;         
        const double BOrigin = 53.60;


        public void GetMercatorNE(double GpsB, double GpsL, out double North, out double Eeast)
        {
            double DeltaL = GpsL - LOrigin;

            // 1. Lagrange             
            double fi = LagrangeCorr(GpsB);

            // 2. Mercator 
            double nMerc;
            double eMerc;

            double p = Math.Sin(fi);
            double q = Math.Cos(fi) * Math.Cos(DeltaL);
            nMerc = Math.Atan(p / q) * R0;

            double r = 1.0 + Math.Cos(fi) * Math.Sin(DeltaL);
            double s = 1.0 - Math.Cos(fi) * Math.Sin(DeltaL);
            eMerc = 0.5 * Math.Log(r / s) * R0;
            // Minus dowolna wartość, tak aby współrzędne były bliżej zera 
            North = nMerc - 5930000;  
            Eeast = eMerc;
        }

        private double LagrangeCorr(double B)
        {
            double e = 0.081819190842621486; // Elipsoida WGS-84 
            double U = 1 - e * Math.Sin(B);
            double V = 1 + e * Math.Sin(B);
            double K = Math.Pow(U / V, e / 2);
            double C = K * Math.Tan(B / 2 + PI / 4.0);
            double fi = 2 * Math.Atan(C) - PI / 2.0;
            return fi;
        }

2. Obliczenie współrzędnych LQQ
Gdy już mamy współrzędne przeliczone do Lokalnego Układu Merkatora (LUM) to dalej sprawa wygląda prosto. Trzeba pomierzyć kilka punktów wspólnych w systemie wykorzystującym GGA oraz drugi raz te same punkty w systemie wykorzystującym LQQ (Leica Local Position and Quality). Gdy mamy do dyspozycji zestaw współrzędnych w dwóch układach obliczamy parametry transformacji Helmerta z jednego do drugiego - proste!

---
http://uriasz.am.szczecin.pl/naw_bezp/transformacja.html

Archiwalne mapy wybrzeża morskiego

Tworzeniem i udostępnianiem map obszarów morskich zajmuje się Biuro Hydrograficzne Marynarki Polskiej. Jednak w sieci można znaleźć wiele ciekawych map. Np. na stronie http://www.mapy.eksploracja.pl/viewpage.php?page_id=31  można znaleźć mapy Gdańska z XVIII i IXX wieku. Dla mnie ciekawe było zobaczyć mapę Gdyni bez portu. Przeglądając zasoby witryny mapy.eksploracja.pl można znaleźć jeszcze wiele innych ciekawych map.
Warto też odwiedzić stronę gis.gdansk.pl, gdzie można również znaleźć wiele archiwalnych map gdańska.

poniedziałek, 6 czerwca 2011

Rozgraniczenie w trybie ustawy Prawo Wodne -VS- Rozgraniczenie w trybie ustawy Prawo Geodezyjne i Kartograficzne

Rozgraniczenie, które znamy doskonale to rozgraniczenie w trybie PGiK. Zasady są jasne:

PGiK, Art. 31. 2. Przy ustalaniu przebiegu granic bierze się pod uwagę znaki i ślady graniczne, mapy i inne dokumenty oraz punkty osnowy geodezyjnej.
3. Jeżeli jest brak danych, o których mowa w ust. 2 (...), ustala się przebieg granicy na podstawie zgodnego oświadczenia stron (...)
4. W razie sporu co do przebiegu linii granicznych, geodeta nakłania strony do zawarcia ugody (...)
PGiK, Art. 34. 1. Jeżeli w razie sporu co do przebiegu linii granicznych nie dojdzie do zawarcia ugody (...), upoważniony geodeta (...) całość dokumentacji przekazuje właściwemu wójtowi (...).
2. Organ, o którym mowa w ust. 1, umarza postępowanie administracyjne i przekazuje sprawę z urzędu do rozpatrzenia sądowi.
Wynika z tego, że z rozgraniczeniem w trybie PGiK mamy do czynienia tylko i wyłącznie wtedy gdy brak jest dokumentów, które pozwolą na określenie granic. Tymczasem w rozgraniczeniu w trybie Prawa Wodnego mamy do czynienia z ustaleniem przebiegu nowej linii brzegu niezależnie od tego, że istnieją doskonałe dokumenty, które pozwalają na w 100% jednoznaczne określenie granic.
PW, Art.15.3. Podstawę ustalenia linii brzegu stanowi dostarczony przez wnioskodawcęprojekt rozgraniczenia gruntów pokrytych wodami od gruntów przyległych
Z tego artykułu wynika, że rozgraniczenie w trybie Prawa Wodnego służy do ustalenia linii brzegu, a nie do ustalenia granic. Decyzja, która ustali przebieg linii brzegu ma swoje konsekwencje, wprowadza pewne zmiany, które powinny być wprowadzone do ewidencji gruntów i budynków. Zmiany te dotyczą również praw własności - a jak wiemy rozgraniczenie nie służy do wprowadzania zmian praw własności, rozgraniczenie służy tylko i wyłącznie do ustalenia przebiegu istniejących granic.

Ustalenie linii brzegu powoduje zmiany dwojakiego rodzaju: albo woda zabiera grunt, albo grunt zabiera wodę.

Woda zabiera grunt
PW, Art. 17. 1. Jeżeli śródlądowa woda powierzchniowa płynąca lub wody morza terytorialnego albo morskie wody wewnętrzne zajmą trwale, w sposób naturalny, grunt niestanowiący własności właściciela wody, grunt ten staje się własnością właściciela wody.
2. W przypadku, o którym mowa w ust. 1, dotychczasowemu właścicielowi gruntu przysługuje odszkodowanie od właściciela wody na warunkach określonych w ustawie.

Czyli mamy do czynienia z sytuacją gdzie wiemy, że woda zajęła grunt. Żeby to wiedzieć przebieg granic nieruchomości musi być ustalony wcześniej. I dopiero gdy ustalimy przebieg granic (np. w drodze rozgraniczenia  w trybie PGiK) to wtedy można sporządzić projekt rozgraniczenia gruntów pokrytych wodami od gruntów przyległych, który służy do ustalenia przebiegu linii brzegu a nie przebiegu granic - to jest zupełnie inne rozgraniczenie niż wtrybie PGiK.
Na dodatek jest mowa o odszkodowaniu. Rozgraniczenie w trybie PGiK ustaliłoby nowy przebieg granic, zmieniłoby powierzchnie nieruchomości i trudno było by w tym przypadku mówić o odszkodowaniu. Jeżeli chcemy myśleć o odszkodowaniu to trzeba najpierw wydzielić nieruchomość, za która należy się odszkodowanie, sporządzić wykaz zmian gruntowych, z którego będzie wynikać za jakie użytki i jaką powierzchnię należy się odszkodowanie.

Grunt zabiera wodę
PW, Art. 15a. 1. Rozgraniczenia gruntów, które były pokryte wodami przed wykonaniem urządzenia wodnego, od pozostałych gruntów dokonuje, na wniosek właściciela wody lub właściciela gruntu sąsiadującego, w drodze decyzji, właściwy starosta realizujący zadanie z zakresu administracji rządowej.
Hmm, a więc nie jest to rozgraniczenie w trybie PGiK, którego dokonuje Wójt/Burmistrz/Prezydent. Na dodatek
PW, Art. 19. 1. Starorzecza oraz grunt powstały w wyniku wykonania budowli regulacyjnych
pozostają własnością dotychczasowego właściciela wody.
2. Grunt powstały na skutek trwałego, naturalnego lub sztucznego odkładu na obszarach
wód morza terytorialnego lub morskich wód wewnętrznych pozostaje własnością Skarbu Państwa.
Gdyby zrobić rozgraniczenie w trybie PGiK to grunt nie mógłby pozostać własnością dotychczasowego właściciela wody/Skarbu Państwa. Rozgraniczenie zgodne z PGiK sprawiłoby, że grunt pokryty dotychczas wodą stałby się własnością sąsiada wody - życzę dużo szczęścia każdemu, kto podpisze decyzję przekazującą osobie prywatnej grunty Skarbu Państwa. Dla przykładu samo użytkowanie gruntów pokrytych wodami morskimi wiąże się z decyzją ministra i bardzo wysokimi opłatami.

---

Co zatem należy zrobić? Na pewno trzeba zrobić projekt rozgraniczenia gruntów pokrytych wodami od gruntów przyległych. Projekt ten stanowi podstawę do wydania decyzji o ustaleniu linii brzegu. Do tego momentu nie powinno być problemów interpretacyjnych.  Jednak decyzja o ustaleniu linii brzegu wprowadza szereg zmian, dotyczących np. ewidencji gruntów i budynków. To jak wprowadzić zmiany wynikające z decyzji o ustaleniu linii brzegu do ewidencji gruntów to już temat na kolejny artykuł.

niedziela, 5 czerwca 2011

Kto jest właścicielem gruntów pokrytych wodami morskimi?

Prawo Wodne:

Art. 11. 1. Prawa właścicielskie w stosunku do wód publicznych stanowiących
własność Skarbu Państwa, z zastrzeżeniem art. 13, wykonują:
1) minister właściwy do spraw gospodarki morskiej - w stosunku do wód morza
terytorialnego oraz morskich wód wewnętrznych wraz z wodami Zatoki Gdańskiej,

Art. 14. 3. Gospodarowanie gruntami stanowiącymi własność Skarbu Państwa (...), wykonują, w imieniu i na rzecz Skarbu Państwa, odpowiednio organy, o których mowa w art. 11 ust. 1.


Art. 217. 1. Z dniem wejścia w życie ustawy stanowiące własność Skarbu Państwa wody oraz grunty pokryte tymi wodami przechodzą w trwały zarząd odpowiednio - urzędów morskich, regionalnych zarządów gospodarki wodnej, parków narodowych, stosownie do art. 11 ust. 1 pkt 1-3.
2. Przejście mienia, o którym mowa w ust. 1, stwierdza, na wniosek zainteresowanego, właściwy starosta wykonujący zadanie z zakresu administracji rządowej.
3. Przepisy ust. 1 i 2 nie dotyczą mienia, w stosunku do którego zostało ustanowione prawo użytkowania wieczystego.

piątek, 3 czerwca 2011

Które decyzje są uzgadniane z Dyrektorem Urzędu Morskiego?

Ustawa o obszarach morskich Rzeczpospolitej Polskiej i administracji morskiej

Art. 37. 3. Pozwolenia wodnoprawne, decyzje o warunkach zabudowy i zagospodarowania terenu, decyzje o pozwoleniu na budowę oraz decyzje w sprawie zmian w zalesianiu, zadrzewianiu, tworzeniu obwodów łowieckich, a także projekty studium uwarunkowań i kierunków zagospodarowania przestrzennego gminy, miejscowych planów zagospodarowania przestrzennego i planów zagospodarowania przestrzennego województwa, dotyczące pasa technicznego, pasa ochronnego oraz morskich portów i przystani, wymagają uzgodnienia z dyrektorem właściwego urzędu morskiego.
4. Wszystkie plany i projekty związane z zagospodarowaniem morskich wód wewnętrznych i morza terytorialnego są zatwierdzane przez organy administracji morskiej w uzgodnieniu z właściwymi gminami nadmorskimi.

Art. 42. 2. W szczególności do organów administracji morskiej należą sprawy:
10) uzgadnianie decyzji w sprawie wydawania pozwoleń wodnoprawnych i pozwoleń budowlanych na obszarze pasa technicznego, morskich portów i przystani, morskich wód wewnętrznych i morza terytorialnego, jak również wszelkich innych decyzji dotyczących zagospodarowania tego pasa;

piątek, 22 kwietnia 2011

ArcGIS/ArcSDE + PostgreSQL/PostGIS

Od kilku dni walczę z postawieniem serwera ArcSDE na bazie PostgreSQL. Serwer który dostałem miał domyślnie zainstalowany. Najpierw zainstalowałem najnowszy PostgreSQL 9 który obsługuje procesory 64 bitowe ale...

PostGIS dla Windows+PostgreSQL 9. Esri obsługuje tylko PostgreSQL 8.3.8, 8.4.1. Poniważ 8.3.8 obsługuje domyślne kodowanie Win1250, a mi ze wzlędu na CSW od deegree.org zależy na UTF zmuszony zostałem do zainstalowania wersji 8.4.1. Nie znajdziesz jej łatwo, ale gdy poszukasz to komplet znajdziesz pod adresami:
PostgreSQl 8.4.1
PostGIS 1.4.0

W ten sposób mamy komplet, który jest oficjalnie wspierany przez Esri. Jestem prawie pewien, że postawiłbym ten serwer na nowszym np. PostgreSQL 8.4.7, ale gdy pytasz o cokolwiek w esri to pytają o wersję bazy i niech tylko jeden numerek się różni to już wysyłają Cię na drzewo.


PostgreSQL 8.4.1 nie połączysz z ArcSDE za pomocą standardowego kreatora. Musisz użyć sporo komend w linii poleceń. Wszystko jest czytelnie opisane na stronach esri

Creating a geodatabase in PostgreSQL 8.4.1 on Windows

Postępowałem zgodnie z poleceniami, z tą różnicą, że poleceń SQL nie chciało mi się ręcznie klepać więc bazę i użytkowników utworzyłem za pomocą PgAdmin. Druga różnica to taka, że mi zależało, żeby baza była utworzona na szablonie PostGIS, żeby potem można było ewentualnie używać jej przez inne edytory typu Quantum GIS i żeby sam ArcGIS umiał czytać warstwy utworzone przez inne edytory (zmienna GEOMETRY_STORAGE = "PG_GEOMETRY"). Dlatego:

Tworzenie bazy w PgAdmin

Utworzyłem użytkownika 'sde' i 'umgdy' oraz table space 'sde'
Utowrzyłem nową bazę na szablonie 'template_postgis', z właścicielem 'sde' i tablespace 'sde'
Utworzyłem schematy 'sde' i 'umgdy' dla edytorów odpowiednio z właścicielami 'sde' i 'umgdy' (ArcSDE na PostgreSQL wymaga aby dla każdej nazwy użytkownika był utworzony schemat o takiej samej nazwie).
Nadałem odpowiednie uprawnienia do schematów i do tabel systemowych PostGIS (w oknie poleceń SQL):



grant all privileges on schema public to sde;
grant all privileges on schema public to umgdy;
GRANT USAGE ON SCHEMA sde TO public;
grant all privileges on table public.geometry_columns to sde;
grant all privileges on table public.geometry_columns to umgdy;
grant all privileges on table public.spatial_ref_sys to sde;
grant all privileges on table public.spatial_ref_sys to umgdy;

Na koniec należy utworzyć bazy systemowe ArcSDE używając wiersza poleceń:

sdesetup -o install -d POSTGRESQL -D arcgis -u sde -p <haslo> -s<server_name>

gdy serwer jest na lokalnej maszynie można ominąć parametr -s<server_name>

Konfiguracja usług sieciowych

Należy otworzyć notatnik jako adminstrator i dodać do plików

C:\Program Files (x86)\ArcGIS\ArcSDE\pgexe\etc\services.sde
C:\Windows\System32\drivers\etc\services

linijkę:

esri_sde_pg_arcgis 5151/tcp #ArcSDE for PostgreSQL with 'arcgis' database


Autoryzacja licencji

Żeby odpalić kreatora ArcSDE trzeba skopiować pliki z folderu

c:\Program Files (x86)\ArcGIS\ArcSDE\pgexe\pg841_st_lib

do folderów

C:\Program Files (x86)\PostgreSQL\8.4\lib - tu wiadomo
c:\bin - taka niedoróbka programistów z esri, szuka w domyślym folderze nie wiedzieć czemu

Start > All Programs > ArcGIS > ArcSDE > ArcSDE for PostgreSQL Post Installation

uruchamiając kreatora jako administrator i wybierając opcję 'Custom'. Dalej należy wybrać tylko Authorize ArcSDE, wpisać dane, dalej, dalej, dalej...


Instalacja usług sieciowych


Najłatwiej utworzyć plik BAT i wpisać:

sdeservice -o create -d postgresql,postgresql-8.4 -p <hasło> -i esri_sde_pg_arcgis

sdeservice -o register -r ADMIN_DATABASE -v arcgis -d postgresql -p <hasło> -i esri_sde_pg_arcgis

sdemon -o start -i esri_sde_pg_arcgis -p <hasło>

pause


---

esri_sde_pg_arcgis - to nazwa usługi
arcgis - to nazwa bazy danych



Sprawdzenie funkcjonowania ArcSDE

Najpierw na serwerze w linii komend trzeba wpisać:

sdeservice -o list

odpowiedź może wyglądać tak:

SDE service Information
--------------------------------------------------------------------
RDBMS: PostgreSQL
Name: ArcSde Service(esri_sde_pg_arcgis)
SDEHOME: C:\Program Files (x86)\ArcGIS\ArcSDE\pgexe\
Datasource: UMGIS
Admin_database: arcgis
Version: 10.0
Status: SERVICE_RUNNING


Ustawienie natywnego zapisu geometrii



ArcSDE domyślnie używa geometrii ST_GEOMETRY, którą rozumie tylko Esri, inne produkty zazwyczaj nie potrafią jej odczytać i traktują takie warstwy jak zwykłe tabele. Dlatego postanowiłem zmienić domyślny typ geometrii na PostGIS. W tym celu zmieniłem zmienną:

DEFAULTS .GEOMETRY_STORAGE = "PG_GEOMETRY"

za pomocą wiersza poleceń:


sdedbtune -o alter -i <service_name> -k DEFAULTS -P GEOMETRY_STORAGE -v "PG_GEOMETRY" -s <server_name> -D postgis -u sde -p <ArcSDE_admin_password>


Przy czym ja na swojej lokalnej maszynie ominąłem -s <server_name>.

Za pomocą polecenia

sdedbtune -o list -D <db_name> -u <user_name:sde> -p haslo012 -i <service_name>

sprawdziłem, że zmienna faktycznie została zmieniona więc przystąpiłem do testowego rysowania. Oczywiście nie ma co liczyć na to, że zadziałało...

Przy tworzeniu nowej warstwy wyświetlał się błądinvalid SRID CONTEXT: SQL statement "SELECT AddGeometryColumn('','', $1 , $2 , $3 ,$4 , $5 )"

Działo się tak dla Feature Dataset dla których był ustawiony układ współrzędnych 1992. Jednak gdy dodawałem Feature Class bezpośrednio w bazie przy ustawionym Unknown Coordinate System warstwa się dodawała. Sprawdziłem w Quantum GIS 1.6 - była widoczna jako "bez geometrii". Postanowiłem sprawdzić z drugiej strony - dodałem warstwę w QGis i sprawdziłem czy widać ją w ArcCatalog'u - widać ale też bez geometrii. Skoro mimo wszystko nie udało mi się połączyć do wspólnej pracy tych dwóch narzędzi to stwiedziłem, że wróce do standardowego dla Esri ustawienia GEOMETRY_STORAGE = "ST_GEOMETRY".


Literatura:
ArcGIS and the PostGIS geometry type
Feature classes in a geodatabase in PostgreSQL
Use ArcSDE with SQL Server 2008 R2 Express to enable a 10 GB storage limit
Adding users to an ArcSDE geodatabase