1. 程式人生 > >Leaflet+heatmap實現離線地圖載入和熱力圖應用

Leaflet+heatmap實現離線地圖載入和熱力圖應用

本人部落格主頁:http://www.cnblogs.com/webbest/

2017年春節已經過完,新一年的奮鬥也剛剛開始。今年要經歷的挑戰也是大大的。。。不扯了。

年底前軟體專案相對較多,恰巧在年底進入一家新公司,專案自然一個接一個,沒有絲毫停歇。年底之前的電信運營商春節保障專案時節前做的最後一個專案,時間緊,任務中。主要還是涉及到以前沒有用過,並且公司也沒人實踐過的離線地圖瓦片載入熱力圖效果的應用。

接到這個任務也是摸不著頭腦,產品經理讓先看看openstreetmap,瞭解一下其中的一些API介面。經過了解才知道這只是一大個地圖包,並沒有提供現實的離線地圖的方案。帶我的師傅說可以瞭解一下openlayers,使用openlayers也載入了一個離線地圖瓦片進來。團隊中的大神建議使用leaflet來做離線地圖瓦片的載入,因為相對簡單,不需要像openlayers那樣載入太多依賴。

先上程式碼:

先載入:leaflet.js和leaflet.css,以及heatmap.js和heatmap-leaflet.js檔案。

<!DOCTYPE html>  
<html>  
<head lang="en">  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />  
    <title
>leaflet</title> <link rel="stylesheet" href="./leaflet.css" type="text/css"> <style> #map{ height: 360px; width: 600px; } </style> </head> <body> <div id = 'map'></div> <script type="text/javascript"
src="./leafletsrc.js"></script> <script type="text/javascript" src="./heatmap.js"></script> <script type="text/javascript" src="./heatmap-leaflet.js"></script> <script type="text/javascript" src="./test.js"></script> </body> </html>

css檔案是leaflet提供的CSS預設樣式,包括裡邊氣泡的樣式等,如果需要修改,可以單獨寫CSS樣式進行覆蓋。

leaflet.css和leaflet.js可以用:

<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" />
<script src="https://unpkg.com/[email protected]/dist/leaflet.js"></script>

接下來就是具體的載入離線瓦片的方式,離線地圖是使用太樂地圖下載器下載的地圖瓦片,由於需要的地圖是比較簡潔的地圖,所以就選擇了openstreetmap的地圖,這裡使用谷歌地圖的規則進行下載(不同的地圖規則需要轉換,谷歌地圖規則最接近原始規則,所以下載的地圖一般都用谷歌地圖規則進行下載)。

var url = "http://localhost:8080/mapTest/offlineMapTiles/{z}/{x}/{y}";
//z表示地圖的縮放級別
//x表示地圖瓦片的橫向座標
//y表示地圖瓦片的縱向座標
//其中的路徑就是儲存地圖瓦片的的路徑
var tilemap = new L.TileLayer(url);
//載入地圖的底層物件
var mapcenter = new L.latLng(21.5,67.89);
//地圖的中心點的物件

建立一個地圖物件Map,將地圖瓦片等物件新增進這個物件:

map = new L.Map("map", {    //"map"為需要插入地圖的div的id
            CRS:'Simple',   //離線地圖載入規則
            center:mapcenter,   //地圖中心點
            zoom: 12,           //預設展示的縮放級別
            layers: [tilemap],  //插入的地圖的圖層
            minZoom: 0,         //最小縮放級別
            maxZoom: 15,        //最大縮放級別
            opacity: 0.1,       //圖層的不透明度
            maxBounds: [        //地圖的東西南北最大邊界,
                                //在縮放級別和是的情況下,地圖只會展示在當前的區域內
                //south west
                [34.6, 113.4],
                //north east
                [34.9, 113.98]
            ]
        });

離線地圖瓦片載入成功後,就需要建立熱力圖圖層:

