เผยแพร่ PostGIS Rasters ใน GeoServer?


23

ฉันจะเผยแพร่ PostGIS rasters โดยใช้ GeoServer ได้อย่างไร

ฉันใช้เวลามากมายในการพยายามสร้างแหล่งข้อมูล Raster โดยใช้ Image Mosaic JDBC แต่ไม่มีโชค

ขั้นตอนที่ดำเนินการ:
1. ดาวน์โหลดและติดตั้งส่วนขยาย JDBC Image Mosaic (ทำงานได้ดี)
2. สร้างไฟล์ "พารามิเตอร์การเชื่อมต่อ":

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>

โดยที่ "mosaic" เป็นตาราง (คอลัมน์: ชื่อ, titletable, minX, minY, maxX, maxY, resX, resY) ที่มีหนึ่งแถว: "gfm, testrastertable,,,,,,,"

3. บันทึกไฟล์ config ใน ./geoserver/data_dir/coverages/
4. ในขณะที่พยายามเพิ่มที่เก็บข้อมูล Image Mosaic JDBC ฉันได้รับข้อผิดพลาดต่อไปนี้:

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



อัปเดต: บันทึก 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

เปิดการบันทึกเป็น verbose และตรวจสอบไฟล์บันทึก
Ian Turton

เพิ่งอัปเดตด้วยบันทึก ... ไม่บอกฉันมากเกินไป
asp

ดูเหมือนจะไม่มีใครช่วยคุณได้ลองใช้รายชื่อผู้รับจดหมายGeoServer
GIS-Jonathan

มีคำถามเพิ่มเติมเกี่ยวกับคำถามนี้หรือไม่?
Pablo

1
ไม่มีการอัปเดต ... ฉันต้องทิ้งแนวคิดในการสร้าง JDBC Image Mosaic เพราะฉันไม่สามารถสร้างใน Geoserver ได้ ฉันใช้ตอนนี้ที่เก็บ ImagePyramid และไฟล์จะถูกเก็บไว้ในดิสก์
asp

คำตอบ:


7

ฉันทำงานหลายประเด็นที่พยายามใช้แรสเตอร์ postgis ใน geoserver คล้ายกับ OP ด้านล่างเป็นวิธีที่ฉันโหลดข้อมูลแรสเตอร์ของฉันสำเร็จแล้ว

กำหนดค่าคอนฟิกล่วงหน้า: การ BNG GeoTIFF ชั้นที่สร้างขึ้นจาก FME ได้รับนำเข้ามาใน PostGIS raster2pgsqlใช้ คำสั่งที่ใช้คือ:

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

สิ่งนี้สร้างตารางแรสเตอร์พร้อมกับตารางพีระมิด

Geoserver 2.6.2ขณะนี้เซิร์ฟเวอร์ของฉันมีตัวอย่างของ หากต้องการใช้ Postgis rasters ต้องใช้ส่วนขยาย JDBC Image Mosaic ซึ่งสามารถดาวน์โหลดได้จากhttp://geoserver.org/release/2.6.2/

WEB-INF/libนามสกุลขวดถูกสกัดแล้วเป็น นี่จะทำให้ geoserver ใช้ rasters จาก postgis อย่างไรก็ตามในการเข้าถึงข้อมูลการตั้งค่าต่าง ๆ จำเป็นต้องกำหนดค่า

ทำตามคำแนะนำใน: http://docs.geotools.org/latest/userguide/library/coverage/pgraster.htmlแต่ได้รับการปรับแต่งเล็กน้อย:

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

ตอนนี้แทรกระเบียนสำหรับ "ความครอบคลุม" ชื่อ oek ในตัวอย่างตารางเหล่านี้คือตารางแรสเตอร์ของคุณ: รายการหลักและรายการปิรามิด

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

นอกจากนี้ตามเอกสารสำหรับไดรเวอร์ Postgis JDBC <เวอร์ชัน 9 จำเป็นต้องตั้งค่าคุณสมบัติในฐานข้อมูล:

