Mevcut bir dizi noktadan en uzak noktayı nasıl bulabilirim?


17

Şekil dosyası olarak bir dizi noktam var ve mevcut noktaların her birine mümkün olan en uzun mesafeye sahip olacak yeni bir noktanın (koordinatlarını) bulmak istiyorum. Mümkün mü? Evet ise, herhangi bir örnek VB kodu var mı? Teşekkürler Demetris


Zaten var olan her nokta için yeni bir nokta mı yoksa bir şekilde hepsinden "en uzak" bir nokta mı demek istediniz? Ve en uzağa, "dünyanın diğer tarafı" demek istiyor musunuz? Eğer öyleyse, enlemi -1 ile çarpabilir ve ondalık derece varsa, boylamına 180 ekleyebilirsiniz (sonuç değeri> 180 ise 360 ​​çıkarma).
nmpeterson

İlginç soru şu olurdu: dünyaya dağılmış mevcut noktalar göz önüne alındığında, dünya üzerinde mevcut tüm noktalardan en uzakta yeni bir nokta bulun.
Kirk Kuykendall

Bu, mesafenin sadece ne kadar ileri gitmek istediğinizle sınırlandığı bir ikizkenar üçgenin sonundaki nokta olacaktır. Soruyu doğru okuduysam, her ikisinden de en uzak noktayı mı istiyorsunuz? Eşit?
Kıllı

1
Mesajım harika bir tartışma ve materyal hazırladı! NMpeterson: İlk olarak, puanlarımın küçük bir düz alanda olduğunu söylemeliyim; bu yüzden dünya hesaplamalarına gerek yok. Ortaya çıkan ikinci sayıyı arıyorum; ieone noktası bir şekilde mevcut tüm noktalardan "en uzak". Lütfen buna odaklanın.
Demetris

Orijinal soruda istendiği gibi herhangi bir örnek VB kodu olup olmadığını merak ediyorum. Uzmanların cevapları göz önüne alındığında, belki de böyle bir kod açıktır. Ama bir acemi olarak, whuber tarafından nazikçe sağlanan çözümü yeniden yaratarak başlamayı umuyorum. Önceden bunu bir yorum yerine cevap olarak gösterdiği için özür dilerim.

Yanıtlar:


12

Kirk Kuykendall'ın küresel bir Voronoi diyagramı (Thiessen çokgenleri) oluşturma önerisi iyi bir şey, ancak çalışmak için bazı teknik aksaklıklar olabilir. Bu arada, bir alternatif olarak, başka bir iplikte tarif edildiği gibi standart tarama çözeltisi uygulanabilir . Öklid mesafeleri yerine küresel mesafeler kullanın.

Burada (lat, lon) olarak verilen beş noktayı kullanan bir örnek:

 82.7051   -145.256
 60.3321     81.2881
-17.076     105.125
-38.792    -122.686
  0.000     180.000

Mesafe haritası

Bu küresel mesafe haritası, dünyayı yatay olarak -180 ila 180 derece boylam ve dikey olarak -90 ila 90 derece enlemlere yaymaktadır. Noktalar büyük kırmızı noktalarla gösterilir. Mesafeler parlaklık ile artar. Görünen sırtlar büyük çevrelerin parçaları olmalıdır. Yakınındaki küçük siyah nokta (-15.3268, -2.04352), 11.227 km'lik maksimum mesafe noktasını işaret eder. (Mesafeler ITRF00 elipsoidal datumda hesaplandı.)

Bu ızgaranın çözünürlüğü bir derecedir. Daha hassas bir çözüm elde etmek için, böyle bir noktaya (ve küresel maksimuma yeterince yakın bir değere sahip başka bir yerel maksimuma) yakınlaştırma yapılabilir ve hesaplama daha küçük ama daha yüksek çözünürlüklü bir ızgarada tekrarlanabilir.


vektörlerden çok daha güzel. Niçin rasterlerin düz bir dünya modeli gerektirdiğinden emin değilim.
Kirk Kuykendall

Güzel, evet, ama verimsiz. Vektör tabanlı küresel Voronoi çözümünün işe yaradığını görmek güzel olurdu.
whuber

@Whuber: Kara noktanın koordinatlarını otomatik olarak nasıl elde edebilirsiniz? "
Demetris

@Demetris Izgaradaki maksimum değeri hesaplamak, bu değere eşit tüm hücreleri seçmek ve o hücrenin merkezinin koordinatlarını kullanmaktır.
whuber

@Whuber: Çok teşekkürler. Bu iyi bir fikir. Ancak, bir özellik sınıfına (benzersiz bir çokgen) dayalı çıkış raster kırpmak zorunda. Bunu yapabilir miyim?
Demetris

8

resim açıklamasını buraya girin

Bunu hiç denemedim ama bu işe yarayacak gibi görünüyor:

Kürenin bir 3D voronoi diyagramı oluşturun. Elde edilen bu çokgenler kabaca orijinal mevcut (tohum) noktalar üzerinde ortalanacaktır.

Mevcut olan en yakın noktadan en uzak olanı bulmak için sonuçta ortaya çıkan her tepe noktasında dolaşın. Bu nokta dünyadaki en uzak nokta olmalıdır.


Bu harika bir fikir (+1). Ancak, tüm noktalar ortak bir yarımkürede olduğunda küresel Voronoi diyagramı nasıl görünüyor? Belirttiğiniz kod onu dışbükey bir gövde ile alır, ancak işe yaramayacak gibi görünüyor.
whuber

