Çokgen özelliklerinin genişlemesini simüle etme


13

İlginç bir soru olacağını umduğum şey var. Ben ortak vektör tabanlı mekansal analiz yöntemleri (tamponlar, bindirmeleri, vb.) Tanıtmak için bazı Körfez petrol sızıntısı verileri kullanan GIS kursu bir giriş için çalışıyorum Ben sınırları tutan bir çokgen özellik sınıfı var Deepwater Horizon petrol döküntüsünü belirli bir günde döküyorum ve genişlemesini tamponlarla simüle ediyorum.

Kavramı göstermek için iş yapar, ancak kesinlikle gerçekçi sonuçlar sağlamaz. Bunun, daha az muntazam sonuçlar veren bir şekilde nasıl yapılabileceğini düşündürdü, petrolü genişledikçe çeşitli yönlere yönlendiren akımların etkisini taklit / taklit etti.

Genel anlamda, bir girdi çokgen özelliği verilen aşağıdakileri gerçekleştirecek bir iş akışı arıyorum:

  • Belirtilen bir alandan (10 km kare gibi) orijinalinden daha büyük veya belki belirli bir faktörden (% 5 gibi) yeni bir çokgen özelliği oluşturun
  • Yeni çokgen özelliği keyfi bir şekle sahip olacak ve ...
  • Yeni çokgen özelliği orijinal çokgen özelliğini içerir (bu nokta bir anlaşma kırıcı değildir, ancak olması güzel olur)

Herhangi bir gerçek dünya çözümü, yapmaya çalıştığım şeyin kapsamının çok dışında olan okyanus akımlarını, akışkan dinamiğini ve benzerlerini modellemeyi içermelidir (buna dahil olan çözümler kesinlikle hoş ve ilginçtir), ama fikir, altta yatan mekânsal sorun hakkındaki merakımı uyandırdı ve orada hangi çözümlerin olduğunu merak ediyorum. Aklımda bir çözüm var, ama başkalarının ne gibi çözümleri olabileceğini duymak isterim.

ESRI dünyasında çalışıyorum, ancak diğer paketleri / platformları içeren çözümler kesinlikle kabul edilebilir (ancak bunları test edemeyebilirim). Genel algoritmalar, sözde kod ve kod da iyidir.


2
İlginç ve yenilikçi çözümler var, ancak böylesi bir egzersizin petrol sızıntıları ile ilgisi olacak örtük önermeden endişeliyim. İlgili bilimsel bilgi miktarı, göbeğine bakan bir filozofun erişiminden daha fazla değildir. Tabii, çokgenleri yaymak eğlencelidir - bunu '96'da ArcView 2 ile yangın simülasyonları için yapmayı açıklayan bir ESRI temsilcisi duyduğumu hatırlıyorum - ama bu sürecin keyfi ve muhtemelen yanıltıcı bir şey olduğunu söylemeyi nasıl haklıyorsunuz?
whuber

1
@whuber - Sonuçların keyfi bir şey olacağını iddia etmiyorum. Keyfi bir sonuca sahip olmak, soruda aktif olarak aradığım bir şey. Sonuçların gerçek dünyayla benzerlik göstermeyeceği konusunda haklısınız. Soruyu benim yaptığım gibi adlandırmamın nedeninin bir parçası ("Petrol döküntüsünün genişlemesini simüle etmek" yerine). Herhangi bir belirli alandaki uygulamasıyla değil, hesaplamalı geometri / CBS metodolojisi ile ilgileniyorum. Petrol döküntüsü kısmı, ilginç bir mekansal problemi düşünmek için itici güçtü. Bunu soruda açıklığa kavuşturmaya çalışacağım.
James M

Söylemeyi unuttum: Ödevde, öğrencilerin gerçeği yansıtmaya çalışıyorsanız tampon aracını neden bu şekilde kullanmanın kötü bir seçim olduğunu düşünmelerini isteyen bir soru var. Eğer kimse bunu gerçekçi olarak geçirmeye çalıştığımdan endişeleniyorsa, olma :)
James M