function setHeatMap(heatmapData){
        /**
         * 建立熱力圖的方法
         * 傳一個引數,從後臺獲取到的熱力圖的點的資料
         * 資料結構
             var heatmapData={
                max: 1000,
                data: [
                    {lngField:67.89,latitude:21.5,count:100,radius:0.002},
                    {lngField:67.869,latitude:21.551,count:19,radius:0.002}
                ]
            };
         */
        if(heatmapLayer != null){、
            /*這個方法是在每一次重新整理熱力圖之前把前一次建立的熱力圖物件清除,
             *如果不對這個物件進行重置,會在每一重新整理的時候給這個物件新增資料上去,
             *會導致這個物件記憶體增長
             */
            map.removeLayer(heatmapLayer);
        }
        var config = {  //熱力圖的配置項
            radius: 'radius',       //設定每一個熱力點的半徑
            maxOpacity: 0.9,        //設定最大的不透明度
            // minOpacity: 0.3,     //設定最小的不透明度
            scaleRadius: true,      //設定熱力點是否平滑過渡
            blur: 0.95,             //係數越高,漸變越平滑,預設是0.85,
                                    //濾鏡係數將應用於所有熱點資料。
            useLocalExtrema: true,  //使用區域性極值
            latField: 'latitude',   //維度
            lngField: 'longitude',  //經度
            valueField: 'count',    //熱力點的值
            gradient: {   "0.99": "rgba(255,0,0,1)",
                    "0.9": "rgba(255,255,0,1)",
                    "0.8": "rgba(0,255,0,1)",
                    "0.5": "rgba(0,255,255,1)",
                    "0": "rgba(0,0,255,1)"
                },
            //過渡,顏色過渡和過渡比例,範例:
            /*
                {   "0.99": "rgba(255,0,0,1)",
                    "0.9": "rgba(255,255,0,1)",
                    "0.8": "rgba(0,255,0,1)",
                    "0.5": "rgba(0,255,255,1)",
                    "0": "rgba(0,0,255,1)"
                }
            */
            // backgroundColor: 'rgba(27,34,44,0.5)'    //熱力圖Canvas背景
        };
        heatmapLayer = null;                        //重置熱力圖物件為null
        heatmapLayer = new HeatmapOverlay(config);  //重新建立熱力圖物件
        $(".leaflet-overlay-pane").empty();         //清空熱力圖的空間
        map.addLayer(heatmapLayer);                 //將熱力圖圖層新增在地圖map物件上
        heatmapLayer.setData(heatmapData);          //設定熱力圖的的資料
    }

通過以上的方法,基本可以實現離線載入瓦片地圖,然後新增熱力圖圖層的功能。

相關推薦

Leaflet+heatmap實現離線地圖載入熱力應用

本人部落格主頁:http://www.cnblogs.com/webbest/ 2017年春節已經過完,新一年的奮鬥也剛剛開始。今年要經歷的挑戰也是大大的。。。不扯了。 年底前軟體專案相對較多,恰巧在年底進入一家新公司,專案自然一個接一個,沒有絲毫停歇。年底之前的電信運營商

leaflet+esri-leaflet+heatmap實現熱力圖

trick 項目 .cn org ati 數據 pla eight demo 1.環境準備 1)下載leaflet.js插件, 官網傳送:http://leafletjs.com/ 2)下載esri-leaflet.js插件, 官網傳送:http://esri.gi

XrecyclerView實現上拉載入下拉重新整理+多條目(MVP獲取資料)

依賴 implementation('com.jcodecraeer:xrecyclerview:1.5.9') { exclude group: 'com.android.support' } implementation 'com.android.support:recycl

Python資料相關係數矩陣熱力輕鬆實現

對其中的引數進行解釋 plt.subplots(figsize=(9, 9))設定畫面大小,會使得整個畫面等比例放大的 sns.heapmap()這個當然是用來生成熱力圖的啦 df是DataFram

vue 使用mint-ui實現上拉載入下拉重新整理

效果 詳細程式碼,裡面有詳細標註 <template> <div class="tmpl"> <nav-bar title="商品列表">

Leaflet+Echarts實現GIS地圖動態播放以及使用Echarts對點位資料詳情進行展示

import 'leaflet/dist/leaflet.css' import L from 'leaflet' import Monitor from './../../../data/request/hbmis/monitor/data' import moment f

javascript實現圖片懶載入載入

所謂懶載入就是通過某些特定的條件,然後再給圖片的src賦值,常見的懶載入方式有點選載入和滾動載入。 如果是點選載入,那麼一般是通過點選事件。例如: 然後新增點選事件: 效果如下: 如

vue專案中vue-scroller實現上拉載入下拉重新整理

