QGIS'deki kimlik sütunu için auto_increment yolu var mı


22

Ben kurgusal bir harita oluşturuyorum ve bu yüzden çok sayıda nokta, çizgi ve kesin çokgenler oluşturmanız gerekiyor. Daha sonra verilerimi geojson olarak dışa aktarıyorum. Ama ondan önce her yere gitmeli ve her öğeye benzersiz bir kimlik vermeliyim.

En büyük çokgen en küçük kimliği alır gibi özel bir sıralamaya ihtiyacım yok. Sadece ihtiyacım tüm poligonları ile bir kimliği , sonunda olmadan yapıyor bunu elle şimdi yapmak zorunda gibi.

Birisi bunu nasıl yapacağını bilirse harika olurdu.


Şekil dosyaları mı kullanıyorsunuz? Her dışa aktarmadan sonra kimliklerin aynı olması gerekir mi yoksa her düzenleme oturumundan sonra kimlik alanını doldurabilir misiniz?
15:27

Bir komut dosyasından çokgenler oluşturuyor, QGIS masaüstünde dijitalleştiriyor veya şekil dosyasından vb. Nasıl kopyalıyorsunuz?
landocalrissian

QGIS'de bir şekil oluşturuyorum, Geojson olarak kaydet ve sorun yok. Üzgünüm belki sorunuzu yanlış bir şekilde aldım?
kwoxer

Yanıtlar:


26

Alan hesap makinesini kullanmak şu yolla gider:

İçinde kimlik verilmedi

  1. Herhangi bir Kimlik girmeden her özelliği dijitalleştirin.
  2. Dışa aktarmadan önce, alan hesaplayıcısını kullanarak benzersiz ID'leri '$ Id' ifadesiyle güncelleyin.

Kimlik belirtilmedi

Zaten verilen bazı kimlikler

  1. Zaten kimlikleriniz varsa '- $ Id' kullanabilirsiniz. Kimlik satırında 'NULL' anlamına gelen yeni Özellikleri seçtiğinizden emin olun. Sütunu sipariş ederek bunu yapmanız yeterlidir.
  2. Şimdi resimlerden adımları uygulayın:

resim açıklamasını buraya girin resim açıklamasını buraya girin


Evet, hayret verici. Süper kolay ve düzgün çalışıyor. Teşekkürler dostum. Btw: belki de bazı mevcut kimliklerde bunu nasıl yapacağınızı biliyor musunuz? EĞER bunu yaparsam -2 -3 vb.
Alırım

Bir çözüm buldu ve yayınınıza ekledi. Tekrar teşekkürler.
kwoxer

6

Hallelujah! Veya Eureka. Ya da her neyse. Bu yapılabilir. Bir şekil dosyası ile.

  1. Zaten bir tane yoksa, Tam sayı (tamsayı) türündeki "FID" özellik kimliğini içeren bir alan ekleyin .
  2. Açık Katman Özellikleri (katman üzerinde sağ tıklayın ve seçim Özellikler '... veya çift tıklayarak katmanı) üzerine tıklayın Formu Nitelikler sonra altında sekmesini Genel işaretini kaldırın Düzenlenebilir ve altında Varsayılan alanına Varsayılan değer türü maximum("FID") + 1.

Düzenlenebilir öğesinin işaretini kaldırarak başka bir değer giremez veya orada olanları silemezsiniz. Kimliği olmayan değerler varsa, bu değerlerin güncellenmeyeceğini unutmayın. Bir noktada , Güncellemede varsayılan değeri uygula ve yalnızca 1 veya daha büyük bir değere sahip herhangi bir kaydı değil, düzenlendiklerinde bu kayıtları güncellemek için sıfır veya NULL değer olup olmadığını kontrol etmek için formülümü gözden geçirmeyi denemeyi deneyeceğim. sonrası, FID alanının benzersiz değerlerle nasıl güncelleneceği tartışıldı, alanı şekil dosyasında zaten özellikler bulunduktan sonra eklediyseniz yapmanız gerekecek.)

Bunun şekil dosyasıyla değil geçerli harita dosyasıyla kaydedildiğini unutmayın; bu nedenle, şekil dosyasının birden çok kez eklenmesi katman stilinin o kısmını yeni eklenen katmana kopyalamanızı gerektirir. Bunu yapmak için katmana sağ tıklayın, Stiller> Stili Kopyala> Alanlar'ı seçin ve başka bir katmana sağ tıklayın, Stiller> Stili Yapıştır> Tüm Stil Kategorileri'ni seçin (veya Alanlara devam edin ). Ayrıca stilin o kısmını şekil dosyasına dayalı olarak başka bir katmana da kopyalayabilirsiniz, ancak kimlik alanının kopyaladığınız katmanla aynı ada sahip olması gerekir.

Katman özellikleri


Bunun çalışması için en az bir özellik oluşturmanız ve FID'sini yazmanız ve ardından Varsayılan değer öznitelik formunu değiştirmeniz gerektiğine dikkat edin. Aksi takdirde, NULL FID ile sonuçlanırsınız.
Techie_Gus

5

Vinayan'ın gönderisine eklemek ve rownum işlevinden kısaca bahsetmek istiyorum , çünkü çok benzer ve bazı durumlarda biraz daha uygun olabilir.

resim açıklamasını buraya girin

id , Özellik Kimliğini döndürür, yani her zaman sıfırdan başlar.
rownum satır sayısını döndürür, yani bir kerede başlar.

resim açıklamasını buraya girin

