Windows'ta bir PostGIS 2.0 veritabanına raster yükleme


18

PostGIS2.0 veritabanına bir raster yüklemek nasıl anlamaya çalışıyorum (ben burada ve burada bu konuda önceki soruları sordum ). raster2pgsql.exePostGIS2.0 ile sağlanan programı kullanmaya çalışıyorum .

Windows'taki komut isteminin yönetici olarak çalıştırılması gerektiğini anladıktan sonra (Windows 7'de komut satırını yönetici olarak çalıştırmak cmdiçin arama çubuğuna yazın ve ctrl+ shift+ entertuşuna raster2pgsql.exebasın) veritabanına bir tarama yükle. ras_test.tifGeçici olarak yüklememin binklasörüne yerleştirdiğim bir raster dosyası var postgresql. Aşağıdaki kodu kullanarak bu raster dönüştürmek ve yüklemek:

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'de bu tabloyu gördüğümde şöyle görünür:

resim açıklamasını buraya girin

Ancak, bunu QGIS'de görüntüleyemedim ve bu dosyada veri yok gibi göründüğünden emin değilim. Görünüşe göre dosya adını veri içeriği yerine raster olarak yükledim. Veritabanıma raster yüklememi engelleyen bariz hatalar yaptım mı?


PostGIS belgeleri bir raster yükleme örneği sağlar, ancak hangi argümanların isteğe bağlı olduğunu anlamıyorum ve varsayılan şemayı kullanmak istersem ne kullanmam gerektiği konusunda hala net değilim. Örneğin, aşağıdaki örnekte belgelerden:

raster2pgsql -s 4236 -I -C -M *.tif -F -t myschema.demelevation > elev.sql 
psql -d gisdb -f elev.sql
  1. Bir SRID sağlamam gerekir mi? -s 4236

  2. -I -C -MTüm argümanlar isteğe bağlı mı?

  3. -tdöşeme boyutu gibi görünüyor; Özel bir şemam yoksa bunu belirtmem gerekir mi?

  4. Sadece dışarıda kalabilir miyim myschema.demelevation?

EDIT: Aşağıdaki önerilerin sonucunu ekledim:

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

Bu iki sütun ridve bir tablo ile sonuçlanır rast. riddört değeri vardır, nad rasthiçbirine sahip değildir. Biraz daha argüman kullanmayı denediğimde:

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)

Aşağıdaki çıktıyı alıyorum. Bu, aşağıdaki yapıya sahip yeni bir tablo ile sonuçlanır:

resim açıklamasını buraya girin

Verileri görüntüleyemediğim için bunun düzgün yüklenmiş bir raster olmadığını varsayalım. Deneyebileceğim başka seçenekler var mı?

EDIT: Bu son girişim işe yaradı, ben sadece raster doğru erişim değildi.


raster2pgsql referans belirtir postgis.org/documentation/manual-svn/...
Mapperz

Burada sağlanan sözdizimini kullanarak raster dosyasını (jpg) post gis'e yüklemeye çalıştım "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 "Veritabanında oluşturulmuş bir raster tablosu görebiliyordum. Tıpkı Celenius tarafından gösterildiği gibi, belirli bir hücreye tıklamadığınız sürece "rast raster" sütununun altında hiçbir şey görmüyorsunuz. İşte asıl sorunum. Sql sorgu katmanı kullanılarak ArcGIS'ten raster katmanı nasıl görüntülenir. Bu katmanı eklemeyi ve doğrulamayı denediğimde, "rast raster
GISTECH

Daha fazla yanıt alacağınız için bunu yeni bir soru olarak sormanız gerektiğini düşünüyorum. ArcGIS kullanarak nasıl bağlanabileceğinizi bilmiyorum ama erişmek için QGIS kullanabilirsiniz.
djq

1
Not: pgAdminIII, belirli bir boyutun ötesindeki veriler için boş bir hücre gösterir; bkz. bilet # 297
Mike T

Yukarıdaki querry işe yarıyor ama kimse bana nasıl piksel değerleri / hücre değerleri tabloda depolamak söyleyebilir?

Yanıtlar:


5

SRID? -s 4236 (gerekli)

-I -C -M argümanlarının tümü isteğe bağlı mı?

Raster'in raster_ sütunlar görünümünde düzgün şekilde kaydedildiğinden emin olmak için raster kısıtlamaları - srid, pixelsize vb. Uygulayın. (gereklidir)

-M (Tarama tablosunu vakumla analiz edin.) İsteğe bağlı

-I (Raster sütununda bir GiST dizini oluşturun.) İsteğe bağlı ancak önerilir

-t TILE_SIZE (Tablo satırı başına bir eklenecek karolara raster kesin. TILE_SIZE, WIDTHxHEIGHT olarak ifade edilir.)

myschema.demelevation dışarıda bırakmak (evet)

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


Teşekkürler Mapperz, raster2pgsql nasıl çalıştığını kısmen anladım - ancak postgresql benim raster sadece bir hücre içerir, bu yüzden hangi argüman kullanmak için anlamaya çalışıyorum.
djq

9

Celenius,

-tSeçeneği boyut boyutlarıyla kullanmazsanız, raster dosyanız tek bir kayıt olarak gelir. Belgelerde sizi şaşırtan şey olan bir hata fark ettim. Bunu düzeltirim. -t her zaman bir genişlik x yükseklik izlemelidir.

Parçalanmasını istiyorsanız, Mapperz'in söylediği gibi 100x100 piksel genişlik yüksekliğinde söyleyin, -t seçeneğini kullanın.

Yani komutunuz:

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

Dokümanlardaki havadan örneğe bir göz atın. http://www.postgis.org/documentation/manual-svn/using_raster.xml.html#RT_Raster_Loader

Manuel örneklerin çoğunun kullandığı:

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

Anahtarları biraz zor olabilir biliyorum çünkü onların çok ve çoğu isteğe bağlıdır. Belki 2.1'de bunu shp2pgsql-guiyeni başlayanlar için biraz daha basit hale getirmek için benzer bir gui'ye sahip olacağız .

En son sürümde raster2pgsql, tif veya diğer raster dosyasındaki coğrafi referans bilgisinden srid'i çıkarmak için mantık vardır (bu sürüm şimdi pencere ikili olarak kullanılabilir). Henüz bu özelliği denemedim, ama eğer çalışırsa bile srid'i bırakabilirsiniz ve tahmin edersiniz (umarım doğru).


Önerileriniz için teşekkürler! Hala işe yaramadı, ama anahtarları biraz daha iyi anlamaya başlıyor.
djq

İşe yaradı, ama bunun veritabanında nasıl görünmesi gerektiğini anlamadım. Yardımın için tekrar teşekkürler.
djq

Rags'ı pgsql'ye yüklemek için GUI sonunda geldi mi? :)
astrojuanlu

-2

SQL görünümünde, veri büyük olduğunda göremezsiniz. Sorguyu bir dosyaya yürütebilirsiniz ve veri gösterilecektir.


1
Orijinal (eski) sorunun zaten kabul edilmiş bir cevabı vardır ve sizinki soruya gerçekten alternatif bir çözüm değil, görsel inceleme çağrısıdır.
Curlew
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.