QGIS'ten dışa aktarılacak alanlar nasıl belirtilir?


9

QGIS 2.0.1 kullanıyorum ve bir MS SQL Server uzamsal etkin veritabanına (ESRI değil) bağlıyım. Katmana bağlanabiliyor ve TOC'uma yükleyebiliyorum. Görünürlük uğruna önemli olmayan birkaç alanı gizledim.

Şimdi bu verileri başka bir veri türüne aktarmak istiyorum (bu örnek için şekil dosyası kullanacağız). Katmanı sağ tıklayıp "Farklı Kaydet" i seçip çıktı dosyasını tanımladığımda, aşağıdaki hatayı alıyorum:

Vektör dosyasına aktarma başarısız oldu. Hata: GlobalID alanı için desteklenmeyen tür

Not 1 : İletişim kutusunda "Öznitelik oluşturmayı atla" seçeneğini işaretlersem şekil dosyası hatasız olarak oluşturulur.

Not 2 : ArcGIS'de bu sorun yoktur, sadece GUID alanını "METİN" türüne dönüştürür.

Tabloya baktığımda, gizlediğim alanlardan biri, büyük olasılıkla suçlu olan SQL tipinde < uniqueidentifier > bir GUID . Bunu çözmek için alanı "gizli" yaptım. Alan gizli olduğu için QGIS'in bu alanı dışa aktarmaya çalışmayacağını, ancak durumun böyle olmadığı varsayım olurdu.

QGIS'den dışa aktarmak istediğiniz alanları tanımlayabilir misiniz?

QGIS'in sadece "Görünür" alanları dışa aktarması mümkün müdür? Veya bunu QGIS'den yapmanın başka bir alternatif yolu var mı (alanları bir ogr2ogr sorgusu aracılığıyla tanımlayın)? Hangi alanları dışa aktaracağımı tanımlayamıyorsam, bu QGIS'nin bir eksikliği gibi görünüyor.

GÜNCELLEME: Çıktı alanlarını sınırlayıp sınırlayamayacağımı görmek için örnek bir şekil dosyası kullanarak bir test yaptım. Aşağıdaki ogr2ogr komut satırı "name" dışındaki tüm alanları çalıştı ve ortadan kaldırdı:

ogr2ogr -f "ESRI Shapefile" test.shp city.shp -sql "select name from city"

ancak QGIS kullanma ve ekleme:

-sql "select name from city"

"Farklı Kaydet" iletişim kutusunun "katman" bölümüne yalnızca tek bir alana sahip bir şekil dosyası ile sonuçlanmadı. Bu yüzden sadece birkaç alanı göstermek için dosya çıktısını nasıl değiştirebileceğimi gerçekten görmüyorum. Herhangi bir yardım takdir.


Eğer ogr2ogr bunu yapabilirse, QGIS bunu yapabilir, çünkü tam olarak arka planda çalışan bir araçtır. Ne yazık ki, test etmek için hiçbir SQL Server db var ...
underdark

Sağ. Bu yüzden -sql "select <fields> from <table>"(GlobalID alanı <fields> hariç) "Farklı Kaydet" iletişim kutusunun "Katman" bölümüne eklemeyi denedim , ancak aynı hata hala açıldı. Bu kod bloğunu yanlış mı kullandım yoksa bu bir hata mı?
RyanKDalton

bu cevap -sql yerine -sql gis.stackexchange.com/questions/30691/… önermektedir ... Bence veri kaynağı bölümüne geçiyor, katmana değil.
underdark

Önerilerinizden herhangi biri için bana şans yok Ayrıca "OGR oluşturma seçenekleri" nin "Katman" ve "Veri Kaynağı" alanlarındaki hem -select & -sql seçeneklerinin birden çok kombinasyonunu denedim :( Elbette olamam alanların bir alt kümesini dışa aktarma ihtiyacı olan ilki ...
RyanKDalton

geliştiricilerle kontrol etmeye değer olabilir. bir hata olabilir.
underdark

Yanıtlar:


1

Ogr2ogr ile komut satırında sizin için çalışıyorsa, bunu kullanmak için en iyi çözüm olduğunu düşünüyorum. MSSQL veritabanınızdan şekil dosyası oluşturmak için basit bir bat dosyası yazabilirsiniz. Açıkçası, verileri düzenleyemez ve sunucuya bu şekilde geri kaydedemezsiniz.

QGIS, Veri Kaynağı ve Katman giriş kutularına sahiptir, ancak bunlar yalnızca ogr2ogr'nin -dsco ve -lco parametreleri içindir. OGR şekil dosyası sürücüsünün ihtiyaçlarınız için yararlı bir dsco veya lco'su yoktur:

http://www.gdal.org/ogr2ogr.html

http://www.gdal.org/ogr/drv_shapefile.html

Alternatif olarak, bir SQL SELECT komutuyla sunucudan veri isteyen bir python eklentisi yazmak mümkün olmalıdır. Bu, veri düzenlemeyi bile etkinleştirir.


Şimdiye kadar bu en uygun fikir gibi görünüyor. Kendi ogr2ogr sözdiziminizi almak için QGIS kullanıcı arayüzünden ogr2ogr komut satırını doğrudan çağırmanın bir yolu var mı?
RyanKDalton

Dolaylı. Ama ogr2ogr komutunu girmek için gdalwarp terminalini ele geçirebilirsiniz. Katmanın oluşturulmadığına dair bir hata alıyorsunuz, ancak yine de dosya sisteminde var. Dosya zaten varsa ne olduğundan emin değilim, bu yüzden daha iyi -overwrite ekleyin. Ve dosyalar için tam yol adlarını kullanmanız daha iyi olur.
AndreJ

Alternatif olarak, hiç bir GDAL VRT sanal dosyasını MSSQL ve QGIS arasında aracı olarak kullanmayı denediniz mi?
AndreJ

Ben yok, ama GDAL rasters ile çalışmak için değil mi? Bir nokta vektör katmanı ile çalışıyorum. Yine de bir ara olarak "sanal masa" fikrini seviyorum. QGIS 2'nin yazabileceğimiz bir bellek içi katmanı yok mu?
RyanKDalton

1
Bir GDAL ogrvrt sürücüsü de var: gdal.org/ogr/drv_vrt.html . Ama bence bu başka bir soruya girse iyi olur.
AndreJ

0

İçindekiler katmanı ve GlobalID alanı varsa öznitelikler tablosunu kontrol etmenizi öneririm. Düzenleme moduna geçin, dışa aktarma sırasında sorunu oluşturan sütunu kaldırın ve pencereyi kapatın. Sonra şekil dosyası olarak veya istediğiniz çıktı biçiminde kaydedin. Umarım bu yardımcı olur.


1
SQL Server tablosundaki alanı silmenin iyi bir seçim olup olmadığından emin değilim. Yine de sunucu tarafından gerekebilir.
AndreJ

QGIS TOC katmanından bir öznitelik sütununu silmek güncellenmiş yapıyı QGIS arabellek kaydetmek ve başka bir biçimde dosya vermenize olanak sağlar düşünüyorum. dışa aktarmayı bitirdiğinizde katmandaki değişiklikleri kaydetmeyin (
sildikleriniz
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.