ALTER DATABASE dbname SET bytea_output TO 'escape'

ตอนนี้การกำหนดค่า Geoserver:

ภายในไดเรกทอรีข้อมูล Geoserver ของคุณสร้างไดเรกทอรี/data/coveragesสิ่งนี้ต้องมี 3 ไฟล์:connect.pgraster.xml.inc, mapping.pgraster.xml.inc, oek.pgraster.xml

ติดตามhttp://docs.geotools.org/latest/userguide/library/coverage/pgraster.htmlสำหรับการตั้งชื่อและเนื้อหา ปรับสตริงการเชื่อมต่อฐานข้อมูลและการตั้งค่าชื่อผู้ใช้ / รหัสผ่านอย่างชัดเจนconnect.pgraster.xml.inc

mapping.pgraster.xml.inc เป็นที่ที่เราต้องการอ้างอิงตารางแรสเตอร์อย่างถูกต้อง

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

ดังนั้นนี่จะได้ค่าที่เราเพิ่มลงในตาราง MOSAIC nameค่าคือคอลัมน์ของMOSAICซึ่งลิงก์ไปยังตารางแรสเตอร์และตารางปิรามิดของเรา rastเป็นชื่อของคอลัมน์แรสเตอร์ในตารางแรสเตอร์

เพื่อoek.pgraster.xmlให้แน่ใจว่าตั้งค่า SRS ของคุณถูกต้องแล้ว 27700 BNG ในกรณีนี้

<?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 เราสามารถเพิ่มที่เก็บข้อมูลใหม่ได้แล้ว

ไปที่ใหม่เพิ่มร้านใหม่

เลือก ImageMosaicJDBC

ตั้งชื่อและตั้งค่า URL เป็น file:coverages/oek.pgraster.xml

บันทึกสิ่งนี้และนิ้วที่ไขว้ไม่มีข้อผิดพลาดจะถูกส่งคืน หากเป็นเช่นนั้นให้ตรวจสอบบันทึกทางภูมิศาสตร์ซึ่งหวังว่าจะระบุว่าปัญหาคืออะไรหวังว่าจะเป็นปัญหาการพิมพ์หรือการตั้งชื่อ

ไปเพื่อเพิ่มเลเยอร์ใหม่และเลือกที่เก็บข้อมูลแรสเตอร์ใหม่

เลือกเลเยอร์ / ความครอบคลุมใหม่ของคุณชื่อ oek และเผยแพร่

จากนั้นในการตั้งค่าเลเยอร์ปรับระบบพิกัดของคุณและกล่องขอบเขตอย่างเหมาะสม

วิธีจัดรูปแบบแรสเตอร์ติดตามเอกสารได้ที่นี่: http://docs.geoserver.org/latest/en/user/styling/sld-reference/rastersymbolizer.html

ฉันเพิ่มสไตล์:

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

แรสเตอร์สีฟ้าของฉันสีนี้ซึ่งพวกเขามีค่า

จากนั้นคุณควรมีเลเยอร์ที่ใช้งานได้

ข้อจำกัดความรับผิดชอบ: ฉันไม่ใช่ผู้เชี่ยวชาญของ GIS และสิ่งที่ฉันทำผ่านมามากมายคือการลองผิดลองถูก ฉันไม่สงสัยเลยว่ามีวิธีที่ดีกว่าที่จะทำ แต่ในขณะนี้ฉันกำลังทำงานเพื่อพิสูจน์แนวคิดเพื่อยืนยันว่าเรามีความสามารถในการใช้ข้อมูลแรสเตอร์ในไปรษณีย์ รายละเอียดที่ละเอียดกว่าเช่นค่าภาพแรสเตอร์และสไตล์เป็นสิ่งที่ฉันยังต้องรีด หากฉันมีความคืบหน้าเพิ่มเติมฉันจะอัปเดตคำตอบ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.