การโหลดแรสเตอร์ลงในฐานข้อมูล PostGIS 2.0 บน Windows


18

ฉันพยายามหาวิธีโหลดแรสเตอร์ลงในฐานข้อมูล PostGIS2.0 (ฉันได้ถามคำถามก่อนหน้านี้ในหัวข้อนี้ที่นี่และที่นี่ ) ฉันกำลังพยายามใช้raster2pgsql.exeโปรแกรมที่ให้มาพร้อมกับ PostGIS2.0

หลังจากทราบว่าต้องใช้พรอมต์คำสั่งใน windows ในฐานะผู้ดูแลระบบ (ใน Windows 7 เพื่อเรียกใช้บรรทัดคำสั่งในฐานะผู้ดูแลระบบให้พิมพ์cmdลงในแถบค้นหาแล้วกดctrl+ shift+ enter) เพื่อเปิดใช้raster2pgsql.exeงานฟังก์ชันที่ฉันจัดการ โหลดแรสเตอร์ลงในฐานข้อมูลของฉัน ฉันมีไฟล์แรสเตอร์เรียกras_test.tifว่าฉันวางไว้ชั่วคราวในbinโฟลเดอร์ของpostgresqlการติดตั้งของฉัน ใช้รหัสต่อไปนี้ฉันแปลงและโหลดแรสเตอร์นี้:

C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -s 102003 ras_test.tif -t> elev.sql
Processing 1/1: ras_test.tif

C:\Program Files (x86)\PostgreSQL\9.1\bin>psql.exe -p 5434 -U postgres -d test2 -f elev.sql
BEGIN
psql:elev.sql:2: NOTICE:  CREATE TABLE will create implicit sequence "-t_rid_seq" for serial column "-t.rid"
psql:elev.sql:2: NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "-t_pkey" for table "-t"
CREATE TABLE
INSERT 0 1
COMMIT

เมื่อฉันดูตารางนี้ใน PostGIS ดูเหมือนว่า:

ป้อนคำอธิบายรูปภาพที่นี่

อย่างไรก็ตามฉันไม่สามารถดูได้ใน QGIS และฉันไม่แน่ใจว่าฉันโหลดอย่างถูกต้องหรือไม่เนื่องจากไม่มีข้อมูลในไฟล์นี้ ดูเหมือนว่าฉันได้โหลดชื่อไฟล์เป็นแรสเตอร์แทนที่จะเป็นเนื้อหาข้อมูล ฉันได้ทำข้อผิดพลาดที่ชัดเจนซึ่งทำให้ฉันไม่สามารถโหลดแรสเตอร์ลงในฐานข้อมูลได้หรือไม่


เอกสาร PostGIS ให้ตัวอย่างของวิธีการโหลดแรสเตอร์ แต่ฉันไม่เข้าใจว่าข้อโต้แย้งตัวเลือกใดและฉันยังไม่ชัดเจนว่าควรใช้อะไรถ้าฉันต้องการใช้สคีมาเริ่มต้น ตัวอย่างเช่นในตัวอย่างต่อไปนี้จากเอกสารประกอบ:

raster2pgsql -s 4236 -I -C -M *.tif -F -t myschema.demelevation > elev.sql 
psql -d gisdb -f elev.sql
  1. ฉันต้องระบุ SRID หรือไม่? -s 4236

  2. ข้อโต้แย้ง-I -C -Mทั้งหมดเป็นตัวเลือกหรือไม่?

  3. -tดูเหมือนจะเป็นขนาดกระเบื้อง ฉันต้องระบุสิ่งนี้หรือไม่ถ้าฉันไม่มีสคีมาที่กำหนดเอง

  4. ฉันจะออกไปได้myschema.demelevationไหม?

แก้ไข: ฉันได้รวมผลลัพธ์ของข้อเสนอแนะไว้ด้านล่าง:

C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -s 102003 -t 300x300 ras_test.tif ras_test | psql.exe -U postgres
 -d raster_analysis -h localhost -p 5434
Processing 1/1: ras_test.tif
BEGIN
NOTICE:  CREATE TABLE will create implicit sequence "ras_test_rid_seq" for serial column "ras_test.rid"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "ras_test_pkey" for table "ras_test"
CREATE TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
COMMIT

ผลนี้ในตารางที่มีสองคอลัมน์และrid มีสี่ค่า nad ไม่มีเลย เมื่อฉันลองใช้ข้อโต้แย้งเพิ่มเติม:rastridrast

