eCharts路線圖添加點擊事件(從底層實現逆地理編碼)

概念:

地理編碼是指將地物的名稱轉化爲地物的座標,從而將地物展示在地圖上。逆地理編碼是與其相反的過程,即跟據一個座標,找到對應位置的地物。

目的:

對如下地圖中的路網,前端點擊一點,後臺實現空間分析,找出點擊位置的道路。

道路共有9w餘條,分成線段25w餘段,最終實現後,分析效率可達0.5s左右查出,前端感覺流暢。

實現步驟:

原理:使用到線要素的外包絡矩形以及點到直線的距離。

外包絡矩形用於初步篩選道路,點到直線的距離用於精確篩選。

1、道路分段併入數據庫

先將道路分成一個個直線段,這樣外包絡矩形纔有意義,否則對於環路,找外包絡矩形的算法會出錯。

2、分段的道路添加外包絡矩形屬性

即 xmax, xmin,ymax,ymin

3、跟據點座標初步篩選道路

即滿足外包絡矩形包含點座標的線符合要求,這種符合要求的線可能有多條。

        x=request.POST['x']
        y=request.POST['y']
        res=Line.objects.filter(xmax__gte=x,xmin__lte=x,ymax__gte=y,ymin__lte=y)

4、使用點到直線距離精確篩選

距離最近的即爲我們要找的線

點到直線距離

            a=line.y2-line.y1
            b=line.x1-line.x2
            c=line.x2*line.y1-line.x1*line.y2
            d=(math.fabs(a*int(x)+b*int(y)+c))/(math.pow(a*a+b*b,0.5))

爲什麼不直接對所有的線使用點到直線的距離?

計算的速度慢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章