Publikujesz rastry PostGIS w GeoServer?

23

Jak publikować rastry PostGIS za pomocą GeoServer?

Spędziłem dużo czasu próbując utworzyć źródło danych Raster przy użyciu Image Mosaic JDBC, ale bez powodzenia.

Wykonane kroki:
1. Pobrałem i zainstalowałem rozszerzenie mozaiki obrazu JDBC (działało dobrze)
2. Utworzyłem pliki „Parametru połączenia”:

connect.postgis.xml.inc:

<connect>
  <dstype value="DBCP"/>
  <username value="postgres" />
  <password value="password" />
  <jdbcUrl value="jdbc:postgresql://localhost:5432/db1" />
  <driverClassName value="org.postgresql.Driver"/>
  <maxActive value="10"/>
  <maxIdle value="0"/>
</connect>


mapping.postgis.xml.inc:

<spatialExtension name="postgis"/>
<mapping>
    <masterTable name="mosaic" >
        <coverageNameAttribute name="name"/>
        <maxXAttribute name="maxX"/>
        <maxYAttribute name="maxY"/>
        <minXAttribute name="minX"/>
        <minYAttribute name="minY"/>
        <resXAttribute name="resX"/>
        <resYAttribute name="resY"/>
        <tileTableNameAtribute name="tiletable" />
    </masterTable>
    <tileTable>
        <blobAttributeName name="rast" />
    </tileTable>
</mapping>


osm.postgis.xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE ImageMosaicJDBCConfig [
  <!ENTITY mapping PUBLIC "mapping"  "mapping.postgis.xml.inc">
  <!ENTITY connect PUBLIC "connect"  "connect.postgis.xml.inc">]>
<config version="1.0">
  <coverageName name="gfm"/>
  <coordsys name="EPSG:25832"/>
  <!-- interpolation 1 = nearest neighbour, 2 = bilinear, 3 = bicubic -->
  <scaleop  interpolation="1"/>
  <verify cardinality="false"/>
  &mapping;
  &connect;
</config>

gdzie „mozaika” to tabela (kolumny: nazwa, titletable, minX, minY, maxX, maxY, resX, resY) zawierająca jeden wiersz: „gfm, testrastertable,,,,,,”

3. Zapisano pliki konfiguracyjne w. ./geoserver/data_dir/coverages/
4. Podczas próby dodania magazynu danych JDBC mozaiki obrazu pojawia się następujący błąd:

Error: Could not list layers for this store, an error occurred retrieving them: Unable to acquire a reader for this coverage with format: ImageMosaicJDBC



Aktualizacja: Dziennik Geoserver

2012-10-24 14:09:11,404 DEBUG [org.geoserver] - Thread 14 locking in mode WRITE
2012-10-24 14:09:11,404 DEBUG [org.geoserver] - Thread 14 got the lock in mode WRITE
2012-10-24 14:09:11,406 DEBUG [geoserver.config] - Persisting coverage store raster_store
2012-10-24 14:09:11,408 DEBUG [geoserver.config] - Persisted org.geoserver.catalog.impl.CoverageStoreInfoImpl to /opt/geoserver/data_dir/workspaces/raster/raster_store/coveragestore.xml
2012-10-24 14:09:11,416 DEBUG [geoserver.config] - Persisted $Proxy15 to /opt/geoserver/data_dir/global.xml
2012-10-24 14:09:11,438 ERROR [imagemosaic.jdbc] - 
2012-10-24 14:09:11,438 WARN [imagemosaic.jdbc] - 
java.io.IOException
    at org.geotools.gce.imagemosaic.jdbc.ImageMosaicJDBCReader.<init>(ImageMosaicJDBCReader.java:163)
    at org.geotools.gce.imagemosaic.jdbc.ImageMosaicJDBCFormat.getReader(ImageMosaicJDBCFormat.java:209)
....
2012-10-24 14:09:11,439 INFO [geoserver.web] - Getting list of coverages for saved store file:coverages/osm.postgis.xml
java.lang.RuntimeException: Could not list layers for this store, an error occurred retrieving them: Unable to acquire a reader for this coverage with format: ImageMosaicJDBC
    at org.geoserver.web.data.layer.NewLayerPageProvider.getItems(NewLayerPageProvider.java:115)
