sns.distplot图例标注怎么添加_百度地图API图标、文本、图例与连线
百度地圖開放平臺功能強大,使用簡單,為地圖的自定義提供了非常方便的途徑!
本文以繪制一張全國機器輻射圖為例記錄其基本使用方法,效果如下圖:
圖中包括了帶圖標和文本的標注,連線以及圖例。
1.關于坐標
說到地圖,不得不說坐標。
我以為,GPS獲取經緯度之后,把經緯度丟給地圖就可以了。但那真的是自以為。
1.1 坐標系
來看看實際情況,以下是百度開發文檔里的描述:
目前國內主要有以下三種坐標系:
WGS84:為一種大地坐標系,也是目前廣泛使用的GPS全球衛星定位系統使用的坐標系。
GCJ02:又稱火星坐標系,是由中國國家測繪局制訂的地理信息系統的坐標系統。由WGS84坐標系經加密后的坐標系。
BD09:為百度坐標系,在GCJ02坐標系基礎上再次加密。其中bd09ll表示百度經緯度坐標,bd09mc表示百度墨卡托米制坐標。
非中國地區地圖,服務坐標統一使用WGS84坐標。
百度對外接口的坐標系為BD09坐標系,并不是GPS采集的真實經緯度,在使用百度地圖JavaScript API服務前,需先將非百度坐標通過坐標轉換接口轉換成百度坐標。
通過 GPS 獲取的為 WGS84,在百度地圖上使用前要轉換為 BD09,百度提供了相應的 api 進行坐標轉換,文檔地址:http://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition
http://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924&from=1&to=5&ak=s1eeiQEfDF0WZfdfvLgHbG2Ru49UNCrn返回結果:
{
status : 0,
result :
[
{
x : 114.23074871003,
y : 29.579084787993
}
]
}
具體還可參考下這篇文章:https://www.cnblogs.com/yesicoo/p/4668642.html
1.2 坐標拾取器
如果坐標是靜態的,或測試用,可以直接通過百度地圖提供的“坐標拾取器”工具來獲取經緯度。
工具地址:http://api.map.baidu.com/lbsapi/getpoint/index.html
點哪就獲取哪的坐標,此坐標不用再轉換,復制過來即可以使用。
2. 開始應用
2.1 準備圖標
有好些站點可以下載圖標,如:https://easyicon.net,可以獲取一些圖標文件。至于商用的要求則要看看站點說明。
如下圖,這里準備總部與機器的圖標下載保存為 head.png、machine.png。
2.2 開啟百度地圖
地圖API的使用需要先申請一個 ak,為了體驗方便,這里已經申請了一個可以直接使用的 key,在頁面中可直接加入以下引用。
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=s1eeiQEfDF0WZfdfvLgHbG2Ru49UNCrn">script>使用以下語句,定義全局的地圖對象
// 百度地圖 API 功能對象var map = null;
if (BMap) {
map = new BMap.Map("allmap"); // id=allmap 的容器內顯示
map.enableScrollWheelZoom();
}
2.2 標注:圖標與文本
標注使用 BMap.Marker,可以為其指定 Icon與Label。為了方便后續使用,本例定義以下函數,指定位置、圖標(本例中可用已經下載的圖標 head,machine)以及文本即可。
/*** 指定經緯度,圖標,標注文本
* 在地圖上添加標注
* longitude 經度
* latitude 緯度
* icon 圖標
* text 標注文本
**/
function addMarker(longitude, latitude, icon, text) {
if (!map) return;
var point = new BMap.Point(longitude, latitude);
var myIcon = new BMap.Icon(icon + ".png", new BMap.Size(32, 32));
// 指定位置及標注的圖標
var marker = new BMap.Marker(point, { icon: myIcon }); // 創建標注
if(text){
var label = new BMap.Label(text, { offset: new BMap.Size(32, -16) });
marker.setLabel(label);
}
// 添加到地圖上
map.addOverlay(marker);
}
2.3 連線
連線實際使用的是繪制多邊形的功能,只是當只指定了兩個點時,就是一根線。同樣,這里定義一個函數以方便直接調用。
/*** 指定起止經緯度,繪制連接線
*
* longitudeFrom 經度
* latitudeFrom 緯度
* longitudeTo 經度
* latitudeTo 緯度
**/
function addLine(longitudeFrom, latitudeFrom, longitudeTo, latitudeTo) {
if (!map) return;
var pointFrom = new BMap.Point(longitudeFrom, latitudeFrom);
var pointTo = new BMap.Point(longitudeTo, latitudeTo);
// 可以指定多點連接,此處只考慮兩點
var line = new BMap.Polyline([pointFrom, pointTo], { strokeWeight:1, strokeOpacity:0.5, strokeColor:"red" });
// 添加到地圖上
map.addOverlay(line);
}
2.4 圖例
圖例需要以地圖定義的控件方式來添加,在控件的 initialize 事件中完成 DOM 元素的生成即可,為了體現過程本身,以下函數把 DOM 的html文本作為參數,由外部靈活定義。
/*** 添加圖例
* 實質就是在地圖上添加自己的頁面元素
*
* html 網頁元素
**/
function addLegend(html){
var LegendControl = function () {
this.defaultAnchor = BMAP_ANCHOR_TOP_LEFT;
this.defaultOffset = new BMap.Size(10, 10);
}
LegendControl.prototype = new BMap.Control();
LegendControl.prototype.initialize = function (map) {
var le = $(html)[0];
map.getContainer().appendChild(le);
return le;
};
var legendCtrl = new LegendControl();
map.addControl(legendCtrl);
}
2.5 綜合
有了以上函數,綜合起來就流程清晰了。以下坐標,均通過坐標拾取器獲取。
// 機器類:經度,緯度,名稱function Machine(longitude, latitude, name){
this.longitude = longitude;
this.latitude = latitude;
this.name = name;
}
// 確定地圖的中心位置與縮放級別
var center = new BMap.Point(110.423997,31.40979);
map.centerAndZoom(center, 6); // 級別 6,跨省視圖
// 添加圖例,自由寫 html
addLegend("總部: 設備:");
// 總部位置
var head = { longitude : 112.918702343957, latitude : 28.30070516 };
addMarker(head.longitude, head.latitude, 'head', '總部');
// 所有機器位置
var machineList = [
new Machine(114.876143,38.113315,'石家莊'),
new Machine(112.521289,37.822014,'太原'),
new Machine(108.989008,34.328175,'西安'),
new Machine(117.230997,31.881961,'合肥'),
new Machine(103.984944,30.553819,'成都'),
new Machine(108.400295,22.862517,'南寧'),
new Machine(113.257181,23.169067,'廣州'),
new Machine(120.174565,30.298715,'杭州'),
new Machine(102.881106,24.959705,'昆明')
];
// 添加所有機器并連線
for(var i=0; i addMarker(machineList[i].longitude, machineList[i].latitude, 'machine', machineList[i].name);
addLine(head.longitude, head.latitude, machineList[i].longitude, machineList[i].latitude);
}
3. 結語
本文完整代碼可從此處下載:
https://github.com/triplestudio/helloworld/blob/master/baidu_map_demo.html
在此基礎上,可以根據需要進一步擴展功能,具體參考百度地圖開放平臺開發文檔:
http://lbsyun.baidu.com/
關注“時間維度”,和時間作朋友!
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的sns.distplot图例标注怎么添加_百度地图API图标、文本、图例与连线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python numpy官网_Pytho
- 下一篇: termux pythonlxml安装_