C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -I -C -e -Y -F -s 102003 -t 300x300 ras_test.tif ras_test1 | psql
.exe -U postgres -d raster_analysis -h localhost -p 5434
Processing 1/1: ras_test.tif
NOTICE:  CREATE TABLE will create implicit sequence "ras_test1_rid_seq" for serial column "ras_test1.rid"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "ras_test1_pkey" for table "ras_test1"
CREATE TABLE
CREATE INDEX
ANALYZE
NOTICE:  Adding SRID constraint
CONTEXT:  PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE:  Adding scale-X constraint
CONTEXT:  PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE:  Adding scale-Y constraint
CONTEXT:  PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE:  Adding blocksize-X constraint
CONTEXT:  PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE:  Adding blocksize-Y constraint
CONTEXT:  PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE:  Adding alignment constraint
CONTEXT:  PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE:  Adding number of bands constraint
CONTEXT:  PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE:  Adding pixel type constraint
CONTEXT:  PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE:  Adding nodata value constraint
CONTEXT:  PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE:  Unable to add constraint "enforce_nodata_values_rast"
CONTEXT:  PL/pgSQL function "_add_raster_constraint_nodata_values" line 40 at RETURN
PL/pgSQL function "addrasterconstraints" line 94 at assignment
PL/pgSQL function "addrasterconstraints" line 49 at RETURN
WARNING:  Unable to add constraint: 'nodata_values'.  Skipping
CONTEXT:  PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE:  Adding maximum extent constraint
CONTEXT:  PL/pgSQL function "addrasterconstraints" line 49 at RETURN
 addrasterconstraints
----------------------
 t
(1 row)

ฉันได้รับผลลัพธ์ต่อไปนี้ ผลลัพธ์นี้ในตารางใหม่ที่มีโครงสร้างต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันคิดว่านี่ไม่ใช่แรสเตอร์ที่โหลดอย่างเหมาะสมเนื่องจากฉันไม่สามารถดูข้อมูลได้ มีตัวเลือกอื่น ๆ ที่ฉันสามารถลองได้หรือไม่?

แก้ไข: ความพยายามครั้งสุดท้ายนี้ได้ผลฉันแค่ไม่ได้เข้าถึงแรสเตอร์อย่างถูกต้อง


raster2pgsql หมายถึงการอ้างอิงpostgis.org/documentation/manual-svn/…
Mapperz

ฉันพยายามโหลดไฟล์แรสเตอร์ (jpg) ลงใน post gis โดยใช้ไวยากรณ์ที่ให้ไว้ที่นี่ "C: \ Program Files (x86) \ PostgreSQL \ 9.1 \ bin> raster2pgsql -I -C -e -Y -Y-102003 -t 300x300 ras_test.tif ras_test1 | psql .exe -U postgres -d raster_analysis -h localhost -p 5434 "ฉันเห็นตารางแรสเตอร์ที่สร้างขึ้นในฐานข้อมูล มันเป็นเพียงการแสดงโดย Celenius ที่คุณไม่เห็นสิ่งใดภายใต้คอลัมน์ "rast raster" เว้นแต่คุณจะคลิกที่เซลล์ใดเซลล์หนึ่ง นี่คือปัญหาที่แท้จริงของฉัน วิธีดูเลเยอร์แรสเตอร์จาก ArcGIS โดยใช้เลเยอร์การสืบค้น sql เมื่อฉันพยายามเพิ่มเลเยอร์นี้และตรวจสอบมันก็บอกว่า "แรสต์แรสเตอร์
GISTECH

ฉันคิดว่าคุณควรถามคำถามนี้เป็นคำถามใหม่เนื่องจากคุณจะได้รับคำตอบเพิ่ม ฉันไม่รู้ว่าคุณสามารถเชื่อมต่อโดยใช้ ArcGIS ได้อย่างไร แต่คุณสามารถใช้ QGIS เพื่อเข้าถึงได้
djq

1
หมายเหตุ: pgAdminIII แสดงเซลล์ว่างเปล่าสำหรับข้อมูลที่เกินขนาดที่กำหนด ดูตั๋ว # 297
Mike T

querry ด้านบนใช้งานได้ แต่มีใครบอกวิธีเก็บค่าพิกเซล / ค่าเซลล์ในตารางได้ไหม