hmm, evet, sanırım hepsi ortak bir yarımkürede olmasa bile, bir tohum noktasından yoksun bir çokgen olacak. Dışbükey gövde sentroidinin antipodal noktasını kullanarak bir nokta oluşturduysanız ne olur? Daha sonra, her bir tepe noktasında döngü yapmanın yanı sıra, bu dışbükey-antipode noktası, komşularından maksimum tepe mesafesinden daha uzak olup olmadığını görmek için incelenecektir.
Kirk Kuykendall

Bu benim ilk düşüncemdi, ancak antipodal noktalar yapay çokgenler yaratacak. Örneğin, her noktadaki antipod dahil edildiğinde illüstrasyonunuzda ne olacağını düşünün! Muhtemelen bu doğanın bir çözümü var, ama görünüşe göre basit değil.
whuber

1

Rasterinizdeki her hücrenin diğer tüm noktalardan ne kadar uzakta olduğunu belirlemek için bir Maliyet Ağırlıklı Mesafe Fonksiyonu kullanabilirsiniz.


Hangi maliyeti kullanırdınız?
whuber

Maliyeti tek bir birim olarak ayarlarsanız; mesafeye göre en uzak noktanın ne olacağını belirleyebilirsiniz.
djq

@whuber Belki de bu, daha önce bahsedilen öklid uzaklık yaklaşımını hesaplamaktan farklı değildir.
djq

Öklid mesafesi. Aslında, bu bile değil: garip bir sekizgen mesafe (daireler aslında sekizgen). Bu durumda (sadece noktalardan olan mesafeler, engelsiz), bunun için CostDistance'ı kullanmaya çalışmak yerine, bir Öklid mesafesini veya küresel mesafe ızgarasını doğrudan hesaplamak çok daha doğru ve çok daha hızlıdır.
whuber

Maliyet ağırlıklı mesafe işlevinin yardımcı olacağından emin değilim çünkü sadece bir noktanın koordinatlarına ihtiyacım var ve mevcut bir vektör nokta setim var; ama deneyeceğim. Teşekkürler.
Demetris

1

Bildiğim kadarıyla, bu " Erişilemezlik Kutbu " analizi tekrarlamalı olarak yapılmalıdır.

Projeksiyondan minimum bozulma olan küçük bir alana baktığınız sürece tekrarlı bir tarama yaklaşımı uygun olacaktır. Her hücre için, tüm noktalara olan mesafeyi hesaplayın, sonra minimum mesafeyi alın. En yüksek değere sahip hücre direğidir. Bunu yapmak için Uzamsal Analistte Öklid Uzaklığını da kullanabilirsiniz .

Yinelemeli bir vektör yaklaşımı daha karmaşıktır. Garcia-Castellanos ve ark. 2007 , küresel bir dünyaya dayanan yinelemeli bir yöntemi açıklamaktadır. Görünüşe göre C kodlarını çevrimiçi olarak kullanılabilir hale getirdiler . Bunu Arc'ta arabelleklerle yapmanın yollarını hayal edebiliyorum, ama yine de tekrarlamalı ve yavaş olurdu.


0

Nokta Mesafesi'ni (Çözümleme) kullanabilirsiniz Araç, iki nokta kümesi arasındaki mesafeleri içeren bir tablo oluşturur. varsayılan arama yarıçapı kullanılırsa, tüm giriş noktalarından tüm yakın noktalara olan mesafeler hesaplanır. Çıktı tablosu oldukça büyük olabilir. Örneğin, hem giriş hem de yakın özelliklerin her biri 1.000 puana sahipse, çıktı tablosu bir milyon kayıt içerebilir.


Bu , girdide görünmeyen yeni bir noktanın koordinatlarını bulmak için nasıl uygulanabilir ? Belki de soruyu yanlış okudunuz mu?
whuber

0

Puan kümenize en uzak nokta, kümenizdeki en iç noktaya karşılık olacaktır. Örneğin, setinizdeki en iç noktanız 49 derece Kuzey ve -144 derece Doğu koordinatlarına sahipse, karşılıklı ve en uzak nokta 49 derece Güney ve 36 derece Batı koordinatlarına sahip olurdu. Bu tam olarak doğru değildir, çünkü Dünya mükemmel bir şekilde küresel değil, jeoidaldir; bu nedenle, sonuç noktanızın doğruluğu, kullandığınız projeksiyon ve coğrafi sistemleri (ortografik, ortorektifize ...) bağlıdır. Tüm set için bir karşılıklılık bulmak (bir set için bir antipod transfer etmek) ve daha sonra, antipode nokta kümesinin kapsadığı arazide yüzey analizini çalıştırmak yararlı olabilir, çünkü arazi çok olabilir. Sorunuzun, diğer gezegenler veya aylar gibi dünya dışı organlardaki herhangi bir noktaya ilişkin olmadığını varsayalım. Afedersiniz, Senin için VB kodum yok. 🙄


Bir kümedeki diğer tüm noktalardan en uzak olan nokta en iç olanı (kenar boyunca en dıştaki tüm noktalardan en uzak olanı), yine de hemen yanındaki her noktaya en yakın olanı gösterir. Bu küme analizi, eğlenceli değil. Fizikteki aynı yük atomlarına bakmak muhtemelen daha iyidir.😐
Yuriy Shevchuk
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.