Teşekkürler. Etkileyici öğrencilerin, genişleyen çokgenlerin serin bir grafik gösterisini ve bazı "petrol döküntüsü" ifadesini gördükten sonra, ilkini eleştirel olarak ikincisinin gerçekçi bir temsili olarak kabul edebileceklerinden endişeliydim.
whuber

Yanıtlar:


7

alo

Bence PostGIS'te bunu yapmanın eğlenceli bir yolu. Bence bu genişleme akımı temsil eden bazı linestringleri takip edebilir. Ama şimdi sadece bir yönde genişliyor.

50 kez yinelenir ve her yineleme için çokgeni son yinelemeden alır, hareket ettirir, arabelleğe alır (işleri daha rahat hale getirmek için basitleştirir) ve dışbükey ile birleştirir. Convexhull'un sendikalaşmasından daha güzel bir sonuç verdiğini düşündüm.

Sonuç olarak 50 çokgen giderek büyüyor. Her büyük çokgen, tüm küçük çokgenlerle tamamen örtüşüyor.

Sonucu görmek için http://postgisonline.org/map.php adresinden deneyebilirsiniz.

Aşağıdaki sql kodunu kopyalayıp "map1" i tıklamanız yeterlidir

OLUMSUZ t (the_geom, n) AS (SEÇ 'POLİGON ((10 10,8 13, 10 15, 12 14, 15 15, 16 12, 15 10, 10 10))' :: geometri AS, geometri n olarak BİRLİĞİ TÜMÜNÜ SEÇ ST_Convexhull (ST_Collect (ST_Simplify (ST_Buffer (ST_Transscale (the_geom, 1.3, 2.7,1,1), 1), 0.1), the_geom)), n + 1 olarak n FROM t WHERE n <50) the_geom FROM t ;

Çokgeni 30: th yinelemesinden görmek istiyorsanız , sonunda t ile noktalı virgül arasına
limit 1 ofset 30'u ekleyebilirsiniz.

bu 50 çokgen üretmek yaklaşık 50 ms kullanır, bu nedenle modeli fazla beklemeden genişletmek mümkün olmalıdır.

Saygılarımızla Nicklas

Bu bence daha da güzeldi:

