多點刪除規則和實現方法探討

來源:互聯網
上載者:User

精簡版的警示點已經發布,雖然根據剛開始的設想,是按照路口來刪除警示點的,但是該模型想像的太過於完美了,非常適合十字交叉型的路口,對於複雜一些的道路情況就不適用了,比如主路和輔路,並且附近又有交叉的小路,這樣的情況太過於複雜到底以哪個交叉路口為參照呢,如果全部參照,那多個交叉路口過近本身就是一個問題。另外擷取交叉路口也不是一件容易的事情,最終我放棄了這個想法。

想了很多的方法,最後覺得直接將多個警示點進行抽稀處理,即將多個較近的點位刪除,合并成一個點位。聽起來很簡單,就是將靠近在某一路口的警示點取平均值一下,但是如何判斷這些點位算是靠近在一起這是關鍵。首先,任何一點位都有離它比較近的點位,這個可以通過距離來判斷,比如只要和它距離保持在80米以內的就屬於較近點位。其次,這些較近點位是否真的較近,或者是否有飛點(就是有幾個靠近在一起而另外一個比較遠但也在距離範圍之內)的現象,或者點位元量是否也有一定的關係。首先就以某一點位為參考點位,在其半徑為80米的範圍內,都屬於它的較近點。但對於這些較近點,並不是所有的相加再平均即可得到一個座標位置,這樣誤刪的幾率比較大,最早使用100米作為半徑範圍來平均點位的時候,就存在兩個較近路口最後點位平均後變成兩路口中間點位的現象,此情況即屬於錯誤。那麼肯定還需要增加條件,大致的情況條件是

1,參考點如果周圍80米範圍內沒有較近點位,則該點位為獨立點位,予以保留;

2,參考點周圍有一個靠近點位,如果參考點和靠近點的距離大於50米,則放棄該靠近點,因為個人擔心兩個點位超過50米可能會是兩個路口的情況。如果參考點和靠近點的距離小於50米,則兩點相加取平均,即獲得兩點中間的點位作為最終警示點為;

3,如何判斷一個點為上一段說的飛點情況,首先在參考點周圍80米範圍內找到了超過一個的靠近點位,此時不能直接做平均,我增加了一個條件,即如果參考點和各靠近點之間的距離,最大距離超過第二大距離的兩倍,則放棄最大距離點位,從靠近點位中剔除還原為普通點位,只需要將參考點和靠近點位取平均值即可得到警示點位。而對於沒有最大距離超過第二大距離兩倍的情況,那麼就直接全部靠近點和參考點相加後取平均即可得到警示點位。

根據這一思路,我便開始寫function,是用VB寫的。此函數肯定脫離不了遍曆,並且是不斷的遍曆,為了加快速度,我首先將檔案中的所有點位讀入到一個非常巨大的數組中,然後再在數組中進行遍曆,從第一條記錄點位開始,假設該點位即為參考點,遍曆第二條記錄開始的所有點位,將距離在80米以內的點位全部作為靠近點,完成後再按照上面所提出的三個條件進行判斷。同時為了避免重複計算點位,將每一個點位都帶上了判斷標記,如果該標記為真則表示該記錄已經處理過,不需要處理直接跳過,而對於沒有標記為真的資料則歸結為判斷點位,繼續進入到下一輪的多點刪除過程中。

下面來看看我們處理前後的兩份地圖的對比,我會附上一定的說明和評註,下面兩幅分別為靜安公園附近處理前和處理後的資料對比,很明顯的發現,處理後的資料非常的符合多點刪除標準,但同時也發現了一定的弊端。

靜安公園附近全部的警示點位元影像:

處理後靜安公園附近的警示點位元影像:

 

 

如所示,有三個地方存在疑問,我已經使用1、2、3數字標出,我們對此三個疑問具體分析:

第一個標記處,是因為兩個點位雖然在80米距離範圍內,但是由於只有兩個點位,並且超過了50米距離,所以最後並沒有合并處理,而成為了兩個獨立的點位,此情況符合上述第二種條件,所以處理正確。如所示:

第二個標記處,此處符合第三個條件,即最大距離超過第二大距離的兩倍,42>18*2,如所示:

 

第三個標記處,同樣屬於第三個條件,55>24*2,如所示:

但是個人認為第三個條件還是存在一定弊端的,或者說方法存在一定的弊端,比如上述的兩個標記點位,如果使用中間點位作為參照點位,其餘兩個靠近點位就是屬於可平均範圍,即可以將三個點位直接相加後取平均值,最後得到一個點位,而不是兩個點位。為了改善這個情況,由於我是順序遍曆,不是亂序遍曆,所以在這樣的情況下,哪一點作為參照點位無法進行選擇,但我如果我增加一個距離條件,即可改善這一情況。我又增加了一個判斷條件,即最大距離小於50米的,即使比第二大距離兩倍還要長,但不予以考慮,直接將所有點位作為相加取平均值,加入此條件後是有效果的,上述的第二標記處就從兩點降為一個點位,但第三個標記處是因為最大距離超過了50米所以未能三點處理成一點,最後還是處理成了兩個點位。但該條件確實存在效果的,如所示,未增加條件前,將四個點位處理成了兩個點位,但增加條件後,將四個點位直接處理成一個點位了,並且個人認為一個點位的效果要好於兩個點位。

 

而增加條件後的效果還是能夠看到的,拿上海來舉例,總共3237個警示點資料,沒有增加條件的時候,處理結果為1790條記錄,增加條件後處理結果為1770條記錄,其中的20條就是因為增加了一個條件而多刪除的記錄,使資料更加精簡。

多點刪除最終效果:

違章警示點數量由原來的31915個點位變成18223個點位,減少43%
闖紅燈警示點數量由原來的24871個點位變成13121個點位,減少47%
未區分違章和闖紅燈的警示點版本:由原來的56786個點位變為29985個點位,減少47%
(由於未分類警示點沒有考慮違章和闖紅燈,而僅僅作為相同警示點處理,所以29985<18223+13121)

最終的結果來看,效果還是非常不錯的,但是我也相信存在一定的弊端和未能考慮的情況,比如文中就沒有任何認證的情況下選取了80米和50米這樣的兩個關鍵數字,比如文中第三標記最終未能變成一個點位就是一個弊端,而反過來說,並不是所有的情況都是滿足條件的情況,畢竟多點刪除算是資料分揀,要麼保留要麼拋棄,再好的條件也只能有這樣兩個選擇。能夠處理到這樣的結果,我個人還是比較滿意的。如果大家有更好的方法或者規則,歡迎討論。

本文是Garmin警示點完善計劃和精簡版警示點發布(Garmin警示點完善計劃續)兩篇文章的續文,本來想寫成說明文的,但結果成了原理討論的技術文,所以可能直接查看本文有點霧水,建議先查看以上兩篇文章後再來瀏覽此文,可能會有一個更好的理解。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.