Yani, temelde, otomatik artışın 0'dan başlamasını istiyorsanız $ id için gidin ve 1'den başlamak istiyorsanız $ rownum için gidin .


Gerçekten de iyi bir çözüm denedim. Ancak burada bu çözümle zaten bazı kimlikleriniz varsa ve onları tutmak istiyorsanız rownum işlevi iyi değil. Bu işlev her zaman 1 ile başlar. Yukarıdaki yol, kurulumu daha zor olmasına rağmen daha akıllı sayılır. Alternatif için teşekkürler ama şimdilik ID fonksiyonu benim tercih ettiğim çözüm =)
kwoxer

4

Bu konu buraya geldi: QGIS'de otomatik artan birincil anahtar ile Shapefile oluştur

Benim önerilerim:

1) SQLITE / SpatialLite veritabanları, INTEGER PRIMARY KEY olarak ayarlanmış bir alanda otomatik artırmayı destekler:

Bir INSERT üzerinde, ROWID veya INTEGER PRIMARY KEY sütununa açıkça bir değer verilmezse, kullanılmayan bir tamsayı ile otomatik olarak doldurulur, genellikle şu anda kullanılmakta olan en büyük ROWID değerinden daha fazla. AUTOINCREMENT anahtar sözcüğünün kullanılıp kullanılmadığına bakılmaksızın bu geçerlidir.

Çokgenleri her düzenlediğinizde / oluşturduğunuzda, özelliklerini doldurabilirsiniz ve SQLITE, INTEGER PRIMARY KEY türüne ayarladığınız alanda artımlı benzersiz bir değer verecektir.

GEOJSON'a aktarmaya hazır olduğunuzda, hepiniz BENZERSİZ KİMLERİNİZ ile hazırsınız.

2) Shapefiles kullanıyorsanız, INTEGER türünde bir OBJECTID alanı oluşturun ve çokgenleri her düzenlediğinizde / oluşturduğunuzda ve dışa aktarmanız gerektiğinde bu alanı doldurmak için bir alan hesaplayıcısı ifadesi kullanın. Bir poligonun sahip olduğu orijinal kimliği kaybedeceksiniz, ancak .SHP kullanarak bunu elde etmenin tek yolu sizsiniz. (Alan hesap makinesi ifadesini bulmam gerekecek).

PostGIS, keşfetmek isteyebileceğiniz başka bir veri kaynağıdır, ancak SQLITE'ten daha ağır bir artış olsa da, ilerledikçe böyle bir sistemde değer bulabilirsiniz ...


Açıkladığınız için teşekkürler. Ancak doğrudan araçta bir auto_increment seçeneği yerine iyi bir çözüm olacağını düşünmüyorum. Zaten çok fazla veri formatım var ve başka bir araç istemiyorum. Belki biraz zamanım olduğunda bunun için bir addon
yazmalıyım

.SHP'den vazgeçmek daha kolay olabilir! Kim bilir hangi yeni girişimler seni götürecek ...
DPSSpatial

2

Eski yazı ama hızlı bir çözüm madeni arayan herkes için $ ID + 1 olan bir alan yaratmaktı ve otomatik olarak 1 ile başlayacak!


2

QGIS 3 Güncellemesi

Buna oldukça geç kaldığımı biliyorum ama her zaman güncelleme yapmak için iyi:

QGIS 3'te artık bu tam işi yapmak için kullanılabilecek yerel bir araç var ve buna "Otomatik ara alan ekle" deniyor

Alan hesap makinesinde bir ifade kullanmaya veya kodlamaya gerek yoktur, ancak yine de bunların hepsi hala çok yararlı ve bilmek iyidir.

resim açıklamasını buraya girin


1

Bunu yapmanın en kolay yolu muhtemelen bir python betiği ile olabilir veya alan hesap makinesiyle olabilir. Üzgünüm senin için bir tane yok, belki başka biri olacak. Bu arada, bunun için bir python betiği arayacağım. ArcGIS için bu konuda çok şey gördüm, ama eminim QGIS için bir şeyler var.


Gerçekten hiçbir şey, bir özellik isteği varsa iyi olurdu. Tek tıklamayla bir çözüm olabilir de QGIS için ek bir python komut dosyası istemiyorum. Ama teşekkür ederim.
kwoxer

1

İnsanca sindirilebilir bir şeye ihtiyacınız yoksa, şimdi kolay bir düzeltme var: Alan özelliklerinde "UUID Generator" ı seçin ve her şeyi boş bırakın.

Bu, alanda otomatik olarak bir UUID oluşturur. Basit bir sayı kadar kolay değil ($ id veya $ rownum'a göre), ancak en başından itibaren UUID'yi üretir, bu nedenle art arda adım olmaz.resim açıklamasını buraya girin


0

Bir postgreSQL veritabanı katmanları kullanırken bu işe yaramaz gibi görünüyor eklemek istiyorum. $ ID ve $ rownum tümü 0 döndürür. PostgreSQL 9.6 QGIS 2.18.12


0

bu çözümler artık QGIS 2.01 Dufour'da benim için çalışmadı. $idİfade giriş alanına 'id' adlı yeni veya mevcut bir alana yazmak bana "İfade geçersiz" hatası verdi

İşe yarayan işlevi yazmak $rownumve sonra "Tamam" ı tıklamaktı.

resim açıklamasını buraya girin


0

ilk sütunu (id) silebilir ve yenisini "Sanal alan olarak" oluşturabilirsiniz resim açıklamasını buraya girin resim açıklamasını buraya girin

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.