...
Caused by: java.lang.Exception: Unable to acquire a reader for this coverage with format: ImageMosaicJDBC
    at org.geoserver.catalog.CatalogBuilder.buildCoverage(CatalogBuilder.java:812)
    at org.geoserver.web.data.layer.NewLayerPageProvider.getItems(NewLayerPageProvider.java:82)
    ... 95 more
2012-10-24 14:09:11,441 DEBUG [geoserver.config] - Removing coverage store raster_store
2012-10-24 14:09:11,446 DEBUG [geoserver.config] - Persisted $Proxy15 to /opt/geoserver/data_dir/global.xml
2012-10-24 14:09:11,459 DEBUG [org.geoserver] - Thread 14 releasing the lock in mode WRITE
żmija
źródło
włącz rejestrowanie, aby uzyskać szczegółowe informacje i sprawdź plik dziennika
Ian Turton
właśnie zaktualizowałem log ... nie mówi mi zbyt wiele
asp
Ponieważ nikt tutaj nie wydaje się pomóc, możesz wypróbować listę dyskusyjną GeoServer: geoserver.org/display/GEOS/Mailing+Lists
GIS-Jonathan
Jakaś aktualizacja tego pytania?
Pablo,
1
Brak aktualizacji ... Musiałem porzucić pomysł stworzenia mozaiki obrazu JDBC, ponieważ po prostu nie mogłem go utworzyć w Geoserver. Korzystam teraz ze sklepu ImagePyramid, a pliki są przechowywane na dysku.
asp

Odpowiedzi:

7

Przepracowałem kilka problemów, próbując użyć rastra postgis w geoserver podobnym do OP. Poniżej pokazano, jak pomyślnie załadowałem swoje dane rastrowe.

Konfiguracja wstępna: warstwa geotiff BNG, wygenerowana z FME, została zaimportowana do Postgis za pomocą raster2pgsql. Użyto polecenia:

raster2pgsql -s 27700 -I -M -C {geotiffName}.tif -t 100x100 -l 2,4,6 {schema}.{tableName} | psql -U {user} -d {database}

Stworzyło to stół rastrowy wraz ze stołami piramid.

Obecnie mój serwer ma instancję Geoserver 2.6.2. Aby korzystać z rastrów Postgis, wymaga rozszerzenia JDBC Image Mosaic, które można pobrać ze strony http://geoserver.org/release/2.6.2/

Rozszerzenie .jar zostało następnie wyodrębnione do WEB-INF/lib. Umożliwi to następnie geoserverowi korzystanie z rastrów z Postgis. Jednak aby uzyskać dostęp do danych, należy skonfigurować kilka ustawień.

Postępując zgodnie z instrukcjami w: http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html, ale nieco poprawiony:

create table {schema}.MOSAIC (NAME varchar(254) not null,
     TileTable varchar(254)not null,
     minX FLOAT8,minY FLOAT8, maxX FLOAT8, maxY FLOAT8,resX FLOAT8, resY FLOAT8, primary key (NAME,TileTable))

Teraz wstaw rekordy dla „pokrycia”, nazwanego w tym przykładzie oek, są to tabele rastrowe: główny i piramidalny.

insert into {schema}.MOSAIC (name, tiletable) values ('oek', {Main raster table name});
insert into {schema}.MOSAIC (name, tiletable) values ('oek', {raster pyramid 2 table name});
insert into {schema}.MOSAIC (name, tiletable) values ('oek', {raster pyramid 4 table name});
insert into {schema}.MOSAIC (name, tiletable) values ('oek', {raster pyramid 6 table name});

Również zgodnie z dokumentacją, w przypadku sterowników JDBC JDBC <wersja 9 konieczne jest ustawienie właściwości w bazie danych:

ALTER DATABASE dbname SET bytea_output TO 'escape'

Teraz konfiguracja Geoserver:

W katalogu danych Geoserver utwórz katalog /data/coverages, który musi zawierać 3 pliki:connect.pgraster.xml.inc, mapping.pgraster.xml.inc, oek.pgraster.xml

