สร้างเลเยอร์ใน GeoServer โดยใช้ REST


16

เป็นส่วนหนึ่งของการแก้ปัญหาที่เป็นไปได้สำหรับคำถามนี้ฉันต้องการสร้างเลเยอร์ใน GeoServer ผ่าน REST ที่ระบุคำสั่ง SQL พร้อมกับหมายเลขผู้ใช้

กำลังอ่านฉันคิดว่าฉันจะสร้างประเภทสถานที่และเผยแพร่หรือไม่ ฉันต้องทำทั้งหมดใน REST ใครบ้างมีตัวอย่างรหัส?


ดูเหมือนว่าเป็นไปไม่ได้ที่จะเพิ่มเลเยอร์ผ่านทางส่วนต่อประสานที่เหลือคุณแก้ไขมันได้หรือไม่? ฉันได้รับข้อผิดพลาด: สถานะ HTTP 405 - วิธีการ HTTP ที่ระบุไม่ได้รับอนุญาตสำหรับทรัพยากรที่ร้องขอ
a1an

คำตอบ:


41

มีหลายสิ่งที่คุณสามารถทำได้กับ GeoServer REST API ที่ไม่ได้จัดทำเป็นเอกสารโดยเฉพาะและไม่มีตัวอย่างโค้ดสำหรับ นี่คือกลยุทธ์ในการแก้ปัญหาเหล่านั้น

แรกเริ่มต้นด้วยตัวอย่างในเอกสาร ตรวจสอบให้แน่ใจว่าคุณคุ้นเคยกับวิธีการสร้างเลเยอร์ใหม่หรือพื้นที่ทำงานอย่างง่ายโดยใช้ HTTP POST ด้วย XML หรือ JSON

จากนั้นผ่าน GeoServer UI สร้างวัตถุที่คุณต้องการด้วยตนเองโดยไม่มีเอกสารประกอบ (ในกรณีนี้คือประเภทสถานที่)

สุดท้ายเรียกดูดัชนี GeoServer REST ( http://your-server/restหรือhttp://your-server/geoserver/rest) ด้วยตนเอง เรียกดูดัชนีจนกว่าคุณจะพบประเภทสถานที่ที่คุณเพิ่งสร้างขึ้น ผนวก ".xml" หรือ ".json" เข้ากับ URL ของทรัพยากรนี้และคุณจะเห็นการแสดง XML หรือ JSON

การเป็นตัวแทนนี้เป็นสิ่งที่คุณต้องมีเพื่อ POST เพื่อสร้างประเภทคุณลักษณะผ่าน API URL ของการเป็นตัวแทนคือ URL ที่คุณต้องการเพื่อ POST to (ตัวอย่างเช่นhttp://your-server/geoserver/rest/..../myFeatureTypeName.json)

คุณสามารถใช้กลยุทธ์นี้เพื่อหาวิธีสร้างหรือกำหนดค่าทรัพยากรใด ๆ ใน GeoServer โดยทางโปรแกรม


2
ขอขอบคุณ! คำตอบที่ง่ายและเพียงแค่ช่วยฉันเยาะเย้ยอีก 2 ชั่วโมง
Ragi Yaser Burhum

4
นอกจากนี้พารามิเตอร์จำนวนมากสามารถข้ามได้และ GeoServer จะคิดออก (เช่นเดียวกับใน UI) เช่น. bounding boxes
rcoup

1
ว้าว - นี่คือคำอธิบายที่ดีที่สุดของสิ่งที่ฉันเคยเห็น
Kieveli

3
ใช้ GeoServer 2.10.2 ฉันพบว่าฉันต้องโพสต์ไปยังfeaturetypesจุดสิ้นสุดของร้านค้าเช่นgeoserver/rest/workspaces/<workspacename>/datastores/<storename>/featuretypes/
Stephen Lead

คำอธิบายเวิร์กโฟลว์ที่ชัดเจนรวมลิงค์ที่เกี่ยวข้อง upvoted! :)
tony gil

10

ฉันรู้ว่านี่เป็นคำถามเก่า แต่ในกรณีที่คนอื่นสับสนเหมือนฉัน สำคัญส่วนหนึ่งคือการที่คุณไม่สามารถสร้างชั้นจากhttp: // geoserver / ส่วนที่เหลือ / ชั้นปลายทาง

หากคุณต้องการเพิ่มเลเยอร์เวกเตอร์ก็จะทำผ่านทรัพยากรประเภทคุณสมบัติ:

http://docs.geoserver.org/stable/en/user/rest/api/featuretypes.html

โพสต์ไปที่:

/workspaces/<ws>/datastores/<ds>/featuretypes

โดยที่เวิร์กสเปซที่คุณต้องการให้อยู่ในประเภทสถานที่และแหล่งข้อมูลที่จะใช้จะสร้างประเภทคุณลักษณะเวกเตอร์ใหม่เช่นเลเยอร์

หากคุณสงสัยเกี่ยวกับสิ่งที่คุณสามารถโพสต์ @Rohan ถูกต้องวิธีที่ง่ายที่สุดคือการค้นหาประเภทฟีเจอร์ที่มีอยู่ IE และ http GET ไปที่

/workspaces/<ws>/datastores/<ds>/featuretypes/<ft>.json 

ซึ่งจะส่งคืนประเภทสถานที่ที่มีอยู่เป็น json


1

ข้อมูลอ้างอิงที่ดีที่สุดของคุณอยู่ในคู่มือผู้ใช้ http://docs.geoserver.org/stable/en/user/rest/examples/index.html


ใช่ แต่ไม่มีตัวอย่างสำหรับการสร้างประเภทสถานที่จากคำสั่ง SQL ... ฉันหวังว่าจะมีบางคนที่มีรหัสตัวอย่างเพื่อแชร์
CaptDragon

คู่มือผู้ใช้นั้นขาดไปอย่างรุนแรง
Kieveli


0

ในการเพิ่มเลเยอร์ควรกำหนด datastore และ featuretype สมมติว่าพวกเขาจะถูกกำหนดไว้แล้วพร้อมกับสไตล์ (ตามที่อธิบายไว้ในคู่มือที่http://boundlessgeo.com/2012/10/adding-layers-to-geoserver-using-the-rest-api/เพื่อเพิ่มชั้นที่PUTจะต้องส่งคำขอไปยัง geoserver ที่:

http://geoserver.host/geoserver/rest/layers/NEW_LAYER_NAME

ด้วยเนื้อหาข้อมูลเช่น:

<layer>
  <name>NEW_LAYER_NAME</name>
  <type>VECTOR</type>
  <defaultStyle>
    <name>myStyle</name>
  </defaultStyle>
  <resource class="featureType">
    <name>myFeature</name>
  </resource>
</layer>

บล็อกดังกล่าวพูดถึงการเพิ่มสไตล์ให้กับเลเยอร์ที่มีอยู่ซึ่งเหมาะสมตามที่ PUT ออกแบบมา คุณไม่สามารถสร้างเลเยอร์ใหม่ด้วยวิธีนี้ นี่คือเอกสาร: docs.geoserver.org/stable/en/user/rest/api/layers.html , PUT เพื่อพัก / เลเยอร์จะคืนค่า 405 PUT ไปยัง / พักผ่อน / เลเยอร์ / <existing_layer> จะแก้ไข เลเยอร์เฉพาะไม่ใช่สร้างใหม่
lostintranslation
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.