Xuất bản Rasters PostGIS trong GeoServer?


23

Làm cách nào để xuất bản trình duyệt PostGIS bằng GeoServer?

Tôi đã dành rất nhiều thời gian để cố gắng tạo nguồn dữ liệu Raster bằng Image khảm JDBC nhưng không có may mắn.

Các bước đã thực hiện:
1. Đã tải xuống và cài đặt tiện ích mở rộng JDBC Image Mosaic (hoạt động ổn)
2. Tạo các tệp "Tham số kết nối":

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>


ánh xạ.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>

trong đó "khảm" là một bảng (cột: tên, chuẩn độ, minX, minY, maxX, maxY, resX, resY) chứa một hàng: "gfm, testrastertable ,,,,,,,"

3. Đã lưu các tệp cấu hình trong. ./geoserver/data_dir/coverages/
4. Trong khi thử thêm kho dữ liệu JDBC của Image Mosaic, tôi nhận được lỗi sau:

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



Cập nhật: Nhật ký máy chủ địa lý

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

bật đăng nhập lên verbose và kiểm tra tệp nhật ký
Ian Turton

vừa được cập nhật với nhật ký ... không cho tôi biết quá nhiều
asp

Vì không ai ở đây dường như có thể giúp đỡ, bạn có thể thử danh sách gửi thư GeoServer
GIS-Jonathan

Bất kỳ cập nhật về câu hỏi này?
Pablo

1
Không có bản cập nhật ... Tôi đã phải bỏ ý tưởng tạo một JDBC Image Mosaic vì tôi không thể tạo nó trong Geoserver. Tôi hiện đang sử dụng cửa hàng ImagePyramid và các tệp được lưu trên đĩa.
asp

Câu trả lời:


7

Tôi đã làm việc thông qua một số vấn đề khi cố gắng sử dụng raster postgis trong máy chủ địa lý tương tự như OP. Dưới đây là cách tôi tải thành công dữ liệu raster của mình.

Định cấu hình sẵn: Một lớp địa lý BNG, được tạo từ FME, đã được nhập vào postgis bằng cách sử dụng raster2pgsql. Lệnh được sử dụng là:

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

Điều này tạo ra bảng raster cùng với các bảng kim tự tháp của nó.

Hiện tại máy chủ của tôi có một ví dụ Geoserver 2.6.2. Để sử dụng trình quét Postgis, nó yêu cầu phần mở rộng JDBC Image Mosaic có thể được tải xuống từ http://geoserver.org/release/2.6.2/

Phần mở rộng .jar sau đó được trích xuất thành WEB-INF/lib. Điều này sau đó sẽ cho phép máy chủ địa lý sử dụng các trình quét từ postgis. Tuy nhiên, để truy cập dữ liệu, một số cài đặt cần cấu hình.

Làm theo các hướng dẫn trong: http://docs.geotools.org/latest/userguide/l Library / coverage / ppgraster.html nhưng được điều chỉnh một chút:

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

Bây giờ chèn các bản ghi cho một "phạm vi bảo hiểm", được đặt tên là oek trong ví dụ, đây là các bảng raster của bạn: bảng chính và bảng kim tự tháp.

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

Cũng theo các tài liệu, đối với trình điều khiển JDBC của Postgis <phiên bản 9, cần phải thiết lập một thuộc tính trong cơ sở dữ liệu:

ALTER DATABASE dbname SET bytea_output TO 'escape'

Bây giờ cấu hình Geoserver:

Trong thư mục dữ liệu Geoserver của bạn tạo một thư mục /data/coverages, cái này cần chứa 3 tệp:connect.pgraster.xml.inc, mapping.pgraster.xml.inc, oek.pgraster.xml

Theo dõi http://docs.geotools.org/latest/userguide/l Library / coverage / ppgraster.html để đặt tên và nội dung của chúng. Rõ ràng điều chỉnh chuỗi kết nối cơ sở dữ liệu và cài đặt tên người dùng / mật khẩu trongconnect.pgraster.xml.inc

mapping.pgraster.xml.inc là nơi chúng ta cần tham chiếu các bảng raster một cách chính xác.

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

Vì vậy, điều này sẽ nhận được các giá trị mà chúng ta đã thêm vào bảng MOSAIC, các namegiá trị là các cột của MOSAIC, liên kết đến bảng raster và bảng kim tự tháp của chúng ta. rastlà tên của cột raster trong các bảng raster.

Để oek.pgraster.xmlđảm bảo SRS của bạn được đặt chính xác, 27700 BNG trong trường hợp này.

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

Trong Geoserver, bây giờ chúng ta có thể thêm một kho dữ liệu mới.

Chuyển đến cửa hàng mới Thêm mới.

Chọn ImageMosaicJDBC

Đặt tên cho nó và đặt URL thành file:coverages/oek.pgraster.xml

Lưu lại, và ngón tay vượt qua không có lỗi được trả lại. Nếu có, hãy kiểm tra nhật ký máy chủ địa lý, hy vọng sẽ chỉ ra vấn đề là gì, hy vọng chỉ là vấn đề chính tả hoặc đặt tên.

Đi để thêm một lớp mới và chọn kho dữ liệu raster mới.

Chọn lớp / phạm vi bảo hiểm mới của bạn có tên oek và xuất bản nó.

Sau đó, trong cài đặt lớp điều chỉnh hệ thống tọa độ và các hộp giới hạn của bạn một cách thích hợp.

Để tạo kiểu cho raster, hãy theo dõi các tài liệu ở đây: http://docs.geoserver.org/latest/en/user/stomme/sld-reference/rastersymbolizer.html

Tôi đã thêm một phong cách:

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

Điều này tô màu cho raster của tôi màu xanh nơi họ có một giá trị.

Sau đó bạn nên có một lớp có thể sử dụng.

Tuyên bố miễn trừ trách nhiệm: Tôi không phải là chuyên gia về GIS và rất nhiều điều tôi đã làm là thử nghiệm và sai sót. Tôi không có nghi ngờ rằng có nhiều cách tốt hơn để làm điều đó, nhưng hiện tại tôi chỉ làm việc trên một bằng chứng về khái niệm để xác nhận xem chúng tôi có khả năng sử dụng dữ liệu raster trong postgis hay không. Các chi tiết tốt hơn như giá trị raster và kiểu dáng là những thứ tôi vẫn cần phải giải quyết. Nếu tôi thực hiện bất kỳ tiến bộ hơn nữa, tôi sẽ cập nhật câu trả lời của tôi.


2

Làm theo các hướng dẫn cấu hình cho plugin raster PostGIS, bạn nên thử thay thế

<spatialExtension name="postgis"/>

với

<spatialExtension name="pgraster"/>

trong tập tin cấu hình mapping.postgis.xml.inc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.