Postępuj zgodnie z http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html po ich nazwy i zawartość. Oczywiście dostosuj parametry połączenia z bazą danych i ustawienia nazwy użytkownika / hasła wconnect.pgraster.xml.inc

mapping.pgraster.xml.inc to tam musimy poprawnie odwoływać się do tabel rastrowych.

<spatialExtension name="pgraster"/>
 <mapping>
  <masterTable name="MOSAIC" >
          <coverageNameAttribute name="name"/>
          <maxXAttribute name="maxX"/>
          <maxYAttribute name="maxY"/>
          <minXAttribute name="minX"/>
          <minYAttribute name="minY"/>
          <resXAttribute name="resX"/>
          <resYAttribute name="resY"/>
          <tileTableNameAtribute  name="tiletable" />
  </masterTable>
  <tileTable>
          <blobAttributeName name="rast" />
  </tileTable>
</mapping>

Otrzymamy więc wartości, które dodaliśmy do tabeli MOSAIC, namewartościami są kolumny MOSAIC, które łączą się z naszą tabelą rastrową i tabelami piramid. rastto nazwa kolumny rastrowej w tabelach rastrowych.

W oek.pgraster.xmlupewnić się, że SRS jest ustawiony prawidłowo, 27700 BNG w tej sprawie.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE ImageMosaicJDBCConfig [
  <!ENTITY mapping PUBLIC "mapping"  "mapping.pgraster.xml.inc">
  <!ENTITY connect PUBLIC "connect"  "connect.pgraster.xml.inc">
]>

<config version="1.0">
  <coverageName name="oek"/>
  <coordsys name="EPSG:27700"/>
  <!-- interpolation 1 = nearest neighbour, 2 = bipolar, 3 = bicubic -->
  <scaleop  interpolation="1"/>
<axisOrder ignore="false"/>
  &mapping;
  &connect;
</config

W Geoserver możemy teraz dodać nowy magazyn danych.

Idź do nowego Dodaj nowy sklep.

Wybierz ImageMosaicJDBC

Nadaj mu nazwę i ustaw adres URL na file:coverages/oek.pgraster.xml

Zapisz to, a kciuki nie zwracają błędów. Jeśli tak, sprawdź dzienniki geoservera, które - mam nadzieję - wskażą problem. Mam nadzieję, że to tylko literówka lub problem z nazewnictwem.

Idź, aby dodać nową warstwę i wybierz nowy magazyn danych rastrowych.

Wybierz nową warstwę / pokrycie oek i opublikuj ją.

Następnie w ustawieniach warstw odpowiednio dostosuj układ współrzędnych i obwiednie.

Aby stylizować raster, postępuj zgodnie z dokumentami tutaj: http://docs.geoserver.org/latest/en/user/styling/sld-reference/rastersymbolizer.html

Dodałem styl:

<RasterSymbolizer>
 <Opacity>1.0</Opacity>
  <ColorMap>
   <ColorMapEntry color="#ffffff" quantity="1" label="label1" opacity="1"/>
   <ColorMapEntry color="#0000ff" quantity="200" label="label2" opacity="1"/>
  </ColorMap>
</RasterSymbolizer>

To zabarwiło moje rastry na niebiesko, gdzie miały wartość.

Powinieneś mieć warstwę użytkową.

Oświadczenie: Nie jestem ekspertem od GIS, a wiele z tego, nad czym pracowałem, było próbą i błędem. Nie mam wątpliwości, że istnieją lepsze sposoby, aby to zrobić, ale na razie pracuję tylko nad koncepcją koncepcji, aby potwierdzić, czy mamy możliwość korzystania z danych rastrowych w postgis. Bardziej szczegółowe detale, takie jak wartości rastrowe i stylizacja, to rzeczy, które wciąż muszę uzupełnić. Jeśli zrobię dalszy postęp, zaktualizuję swoją odpowiedź.

Tedd
źródło
2

Postępując zgodnie z instrukcjami konfiguracji wtyczki rastrowej PostGIS, powinieneś spróbować wymienić

<spatialExtension name="postgis"/>

z

<spatialExtension name="pgraster"/>

w pliku konfiguracyjnym mapping.postgis.xml.inc.

Xandriksson
źródło