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