天地圖框選選點并修改顏色

實現(xiàn)天地圖矩形選點、圓形選點忠寻、多邊形選點惧浴,并改變選中點的顏色,而且在框選的列表信息勾選數(shù)據(jù)能進一步修改選中的點顏色

1锡溯、效果圖


效果圖

2赶舆、引入天地圖js,如果沒有key請去天地圖開發(fā)平臺申請

<!-- 天地圖 -->
    <script type="text/javascript" src="https://api.tianditu.gov.cn/api?v=4.0&tk=你的key"></script>

3祭饭、初始化地圖

initMap() {
    if(!this.map){
        const map = new T.Map('map', {
            attributionControl: false,
            inertia: false
        })
        window.map = map
        this.map = map
        this.initDrawTool()
    }
    this.map.centerAndZoom(new T.LngLat(120.651860, 27.781680), 6)
    this.map.enableDrag()
}

3、初始化繪制工具

initDrawTool() {
    // 矩形選擇工具
    this.rectTool = new T.RectangleTool(
        this.map,
        { color: "blue", weight: 2, opacity: 0.5, fillColor: "#FFFFFF", fillOpacity: 0.5}
    )
    this.rectTool.on('draw', (e) => {
        this.draw = false
        this.resetData()
        this.selectMarkers = []
        this.markerList.forEach(item =>{
            if(e.currentBounds.contains(item.or)){ // 判斷點是否在矩形內(nèi)
                this.setDataInfo(item)
            }else if(item.getIcon().options.id){
                if(item.getIcon().options.id){
                    item.setIcon(this.defaultIcon)
                }
            }
        })
    })
    // 圓形選擇工具
    this.circleTool = new T.CircleTool(
        this.map,
        { color: "blue", weight: 2, opacity: 0.5, fillColor: "#FFFFFF", fillOpacity: 0.5}
    )
    this.circleTool.on('drawend', (e) => {
        this.draw = false
        this.resetData()
        this.selectMarkers = []
        this.markerList.forEach(item =>{
            if(e.currentCenter.distanceTo(item.or) <= e.currentRadius){ // 判斷點是否在圓內(nèi)
                this.setDataInfo(item)
            }
        })
    })
    const config = {
        showLabel: false,
        color: "blue", weight: 2, opacity: 0.5, fillColor: "#FFFFFF", fillOpacity: 0.5
    }
    // 多邊形選擇工具
    this.polygonTool = new T.PolygonTool(this.map, config)
    this.polygonTool.on('draw', (e) => {
        this.draw = false
        this.resetData()
        this.selectMarkers = []
        this.markerList.forEach(item =>{
            const isInside = this.insidePolygon(e.currentLnglats, item.or)  // 判斷點是否在多邊形內(nèi)
            if(isInside){
                this.setDataInfo(item)
            }
        })
    })
},
// 把框選的數(shù)據(jù)加入列表并修改圖標
setDataInfo(item){
    const obj = {
        ...item.options,
        _checked: false
    }
    this.tableData.push(obj)
    // 選中修改圖標
    const icon = new T.Icon({
        iconUrl: require('./img/marker_blue.svg'),
        iconSize: new T.Point(30, 46),
        iconAnchor: new T.Point(14, 41),
        id: item.options.id
    })
    item.setIcon(icon)
    this.selectMarkers.push(item)
}

4叙量、判斷點是否在多邊形內(nèi)(由于前面兩種都有相應的判斷方法倡蝙,唯獨多邊形的沒找到,那就自己寫一個吧)

// 判斷點是否在多邊形內(nèi)
insidePolygon(posArray, point){  
    let x = point.lng, y = point.lat
    let inside = false
    for (let i = 0, j = posArray.length - 1; i < posArray.length; j = i++) {  
        let xi = posArray[i].lng, yi = posArray[i].lat
        let xj = posArray[j].lng, yj = posArray[j].lat
        let intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi)
        if (intersect) inside = !inside
    }  
    return inside
}

5绞佩、列表勾選修改選中點顏色方法

// 列表勾選
onSelectChange (selection) {
    this.selectedData = selection
    this.selectMarkers.forEach(mItem =>{
        let id = mItem.getIcon().options.id
        let isSelect = false
        selection.forEach(item =>{
            if(id === item.id){
                isSelect = true
            }
        })
        const icon = new T.Icon({
            iconUrl: require('./img/marker_blue.svg'),
            iconSize: new T.Point(30, 46),
            iconAnchor: new T.Point(14, 41),
            id: id
        })
        if(isSelect){
            let iconUrl = require('./img/marker_red.svg')
            icon.setIconUrl(iconUrl)
        }
        mItem.setIcon(icon)
    })
}

6寺鸥、參考文檔
1. 天地圖api

7猪钮、完整代碼
源碼地址:https://gitee.com/jias0606/tianditu_draw

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市胆建,隨后出現(xiàn)的幾起案子烤低,更是在濱河造成了極大的恐慌,老刑警劉巖笆载,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扑馁,死亡現(xiàn)場離奇詭異,居然都是意外死亡凉驻,警方通過查閱死者的電腦和手機腻要,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涝登,“玉大人雄家,你說我怎么就攤上這事≌凸觯” “怎么了趟济?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長咽笼。 經(jīng)常有香客問我顷编,道長,這世上最難降的妖魔是什么褐荷? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任勾效,我火速辦了婚禮,結果婚禮上叛甫,老公的妹妹穿的比我還像新娘层宫。我一直安慰自己,他們只是感情好其监,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布萌腿。 她就那樣靜靜地躺著,像睡著了一般抖苦。 火紅的嫁衣襯著肌膚如雪毁菱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天锌历,我揣著相機與錄音贮庞,去河邊找鬼。 笑死究西,一個胖子當著我的面吹牛窗慎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼遮斥,長吁一口氣:“原來是場噩夢啊……” “哼峦失!你這毒婦竟也來了?” 一聲冷哼從身側響起术吗,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤尉辑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后较屿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隧魄,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年吝镣,在試婚紗的時候發(fā)現(xiàn)自己被綠了堤器。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡末贾,死狀恐怖闸溃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拱撵,我是刑警寧澤辉川,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站拴测,受9級特大地震影響乓旗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜集索,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一屿愚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧务荆,春花似錦妆距、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至盅惜,卻和暖如春中剩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抒寂。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工结啼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屈芜。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓妆棒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親沸伏。 傳聞我的和親對象是個殘疾皇子糕珊,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容