การเขียนโปรแกรม Geoserver 2.0.2 เพื่อเพิ่มแหล่งข้อมูลและเลเยอร์แรสเตอร์โดยไม่มี UI


15

ฉันมีไดเรกทอรีภาพแรสเตอร์ที่จะได้รับการปรับปรุงอย่างต่อเนื่อง จากภาพนี้ฉันกำลังสร้าง Image Pyramids โดยใช้ยูทิลิตี้ PyramidBuilder ของ Geotool ฉันต้องตั้งค่างาน cron เพื่อเพิ่ม rast datastores และ layer ให้กับ Geoserver โดยอัตโนมัติโดยไม่ต้องใช้ UI

หลังจากดูที่ส่วน REST ของคู่มือGeoserverฉันสามารถเพิ่มพื้นที่ทำงานของฉัน "testWS" แต่พยายามสร้าง ImagePyramid datastore ไม่ทำงาน

เนื่องจากฉันสามารถเข้าถึงดาต้าสโตร์ได้ฉันจึงขยายตัวอย่าง shapefile และลองทำ

curl -u admin:geoserver -XPUT -H 'Content-type: text/plain' \ 
   -d '/opt/geoserver_data_dir/2.0.2/data/test_pyramid.pyr' \
    "http://localhost:8080/geoserver/rest/workspaces/testWS/datastores/test_pyramid.pyr/external.imagepyramid?configure=all"

ที่ test_pyramid.pyr เป็นฐานของ ImagePyramid ของฉันที่ตำแหน่งนี้

สิ่งนี้ทำให้ฉันมีข้อผิดพลาด "ไม่มีที่เก็บข้อมูลดังกล่าว: test_pyramid"

มีวิธีที่ดีกว่าในการเพิ่มที่เก็บข้อมูลและเลเยอร์ใหม่ลงใน Geoserver โดยไม่ต้องเพิ่มแต่ละรายการด้วยตนเองผ่าน UI หรือไม่ ฉันต้องการความช่วยเหลือในการกำหนดคำสั่ง REST ที่เหมาะสมซึ่งจะเพิ่ม ImagePyramid ที่มีอยู่เป็นดาต้าสโตร์และเลเยอร์

มีรหัส Java ที่สามารถทำได้หรือไม่ ฉันดูที่ส่วนขยายหลาม Geoserver แต่พวกเขาไม่มีสิ่งนี้


โพสต์นี้จาก Jan mail-archive.com/geoserver-users@lists.sourceforge.net/ ......อธิบายปัญหาเดียวกันเกือบทั้งหมด ไม่มีความละเอียด
DaveParillo

1
geoserver docs ที่docs.geoserver.org/stable/en/user/restconfig/ …แสดงว่ามีเพียง datastores ที่คุณสามารถกำหนดค่าโดยใช้วิธีนี้เป็นไฟล์ในกรณีของ Shapefile ฐานข้อมูลในกรณีของ PostGIS หรือ เซิร์ฟเวอร์ในกรณีของการให้บริการคุณลักษณะทางเว็บระยะไกล แต่เอกสารอาจไม่สมบูรณ์
DaveParillo

คุณสามารถเพิ่มสิ่งที่เป็นจริงในไฟล์ที่คุณกำลังโพสต์ไปยังเซิร์ฟเวอร์?
Ian Turton

แต่คุณต้องสร้างไฟล์ XML ที่มีข้อมูลนั้น
Ian Turton

สิ่งที่ฉันพยายามโพสต์คือเส้นทางไปยังที่เก็บข้อมูลที่ฉันต้องการให้ Geoserver สร้าง พา ธ นี้เป็นชุดไฟล์แรสเตอร์ภายนอก (imagepyramid) ในไดเรกทอรีเดียว สิ่งที่ฉันต้องการสำหรับ Geoserver เพื่อสร้าง datastore และ layer สำหรับ imagepyramid ที่ตำแหน่งนี้ (บนระบบไฟล์เดียวกับ geoserver)
rbrister

คำตอบ:


20

