Ini adalah pertanyaan lanjutan dari pertanyaan saya sebelumnya, Bisakah Anda menyarankan beberapa teks pengantar yang ditulis dengan baik tentang proyeksi sistem koordinat?
Mari kita asumsikan saya sedang bekerja dengan proyeksi peta CH1903, yang untuk semua yang saya tahu adalah konformal, tetapi tidak sama. Artinya, sudut (bentuk) telah dilestarikan, tetapi bukan area, jarak, atau skala. (Setidaknya ini belum diawetkan dengan tepat ). Sejauh ini baik.
Saya bertanya-tanya seperti apa perhitungan yang dilakukan ArcGIS ketika saya sekarang ingin menghitung jarak antara dua titik. Di ArcObjects, saya bisa menggunakan IProximityOperator
antarmuka sebagai berikut:
IPoint a = ...,
b = ...;
double distance = ((IProximityOperator)a).ReturnDistance(b);
Pertanyaan: Ketika saya bekerja dengan sistem referensi yang tidak secara akurat menjaga jarak, apa yang akan dilakukan ArcGIS ketika saya menanyakannya untuk jarak antara dua titik (seperti yang ditunjukkan di atas)?
Apakah itu hanya melakukan beberapa matematika Pythagoras (a 2 + b 2 = c 2 ) untuk mendapatkan jarak, yang berarti jarak yang dikembalikan hanya akan seakurat yang dimungkinkan oleh proyeksi?
Atau akankah ia melakukan sesuatu yang lebih rumit, seperti semacam proyeksi ulang, untuk mendapatkan jarak yang lebih akurat?
( Pertanyaan yang sama, tetapi lebih umum: Setelah geometri diproyeksikan, apakah ArcGIS melakukan semua perhitungan hanya dalam ruang Euclidean, atau apakah proyeksi peta yang digunakan masih memengaruhi perhitungan jarak, sudut, area, dll?)
Jawaban:
Jika Anda menginginkan metode yang stabil dalam menghitung jarak geodesi, saya sarankan pembungkus Richie Carmichael untuk Mesin Proyeksi ESRI .
Pembaruan: Saya baru saja mencoba kode Richie dengan ArcGIS 10.0 di Vista64 dan mendapatkan pengecualian setelah menelepon
LoadLibrary
. Saya akan melihat lebih dalam nanti.Untuk saat ini, berikut adalah beberapa kode untuk menjawab pertanyaan di komentar dari jawaban lain.
Kode membandingkan IProximityOperator untuk poin dengan dan tanpa referensi spasial. Kemudian itu menunjukkan bagaimana menggunakan proyeksi azimuth equidistant (dengan titik pertama menjadi titik singgung) untuk menemukan jarak lingkaran besar.
Inilah hasilnya:
Saya pikir akan menarik untuk menguji ini terhadap dll mesin proyeksi (pe.dll). Akan memposting hasil jika saya mendapatkan kode Richie berfungsi.
Pembaruan: Setelah saya mengubah kode Richies untuk dikompilasi untuk x86, saya menjalankannya. Menarik ... jarak lingkaran besar yang diberikannya kepada saya adalah 1960273.80162999 - perbedaan yang signifikan dari yang dikembalikan dari metode persamaan jarak azimut di atas.
sumber
Dalam ArcGIS 10, periksa IGeometryServer2 yang sekarang memiliki GetDistanceGeodesic (jarak geodesi antara dua geometri), GetLengthsGeodesic (kembalikan panjang geodesik dari setiap polyline), dan DensifyGeodesic (densifikasi polyline dengan memplot poin di sepanjang garis geodesik yang menghubungkan vertex, menggunakan IPolurve: : GeodesicDensify) metode.
Seperti yang disebutkan dalam jawaban lain, ArcGIS masih menggunakan sebagian besar perhitungan planar.
Melita Kennedy
Beberapa komentar atas jawaban lainnya (belum cukup perwakilan untuk berkomentar langsung!).
Proyeksi jarak jauh azimut Esri mendukung ellipsoid. Kode GreatCircleDist menciptakan PCS yang menggunakan GCS berbasis ellipsoid / spheroid, sehingga jarak dari titik pusat / asal akan menjadi jarak geodesik, bukan jarak lingkaran besar. Itu juga bisa disederhanakan. Kita tahu koordinat yang diproyeksikan dari poin pertama karena itu adalah pusat dari proyeksi: 0,0. Jadi hanya poin ke-2 yang perlu diproyeksikan. Fungsi EuclidianDistance yang disederhanakan kemudian dapat digunakan.
Saya memeriksa hasilnya terhadap fungsi geodesik pe.dll dan cocok. Sepertinya aplikasi Richie menggunakan bola, sehingga ia mengembalikan jarak / koordinat lingkaran besar dalam aplikasi pengujiannya. Itu sebabnya hasilnya tidak cocok. Saya tidak mengenali nilai radius; Saya pikir saya perlu berbicara dengannya tentang hal itu!
sumber
Keakuratan jawaban apa pun tentang ArcGIS dapat berubah sewaktu-waktu - untuk semua yang kita tahu, prosedur baru akan diperkenalkan pada paket layanan berikutnya tanpa peringatan atau dokumentasi. Karena itu, perangkat lunak ESRI telah lama menggunakan perhitungan Euclidean ( misalnya , rumus Pythagoras untuk jarak) setiap kali koordinat yang diproyeksikan digunakan. Seringkali, dalam perhitungan seperti yang Anda gambarkan, perangkat lunak bahkan tidak memiliki akses ke informasi proyeksi, jadi apa lagi yang bisa dilakukan?
Pertanyaan Anda sendiri tampaknya menunjukkan bahwa perhitungan jarak Euclidean untuk proyeksi yang sama benar. Tidak ada yang bisa lebih jauh dari kebenaran. Untuk proyeksi satu titik yang sama jaraknya, jarak Euclidean ke titik dasar dijamin sama dengan jarak geodesik; untuk proyeksi dua titik yang berjarak sama, jarak Euclidean ke kedua titik dasar dijamin sama dengan jarak geodesik. Sebagai imbalan atas jaminan tersebut, distorsi metrik antara semua pasangan poin lainnya biasanya sangat meningkat dibandingkan dengan proyeksi lain yang mungkin dipilih.
sumber