SQL'in diline ArcGIS araçlarıyla ne ölçüde erişilebilir?


10

Bu soru çok gereksiz geliyor ...
Her halükarda, ArcGIS'te SQL kullanımlarını araştırmam istendi. Tüm sunucu tarafı depolama ve DB yönetim / büyük ölçekli düzenleme için bir SDE DB kullanıyoruz. Ancak, SQL'in ArcGIS'in araçlarında ne kadar entegre olduğunu araştırmaya çalışıyorum. Bir not var , SQL Sorgu Başvuru Kılavuzu'nda açıkça SQL sözdizimi bildiren ArcGIS 10'un yardım etmez değil Saha Hesaplama aracını kullanırken çalışır. Alan değerleri hesaplanırken doğrudan veritabanının kendisinden bilgi çekmek ve değiştirmek mümkün olduğu için bu çok hayal kırıklığı buluyorum.

ArcGIS'te SQL kullanmaya çalışırken karşılaşılabilecek en büyük sınırlamalar ve tuzaklar nelerdir? SQL ile entegre edildiğinde hangi araçlar en iyi işlevselliği görür?

Bunu daha net bir soru haline getirmek için bir örnek gerekiyorsa, belirli bir bölgede belirli bir türde olan ilgi çekici noktaların sayısını izlemeye çalışıyorum. Her noktanın türünü ve bölgesini tanımlayan bir özelliği vardır. Benim mevcut çözüm sayım ve veri alma için imleçlerin yoğun kullanımını içerir, ancak üstün bir basit bir SQL sorgusu tüm bunları ve daha fazlasını yapabileceğini belirtti. Ne yazık ki, bunun için işlevsellik mevcut değil gibi görünüyor.

Yoksa öyle mi?


Sorgulanan tablolardan herhangi biri sürüm mü?
Michael Todd

Sürümlü? Bu terimi bildiğimi sanmıyorum.
Nathanus

1
Katmanın sürümlendirilmesi, önceki özellikleri korurken katmanda değişiklikler yapmanıza olanak tanır. Dolayısıyla, bir özellik silinirse, katmanın geçerli sürümü, özelliğin artık mevcut olmadığını gösterir; ancak, özellik aslında "temel" katmanda hala mevcuttur ve GIS araçları, özelliği gösteren katmanın farklı sürümlerini görüntülemek için kullanılabilir. ArcCatalog'da katmanı sağ tıklatıp Özellikler'i seçerek katmanınızın sürümünün olup olmadığını anlayabilirsiniz. Genel sekmesinin alt kısmında Sürüm Oluşturma adlı bir bölüm vardır ve buradaki bilgiler katmanın sürümlendirilip yükseltilmediğini size bildirir.
Michael Todd

Yanıtlar:


9

Python'u kullanmak istiyorsanız ArcSDESQLExecute komutuna bakın. Bu, rasgele SQL çalıştırmanıza izin verir, ancak SDE üzerinden bağlanması gerekir. Sorgunun sonucu bir satır kümesiyse, öznitelikler bir Python liste listesi olarak döndürülür. Aksi takdirde, SQL başarılı bir şekilde yürütüldüğünde True veya değilse None döndürür. Ayrıca bkz: ArcSDE bağlantısı kullanarak SQL yürütme


Bunu kesinlikle yapacağım! Bu, bu bağlamda aradığım şey gibi görünüyor. Çok teşekkürler.
Nathanus

5

Özel ArcObjects yazıyorsanız, ExecuteSQL yöntemini kullanarak bir SDE Çalışma Alanında rastgele SQL çalıştırabilirsiniz . Bu yöntem, INSERT, UPDATE veya bazı saklı yordamlar gibi sonuç kümeleri döndürmeyen sorgularla sınırlıdır.

ArcMap kullanıcı arayüzü üzerinden çalışıyorsanız, seçenekleriniz biraz daha sınırlıdır. Hesaplama Alanı aracılığıyla SQL kullanamamanızın nedeni, ifadenin aslında VBScript ve / veya Python olmasıdır. Rastgele bir SQL ifadesi yürütmek ve sonuçtaki imleç değerlerini çekmek için VBScript veya Python kullanabilirsiniz, ancak bunu tavsiye etmem.

Alternatif olarak, Regan'ın yanıtını kullanabilir ve bir Sorgu Katmanı oluşturabilirsiniz. Salt okunur veriler için bu en iyi yaklaşımınızdır. Verileri güncellemeniz gerekiyorsa, biraz daha karmaşıktır. "Yeni" değerlerinizle bir sorgu katmanı oluşturmanız, mevcut tablonuza karşı birleştirme yapmanız ve ardından hesaplama alanlarını kullanmanız gerekir. Bu, karmaşık güncellemeleri gerçekleştirmek ve ardından sonuçları görüntülemek için ExecuteSQL ile birleştirilebilir.

Son alternatifiniz SQL'i doğrudan ArcSDE tablolarına karşı yürütmektir.


1
Son noktanız (doğrudan tablolara karşı SQL yürütme) neden sürüm soruyu sordum. Veritabanı düzeyindeki bir SQL sorgusu yalnızca temel katmandan (çoklu sürümlü görünüm ayarlamadığı sürece) çekilir, böylece katman sürümlendirilirse çalışmaz.
Michael Todd

Yaptığım iş çoğunlukla Python'da, ancak UI'deki gerçek işlevsellik ArcObjects'e bağlı görünüyor.
Nathanus

Her şey python işlevi de dahil olmak üzere dahili olarak ArcObjects üzerine kurulmuştur.
James Schek

Python'daki ArcSDESQLExecute sonuçları döndürebiliyorsa, IWorkspace.ExecuteSQL ile nasıl elde edilebilir?
Petr Krebs

@petr doğrudan yapamazsın ... Cevabımı güncelledim.
James Schek


1

Hangi RDBMS'yi kullandığınıza bağlı olarak, özellik verilerini geri almanıza bağlı olmadığınız sürece ArcObjects veya arcpy dışındaki SQL kitaplıklarından yararlanabilirsiniz. Günlük olarak kullandığım SQL Server veritabanındaki sorguların çoğunun yapısı uzamsal değildir, bu nedenle .NET içindeki System.Data sınıflarını veya Python uygulamalarının içindeki pymssql Python kitaplığını kullanacağım. Uzamsal verilerin kullanılmasını gerektiriyorsa, Sorgu Katmanları en iyi seçenektir. Sorgu Katmanları ile tek uyarı, yalnızca Mekansal veri türleri kullanılarak saklanan verilerle çalışılmasıdır (standart SDEBINARY türü ile değil).


Bu yoğunlaşmaya başlıyor. Sanırım ihtiyaçlarımı daha dikkatli değerlendirmem gerekiyor. Eğer çokgenler ve noktalar / çizgiler gibi şeyleri kastediyorsanız, sadece metin / tamsayı alanlarındaki değerleri kastediyorsanız, "uzamsal" verilere ihtiyaç duymayacağım.
Nathanus

Geometri türlerini döndürmeniz gerekirse, standart ArcObjects / arcpy veri erişimini kullanırdım. Yaptığınız tek şey "sekmeli" verilere (uzamsal türler dahil değil) erişmekse, sadece düzenli SqlConnections (SQL Server için - bağlantı türünüz değişebilir) kullanarak veritabanı çağrıları yapın. Sonuçlar, ICursor'tan elde ettiğinizden daha esnektir. Sorunuzu anlıyorum ve alan hesap makinesini kullanmakla sınırlıysanız, ham SQL kullanamazsınız.
SagebrushGIS
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.