คำตอบ:


5

SRID? -s 4236 (จำเป็น)

อาร์กิวเมนต์ -I -C -M เป็นทางเลือกทั้งหมดหรือไม่

-C ใช้ข้อ จำกัด แรสเตอร์ - srid, พิกเซล ฯลฯ เพื่อให้แน่ใจว่าแรสเตอร์มีการลงทะเบียนอย่างถูกต้องในมุมมอง raster_columns (จำเป็น)

-M (สูญญากาศวิเคราะห์ตารางแรสเตอร์) ไม่จำเป็น

-I (สร้างดัชนี GiST ในคอลัมน์แรสเตอร์) ทางเลือก แต่แนะนำ

-t TILE_SIZE (ตัดแรสเตอร์ลงในแผ่นกระเบื้องเพื่อแทรกหนึ่งรายการต่อแถวตาราง TILE_SIZE แสดงเป็น WIDTHxHEIGHT)

myschema.demelevation ออกไป (ใช่)

http://postgis.net/docs/using_raster_dataman.html#RT_Loading_Rasters


ขอบคุณ Mapperz ฉันเข้าใจบางส่วนว่า raster2pgsql ทำงานอย่างไร - แต่ raster ของฉันใน postgresql มีเพียงเซลล์เดียวซึ่งเป็นสาเหตุที่ฉันพยายามคิดว่าจะใช้อาร์กิวเมนต์อะไร
djq

9

Celenius,

หากคุณไม่ได้ใช้-tตัวเลือกที่มีขนาดต่างกันไฟล์แรสเตอร์ของคุณจะมาเป็นเรคคอร์ดเดียว ฉันเพิ่งสังเกตเห็นข้อผิดพลาดในเอกสารซึ่งอาจเป็นสิ่งที่ทำให้คุณสับสน ฉันจะแก้ไขมัน -tควรจะตามด้วย WIDTHxHEIGHT

หากคุณต้องการให้ชิ้นส่วนมีความกว้าง 100x100 พิกเซลตามที่ Mapperz พูดให้ใช้ตัวเลือก -t

ดังนั้นคำสั่งของคุณจะเป็น:

raster2pgsql -s 102003  -t 100x100 ras_test.tif ras_test > elev.sql

ดูตัวอย่างทางอากาศในเอกสาร http://www.postgis.org/documentation/manual-svn/using_raster.xml.html#RT_Raster_Loader

ตัวอย่างคู่มือที่ใช้กันมาก:

raster2pgsql -I -C -e -Y -F -s 26986 -t 128x128 -l 2,4 bostonaerials2008/*.jpg aerials.boston | psql -U postgres -d gisdb -h localhost -p 5432

ฉันรู้ว่าสวิตช์นั้นค่อนข้างน่ากลัวเพราะมีให้เลือกมากมายและส่วนใหญ่เป็นทางเลือก บางทีใน 2.1 เราจะมี GUI คล้ายกับการshp2pgsql-guiทำให้สิ่งนี้ง่ายขึ้นสำหรับมือใหม่

ใน verson ล่าสุดของraster2pgsqlมีเหตุผลที่จะอนุมาน srid จากข้อมูล georeference ในไฟล์ tif หรือ raster อื่น ๆ (รุ่นนี้สามารถใช้ได้เป็นไบนารีหน้าต่างตอนนี้) ยังไม่ได้ลองใช้คุณสมบัตินี้ แต่ถ้าใช้งานได้คุณสามารถออกไปทางด้านข้างและมันจะเดา (หวังว่าถูกต้อง)


ขอบคุณสำหรับคำแนะนำ! ยังไม่สามารถใช้งานได้ แต่เริ่มเข้าใจสวิตช์ได้ดีขึ้นเล็กน้อย
djq

มันใช้งานได้ แต่ฉันไม่เข้าใจว่าควรดูภายในฐานข้อมูลอย่างไร ขอบคุณอีกครั้งสำหรับความช่วยเหลือของคุณ
djq

GUI สำหรับการโหลดแรสเตอร์เข้า pgsql ในที่สุดก็มาถึงหรือไม่ :)
astrojuanlu

-2

ในมุมมอง SQL คุณไม่สามารถดูข้อมูลเมื่อมีขนาดใหญ่ คุณสามารถดำเนินการแบบสอบถามเป็นไฟล์และมันจะแสดงข้อมูล


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