GeoServer'da PostGIS Rasterleri Yayınlanıyor mu?


23

GeoServer kullanarak PostGIS taramalarını nasıl yayınlarım?

Image Mosaic JDBC'yi kullanarak, ancak şanssız bir Raster veri kaynağı oluşturmaya çalışırken çok zaman harcadım.

Gerçekleştirilen adımlar:
1. JDBC Image Mosaic uzantısını indirip kurdu (işe yaradı)
2. "Connection Parameter" dosyalarını oluşturdu:

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>

"mozaik", bir satır içeren bir tablodur (sütunlar: ad, başlık, minX, minY, maxX, maxY, resX, resY): "gfm, testrastertable,,,,,,",

3. ./geoserver/data_dir/coverages/
4. Image Mosaic JDBC veri deposu eklemeye çalışırken aşağıdaki hatayı alıyorum:

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



Güncelleme: Geoserver günlüğü

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

Ayrıntılı bilgi almak ve günlük dosyasını kontrol etmek için giriş yapın
Ian Turton

sadece log ile güncellendi ... bana çok fazla söylemedi
asp

Burada kimse yardım edemez
GIS-Jonathan

Bu soruya dair herhangi bir güncelleme var mı?
Pablo

1
Güncelleme yok ... Bir JDBC Image Mosaic oluşturma fikrini bırakmak zorunda kaldım çünkü Geoserver'da oluşturamadım. Şimdi ImagePyramid deposunu kullanıyorum ve dosyalar diskte tutuluyor.
asp

Yanıtlar:


7

OP'ye benzer geoserver'da postgis raster kullanmaya çalışırken birçok konuda çalıştım. Raster verilerimi başarıyla nasıl yüklediğim aşağıdadır.

Ön yapılandırma: FME'den oluşturulan bir BNG coğrafi katman, kullanılarak postgis'e içe aktarıldı raster2pgsql. Kullanılan komut şuydu:

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

Bu raster masasını piramit masalarıyla birlikte yarattı.

Şu anda sunucumun bir örneği var Geoserver 2.6.2. Postgis taramalarını kullanmak için, http://geoserver.org/release/2.6.2/ adresinden indirilebilen JDBC Image Mosaic uzantısını gerektirir.

.Jar uzantısı daha sonra içine çıkarıldı WEB-INF/lib. Bu daha sonra geoserver'ın postgis'ten raster kullanmasını sağlayacaktır. Ancak verilere erişmek için birkaç ayarın yapılandırılması gerekir.

Talimatların ardından: http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html fakat biraz ince ayarlanmış:

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))

Şimdi örnekte oek adında bir "kapsama alanı" için kayıt ekleyin; bunlar raster tablolarınızdır: ana ve piramitler.

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});

Ayrıca, dokümanlara göre, Postgis JDBC sürücüleri için <sürüm 9, veritabanında bir özellik ayarlamak için gereklidir:

ALTER DATABASE dbname SET bytea_output TO 'escape'

Şimdi Geoserver yapılandırması:

Geoserver veri dizininizde bir dizin oluşturun /data/coverages, bunun 3 dosya içermesi gerekir:connect.pgraster.xml.inc, mapping.pgraster.xml.inc, oek.pgraster.xml

Adlarını ve içeriklerini öğrenmek için http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html adresini takip edin . Açıkça veritabanı bağlantı dizesini ve kullanıcı adı / şifre ayarlarını düzenleyin.connect.pgraster.xml.inc

mapping.pgraster.xml.inc Raster tablolarına doğru referans vermemiz gereken yer burasıdır.

<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>

Böylece MOSAIC tablosuna eklediğimiz değerler elde edilecek, değerler raster tablomuza ve piramit tablomuza bağlanan namesütunlar MOSAIC. rastraster tablolarındaki raster sütununun adıdır.

In oek.pgraster.xmlmarka emin SRS doğru bu durumda, 27.700 BNG ayarlanır.

<?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

Geoserver'da şimdi yeni bir veri deposu ekleyebiliriz.

Yeni'ye git Yeni mağaza ekle.

ImageMosaicJDBC'yi seçin

Bir isim verin ve URL'yi ayarlayın file:coverages/oek.pgraster.xml

Bunu kaydedin; parmaklar geçti, hiçbir hata döndürülmedi. Eğer öyleyse, umarım sorunun ne olduğunu gösterecek umuduyla, yalnızca bir yazım hatası veya adlandırma sorununu gösteren coğrafi sunucu günlüklerini kontrol edin.

Yeni bir katman eklemeye gidin ve yeni raster veri deposunu seçin.

Oek adlı yeni katmanınızı / kapsama alanınızı seçin ve yayınlayın.

Sonra katman ayarlarında koordinat sisteminizi ve sınırlayıcı kutularınızı uygun şekilde ayarlayın.

Rasterin biçimlendirilmesi için buradaki dokümanları izleyin: http://docs.geoserver.org/latest/en/user/styling/sld-reference/rastersymbolizer.html

Bir stil ekledim:

<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>

Bu, ressamlarımı değer verdiği mavi renklendirdi.

Kullanılabilir bir katmana sahip olmalısınız.

Feragatname: GIS uzmanı değilim ve çalıştığım işlerin çoğu deneme yanılma oldu. Bunu yapmanın daha iyi yolları olduğuna dair hiçbir şüphem yok, ancak şu an için postgis'te raster verilerini kullanma yeteneğine sahip olup olmadığımızı doğrulamak için sadece bir konsept kanıtı üzerinde çalışıyorum. Tarama değerleri ve şekillendirme gibi daha ince detaylar, hala ütülenmem gereken şeyler. Başka ilerleme kaydedersem cevabımı güncellerim.


2

PostGIS raster eklentisi için yapılandırma talimatlarını takip ederek , değiştirmeyi denemelisiniz.

<spatialExtension name="postgis"/>

ile

<spatialExtension name="pgraster"/>

configration dosyasında mapping.postgis.xml.inc.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.