Saya sedang melakukan perhitungan yang sangat sederhana dari panjang polyline menggunakan rupawan:
from shapely.geometry import LineString
...
xy_list = [map(float,e) for e in xy_intm]
line = LineString(xy_list)
s = '%s,%s,%s' % (fr,to,line.length)
Koordinat saya ada di WGS84. Sepertinya saya tidak dapat menemukan informasi tentang atribut panjang shapely. Apa satuan atribut panjang? Apakah ada cara mudah untuk mengkonversi ke km atau meter?
Jawaban:
Seperti yang dikatakan alfaciano secara rupawan , jaraknya adalah jarak Euclidean atau jarak Linear antara dua titik di pesawat dan bukan jarak lingkaran-besar antara dua titik di bola.
Untuk jarak lingkaran besar, Anda perlu menggunakan algoritma sebagai hukum cosinus atau rumus Haversine (lihat Mengapa hukum kosinus lebih disukai daripada haversine saat menghitung jarak antara dua titik lintang-bujur? ) Atau menggunakan modul pyproj yang melakukan perhitungan geodetik.
Anda dapat menguji hasilnya di Longitude Latitude Distance Calculator
sumber
geopy
yang telah mengimplementasikan jarak lingkaran besar dan penghitungan jarak Vincenty.geopy
.Sumber: http://toblerity.org/shapely/manual.html#coordinate-systems
Menjadi
shapely
sepenuhnya agnostik sehubungan dengan SRS, cukup jelas bahwa atribut panjang dinyatakan dalam satuan koordinat yang sama dengan linestring Anda, yaitu derajat. Faktanya:Sebaliknya, jika Anda ingin mengekspresikan panjang dalam meter, Anda harus mengubah geometri Anda dari WGS84 ke SRS yang diproyeksikan menggunakan pyproj (atau, lebih baik, jalankan perhitungan jarak geodesik, lihat jawaban Gene). Secara terperinci, sejak versi 1.2.18 (
shapely.__version__
),shapely
mendukung fungsi transformasi geometri ( http://toblerity.org/shapely/shapely.html#module-shapely.ops ) yang dapat kita gunakan bersamaanpyproj
. Ini contoh singkatnya:sumber