4 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
我想我會(huì)把它放在這里,因?yàn)閷?duì)于那些開(kāi)始使用谷歌地圖API的人來(lái)說(shuō)它似乎是一個(gè)受歡迎的著陸點(diǎn)。在客戶端呈現(xiàn)的多個(gè)標(biāo)記可能是許多地圖應(yīng)用程序性能下降的結(jié)果。很難進(jìn)行基準(zhǔn)測(cè)試,修復(fù)并且在某些情況下甚至確定存在問(wèn)題(由于瀏覽器實(shí)現(xiàn)差異,客戶端可用的硬件,移動(dòng)設(shè)備,列表繼續(xù))。
開(kāi)始解決此問(wèn)題的最簡(jiǎn)單方法是使用標(biāo)記群集解決方案。基本思想是將地理上相似的位置分組到顯示點(diǎn)數(shù)的組中。當(dāng)用戶放大地圖時(shí),這些組會(huì)展開(kāi)以顯示下方的各個(gè)標(biāo)記。
也許最簡(jiǎn)單的實(shí)現(xiàn)是markerclusterer庫(kù)?;緦?shí)現(xiàn)如下(在庫(kù)導(dǎo)入之后):
<script type="text/javascript"> function initialize() { var center = new google.maps.LatLng(37.4419, -122.1419); var map = new google.maps.Map(document.getElementById('map'), { zoom: 3, center: center, mapTypeId: google.maps.MapTypeId.ROADMAP }); var markers = []; for (var i = 0; i < 100; i++) { var location = yourData.location[i]; var latLng = new google.maps.LatLng(location.latitude, location.longitude); var marker = new google.maps.Marker({ position: latLng }); markers.push(marker); } var markerCluster = new MarkerClusterer(map, markers); } google.maps.event.addDomListener(window, 'load', initialize);</script>
標(biāo)記而不是直接添加到地圖中的標(biāo)記將添加到數(shù)組中。然后將此數(shù)組傳遞給庫(kù),該庫(kù)為您處理復(fù)雜計(jì)算并附加到地圖。
這些實(shí)現(xiàn)不僅大大提高了客戶端的性能,而且在許多情況下,它們還可以實(shí)現(xiàn)更簡(jiǎn)單,更簡(jiǎn)潔的UI,并且更容易在更大規(guī)模上消化數(shù)據(jù)。
其他實(shí)施可從Google獲得。
希望這有助于一些更新的映射細(xì)微差別。
添加回答
舉報(bào)