คุณสามารถสร้างพื้นที่ทำงานดาต้าสโตร์และเลเยอร์ (coveragestore) สำหรับ GeoTiff ด้วย curl และ xml จากนอก UI ได้ดังนี้:

  1. สร้างพื้นที่ทำงาน

    curl -u admin:geoserver -v -XPOST -H 'Content-type: text/xml' \
         -d '<workspace><name>wsgeotiff</name></workspace>' \
         http://localhost:8080/geoserver/rest/workspaces
  2. จากนั้นสร้างที่เก็บข้อมูล

    curl -u admin:geoserver -v -XPOST -H 'Content-type: text/xml' \
         -d '<coverageStore>
             <name>wsgeotiff_imageGeoTiffWGS84_1298678792699</name>
             <workspace>wsgeotiff</workspace>
             <enabled>true</enabled>
             <type>GeoTIFF</type>
             <url>/home/gis/image_wgs84.tif</url>
             </coverageStore>' \
         "http://localhost:8080/geoserver/rest/workspaces/wsgeotiff/coveragestores?configure=all"
  3. จากนั้นสร้างเลเยอร์

     curl -u admin:geoserver -v -XPOST -H 'Content-type: text/xml' \
          -d '<coverage>
              <name>imageGeoTiffWGS84</name>
              <title>imageGeoTiffWGS84</title>
              <nativeCRS>GEOGCS[&quot;WGS 84&quot;,DATUM[&quot;World Geodetic System 1984&quot;,SPHEROID[&quot;WGS 84&quot;,6378137.0, 298.257223563, AUTHORITY[&quot;EPSG&quot;,&quot;7030&quot;]],AUTHORITY[&quot;EPSG&quot;,&quot;6326&quot;]],PRIMEM[&quot;Greenwich&quot;, 0.0, AUTHORITY[&quot;EPSG&quot;,&quot;8901&quot;]],UNIT[&quot;degree&quot;, 0.017453292519943295],AXIS[&quot;Geodetic longitude&quot;, EAST],AXIS[&quot;Geodetic latitude&quot;, NORTH],AUTHORITY[&quot;EPSG&quot;,&quot;4326&quot;]]</nativeCRS>
              <srs>EPSG:4326</srs>
              <latLonBoundingBox><minx>-179.958</minx><maxx>-105.002</maxx><miny>-65.007</miny><maxy>65.007</maxy><crs>EPSG:4326</crs></latLonBoundingBox>
              </coverage>' \
          "http://localhost:8080/geoserver/rest/workspaces/wsgeotiff/coveragestores/wsgeotiff_imageGeoTiffWGS84_1298678792699/coverages"

เมื่อสิ่งนี้เสร็จสิ้นคุณมีที่เก็บข้อมูลชี้ไปที่รูปภาพภายนอก 'image_wgs84.tif' และเลเยอร์ WMS เพื่อแสดงการครอบคลุม

สิ่งที่ฉันไม่รู้ก็คือเทคนิคนี้จะแปลเป็นเทคนิคโดยตรงสำหรับการสร้างภาพประเภทปิรามิด datastore หรือไม่

โชคดี.


ฉันมีปัญหาตรงตามคำถามข้างต้น ขอบคุณที่วางไว้อย่างดีการแก้ปัญหาส่วนใหญ่ทำให้เกิดความสับสน ฉันมีหนึ่งคำถามที่นี่ว่า ในคำตอบของคุณจำเป็นต้องได้รับกล่อง Bounding Boxes ของแรสเตอร์เป็นอินพุต ตอนนี้ฉันเข้าใจแล้วว่าถ้าฉันวางโซลูชันข้างต้นไว้ในสคริปต์ฉันสามารถใช้ gdalinfo เพื่อค้นหากล่องขอบเขต แต่นั่นเป็นเพียงการเพิ่มงาน (แยกวิเคราะห์ ฯลฯ ) คำถามของฉันคือเราสามารถทำให้ geoserver คำนวณขอบเขตของกล่องโดยอัตโนมัติได้หรือไม่? เรารู้ว่ามันสามารถทำได้เพราะเมื่อเราเพิ่มแรสเตอร์จาก UI มันจะคำนวณ Bounding Box!
Shaunak

3
ใน GeoServer 2.2 ของฉันคุณไม่จำเป็นต้องระบุ Bounding Box (และ SRS เป็นต้น) อย่างชัดเจน มันจะตรวจจับพวกมันโดยอัตโนมัติจากไฟล์เมื่อสร้างเลเยอร์ (ทดสอบสำหรับ GeoTIFF และ ImageMosaic) คุณสามารถตั้งค่าเพิ่มเติม?recalculate=nativebboxเพื่อให้มีการคำนวณกล่องขอบดั้งเดิมอีกครั้งเมื่อนโยบายการฉายหรือการฉายเปลี่ยนไป ดูdocs.geoserver.org/stable/en/user/rest/api/…
xandriksson

4

คุณจะต้องมีร้านค้าที่ครอบคลุมและพื้นที่ครอบคลุม

ที่เก็บข้อมูลครอบคลุมเป็นแหล่งข้อมูลเชิงพื้นที่ที่อ้างอิงตามแรสเตอร์

ที่เก็บข้อมูลที่คุณพยายามใช้นั้นมีไว้สำหรับข้อมูลเวกเตอร์เท่านั้น

คุณได้ตรวจสอบวิธีใช้ curl เพื่ออัพโหลดความคุ้มครองผ่านทาง Geoserver rest หรือไม่?

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