誰かがこれで私を助けてくれることを本当に願っています! このスクリプトを思い通りに実行しようとしていますが、コツがつかめません。
処理するデータを含むファイルは、GPS から入力され、次のようになります。
Line 20081002-1119.nmea
$GPGGA,094406.00,5849.40174,N,01738.15828,E,2,08,00.9,00003.26,M,0024.93,M,005,0734*62
$GPGGA,094407.00,5849.40177,N,01738.15827,E,2,08,00.9,00003.22,M,0024.93,M,005,0734*6B
$GPGGA,094408.00,5849.40174,N,01738.15826,E,2,08,00.9,00003.00,M,0024.93,M,006,0734*65
$GPGGA,094409.00,5849.40171,N,01738.15831,E,2,08,00.9,00003.24,M,0024.93,M,005,0734*62
$GPGGA,094410.00,5849.40176,N,01738.15833,E,2,08,00.9,00003.29,M,0024.93,M,006,0734*61
$GPGGA,094411.00,5849.40172,N,01738.15831,E,2,08,00.9,00003.31,M,0024.93,M,004,0734*6D
$GPGGA,094412.00,5849.40172,N,01738.15830,E,2,08,00.9,00003.15,M,0024.93,M,005,0734*68
$GPGGA,094413.00,5849.40175,N,01738.15834,E,2,08,00.9,00003.18,M,0024.93,M,005,0734*67
$GPGGA,094414.00,5849.40173,N,01738.15835,E,2,08,00.9,00003.16,M,0024.93,M,006,0734*6A
EOL
出力ファイルは次のようになります (必要なものを表示するために距離を調整しています)。
Line 20081002-1119.nmea
58.853952 17.643113 102.15
58.853946 17.643243 101.63
58.853939 17.643372 105.93
58.853933 17.643503 104.01
58.853927 17.643633 104.25
...
EOL
列は、経度、緯度、上のポイントまでの距離です。
これを 2 点間の特定の間隔 (私の場合は 100 メートル) にダウンサンプリングするにはどうすればよいですか?
これまでに管理したスクリプト:`
indata=open('C:/nav.nmea', 'r')
outdata=open('C:/nav_out.txt', 'w')
from math import *
coords_list=[]
coords=[]
def distance(coords_list):
for (longi2,lati2) in coords_list:
for (longi1,lati1) in coords_list:
a = sin(lati1) * sin(lati2)+cos(longi1-longi2)*cos(lati1) * cos(lati2)
c= 2* asin(sqrt(a))
s= (6367* c)/100000 # For results in meters
if s<100:
# Here I want to discard current line if not s<100 and jump to the next line
else:
"Return the valid lines"
return s
for line in indata:
if line.startswith('$GPGGA'):
data=line.split(",")
# Import only coordinates from input file
LON=float(data[2])/100
LAT=float(data[4])/100
# Convert coordinates from DDMM.MMMM to DD.DDDDDD
lon=((LON-int(LON))/60)*100+int(LON)
lat=((LAT-int(LAT))/60)*100+int(LAT)
coords_list.append((lon,lat))
outdata.writelines("%0.6f\t" %lon)
outdata.writelines("%0.6f\t" %lat)
outdata.writelines("%s \n" %distance(coords_list))
elif line.startswith('EOL'):
outdata.writelines("EOL")
elif line.startswith('Line'):
LineID=line
outdata.writelines('\n%s' %LineID)
indata.close()
outdata.close()
`