OLUMSUZ t (the_geom, n) AS (SEÇ 'POLİGON ((10 10,8 13, 10 15, 12 14, 15 15, 16 12, 15 10, 10 10))' :: geometri AS, geometri n olarak UNION ALL SELECT st_convexhull (ST_collect (ST_Simplify (ST_Buffer (ST_Transscale (the_geom, 1.1 * n, 15,1,1), 0.2 * n), 0.1), the_geom), n + 1, NEREDEN n <50) T_meom

sağa dönerek genişleme simülasyonu


Bu düzgün bir çözüm ve mekansal bir veritabanı bağlamında CBS hakkında öğrenmeye başlamak için zaman bulmam gereken başka bir hatırlatma. Böyle bir sitenin neden işe yaradığına iyi bir örnek. Sadece aklımdakilerden tamamen farklı bir çözüm bulmakla kalmıyor, aynı zamanda bonus olarak yeni bir kaynak da buluyorum.
James M

Evet, uzamsal sql ile bir çok posibilite var. Yukarıdaki sorgu, özyinelemeli bölümü nedeniyle normalden biraz daha zor okunur. Başlamanıza yardımcı olacak birçok harika kaynak var.
Nicklas Avén

3

whuber'ın uyarıları önemlidir ve bunu yalnızca açıklama amacıyla yaptığınız ve mümkün olan ancak sorunu zorlaştıran akışkan dinamiğini kullanmak istemediğiniz sürece.

Bu ilginç bir soru olduğunu düşünüyorum ve öğrenciler için eğlenceli olabilir dedi. Soruna bakmanın bir başka yolu, her hücre içinde ölçülen yağ yoğunluğu ile raster tabanlı bir fenomen olarak düşünmektir. Oradan , büyüme oranını modellemek için r.spread( dokümantasyon ) gibi ansiyotropiyi hesaba katan , belki de formayı 'yönlendirmek' için sahte akımlar da dahil olmak üzere bir model kullanabilirsiniz . Benzer şekilde , doğrusal tamponlama sorunlarının üstesinden gelmek için düzensiz şekiller kullanarak ArcGIS içindeki farklı odaklama işlemleriyle bir şeyler yapabilirsiniz .


2

Akımları temsil eden vektör özellikleri elde etmek ve bunları bir çarpıtma işleminde kontrol vektörleri olarak kullanmak için cazip olacağını düşünüyorum. Anahtar, tek bir günün yayılmasını taklit etmek için vektörleri doğru şekilde ölçeklendirmek olacaktır.

Andy W ile sınırın puanlara düşürülmesinin bir ön koşul olabileceğini kabul ediyorum. Doğru bir sonuç almak için puan sayısını da yoğunlaştırmanız gerekebilir.

Korkarım ESRI dünyasında nasıl eğildiğinizden emin değilim. Data Interop uzantısının bunu yapacağını biliyorum, ancak yerleşik bir yöntem veya özellikle bu tür bir şey için bir uzantı olması gerektiğini varsayalım.


1

Birisi gerçekten benzer simülasyonlar yapmış olsaydı şaşırmazdım, ama işte projeye nasıl yaklaşacağımı düşünüyorum (petrol döküntüsünü dağıtabilecek Okyanus süreçleri hakkında önceden bilgi sahibi olmamak).

Çokgenlerle sıkı çalışmak istiyorsanız, sınırınızı önceden belirlenmiş sayıda noktaya ayırırdım. Bu noktaları kullanarak, simülasyonlarınızı, genişleme yönü ve genişleme mesafesi (önceden belirlenmiş makul sınırlar dahilinde) ile ilgili stokastik unsurlarla tanıtacağım, bu adımları gerektiği kadar tekrarlayın. Ardından yeni konumlara göre tüm noktaların dışbükey gövdesini yeniden yapın (bunun her zaman önceki çokgeni içermesini istiyorsanız, genişletmeyi dışa sınırlamanız gerekir). Bir giriş CBS kursu için, bu stokastik unsurlar göz önüne alındığında, muhtemelen birkaç farklı olası tekrarlamayı görselleştirirdim.

Ayrıca farklı bir yaklaşım da, bir simülasyonda petrolün görselleştirilmesinin oldukça havalı olabileceğini düşünüyorum. Örneğin, dökülen her petrol varili için yeni bir ajan yapın, daha önce söylediğim gibi aynı stokastik elementleri ekleyin. Körfez boyunca ajanların genişlemesini zaman içinde ya da zaman içinde petrol yoğunluğunu görselleştirebilirsiniz.

Gerçekten harika bir proje gibi geliyor ve işiniz bittiğinde resim yayınlıyor.


0

Sadece böyle bir sorunun üretebileceği çeşitli sonuçları göstermek için, soruyu gönderirken beyin fırtınası yaptığım çözüme değineceğim. Önümüzdeki birkaç gün içinde uygulama şansı elde etmeyi umuyorum ve bunu yaptığımda da yayınlayacağım.

  1. Çokgeni ikili bir raster halinde rasterleştirin.
  2. Rasgele yerleştirilen 0 ve 1 değerleriyle 1'in sonuçlarından daha büyük bir raster oluşturun. 0 ve 1 değerlerinin dağılımı, çokgenin genişlemesi gereken miktarla eşleşir. Yani çokgenin 5 km2'yi genişletmesi gerekiyorsa. hedefine ulaşmak için 5 km2'lik bir alan olurdu. değerinde 1 hücre.
  3. (1) ve (2) 'nin birleşim sonuçları.
  4. Orijinal rasterleştirilmiş çokgene bitişik olmayan (3) sonucundan tüm hücreleri çıkarın.
  5. Orijinal rasterleştirilmiş poligon yerine (4) 'ün sonuçlarını (2)' ye besleyin ve (1) hücre sayısı hedef alanla eşleşene kadar tekrarlayın.

Muhtemelen bunu yapmanın en etkili yolu değil, ama işe yarayacak. Bu fikir, bir üst sınıfın yaptığı kentsel büyüme modelleme alıştırmasına dayanmaktadır. Rastgele rasterleri büyümeye uygunluğuna göre oluşturulur ve alan sınırlamaları yoktur, ancak rastgele büyüme kısmı esasen aynıdır.

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.