vue目前是眾所周知的流行框架大家都知道的,vue全家桶的成員是:vue-cli,vuex,vue-router,vue-axios(vue2.0)。然後它的第三方外掛也有很多,比如:vue-scroller,vue-lazyload,vue-awesome-swiper等等的。之前我已經給大家介紹過vue-

Vue結合webpack實現路由懶載入分類打包

Vue專案中路由設定一般會引入元件,然後使用。但是這會造成專案一次載入很多元件,影響響應時間。解決這個問題就可以使用路由的懶載入。有三種方法可以實現:export default new Router({ routes: [ { path: '/',

Leaflet 加載天地圖服務Arcgis server服務

ret er圖 下載 mea 分享 targe default control serve 本文主要將如何通過leaflet加載天地圖服務,並通過leaflet加載Arcgis Server服務。 由於項目需要,原本是想通過加載切片服務得方式加載天地圖作為底圖,天地圖圖

調用高德地圖API(熱力)詳解

ocs use map asc type contain maps key script 具體腳本語言如下: <!doctype html> <html> <head> <meta charset="utf-8">

heatmap.js 一個用canvas畫熱力的利器

最近做的一個東西,需要以熱力圖的形式去展示資料。於是就想找一找熱力圖的演算法。找到了很多生成熱力圖的工具,它們的演算法幾乎是一致的,都是首先用alpha透明度方式畫發散的圓在頁面上,然後利用一個調色盤,把對應的透明度改成相應的顏色即可。 一個很不錯的中文的演算法介紹在這

matlab 彩色熱力疊加顯示

im = imread('color.jpg'); %彩色圖 im = double(im); gray = imread('gray.jpg'); % 熱力圖 gray = double(gray); cmap = colormap(jet(256)); rgb =

利用ServiceWorker實現頁面的快速載入離線訪問

Service workers 本質上充當Web應用程式與瀏覽器之間的代理伺服器,也可以在網路可用時作為瀏覽器和網路間的代理。它們旨在(除其他之外)使得能夠建立有效的離線體驗,攔截網路請求並基於網路是否可用以及更新的資源是否駐留在伺服器上來採取適當的動作。他們還允許訪問推送通知和後臺同步API。(引用自

百度離線地圖api2.0 載入本地瓦片 實現點線面標註 ajax提交(完全內網)

簡介:自己修改的離線地圖API 2.0版本, 支援百度電子、衛星地圖任意切換(把兩者的瓦片下載下來放在對應的資料夾中即可),支援點線面標註、測距等,marker可以自定義更改圖示,infowindow可以上傳圖片、視訊(MP4格式)、超連結等。要是不用於實測定位等下載goo

基於百度地圖SDKElasticsearch GEO查詢的地理圍欄分析系統(3)-前端實現

方便 復制 類型 復制代碼 自動跳轉 rar 窗口 stack delete 轉載自:http://www.cnblogs.com/Auyuer/p/8086975.html MoonLight可視化訂單需求區域分析系統實現功能:   在現實生活中,計算機和互聯網迅速發展,

MBTiles 離線地圖的生成使用

1、mbtiles地圖簡介 mbtiles 為離線地圖,形式為瓦片形式,用sqlite資料庫儲存,資料庫內容符合mbtiles儲存規範。 地圖儲存有精確的經緯度資訊。 2、MBTiles 地圖使用。 所有生成的mbtiles檔案都可以用Map Tiler 軟體開啟。 lea

微信小程式下拉載入上拉重新整理兩種實現方法

方法一:onPullDownRefresh和onReachBottom方法實現小程式下拉載入和上拉重新整理 首先要在json檔案裡設定window屬性             屬性  

載入載入的基本原理實現方法

懶載入的原因: 對於圖片過多的場景,為了提高頁面的載入速度,降低伺服器的負載,增強使用者體驗,我們對還沒出現在視野的圖片先不載入,當元素出現在我們視野中的時候再載入。 懶載入的原理: 我們先將img標籤中的src連結設定為一樣的圖片(空白圖片),將真正的圖片連結放在自定義屬性中,如(da

require.js載入highcharts.js/exporting.js實現圖表的繪製圖片檔案功能的匯出

第一步:在require.js的做資料檔案中(data-main)對應的檔案中進行require.config配置,程式碼如下: require.config({ paths: { 'highcharts': '../libs/highcharts/Highcha