三级全黄做爰电影_夫妻之间那些事_啊啊啊啊好爽视频_国产精品xxxx喷水欧美_色一情一乱一伦麻豆_国产精品美乳一区二区免费_亚洲综合av在线在线播放_人与禽伦性了_黄色软件色多多_av在线免费观看网址

解決地圖點聚合功能加載效率問題,上萬條記錄1秒即可加載
發(fā)表人:金馬 | 2024-01-02

首先,我們來看看地圖的點聚合功能展示,如下圖:

01.png

地圖點聚合功能使用場景非常多,如用戶打卡,訪客IP分布統(tǒng)計等。

本次介紹的功能是網(wǎng)站訪客的地理位置分布統(tǒng)計展示。

首先,我們要收集網(wǎng)站訪客的IP地址信息,但是僅僅知道IP地址是無法做地圖點聚合統(tǒng)計展示的。

我們需要把IP地址轉(zhuǎn)換地圖的經(jīng)緯度坐標信息,即lng和lat值。

把IP地址轉(zhuǎn)換成物理位置以及經(jīng)緯度坐標等信息,這個需要轉(zhuǎn)換,這個轉(zhuǎn)換需要一個非常龐大的數(shù)據(jù)庫支撐,如IPV4的數(shù)據(jù)大概是43億左右。

一般做轉(zhuǎn)換有兩種方法,一是使用開源的離線庫(現(xiàn)在都商業(yè)化運營了,免費的基本很少更新了),二是使用付費API轉(zhuǎn)換。

本文展示的數(shù)據(jù)是通過金馬科技的IPV4 API JSON接口轉(zhuǎn)換的。

對于我們自己的數(shù)據(jù)表結(jié)構(gòu)至少需如下:

CREATE TABLE IF NOT EXISTS `ip_info` (
  `id` int(8) NOT NULL,
  `ip` varchar(16) DEFAULT NULL COMMENT 'ip地址',
  `browser` varchar(128) DEFAULT NULL COMMENT '瀏覽器',
  `addinfo` varchar(128) DEFAULT NULL COMMENT '物理位置',
  `isp` varchar(128) DEFAULT NULL COMMENT '網(wǎng)絡(luò)服務(wù)商',
  `lng` varchar(16) DEFAULT NULL,
  `lat` varchar(16) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Indexes for dumped tables
--

--
-- Indexes for table `ip_info`
--
ALTER TABLE `ip_info`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `ip_info`
--
ALTER TABLE `ip_info`
  MODIFY `id` int(8) NOT NULL AUTO_INCREMENT;

這個ip_info數(shù)據(jù)表是最基本的訪客信息,大家可以根據(jù)實際情況做擴展。


IPV4 API JSON接口轉(zhuǎn)換請參考《一招解決開發(fā)難題:IP地址轉(zhuǎn)換物理地址與經(jīng)緯度僅需幾行代碼》的文章,這里就不再表述了。

有了數(shù)據(jù)之后,接下來就是地圖展示了。

一般1000個點以下的數(shù)據(jù)不需要使用聚合功能,客戶端展示也是比較流暢,但如果上萬,或上十萬等數(shù)據(jù)量時,就需要使用點聚合的功能了。

大家先看展示:

http://list.wzjm.cn/ipv4/v1/index

這個點聚合的功能就是把重復(fù)點用數(shù)字加樣式表示,這樣就完美避免了數(shù)據(jù)加載慢的問題。

貼上關(guān)鍵性代碼:

<script type="text/javascript">
// 地圖API功能
var map = new BMap.Map("allmap");
 map.addControl(new BMap.NavigationControl());
 map.centerAndZoom(new BMap.Point(116.404, 39.915), 5);
 //map.enableScrollWheelZoom();
 
 var markers = [];
 var pt = null;
 var i = 0;
 var b=0;
var markerClusterer;

 function fn_test(message) {
             if(markers.length>0)
             {
            markerClusterer.removeMarkers(markers);
            markers=[];
            }
           var m=eval(message);
           for( i=0;i<m.length;i++)
           {
                 pt = new BMap.Point(m[i].GpsData.Longtitude,m[i].GpsData.Latitude);
                 markers.push(new BMap.Marker(pt));
                
           }

 }
 function fn_test2() {
           markerClusterer = new BMapLib.MarkerClusterer(map, {markers:markers});
 }


	var MAX = 10000;

	for (; i < MAX; i++) {
	   pt = new BMap.Point(Math.random() * 40 + 85, Math.random() * 30 + 21);
	   
	   markers.push(new BMap.Marker(pt));
	}
	
	//最簡單的用法,生成一個marker數(shù)組,然后調(diào)用markerClusterer類即可。
	var markerClusterer = new BMapLib.MarkerClusterer(map, {markers:markers});
</script>

以上隨機生成一萬個點,采用點聚合功能僅需1秒就加載好地圖了。

然后再加了點擊事,如下圖:

02.png


效率是非常快的,大家如需要全部代碼可直接參閱展示地址的HTML與JS源碼,都是開放的,可以直接下載使用。

好了,本篇文章就寫到這了。

金馬科技公眾號咨詢.png


我來說兩句(0)
:zui: :wink: :twisted: :roll: :oops: :mrgreen: :love: :lol: :jidong: :idea: :han:
發(fā)表評論(Ctrl+Enter)
—— 金馬科技公眾號 ——
十二年 行業(yè)積累

砥礪前行路上,有您關(guān)注,相聚相研共話成長!

如有意向,請與我們聯(lián)系

辦公電話:0774-3838278 / QQ:154727262 / 微信:wztmma