Ş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
Ş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
Yanıtlar:
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
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.
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.
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.
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.
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.
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. 🙄