Saya perlu mengkonversi lat / long yang dinyatakan sebagai derajat, menit, dan detik dalam data menjadi derajat desimal. Misalnya, dalam data, mereka terdaftar sebagai N335042.06 di kolom Latitude, dan W86031.04 di kolom Longitude. Saya telah melakukan masalah ini sebelumnya di mana saya membuat skrip yang mengubah DMS ke DD, dan sebaliknya, jadi saya kira saya bisa menggunakan bit dari itu. Tetapi masalah yang saya alami adalah bagaimana mengabaikan (karena tidak ada kata yang lebih baik) 'N' dan 'W' dalam data? Bisakah saya melewati mereka? Dan DMS terdaftar bersama-sama tanpa simbol atau spasi.
Dapatkah saya menggunakan len()
, range()
, split()
untuk menentukan apa bagian untuk membaca dari nilai? Misalnya, dapat melakukan hal berikut?
N335042.06 di mana, 33 = derajat 50 = menit 42.06 = detik ...?
Saya datang di ini artikel ESRI, tapi itu di VB. Mungkin akan menggunakannya sebagai referensi tetapi beberapa terminologi / sintaks berbeda dari Python.
Kode terakhir berhasil!
# Pre-logic
def latDD(x):
D = int(x[1:3])
M = int(x[3:5])
S = float(x[5:])
DD = D + float(M)/60 + float(S)/3600
return DD
# Expression
latDD(!Latitude!)
Jawaban:
Lihatlah bagian mengiris dalam tutorial Python . Anda dapat mengambil serangkaian karakter dari string menggunakan sintaks slicing, mis
D = int(x[1:2])
.Selama beberapa detik, cobalah
S = float(x[5:])
. Ini akan mengambil semua karakter mulai dari indeks 5 hingga akhir string, jika Anda memiliki nilai panjang variabel untuk detik.!FieldName!
sintaks hanya berlaku dalam kotak ekspresi. Anda harus mendefinisikan fungsi di bagian "pra-logika" yang mengambil nilai dari bidang yang Anda inginkan dan mengembalikan nilai yang diinginkan. Kemudian, di kotak ekspresi, panggil fungsi dan berikan nilai bidang menggunakan!FieldName!
sintaks. Lihat Menghitung contoh Field dalam bantuan.sumber
x = (!Latitude!) D = int(x[1:3]) M = int(x[3:5]) S = float(x[5:10]) DD = D + float(M)/60 + float(S)/3600
Dan di blok kode yang saya miliki!Latitude! = DD
return DD
alih-alihreturn latDD
.print DD
dan diubahreturn latDD
sesuaireturn DD
keinginan Anda, dan itu berhasil! Terima kasih!Hanya dengan menggunakan Kalkulator Bidang tanpa logika pra, saya dapat membuat ini berfungsi untuk saya. String yang saya miliki adalah format yang sedikit berbeda dengan beberapa spasi.
Nilai LAT seperti "dd mm ss.ss" dan saya menggunakan ini dalam kalkulator.
nilai panjang seperti "-dd mm ss.ss" dan ini lama
sumber
import re
dalam pra-logika