main
徐景良 2025-07-17 08:18:40 +08:00
parent c60602277d
commit 947d9707d0
6 changed files with 410 additions and 81 deletions

View File

@ -9,12 +9,14 @@
<a-select <a-select
ref="select" ref="select"
style="width: 185px" style="width: 185px"
v-model:value="pageQuery.UavTypeId"
placeholder="全部机型" placeholder="全部机型"
@change="getAirList"
> >
<a-select-option value="jack">全部机型</a-select-option> <a-select-option :value="null">全部机型</a-select-option>
<a-select-option value="lucy">经纬 M30 系列</a-select-option> <a-select-option :value="2">经纬 M30 系列</a-select-option>
<a-select-option value="disabled">Mavic 3 行业系列</a-select-option> <a-select-option :value="3">Mavic 3 行业系列</a-select-option>
<a-select-option value="Yiminghe">Matrice 3D 系列</a-select-option> <a-select-option :value="4">Matrice 3D 系列</a-select-option>
</a-select> </a-select>
</div> </div>
@ -23,23 +25,25 @@
ref="select" ref="select"
style="width: 185px" style="width: 185px"
placeholder="时间排序" placeholder="时间排序"
v-model:value="pageQuery.Ascending"
@change="getAirList"
> >
<a-select-option value="jack">时间倒序</a-select-option> <a-select-option :value="true">时间正</a-select-option>
<a-select-option value="lucy">时间正</a-select-option> <a-select-option :value="false">时间倒</a-select-option>
</a-select> </a-select>
</div> </div>
<div class="filter-buttons"> <div class="filter-buttons" >
<div class="filter-button"> <div class="filter-button" @click="pageQuery.AirLineType = 'waypoint';getAirList();">
<svg t="1749104723424" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7226" width="24" height="24"><path d="M784 454.4c-28.8 0-54.4 12.8-70.4 35.2L326.4 352l188.8-134.4c12.8 6.4 25.6 12.8 41.6 12.8 48 0 86.4-38.4 86.4-86.4S608 64 560 64s-86.4 38.4-86.4 86.4c0 9.6 3.2 16 3.2 25.6l-179.2 128c-12.8-19.2-35.2-28.8-57.6-28.8-48 0-86.4 38.4-86.4 86.4S192 448 240 448c25.6 0 51.2-12.8 67.2-32l352 124.8L320 608c-12.8-32-41.6-57.6-80-57.6-48 0-86.4 38.4-86.4 86.4s38.4 86.4 86.4 86.4c35.2 0 64-19.2 76.8-51.2l396.8-83.2c16 22.4 41.6 38.4 70.4 38.4 48 0 86.4-38.4 86.4-86.4 0-48-38.4-86.4-86.4-86.4z m-224-342.4c19.2 0 35.2 16 35.2 35.2s-16 35.2-35.2 35.2c-19.2 0-35.2-16-35.2-35.2s16-35.2 35.2-35.2z m-320 284.8c-19.2 0-35.2-16-35.2-35.2s16-35.2 35.2-35.2 35.2 16 35.2 35.2-16 35.2-35.2 35.2z m0 275.2c-19.2 0-35.2-16-35.2-35.2s16-35.2 35.2-35.2 35.2 16 35.2 35.2S259.2 672 240 672z m544-92.8c-19.2 0-35.2-16-35.2-35.2 0-19.2 16-35.2 35.2-35.2 19.2 0 35.2 16 35.2 35.2 0 16-16 35.2-35.2 35.2z m-246.4 182.4l-150.4-51.2c-35.2-12.8-67.2 22.4-57.6 57.6l51.2 150.4c12.8 38.4 67.2 41.6 83.2 3.2l25.6-54.4 54.4-25.6c35.2-16 35.2-67.2-6.4-80z m-76.8 57.6c-9.6 3.2-19.2 12.8-22.4 22.4l-12.8 32-35.2-102.4 102.4 35.2-32 12.8z" p-id="7227" fill="#ffffff"></path></svg> <svg t="1749104723424" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7226" width="24" height="24"><path d="M784 454.4c-28.8 0-54.4 12.8-70.4 35.2L326.4 352l188.8-134.4c12.8 6.4 25.6 12.8 41.6 12.8 48 0 86.4-38.4 86.4-86.4S608 64 560 64s-86.4 38.4-86.4 86.4c0 9.6 3.2 16 3.2 25.6l-179.2 128c-12.8-19.2-35.2-28.8-57.6-28.8-48 0-86.4 38.4-86.4 86.4S192 448 240 448c25.6 0 51.2-12.8 67.2-32l352 124.8L320 608c-12.8-32-41.6-57.6-80-57.6-48 0-86.4 38.4-86.4 86.4s38.4 86.4 86.4 86.4c35.2 0 64-19.2 76.8-51.2l396.8-83.2c16 22.4 41.6 38.4 70.4 38.4 48 0 86.4-38.4 86.4-86.4 0-48-38.4-86.4-86.4-86.4z m-224-342.4c19.2 0 35.2 16 35.2 35.2s-16 35.2-35.2 35.2c-19.2 0-35.2-16-35.2-35.2s16-35.2 35.2-35.2z m-320 284.8c-19.2 0-35.2-16-35.2-35.2s16-35.2 35.2-35.2 35.2 16 35.2 35.2-16 35.2-35.2 35.2z m0 275.2c-19.2 0-35.2-16-35.2-35.2s16-35.2 35.2-35.2 35.2 16 35.2 35.2S259.2 672 240 672z m544-92.8c-19.2 0-35.2-16-35.2-35.2 0-19.2 16-35.2 35.2-35.2 19.2 0 35.2 16 35.2 35.2 0 16-16 35.2-35.2 35.2z m-246.4 182.4l-150.4-51.2c-35.2-12.8-67.2 22.4-57.6 57.6l51.2 150.4c12.8 38.4 67.2 41.6 83.2 3.2l25.6-54.4 54.4-25.6c35.2-16 35.2-67.2-6.4-80z m-76.8 57.6c-9.6 3.2-19.2 12.8-22.4 22.4l-12.8 32-35.2-102.4 102.4 35.2-32 12.8z" p-id="7227" fill="#ffffff"></path></svg>
</div> </div>
<div class="filter-button"> <div class="filter-button" @click="pageQuery.AirLineType = 'mapping2d';getAirList();">
<svg t="1749104746320" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7498" width="24" height="24"><path d="M918.485333 261.930667L857.813333 208.64a20.992 20.992 0 0 0-27.008 0L770.133333 261.973333a15.36 15.36 0 0 0 0 23.68 20.48 20.48 0 0 0 13.482667 4.906667 20.48 20.48 0 0 0 13.525333-4.906667l15.36-13.482666v141.994666c0 15.402667 14.250667 27.904 31.786667 27.904 17.578667 0 31.829333-12.501333 31.829333-27.904V272.128l15.36 13.482667a20.48 20.48 0 0 0 13.482667 4.906666 20.48 20.48 0 0 0 13.525333-4.906666 15.36 15.36 0 0 0 0-23.68z m-277.461333 159.146666c0 15.445333 14.250667 27.946667 31.829333 27.946667s31.829333-12.501333 31.829334-27.946667V346.325333c0-31.786667-11.349333-61.952-31.914667-84.906666a115.328 115.328 0 0 0-85.632-38.698667c-32.426667 0-63.573333 14.08-85.632 38.698667a126.848 126.848 0 0 0-31.914667 84.906666v335.530667c0 36.693333-24.704 67.754667-53.888 67.754667-29.226667 0-53.930667-31.061333-53.930666-67.754667V355.498667l0.469333-7.68 0.042667-1.493334c0-31.786667-11.306667-61.952-31.914667-84.906666a115.328 115.328 0 0 0-85.632-38.698667c-32.384 0-63.573333 14.08-85.632 38.698667a126.848 126.848 0 0 0-31.914667 84.906666v138.496c0 15.402667 14.250667 27.904 31.829334 27.904s31.829333-12.501333 31.829333-27.904V346.325333c0-36.693333 24.704-67.754667 53.888-67.754666 29.013333 0 53.589333 30.634667 53.930667 67.072l-0.512 8.405333v327.808c0 31.786667 11.306667 61.952 31.914666 84.906667a115.328 115.328 0 0 0 85.632 38.698666c32.384 0 63.573333-14.08 85.632-38.698666a126.848 126.848 0 0 0 31.914667-84.906667V346.325333c0-36.693333 24.661333-67.754667 53.888-67.754666 29.226667 0 53.888 31.018667 53.888 67.754666V421.12z" p-id="7499" fill="#ffffff"></path><path d="M858.453333 786.432l72.106667-122.624a27.861333 27.861333 0 0 0 0-28.288l-72.106667-122.624a28.928 28.928 0 0 0-24.96-14.165333h-144.128a28.928 28.928 0 0 0-24.96 14.165333l-72.106666 122.624a27.861333 27.861333 0 0 0 0 28.288l72.106666 122.624c5.12 8.746667 14.634667 14.165333 24.96 14.165333h144.128a28.928 28.928 0 0 0 24.96-14.165333z m-152.32-231.04h110.805334l55.466666 94.293333-55.466666 94.293334H706.133333l-55.424-94.293334 55.466667-94.293333z" p-id="7500" fill="#ffffff"></path><path d="M703.786667 650.410667a57.173333 57.173333 0 0 0 57.642666 56.618666 57.173333 57.173333 0 0 0 57.642667-56.618666 57.173333 57.173333 0 0 0-57.642667-56.618667 57.173333 57.173333 0 0 0-57.642666 56.618667z m57.6 14.165333q1.408 0 2.816-0.298667 1.408-0.256 2.688-0.810666 1.322667-0.512 2.517333-1.28 1.194667-0.768 2.176-1.749334 1.024-1.024 1.792-2.133333 0.810667-1.194667 1.322667-2.474667 0.554667-1.28 0.853333-2.645333 0.256-1.365333 0.256-2.773333t-0.256-2.773334q-0.298667-1.365333-0.853333-2.645333-0.512-1.28-1.28-2.432-0.853333-1.194667-1.834667-2.133333-0.981333-1.024-2.176-1.792-1.194667-0.768-2.517333-1.28-1.28-0.554667-2.688-0.853334-1.408-0.256-2.816-0.256t-2.816 0.256q-1.365333 0.298667-2.688 0.853334-1.28 0.512-2.517334 1.28-1.152 0.768-2.133333 1.749333-1.024 0.981333-1.834667 2.133333-0.768 1.194667-1.322666 2.474667-0.554667 1.28-0.853334 2.645333-0.256 1.365333-0.256 2.773334t0.298667 2.773333q0.256 1.365333 0.810667 2.645333t1.322666 2.432q0.810667 1.152 1.792 2.133334 1.024 1.024 2.176 1.792 1.194667 0.768 2.517334 1.28 1.28 0.554667 2.688 0.853333 1.408 0.256 2.816 0.256z" p-id="7501" fill="#ffffff"></path><path d="M162.389333 510.464a43.690667 43.690667 0 1 1 0 87.381333 43.690667 43.690667 0 0 1 0-87.381333z m0-37.632c-44.8 0-81.322667 36.48-81.322666 81.322667 0 44.8 36.48 81.322667 81.322666 81.322666s81.322667-36.48 81.322667-81.322666-36.48-81.322667-81.322667-81.322667z" p-id="7502" fill="#ffffff"></path><path d="M234.112 554.154667q0-29.653333-21.034667-50.688t-50.688-21.034667q-29.653333 0-50.688 21.034667-20.992 21.034667-20.992 50.688t20.992 50.645333q21.034667 21.034667 50.688 21.034667t50.688-21.034667q21.034667-20.992 21.034667-50.645333z m19.2 0q0 37.589333-26.666667 64.256-26.624 26.666667-64.256 26.666666-37.589333 0-64.256-26.666666t-26.666666-64.256q0-37.632 26.666666-64.256 26.666667-26.666667 64.256-26.666667 37.632 0 64.256 26.666667 26.666667 26.624 26.666667 64.256z m-144.213333 0q0-22.101333 15.616-37.717334t37.674666-15.616q22.101333 0 37.717334 15.616t15.616 37.717334q0 22.058667-15.616 37.674666t-37.717334 15.616q-22.058667 0-37.674666-15.616t-15.616-37.674666z m19.2 0q0 14.08 9.984 24.106666 9.984 9.984 24.106666 9.984 14.122667 0 24.106667-9.984 9.984-9.984 9.984-24.106666 0-14.122667-9.984-24.106667-9.984-9.984-24.106667-9.984-14.08 0-24.106666 9.984-9.984 9.984-9.984 24.106667z" p-id="7503" fill="#ffffff"></path></svg> <svg t="1749104746320" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7498" width="24" height="24"><path d="M918.485333 261.930667L857.813333 208.64a20.992 20.992 0 0 0-27.008 0L770.133333 261.973333a15.36 15.36 0 0 0 0 23.68 20.48 20.48 0 0 0 13.482667 4.906667 20.48 20.48 0 0 0 13.525333-4.906667l15.36-13.482666v141.994666c0 15.402667 14.250667 27.904 31.786667 27.904 17.578667 0 31.829333-12.501333 31.829333-27.904V272.128l15.36 13.482667a20.48 20.48 0 0 0 13.482667 4.906666 20.48 20.48 0 0 0 13.525333-4.906666 15.36 15.36 0 0 0 0-23.68z m-277.461333 159.146666c0 15.445333 14.250667 27.946667 31.829333 27.946667s31.829333-12.501333 31.829334-27.946667V346.325333c0-31.786667-11.349333-61.952-31.914667-84.906666a115.328 115.328 0 0 0-85.632-38.698667c-32.426667 0-63.573333 14.08-85.632 38.698667a126.848 126.848 0 0 0-31.914667 84.906666v335.530667c0 36.693333-24.704 67.754667-53.888 67.754667-29.226667 0-53.930667-31.061333-53.930666-67.754667V355.498667l0.469333-7.68 0.042667-1.493334c0-31.786667-11.306667-61.952-31.914667-84.906666a115.328 115.328 0 0 0-85.632-38.698667c-32.384 0-63.573333 14.08-85.632 38.698667a126.848 126.848 0 0 0-31.914667 84.906666v138.496c0 15.402667 14.250667 27.904 31.829334 27.904s31.829333-12.501333 31.829333-27.904V346.325333c0-36.693333 24.704-67.754667 53.888-67.754666 29.013333 0 53.589333 30.634667 53.930667 67.072l-0.512 8.405333v327.808c0 31.786667 11.306667 61.952 31.914666 84.906667a115.328 115.328 0 0 0 85.632 38.698666c32.384 0 63.573333-14.08 85.632-38.698666a126.848 126.848 0 0 0 31.914667-84.906667V346.325333c0-36.693333 24.661333-67.754667 53.888-67.754666 29.226667 0 53.888 31.018667 53.888 67.754666V421.12z" p-id="7499" fill="#ffffff"></path><path d="M858.453333 786.432l72.106667-122.624a27.861333 27.861333 0 0 0 0-28.288l-72.106667-122.624a28.928 28.928 0 0 0-24.96-14.165333h-144.128a28.928 28.928 0 0 0-24.96 14.165333l-72.106666 122.624a27.861333 27.861333 0 0 0 0 28.288l72.106666 122.624c5.12 8.746667 14.634667 14.165333 24.96 14.165333h144.128a28.928 28.928 0 0 0 24.96-14.165333z m-152.32-231.04h110.805334l55.466666 94.293333-55.466666 94.293334H706.133333l-55.424-94.293334 55.466667-94.293333z" p-id="7500" fill="#ffffff"></path><path d="M703.786667 650.410667a57.173333 57.173333 0 0 0 57.642666 56.618666 57.173333 57.173333 0 0 0 57.642667-56.618666 57.173333 57.173333 0 0 0-57.642667-56.618667 57.173333 57.173333 0 0 0-57.642666 56.618667z m57.6 14.165333q1.408 0 2.816-0.298667 1.408-0.256 2.688-0.810666 1.322667-0.512 2.517333-1.28 1.194667-0.768 2.176-1.749334 1.024-1.024 1.792-2.133333 0.810667-1.194667 1.322667-2.474667 0.554667-1.28 0.853333-2.645333 0.256-1.365333 0.256-2.773333t-0.256-2.773334q-0.298667-1.365333-0.853333-2.645333-0.512-1.28-1.28-2.432-0.853333-1.194667-1.834667-2.133333-0.981333-1.024-2.176-1.792-1.194667-0.768-2.517333-1.28-1.28-0.554667-2.688-0.853334-1.408-0.256-2.816-0.256t-2.816 0.256q-1.365333 0.298667-2.688 0.853334-1.28 0.512-2.517334 1.28-1.152 0.768-2.133333 1.749333-1.024 0.981333-1.834667 2.133333-0.768 1.194667-1.322666 2.474667-0.554667 1.28-0.853334 2.645333-0.256 1.365333-0.256 2.773334t0.298667 2.773333q0.256 1.365333 0.810667 2.645333t1.322666 2.432q0.810667 1.152 1.792 2.133334 1.024 1.024 2.176 1.792 1.194667 0.768 2.517334 1.28 1.28 0.554667 2.688 0.853333 1.408 0.256 2.816 0.256z" p-id="7501" fill="#ffffff"></path><path d="M162.389333 510.464a43.690667 43.690667 0 1 1 0 87.381333 43.690667 43.690667 0 0 1 0-87.381333z m0-37.632c-44.8 0-81.322667 36.48-81.322666 81.322667 0 44.8 36.48 81.322667 81.322666 81.322666s81.322667-36.48 81.322667-81.322666-36.48-81.322667-81.322667-81.322667z" p-id="7502" fill="#ffffff"></path><path d="M234.112 554.154667q0-29.653333-21.034667-50.688t-50.688-21.034667q-29.653333 0-50.688 21.034667-20.992 21.034667-20.992 50.688t20.992 50.645333q21.034667 21.034667 50.688 21.034667t50.688-21.034667q21.034667-20.992 21.034667-50.645333z m19.2 0q0 37.589333-26.666667 64.256-26.624 26.666667-64.256 26.666666-37.589333 0-64.256-26.666666t-26.666666-64.256q0-37.632 26.666666-64.256 26.666667-26.666667 64.256-26.666667 37.632 0 64.256 26.666667 26.666667 26.624 26.666667 64.256z m-144.213333 0q0-22.101333 15.616-37.717334t37.674666-15.616q22.101333 0 37.717334 15.616t15.616 37.717334q0 22.058667-15.616 37.674666t-37.717334 15.616q-22.058667 0-37.674666-15.616t-15.616-37.674666z m19.2 0q0 14.08 9.984 24.106666 9.984 9.984 24.106666 9.984 14.122667 0 24.106667-9.984 9.984-9.984 9.984-24.106666 0-14.122667-9.984-24.106667-9.984-9.984-24.106667-9.984-14.08 0-24.106666 9.984-9.984 9.984-9.984 24.106667z" p-id="7503" fill="#ffffff"></path></svg>
</div> </div>
<div class="filter-button"> <div class="filter-button">
<svg t="1749104685102" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6766" width="24" height="24"><path d="M712.313523 0.469118v51.176544c-208.544417 0-446.600641 148.795802-446.600641 279.040107 0 41.197118 9.552955 70.367748 31.68681 107.342801l7.25001 11.600017 17.314731 27.422098 3.497064 5.714714c31.729457 53.820666 34.075049 100.007497-2.004415 164.959061-51.38978 92.458956-145.682562 173.914956-282.281288 244.965057l-18.039731 9.211778L0.234559 856.098288c137.920786-68.960393 230.507684-146.919329 278.485694-233.237099 26.867686-48.404481 25.502978-75.314814 2.644122-114.123694l-21.579443-34.20299-6.22648-10.107367c-26.611803-44.438299-39.022115-81.882471-39.022114-133.741369 0-162.059056 255.669485-324.629878 485.878638-330.088709L712.313523 0.469118z m49.470659 185.514973l22.901504 45.717712-18.892674 9.638249-16.845613 9.083837c-68.661863 38.126525-82.053059 63.288326-72.329516 121.757528 3.539711 21.110324 17.442672 42.775061 44.566241 71.092749l8.316188 8.529424 9.595602 9.425014 31.089751 29.852984c59.876557 57.744201 90.3266 98.514847 104.058973 153.231102 20.129441 80.645704 21.408854 148.326684 2.857357 203.000292l-3.966182 10.747074-47.508892-19.020616c18.039732-45.120653 18.039732-105.850152-1.066178-182.316438-10.022073-40.088293-33.307401-72.926575-80.219233-119.411936l-42.34859-40.813294-12.282371-12.154429a601.06851 601.06851 0 0 1-5.458831-5.62942c-33.648578-35.141227-52.498605-64.525093-58.128025-98.131023-14.926492-89.644246 14.07355-130.628129 114.592812-183.809088l21.067677-10.832368zM574.904502 797.970264v50.579484h-29.852984v-50.622131h29.852984z m0-136.513432v85.29424h-29.852984v-85.29424h29.852984z m-25.161801-139.882554c14.627962 30.492691 23.072092 58.767731 24.863271 87.511891l-29.852984 1.833826c-1.450002-24.479447-8.827954-49.172129-21.92062-76.466286z m-68.278039-119.028112l7.505893 14.286786 35.269168 58.213318-25.588272 15.352964-31.302986-51.517721a446.856524 446.856524 0 0 1-12.538253-22.858857l26.65445-13.47649zM458.264629 268.719504l25.75886 15.09708a192.082629 192.082629 0 0 0-15.99267 34.927991c-4.264712 12.836783-5.117654 24.820624-2.985298 37.955937l-29.426513 4.861772a106.191329 106.191329 0 0 1 4.136771-52.370663c4.776477-14.07355 11.002957-27.55004 18.50885-40.472117z m104.186914-99.282496l15.011786 25.844155a284.712174 284.712174 0 0 0-64.013327 49.641248l-21.707384-20.513265a314.351922 314.351922 0 0 1 70.708925-54.972138z m131.011953-51.261838l7.25001 29.000041a533.515472 533.515472 0 0 0-78.811878 26.014744l-11.642663-27.507393c25.588272-10.875016 53.436841-20.044146 83.161884-27.507392z" fill="#ffffff" p-id="6767"></path></svg> <svg t="1749104685102" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6766" width="24" height="24"><path d="M712.313523 0.469118v51.176544c-208.544417 0-446.600641 148.795802-446.600641 279.040107 0 41.197118 9.552955 70.367748 31.68681 107.342801l7.25001 11.600017 17.314731 27.422098 3.497064 5.714714c31.729457 53.820666 34.075049 100.007497-2.004415 164.959061-51.38978 92.458956-145.682562 173.914956-282.281288 244.965057l-18.039731 9.211778L0.234559 856.098288c137.920786-68.960393 230.507684-146.919329 278.485694-233.237099 26.867686-48.404481 25.502978-75.314814 2.644122-114.123694l-21.579443-34.20299-6.22648-10.107367c-26.611803-44.438299-39.022115-81.882471-39.022114-133.741369 0-162.059056 255.669485-324.629878 485.878638-330.088709L712.313523 0.469118z m49.470659 185.514973l22.901504 45.717712-18.892674 9.638249-16.845613 9.083837c-68.661863 38.126525-82.053059 63.288326-72.329516 121.757528 3.539711 21.110324 17.442672 42.775061 44.566241 71.092749l8.316188 8.529424 9.595602 9.425014 31.089751 29.852984c59.876557 57.744201 90.3266 98.514847 104.058973 153.231102 20.129441 80.645704 21.408854 148.326684 2.857357 203.000292l-3.966182 10.747074-47.508892-19.020616c18.039732-45.120653 18.039732-105.850152-1.066178-182.316438-10.022073-40.088293-33.307401-72.926575-80.219233-119.411936l-42.34859-40.813294-12.282371-12.154429a601.06851 601.06851 0 0 1-5.458831-5.62942c-33.648578-35.141227-52.498605-64.525093-58.128025-98.131023-14.926492-89.644246 14.07355-130.628129 114.592812-183.809088l21.067677-10.832368zM574.904502 797.970264v50.579484h-29.852984v-50.622131h29.852984z m0-136.513432v85.29424h-29.852984v-85.29424h29.852984z m-25.161801-139.882554c14.627962 30.492691 23.072092 58.767731 24.863271 87.511891l-29.852984 1.833826c-1.450002-24.479447-8.827954-49.172129-21.92062-76.466286z m-68.278039-119.028112l7.505893 14.286786 35.269168 58.213318-25.588272 15.352964-31.302986-51.517721a446.856524 446.856524 0 0 1-12.538253-22.858857l26.65445-13.47649zM458.264629 268.719504l25.75886 15.09708a192.082629 192.082629 0 0 0-15.99267 34.927991c-4.264712 12.836783-5.117654 24.820624-2.985298 37.955937l-29.426513 4.861772a106.191329 106.191329 0 0 1 4.136771-52.370663c4.776477-14.07355 11.002957-27.55004 18.50885-40.472117z m104.186914-99.282496l15.011786 25.844155a284.712174 284.712174 0 0 0-64.013327 49.641248l-21.707384-20.513265a314.351922 314.351922 0 0 1 70.708925-54.972138z m131.011953-51.261838l7.25001 29.000041a533.515472 533.515472 0 0 0-78.811878 26.014744l-11.642663-27.507393c25.588272-10.875016 53.436841-20.044146 83.161884-27.507392z" fill="#ffffff" p-id="6767"></path></svg>
</div> </div>
<div class="filter-button" @click="showSearchInput = !showSearchInput"> <div class="filter-button" @click="showSearchInput = !showSearchInput;getAirList();">
<svg t="1750122415214" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4744" width="24" height="24"><path d="M670.528 760.96a384 384 0 1 1 90.496-90.496l180.224 180.288a64 64 0 0 1-90.496 90.496l-180.224-180.224zM448 704a256 256 0 1 0 0-512 256 256 0 0 0 0 512z" fill="#ffffff" p-id="4745"></path></svg> <svg t="1750122415214" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4744" width="24" height="24"><path d="M670.528 760.96a384 384 0 1 1 90.496-90.496l180.224 180.288a64 64 0 0 1-90.496 90.496l-180.224-180.224zM448 704a256 256 0 1 0 0-512 256 256 0 0 0 0 512z" fill="#ffffff" p-id="4745"></path></svg>
</div> </div>
</div> </div>
@ -47,7 +51,8 @@
<div class="search-container" v-show="showSearchInput"> <div class="search-container" v-show="showSearchInput">
<a-input-search <a-input-search
v-model:value="pageQuery.key" v-model:value="pageQuery.AirLineName"
@search="getAirList"
placeholder="输入路线名称" placeholder="输入路线名称"
/> />
</div> </div>
@ -109,7 +114,7 @@
</div> </div>
<div class="type" > <div class="type" >
<img src="/public/iocn/uav.png" alt=""> <img src="/public/iocn/uav.png" alt="">
{{item.uavId}}Matrice 4TD Matrice 4TD
</div> </div>
<div class="time"> <div class="time">
<div> <div>
@ -355,6 +360,10 @@
const ariLineCount = ref(0); const ariLineCount = ref(0);
const pageQuery = ref({ const pageQuery = ref({
Ascending:false,
UavTypeId:null,
AirLineType:null,
AirLineName:null,
page:1, page:1,
limit:10, limit:10,
key:null, key:null,

View File

@ -50,7 +50,7 @@
<div class="item"> <div class="item">
<div class="label">GSD(地面采样距离)</div> <div class="label">GSD(地面采样距离)</div>
<div class="content"> <div class="content">
<a-input style="width:100px;" placeholder="" v-model:value="calculatParam.gsd"></a-input> <a-input style="width:100px;" placeholder="" v-model:value="calculatParam.gsd" @change="onGsdChange"></a-input>
</div> </div>
<div class="unit"> cm/pixel</div> <div class="unit"> cm/pixel</div>
</div> </div>
@ -58,7 +58,7 @@
<div class="item"> <div class="item">
<div class="label">航线高度</div> <div class="label">航线高度</div>
<div class="content"> <div class="content">
<a-input style="width:100px;" placeholder="" v-model:value="calculatParam.height"></a-input> <a-input style="width:100px;" placeholder="" v-model:value="calculatParam.height" @change="onHeightChange"></a-input>
</div> </div>
<div class="unit"> m</div> <div class="unit"> m</div>
</div> </div>
@ -74,7 +74,7 @@
<div class="item"> <div class="item">
<div class="label">旁向重叠率</div> <div class="label">旁向重叠率</div>
<div class="content"> <div class="content">
<a-input style="width:100px;" placeholder="" v-model:value="calculatParam.overlapY"></a-input> <a-input style="width:100px;" placeholder="" v-model:value="calculatParam.overlapY" @change="onOverlayYChange"></a-input>
</div> </div>
<div class="unit"> %</div> <div class="unit"> %</div>
</div> </div>
@ -201,13 +201,20 @@
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {ref,defineEmits,defineProps} from 'vue' import {ref,defineEmits,defineProps,watch} from 'vue'
import { SaveOutlined,LeftOutlined } from '@ant-design/icons-vue'; import { SaveOutlined,LeftOutlined } from '@ant-design/icons-vue';
import {missionConfigOptions,folderConfigOptions} from '../waylineConfig/index.ts'; import {missionConfigOptions,folderConfigOptions} from '../waylineConfig/index.ts';
import {uploadXmlFile,addAirLine} from '@/api/sys/workplan'; import {uploadXmlFile,addAirLine} from '@/api/sys/workplan';
import { message } from 'ant-design-vue'; import { message } from 'ant-design-vue';
import { XMLParser, XMLBuilder } from 'fast-xml-parser'; import { XMLParser, XMLBuilder } from 'fast-xml-parser';
const emits = defineEmits(["setFlyPoint","exitDraw"])
// 线
import {uavModel,calculateHeight,calculateGsd,calculateSpacing} from '../lib/calculateAirLine'
const emits = defineEmits(["setFlyPoint","exitDraw","calculatParamChange"])
const props = defineProps(["airInfo","polygonAirForm","airPoints","airRoute"]) const props = defineProps(["airInfo","polygonAirForm","airPoints","airRoute"])
@ -224,13 +231,43 @@ const setFlyPoint = ()=>{
// 线 // 线
const calculatParam = ref({ const calculatParam = ref({
gsd:5, gsd:2,
overlapY:80, overlapY:70,
overlapX:70, overlapX:80,
overlapAngle:0, overlapAngle:0,
height:120, height:0,
spacing:0,
}) })
watch(
() => calculatParam.value,
(newVal,oldVal) => {
emits("calculatParamChange",newVal)
},
{deep:true}
)
calculatParam.value.height = calculateHeight(calculatParam.value.gsd,uavModel['m4td']);
calculatParam.value.spacing = calculateSpacing(calculatParam.value.gsd,calculatParam.value.overlapY/100,uavModel['m4td'])
// gsd
const onGsdChange = ()=>{
calculatParam.value.height = calculateHeight(calculatParam.value.gsd,uavModel['m4td']);
onOverlayYChange();
}
//
const onHeightChange = () => {
calculatParam.value.gsd = calculateGsd(calculatParam.value.height,uavModel['m4td']);
onOverlayYChange();
}
//
const onOverlayYChange = ()=>{
calculatParam.value.spacing = calculateSpacing(calculatParam.value.gsd,calculatParam.value.overlapY/100,uavModel['m4td'])
}
// 线 // 线
const missionConfig = ref( const missionConfig = ref(
{ {
@ -664,13 +701,18 @@ const backPage = ()=>{
display: flex; display: flex;
overflow: hidden; overflow: hidden;
border:0.5px solid #3B4154 ; border:0.5px solid #3B4154 ;
font-size:12px; background:#050608;
font-size:13px;
border-radius: 19px;
height:38px;
line-height:38px;
} }
.radio-box .radio-item{ .radio-box .radio-item{
flex:1; flex:1;
color:#8A92A6 ; color:#8A92A6 ;
text-align: center; text-align: center;
background:#222738 ;
cursor:pointer; cursor:pointer;
} }
@ -680,6 +722,7 @@ const backPage = ()=>{
color:#fff; color:#fff;
text-align: center; text-align: center;
background:#3A57E8 ; background:#3A57E8 ;
border-radius: 19px;
cursor:pointer; cursor:pointer;
} }

View File

@ -94,10 +94,45 @@
<a-button type="primary" @click="handlerSetTime"></a-button> <a-button type="primary" @click="handlerSetTime"></a-button>
</a-form-item> </a-form-item>
<!-- 单次定时 -->
<a-form-item v-if="submitForm.periodicFormula == 1" ref="accuracy" label="设置时间" name="accuracy"> <a-form-item v-if="submitForm.periodicFormula == 1" ref="accuracy" label="设置时间" name="accuracy">
<a-date-picker style="width:100%;" show-time placeholder="选择时间" @change="onChange" @ok="onOk" /> <a-date-picker v-model:value="onceTime" valueFormat="YYYY-MM-DD HH:mm:ss" style="width:100%;" show-time placeholder="选择时间" @change="onOnceTimeChange" />
</a-form-item> </a-form-item>
<!-- 重复定时 -->
<div v-if="submitForm.periodicFormula == 2">
<a-form-item ref="accuracy" label="选择日期" valueFormat="YYYY-M-D" name="accuracy">
<a-range-picker v-model:value="repeatTime.date" style="width:100%;" @change="onRepeatDateChange" />
</a-form-item>
<a-form-item ref="accuracy" label="选择时间" name="accuracy">
<a-time-picker v-model:value="repeatTime.time" format="HH:mm:ss" valueFormat="H:m:s" style="width:100%;" @change="onRepeatTimeChange" />
</a-form-item>
<a-form-item ref="accuracy" label="重复频率" name="accuracy">
<div class="repeat-time">
<div></div>
<div>
<a-input v-model:value="repeatTime.count"></a-input>
</div>
<div>
<a-select
ref="select"
v-model:value="repeatTime.type"
@change="handleRepeatTypeChange"
>
<a-select-option value="date"></a-select-option>
<a-select-option value="week"></a-select-option>
<!-- <a-select-option value="month"></a-select-option> -->
</a-select>
</div>
</div>
<div class="week-container" v-if="repeatTime.type == 'week'">
<div v-for="(item,index) in weekdays" :class="item.checked ? 'week-item-active':'week-item'" @click="item.checked=!item.checked" >{{item.label}}</div>
</div>
</a-form-item>
</div>
</div> </div>
@ -196,6 +231,37 @@ const labelCol = { span: 24 };
const wrapperCol = { span: 24 }; const wrapperCol = { span: 24 };
const props = defineProps(["checkedAriLine","checkedDronePort","formData"]); const props = defineProps(["checkedAriLine","checkedDronePort","formData"]);
const weekdays = ref([
{
'label':'周日',
'checked':false
},{
'label':'周一',
'checked':false
},{
'label':'周二',
'checked':false
},{
'label':'周三',
'checked':false
},{
'label':'周四',
'checked':false
},{
'label':'周五',
'checked':false
},{
'label':'周六',
'checked':false
}
])
const onceTime = ref();
const repeatTime = ref({
date:null,
time:null,
count:1,
type:'date'
});
const visible = ref(false); const visible = ref(false);
const handleOk = ()=>{ const handleOk = ()=>{
@ -409,6 +475,76 @@ const changeCron = ()=>{
const togglePopover = (e)=> { const togglePopover = (e)=> {
} }
//
const onOnceTimeChange = (e) => {
let time = new Date(e);
console.log(time);
let secondTime = time.getSeconds();
let minutisTime = time.getMinutes();
let hourTime = time.getHours();
let dayTime =time.getDate();
let monthTime = time.getMonth()+1;
let yearTime = time.getFullYear();
let cronTime = secondTime+" "+minutisTime+" "+ hourTime+" "+ dayTime+" "+monthTime+" ? "+yearTime
}
//
const onRepeatDateChange = (e) =>{
console.log(e);
}
//
const onRepeatTimeChange = (e) => {
console.log("123",e);
}
//
const handleRepeatTypeChange = (e)=>{
//
let timeArray = repeatTime.value?.time?.split(":");
let startDate = new Date(repeatTime.value?.date[0]).getDate();
let endDate = new Date(repeatTime.value?.date[1]).getDate();
let month = new Date(repeatTime.value?.date[0]).getMonth()+1;
let cronTime = "";
switch(e){
case 'date':
cronTime = timeArray[2]+" "+timeArray[1]+" "+timeArray[0]+" "+ startDate +"-"+ endDate +" "+month+" ? "+" * "
break;
case 'week':
let weekday = "";
weekdays.value?.forEach((item,index)=>{
if(item.checked){
weekday += index+","
}
})
weekday = weekday.slice(0, -1);
cronTime = timeArray[2]+" "+timeArray[1]+" "+timeArray[0]+" "+ startDate +"-"+ endDate +" "+month+" "+weekday+" "+" * "
break;
case 'month':
break;
}
submitForm.value.executeTime = cronTime;
}
</script> </script>
<style scoped> <style scoped>
@ -477,6 +613,35 @@ const togglePopover = (e)=> {
cursor: pointer; cursor: pointer;
} }
.repeat-time{
display:flex;
color:#fff;
gap:12px;
line-height: 32px;
}
.week-container{
width:100%;
display:flex;
color:#fff;
gap:8px;
padding:12px 0px;
}
.week-item{
padding:3px 5px;
background:#050608;
border-radius: 4px;
font-size:12px;
cursor:pointer;
}
.week-item-active{
padding:3px 5px;
background:#3A57E8;
border-radius: 4px;
font-size:12px;
cursor:pointer;
}
.radio-box{ .radio-box{
width:100%; width:100%;
display: flex; display: flex;
@ -532,8 +697,9 @@ const togglePopover = (e)=> {
::v-deep .ant-select-selector{ ::v-deep .ant-select-selector{
border:none!important; border:none!important;
color:#fff!important; color:#fff!important;
background:#3F4150!important ; background:#050608 !important;
border-radius: 3px!important; border-radius: 3px!important;
border-radius: 15px!important;
} }

View File

@ -21,6 +21,7 @@
:airInfo="airInfo" :airInfo="airInfo"
:polygonAirForm="polygonAirForm" :polygonAirForm="polygonAirForm"
:airRoute="props.airRoute" :airRoute="props.airRoute"
@calculatParamChange="calculatParamChange"
@exitDraw="exitDraw" @exitDraw="exitDraw"
></airPolygon> ></airPolygon>
</div> </div>
@ -57,6 +58,7 @@
'uavTrack', 'uavTrack',
'homeAirport' 'homeAirport'
]); ]);
watch( watch(
() => props.uavTrack, () => props.uavTrack,
(val) => { (val) => {
@ -90,22 +92,18 @@
() => props.airRoute, () => props.airRoute,
(newVal, oldVal) => {}, (newVal, oldVal) => {},
); );
watch( watch(
() => props.wayline, () => props.wayline,
(newVal, oldVal) => { (newVal, oldVal) => {
generatePreviewPoint(newVal?.Folder?.Placemark); generatePreviewPoint(newVal?.Folder?.Placemark);
}, },
); );
watch(
watch(
()=>props.wayline, ()=>props.wayline,
(newVal,oldVal)=>{ (newVal,oldVal)=>{
generatePreviewPoint(newVal?.Folder?.Placemark); generatePreviewPoint(newVal?.Folder?.Placemark);
} }
) )
// 线 // 线
const generatePreviewPoint = (placemark)=>{ const generatePreviewPoint = (placemark)=>{
@ -662,6 +660,9 @@ const loadChangGuangLayer = ()=>{
polygonAirForm.value.startingPoint = graphic.toJSON().position; polygonAirForm.value.startingPoint = graphic.toJSON().position;
}; };
//
const polygonGeoJson = ref();
// //
const handlerDrawPolygon = async () => { const handlerDrawPolygon = async () => {
if (polygonGraphicLayer == null) { if (polygonGraphicLayer == null) {
@ -697,24 +698,48 @@ const loadChangGuangLayer = ()=>{
coordinates.push(coordinates[0]); coordinates.push(coordinates[0]);
polygonGeoJson.value = coordinates;
let polygon = turf.polygon([coordinates]); let polygon = turf.polygon([coordinates]);
let lines = generateScanLines(polygon, 0.003, 0); let lines = generateScanLines(polygon, 0.005, 0);
// wkt // wkt
let wkt = GeojsonToWkt(polygon.geometry); // let wkt = GeojsonToWkt(polygon.geometry);
CalculateAreaInfo(polygon, lines); CalculateAreaInfo(polygon, lines);
console.log('lines', lines);
// 线 // 线
handlerDrawPolygonLine(lines); handlerDrawPolygonLine(lines);
}; };
// 线 // 线
const handlerDrawPolygonLine = (lines) => { const handlerDrawPolygonLine = (lines) => {
let nodeGraphic = polygonGraphicLayer.getGraphicById("polygon-node-1");
if(nodeGraphic){
nodeGraphic.setOptions({
id: 'polygon-node-1',
name: '航点',
position: lines.geometry.coordinates[0],
style: {
image: '/map/node.png',
scale: 1,
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
label: {
text: '',
font_size: 14,
color: '#ffffff',
outline: true,
outlineColor: '#000000',
pixelOffsetY: -35,
},
},
})
}else{
const graphic = new mars3d.graphic.BillboardEntity({ const graphic = new mars3d.graphic.BillboardEntity({
id: '节点', id: 'polygon-node-1',
name: '航点', name: '航点',
position: lines.geometry.coordinates[0], position: lines.geometry.coordinates[0],
style: { style: {
@ -734,6 +759,8 @@ const loadChangGuangLayer = ()=>{
}); });
polygonGraphicLayer.addGraphic(graphic); polygonGraphicLayer.addGraphic(graphic);
}
// //
lines.geometry.coordinates.unshift([ lines.geometry.coordinates.unshift([
@ -785,6 +812,7 @@ const loadChangGuangLayer = ()=>{
// 线 // 线
function generateScanLines(polygon, spacing, angle = 0) { function generateScanLines(polygon, spacing, angle = 0) {
if (!turf.booleanValid(polygon)) throw new Error('无效的多边形'); if (!turf.booleanValid(polygon)) throw new Error('无效的多边形');
spacing = Math.abs(spacing); spacing = Math.abs(spacing);
@ -1725,6 +1753,27 @@ const loadChangGuangLayer = ()=>{
} }
}; };
//
const calculatParamChange = (params) => {
console.log("params",params);
let spceing = parseFloat(params.spacing) / 10000;
console.log("spceing",spceing);
if(polygonGeoJson.value){
let polygon = turf.polygon([polygonGeoJson.value]);
let lines = generateScanLines(polygon, spceing, 0);
//
CalculateAreaInfo(polygon, lines);
// 线
handlerDrawPolygonLine(lines);
}
}
</script> </script>
<style scoped> <style scoped>

View File

@ -12,18 +12,21 @@
<div> <div>
<a-select <a-select
ref="select" ref="select"
style="width: 100px" style="width:130px;"
v-model:value="pageQuery.status"
placeholder="计划状态" placeholder="计划状态"
@change="getTaskList"
> >
<a-select-option value="jack">全部</a-select-option> <a-select-option :value="null">全部</a-select-option>
<a-select-option value="lucy">进行中</a-select-option>
<a-select-option value="disabled">已完结</a-select-option> <a-select-option v-for="(item,index) in planStatusOptions" :key="index" :value="item.status">{{item.label}}</a-select-option>
</a-select> </a-select>
</div> </div>
<div class="filter-buttons"> <div class="filter-buttons">
<a-input-search v-model:value="pageQuery.key" <a-input-search v-model:value="pageQuery.key"
@keyup.enter="getTaskList" @keyup.enter="getTaskList"
@search="getTaskList"
placeholder="输入计划名称" placeholder="输入计划名称"
/> />
</div> </div>
@ -35,32 +38,38 @@
<div class="routers-list"> <div class="routers-list">
<div class="ari-line" v-for="(item,index) in ariLineList" :key="index" @click="checkAriLine(item)"> <div class="ari-line" v-for="(item,index) in ariLineList" :key="index" @click="checkAriLine(item)">
<div class="title"> <div class="title">
<div :class="item.status == 0 ? 'state-no' : 'state' ">
{{item.status == 0 ? '未开始' : '进行中'}} <div v-for="(opt,idx) in planStatusOptions" :key="idx" v-show="item.status == opt.status" class="state" :style="{'border-color':opt.color,'color':opt.color}">
{{ opt.label }}
</div> </div>
<div style="flex:1;"> <div style="flex:1;">
{{item.taskName}} {{item.taskName}}
</div> </div>
<div> <div>
<a-dropdown> <a-dropdown>
<MoreOutlined /> <MoreOutlined />
<template #overlay> <template #overlay>
<a-menu> <a-menu>
<a-menu-item @click="toDoPlan(item.id)"> <!-- <a-menu-item @click="toDoPlan(item.id)">
<a href="javascript:;" >执行</a> <a href="javascript:;" >执行</a>
</a-menu-item> </a-menu-item> -->
<a-menu-item @click="createWorkPlan(item)">
<a-menu-item @click="createWorkPlan(item)" v-if="item.status == 0">
<a href="javascript:;">编辑</a> <a href="javascript:;">编辑</a>
</a-menu-item> </a-menu-item>
<a-menu-item @click="deletePlan(item.id)">
<a-menu-item @click="deletePlan(item.id)" v-if="item.status != 2 && item.status != 5">
<a href="javascript:;">删除</a> <a href="javascript:;">删除</a>
</a-menu-item> </a-menu-item>
</a-menu> </a-menu>
</template> </template>
</a-dropdown> </a-dropdown>
</div> </div>
</div> </div>
<div class="username"><UserOutlined />&nbsp;{{item.createId}}</div> <div class="username"><UserOutlined />&nbsp;{{item.createUserName ? createUserName : '超级管理员'}}</div>
<div class="time">更新时间{{item.createTime}}</div> <div class="time">更新时间{{item.createTime}}</div>
</div> </div>
</div> </div>
@ -77,6 +86,7 @@
import {ref,defineEmits,defineProps,createVNode,watch} from 'vue' import {ref,defineEmits,defineProps,createVNode,watch} from 'vue'
import { Modal, message } from 'ant-design-vue'; import { Modal, message } from 'ant-design-vue';
import { getTaskPageList, deleteTask,executeFlyTask,pendingFlyTask } from '@/api/sys/workplan'; import { getTaskPageList, deleteTask,executeFlyTask,pendingFlyTask } from '@/api/sys/workplan';
import { statusOptions } from '@/components/illegalmining/util';
const emit = defineEmits(["planDetail","createWorkPlan"]) const emit = defineEmits(["planDetail","createWorkPlan"])
@ -99,6 +109,7 @@
const pageQuery = ref({ const pageQuery = ref({
page:0, page:0,
limit:10, limit:10,
status:null,
key:null key:null
}) })
@ -208,6 +219,26 @@
} }
//
const planStatusOptions = ref([
{
label:"待执行",
status:0,
color:'#F6B50A'
},{
label:"执行中",
status:1,
color:'#F6B50A'
},{
label:"执行失败",
status:2,
color:'#F6B50A'
},{
label:"成功",
status:5,
color:'#08ed08'
}
])
</script> </script>
<style scoped> <style scoped>
@ -234,8 +265,9 @@
border-radius: 2px; border-radius: 2px;
} }
.filter-container{ .filter-container{
padding:20px 15px; padding:20px 20px;
display:flex; display:flex;
gap:8px;
} }
.search-container{ .search-container{
width: calc( 100% - 30px); width: calc( 100% - 30px);
@ -244,10 +276,7 @@
border:1px solid #3a57e890; border:1px solid #3a57e890;
} }
.filter-buttons{ .filter-buttons{
display:flex;
gap:8px;
text-align: center; text-align: center;
} }
.filter-button{ .filter-button{
width:32px; width:32px;
@ -406,6 +435,7 @@
} }
::v-deep .ant-input{ ::v-deep .ant-input{
height:32px!important;
background:#3F4150!important ; background:#3F4150!important ;
border:none!important; border:none!important;
border-top-left-radius: 3px !important; border-top-left-radius: 3px !important;
@ -450,6 +480,7 @@
::v-deep .ant-input-search-button{ ::v-deep .ant-input-search-button{
border-top-right-radius: 15px!important; border-top-right-radius: 15px!important;
border-bottom-right-radius: 15px!important; border-bottom-right-radius: 15px!important;
height:32px!important;
} }
::v-deep .ant-input::placeholder{ ::v-deep .ant-input::placeholder{
color:rgba(255, 255, 255, 0.533)!important; color:rgba(255, 255, 255, 0.533)!important;

View File

@ -0,0 +1,31 @@
// 相机参数
export const uavModel = {
"m4td":{
"focalLength":6.83,
"sensorLength":9.85,
"imageWidth":4032,
"imageHeight":0,
}
}
// 输入gsd计算高度
export const calculateHeight = (gsd,uavModel) => {
let height = 0;
height = ( (gsd / 100) * (uavModel['focalLength'] / 1000) * uavModel['imageWidth'] ) / ( uavModel['sensorLength'] / 1000 );
return height.toFixed(2);
}
// 输入高度计算gsd
export const calculateGsd = (height,uavModel) => {
let gsd = 0;
gsd = ( (height*1000) * uavModel['sensorLength'] ) / (uavModel['focalLength'] * uavModel['imageWidth']) / 10;
return gsd.toFixed(2);
}
// 计算航线间距
export const calculateSpacing = (gsd,overlap,uavModel) => {
let groundResolution = gsd / 100;
let lineSpacing = groundResolution * uavModel['imageWidth'] * (1 - overlap);
return lineSpacing.toFixed(2);
}