主頁 >  其他 > 騰訊位置服務開發應用-使用教程,案例分享,知識總結

騰訊位置服務開發應用-使用教程,案例分享,知識總結

2020-12-25 10:28:01 其他

文章目錄

  • 前言
  • 一、騰訊位置服務是什么?
  • 二、使用步驟
    • 1.uniapp開發map說明
      • 介紹markers屬性-型別為陣列Array
        • marker 上的氣泡 callout(Object型別)
        • marker 上的標簽 label(Object型別)
        • polyline
        • polygon
        • circles
        • controls
        • position
    • 2.uniapp使用map組件
      • 基本使用方法
      • 地址搜索
      • 獲取附近的動態,點聚合
      • 地圖上標注附近的人
      • 定位附近門店
      • 滑動軌跡
      • vue接入騰訊地圖介面
    • 3.vue接入騰訊地圖
    • 4.個性化地圖樣式
    • 5.騰訊位置入門步驟
  • 三.微信小程式JavaScript SDK
  • 總結


把你的前端拿捏得死死的,每天學習得爽爽的,達達前端程式員,關注這個不一樣的程式員, 感謝不負每一份熱愛前端的程式員,不論前端技能有多奇葩,

前言

作為一名在職崗位為【前端開發工程師】的程式員,我開發的應用程式經常需要獲取用戶位置資訊,需要再某些場合下使用展示地圖以及地圖商的某些地點,需要獲取行政區劃串列(省市區)以及地址詳情資訊,需要在地圖上規劃一條(動態)路線,軌跡回放,小車移動,需要創建資訊視窗,用于地點的摘要性資訊的展示,

公司內做的是共享專案, 場景是這樣的,一種常見共享充電寶(功能差不多和流行的共享單車一樣),在做小程式首頁時,需要做到的是掃碼充電,聯系客服(問題反饋),獲取地理位置,開篇即是一副地理位置,在你附近獲取到區域內店鋪資訊,點擊該店的logo標志可以獲取該店的地理位置,營業時間,店名,距離,是否當前該店里是否有可借的充電寶等資訊,

共享充電電動車🚗,首頁也是一副地理位置地圖,可以獲取你附近最近的共享電動車,獲取車的地址,狀態等資訊,顯示該車的剩余電量,使用記錄,租借訂單,獲取行程軌跡,某時間段內的里程,動態顯示軌跡等,

涉及到的共享其實內容很多(如除了電動車,充電寶,還可租借設備等),但大都功能幾乎相同,需要交押金,租借費用,信用免押金等,開發過app,H5,web網站,小程式專案都與地圖相關的位置服務息息相關,讓我說說與位置服務有關的故事,

下面主要還是講解其中的關于地圖功能等功能,使用的也是騰訊位置開發服務,會一步一步說明,做一些案例展示,代碼說明,使用教程,(注意這里我回去看開發教程,盡量把每個功能都熟悉地說明一下使用方法


一、騰訊位置服務是什么?

騰訊位置服務無疑是獲取位置服務等資訊內容,該產品亮點:

  1. 定位:為合作伙伴和廣大開發者提供完善的位置解決方案,已為社交、出行、游戲、商業、O2O、物流等領域提供專業精準的定位服務
  2. 地圖:騰訊位置服務在多平臺為開發者提供了豐富的地圖展現形式,幫助從屬于不同領域的開發人員輕松完成構建地圖并在其基礎上打造專屬內容的作業,同時配合海量資料、個性化定制、可視化等能力滿足各個行業場景下對地圖的需求
  3. 地點搜索:基于海量鮮活地點(POI)資料,提供周邊搜索,城市范圍搜索,關鍵詞輸入提示、分類篩選等多種搜索能力,面向社交、物流、出行等行業打造專屬搜索策略,體驗更勝一籌
  4. 路線規劃:根據出發地、目的地以及路線策略設定,結合精準的實時交通路況提供駕車、步行、騎行、公交路線規劃能力,助力開發者為用戶提供貼心、人性化的出行體驗
  5. 微信小程式解決方案:騰訊位置服務全面擁抱小程式生態,從服務API、基礎地圖組件、插件、行業方案等多個層面服務不同場景需求的小程式開發者,助力小程式插上地圖的“翅膀”!
  6. 個性化地圖:個性化樣式:千行千面,助力開發者根據自身產品的使用場景、界面色調, 選取或者創建風格匹配的地圖樣式,體驗更勝一籌;個性化圖層:真實酷炫,助力開發者將精美繪圖生成地圖瓦片并置于地圖之上,讓旅游景點、大學高校等區域的展示效果與眾不同

二、使用步驟

1.uniapp開發map說明

使用uniapp是因為它是一個使用vue.js開發所有前端應用的框架,開發者撰寫一套代碼,可以發布到ios,android,web以及各種小程式,快應用等多個平臺,

使用map地圖組件開發,地圖組件用于展示地圖(使用的時騰訊地圖),說一下它的屬性有:

longitude(型別為Number,沒有默認值,表示中心經度)
latitude(型別為Number,沒有默認值,表示中心緯度)
scale(型別為Number,默認值為16,縮放級別取值范圍為5-18)
markers(型別為Array陣列,型別為陣列即表示地圖上可以有多個,沒有默認值,表示標記點)
polyline(型別為Array陣列,沒有默認值,表示路線,陣列上的所有點連成線)
circles(型別Array陣列,表示圓)
controls(型別Array陣列,表示控制元件)
include-points(型別Array陣列,表示縮放視野已包含所有給定的坐標點)
enable-3D(型別為Boolean,默認值為false,表示是否顯示3D摟塊)
show-compass(型別為Boolean,默認值為false,表示為是否顯示指南針)
enable-overlooking(型別為Boolean,默認值為false,表示為是否開啟俯視)
enable-satellite(型別為Boolean,默認值為false,表示為是否開啟衛星圖)
enable-traffic(型別為Boolean,默認值為false,表示為是否開啟實時路況)
show-location(型別為Boolean,表示顯示帶有方向的當前定位點)
polygons(型別Array,表示為多邊形)

點擊屬性

  1. @markertap-表示點擊標記點時觸發,e.detail={markerId}
  2. @labeltap-表示點擊label時觸發,e.detail = {markerId}
  3. @callouttap-表示點擊標記點對應的氣泡時觸發,e.detail = {markerId}
  4. @controltap-表示點擊控制元件時觸發,e.detail = {controlId}
  5. @regionchange-表示視野發生變化時觸發
  6. @tap-表示點擊地圖時觸發; App-nuve、微信小程式2.9支持回傳經緯度
  7. @updated-表示在地圖渲染更新完成時觸發

我們在寫map組件時,組件的寬/高推薦寫直接量,比如說是 750rpx,不要設定百分比值,在uni-app中只支持gcj02坐標,

介紹markers屬性-型別為陣列Array

由之前描述可知,markers屬性型別為Array,表示標記點用于在地圖上顯示標記的位置,這個陣列屬性,它里面有它的物件配置屬性,分別是:

  1. id,表示 標記點id,型別為Number,必填項,marker點擊事件回呼會回傳此id,建議為每個marker設定上Number型別id,保證更新marker時有更好的性能,
  2. latitude,緯度,型別Number,必填項,浮點數,范圍 -90 ~ 90
  3. longitude,經度,型別Number,必填項,浮點數,范圍 -180 ~ 180
  4. title,標注點名,型別String,不是必填,點擊時顯示,callout存在時將被忽略
  5. iconPath,顯示的圖示,型別String,必填項,專案目錄下的圖片路徑
  6. rotate,旋轉角度,型別Number,不是必填,順時針旋轉的角度,范圍 0 ~ 360,默認為 0
  7. alpha,標注的透明度,型別Number,不是必填,默認1,無透明,范圍 0 ~ 1
  8. width,標注圖示寬度,型別Number,不是必填,默認為圖片實際寬度
  9. height,標注圖示高度,型別Number,不是必填,默認為圖片實際高度
  10. callout,自定義標記點上方的氣泡視窗,型別Object,不是必填 - 可識別換行符
  11. label,為標記點旁邊增加標簽,型別Object,不是必填 - 可識別換行符
  12. anchor,經緯度在標注圖示的錨點,默認底邊中點,不是必填,{x, y},x表示橫向(0-1),y表示豎向(0-1),{x: .5, y: 1} 表示底邊中點

marker 上的氣泡 callout(Object型別)

marker陣列 上屬性 callout 物件使用屬性:

  1. content,文本,String
  2. color,文本顏色,String
  3. fontSize,文字大小,Number
  4. borderRadiuscallout邊框圓角,Number
  5. bgColor,背景色,String
  6. padding,文本邊緣留白,Number
  7. display'BYCLICK':點擊顯示; 'ALWAYS':常顯String
  8. textAlign,文本對齊方式,有效值: left, right, centerString

marker 上的標簽 label(Object型別)

  1. content,文本,String
  2. color,文本顏色,String
  3. fontSize,文字大小,Number
  4. x,label的坐標,原點是 marker 對應的經緯度,Number
  5. y,label的坐標,原點是 marker 對應的經緯度,Number
  6. borderWidth,邊框寬度,Number
  7. borderColor,邊框顏色,String
  8. borderRadius,邊框圓角,Number
  9. bgColor,背景色,String
  10. padding,文本邊緣留白,Number
  11. textAlign,文本對齊方式,有效值: left, right, center,String

polyline

polyline表示指定一系列坐標點,從陣列第一項連線至最后一項

  1. points,經緯度陣列,型別為Array,必填,如:[{latitude: 0, longitude: 0}]
  2. color,線的顏色,型別為String,不必填,如:#0000AA
  3. width,線的寬度,型別為Number,不必填
  4. dottedLine,是否虛線,型別為Boolean,不必填,默認值false
  5. arrowLine,帶箭頭的線,型別為Boolean,不必填,默認值為false
  6. arrowIconPath,更換箭頭圖示,型別為String,不必填,在arrowLinetrue時,默認帶箭頭的線時生效
  7. borderColor,線的邊框顏色,型別為String,不必填
  8. borderWidth,線的厚度,型別為Number,不必填

polygon

polygon指定一系列坐標點,根據points坐標資料生成閉合多邊形

  1. points,經緯度陣列,array,必填,如:[{latitude: 0, longitude: 0}]
  2. strokeWidth,描邊的寬度,Number,否
  3. strokeColor 描邊的顏色,String,否
  4. fillColor,填充顏色,String,否
  5. zIndex,設定多邊形 Z 軸數值,Number,否

circles

circles在地圖上顯示圓

  1. latitude,緯度,Number,必填,浮點數,范圍 -90 ~ 90
  2. longitude,經度,Number,必填,浮點數,范圍-180 ~ 180
  3. color,描邊的顏色,String,不必填,如:#0000AA
  4. fillColor,填充顏色,String,不必填,如:#0000AA
  5. radius,半徑,Number,必填
  6. strokeWidth,描邊的寬度,Number,不必填

controls

controls在地圖上顯示控制元件,控制元件不隨著地圖移動

  1. id,控制元件idNumber,不必填,在控制元件點擊事件回呼會回傳此id
  2. position,控制元件在地圖的位置,Object,必填,控制元件相對地圖位置
  3. iconPath,顯示的圖示,String,必填,專案目錄下的圖片路徑,支持相對路徑寫法,以'/'開頭則表示相對專案根目錄;也支持臨時路徑
  4. clickable,是否可點擊,Boolean,不必填,默認不可點擊

position

  1. left,距離地圖的左邊界多遠,Number,不必填,默認為0
  2. top,距離地圖的上邊界多遠,Number,不必填,默認為0
  3. width,控制元件寬度,Number,不必填,默認為圖片寬度
  4. height,控制元件高度,Number,不必填,默認為圖片高度

注意在uniapp中地圖組件的經緯度必填,如果不填,經緯度則默認值是北京的經緯度,

2.uniapp使用map組件

基本使用方法

使用uniapp開發中的map組件,基本使用方法:

代碼如下(示例):

<map :scale="scale" style="width: 100%; height: 100%;"
enable-3D="false" show-compass="false" enable-overlooking="false"
:enable-satellite="false" :enable-traffic="false" show-location="false"
:latitude="latitude" :longitude="longitude" :markers="covers">
</map>

markers屬性的使用,代碼如下(示例):

markers: [{
	id: 1, // Number
	title: '1', // String-標注點名
	rotate: 180, // Number - 順時針旋轉的角度,范圍 0 ~ 360,默認為 0
	alpha: 0.5, // 默認1,無透明,范圍 0 ~ 1
	latitude: 39.899,
	longitude: 116.39742,
	width: 30,
	height: 30,
	// callout: {
	// 	display: "BYCLICK",
	// 	padding: 10,
	// 	borderRadius: 5,
	// 	content: '',
	// },
	// anchor: {},
	iconPath: '../../../static/location.png', // 顯示的圖示
}, {
	id: 2,
	title: '2', // String
	latitude: 39.90,
	longitude: 116.39,
	callout: {
		color: '#007AFF', // 文本顏色
		bgColor: '#563BFF', // 背景色
		display: "ALWAYS", // 'BYCLICK':點擊顯示; 'ALWAYS':常顯
		fontSize: 15,
		textAlign: 'left', // 文本對齊方式,有效值: left, right, center
		padding: 10, // 文本邊緣留白
		borderRadius: 5,
		content: '騰訊地圖',
	},
	label: {
		content: 'Jeskson',
		color: '#000000',
		fontSize: 12,
		borderWidth: 12,
		borderColor: '#007AFF',
		borderRadius: 5,
		padding: 5,
		textAlign: 'center',
		bgColor: '#563BFF',
	},
	iconPath: '../../../static/location.png'
}]

預覽效果如下:

在這里插入圖片描述

controls:[{
    // 在地圖上顯示控制元件,控制元件不隨著地圖移動
    id: 1, // 控制元件id
	iconPath:'../../static/icon.png', // 顯示的圖示
	position:{
	 // 控制元件在地圖的位置
	 left: 15,
	 top: 15,
	 width: 50,
	 height: 50
   },    
}],

地址搜索

uni-app 只支持 gcj02 坐標

uni.getLocation(OBJECT)中的object引數

獲取當前的地理位置、速度, 在微信小程式中,當用戶離開應用后,此介面無法呼叫,除非申請后臺持續定位權限;當用戶點擊“顯示在聊天頂部”時,此介面可繼續呼叫,

OBJECT引數說明

  1. typeString,不必填,默認為 wgs84 回傳 gps 坐標,gcj02 回傳國測局坐標,可用于 uni.openLocation 的坐標,app平臺高德SDK僅支持回傳gcj02
  2. altitudeBoolean,不必填,傳入 true 會回傳高度資訊,由于獲取高度需要較高精確度,會減慢介面回傳速度
  3. geocodeBoolean,不必填,默認false,是否決議地址資訊
  4. successFunction,必填,介面呼叫成功的回呼函式,回傳內容詳見回傳引數說明
  5. failFunction,不必填,介面呼叫失敗的回呼函式
  6. completeFunction,不必填,介面呼叫結束的回呼函式(呼叫成功、失敗都會執行)

對于success回傳引數說明:

  1. latitude,緯度,浮點數,范圍為-90~90,負數表示南緯
  2. longitude,經度,浮點數,范圍為-180~180,負數表示西經
  3. speed,速度,浮點數,單位m/s
  4. accuracy,位置的精確度
  5. altitude,高度,單位 m
  6. verticalAccuracy,垂直精度,單位 mAndroid 無法獲取,回傳 0
  7. horizontalAccuracy,水平精度,單位 m
  8. address,地址資訊(僅App端支持,需配置geocodetrue

address 地址資訊說明

  1. countryString,國家 如“中國”,沒有則回傳undefined
  2. provinceString,省份名稱 如“北京市”,沒有則回傳undefined
  3. cityString,城市名稱,如“北京市”,沒有則回傳undefined
  4. districtString,區,縣名稱 如“朝陽區”,沒有則回傳undefined
  5. streetString,街道資訊,如“酒仙橋路”,沒有則回傳undefined
  6. streetNumString,獲取街道門牌號資訊,如“3號”,沒有則回傳undefined
  7. poiNameString POI資訊,如“電子城.國際電子總部”,沒有則回傳undefined
  8. postalCodeString,郵政編碼,如“100016”,沒有則回傳undefined
  9. cityCodeString,城市代碼,如“010”,沒有則回傳undefined

uni.chooseLocation(OBJECT)打開地圖選擇位置,

  1. latitudeString,不必填,目標地緯度
  2. longitudeString,不必填,目標地經度
  3. keywordString,不必填,搜索關鍵字,僅App平臺支持
  4. successFunction,必填
  5. failFunction,不必填
  6. completeFunction,不必填

success回傳引數說明:

  1. name,位置名稱
  2. address,詳細地址
  3. latitude,緯度,浮點數,范圍為-90~90,負數表示南緯,使用 gcj02 國測局坐標系,
  4. longitude,經度,浮點數,范圍為-180~180,負數表示西經,使用 gcj02 國測局坐標系,

代碼如下(示例):

chooseLocation(e) { //打開地圖選擇位置
	uni.chooseLocation({
		success: res => {
			console.log('位置名稱:' + res.name);
			console.log('詳細地址:' + res.address);
			console.log('緯度:' + res.latitude);
			console.log('經度:' + res.longitude);
			uni.getLocation({
				type: 'gcj02',
				altitude:true,
				geocode:true,
				success: function(res) {
					console.log('當前位置的經度:' + res.longitude);
					console.log('當前位置的緯度:' + res.latitude);
				}
			});
			console.log('省:' + res.address.slice(0, res.address.indexOf('省') + 1));
			console.log('市:' + res.address.slice(res.address.indexOf('省') + 1, res.address.indexOf('市') + 1));
			console.log('區:' + res.address.slice(res.address.indexOf('市') + 1, res.address.indexOf('區') + 1));
			this.query.address = res.address;
			this.query.latitude = res.latitude;
			this.query.longitude = res.longitude;
			this.query.province = res.address.slice(0, res.address.indexOf('省') + 1)
			this.query.city = res.address.slice(res.address.indexOf('省') + 1, res.address.indexOf('市') + 1)
			this.query.district = res.address.slice(res.address.indexOf('市') + 1, res.address.indexOf('區') + 1)
		}
	});
},

預覽效果:

在這里插入圖片描述
在這里插入圖片描述

獲取附近的動態,點聚合

uni.getNetworkType(OBJECT)獲取網路型別,

uni.createMapContext(mapId,this)創建并回傳 map 背景關系 mapContext 物件,在自定義組件下,第二個引數傳入組件實體this,以操作組件內 <map> 組件,

mapContext-mapContext 通過 mapId 跟一個 <map> 組件系結,通過它可以操作對應的 <map> 組件,

該物件得方法串列:

  1. getCenterLocation OBJECT 獲取當前地圖中心的經緯度,回傳的是 gcj02 坐標系,可以用于 uni.openLocation
  2. moveToLocation OBJECT 將地圖中心移動到當前定位點,需要配合map組件的show-location使用
  3. translateMarker OBJECT 平移marker,帶影片
  4. includePoints OBJECT 縮放視野展示所有經緯度
  5. getRegion OBJECT 獲取當前地圖的視野范圍
  6. getScale OBJECT 獲取當前地圖的縮放級別
  7. $getAppMap 獲取原生地圖物件 plus.maps.Map

getCenterLocationOBJECT 引數串列

success Function 不必填,介面呼叫成功的回呼函式 ,res = { longitude: "經度", latitude: "緯度"}

moveToLocationOBJECT 引數串列 - 可不必填

translateMarkerOBJECT 引數串列

  1. markerId Number 必填 指定 marker
  2. destination Object 必填 指定 marker 移動到的目標點
  3. autoRotate Boolean 不必填 移動程序中是否自動旋轉 marker
  4. rotate Number 不必填 marker 的旋轉角度
  5. duration Number 不必填 影片持續時長,默認值1000ms,平移與旋轉分別計算
  6. animationEnd Function 不必填 影片結束回呼函式
  7. fail Function 不必填 介面呼叫失敗的回呼函式

代碼如下(示例):

<view id="activeMap">
	<view @tap="activeMarker={}">
		<view class="page-body map-view" style="z-index: 1;position: relative;">
			<view class="page-section page-section-gap map-view">
				<map :markers="shops" id="map1" :show-location="true" :latitude="latitude" :longitude="longitude" @regionchange="regionChange"
				 @markertap="markerTap" @tap="activeMarker={}">
					<!-- @markertap 點擊標記點時觸發,e.detail = {markerId}-->
					<!-- @tap 點擊地圖時觸發-->
					<!-- @regionchange 視野發生變化時觸發-->
				</map>
				<cover-image class="map-image" src="../static/address.png"></cover-image>
			</view>
		</view>
	</view>
</view>
regionChange() { // 移動地圖后重新獲取門店
	uni.createMapContext('map1', this).getCenterLocation({
		success: res => {
			console.log(res.latitude)
			console.log(res.longitude)
			this.shopTimeout = setTimeout(_ => {
				this.shops = [{
					address: "廣東省汕頭市xxx區xx大道1",
					distance: 122,
					end_time: "1",
					id: 2,
					latitude: "22.72078500009999",
					longitude: "114.36090200009999",
					shop: {
						iconPath: '/static/logo.png',
						id: 3,
						latitude: "22.72078500009999",
						longitude: "114.36090200009999",
						height: 34,
						width: 34,
						shop: {return: 0}
					},
					return: 0,
					height: 34,
					width: 34,
					start_time: "1",
					store_name: "三星大酒店",
					iconPath: '/static/shop.png',
				}]
			}, 500)
		},
		fail: res => {
			uni.showModal({
				content: '獲取位置失敗',
				showCancel: false
			})
		}
	})
},

預覽效果圖如下:

在這里插入圖片描述

地圖上標注附近的人

代碼如下(示例):

list: [{
	id: 1264640,
	user_id: 335187,
	place: "Jeskson市",
	text: "dadaqianduan.cn",
	latitude: "27.267520",
	longitude: "111.727120",
	status: "normal",
	nickname: "dada",
	avatar: "https://image.aishencn.com/2020/10/20/002207441_40845724-user.jpg",
	distance: 13419,
}, {
	id: 1272720,
	user_id: 36950,
	place: "dadaqianduan市",
	text: "dadaqianduan.cn",
	latitude: "27.257640",
	longitude: "111.747910",
	deletetime: null,
	status: "normal",
	nickname: "dadaqianduan",
	avatar: "https://image.aishencn.com/2020/04/09/004135379_37869100-user.jpg",
	distance: 27070,
}, {
	id: 1316740,
	user_id: 366172,
	place: "dadaqianduan.cn",
	text: "dadaqianduan.cn",
	images: "https://image.aishencn.com/2020/11/04/215134979_98197351-bbs.jpg",
	latitude: "27.257430",
	longitude: "111.732960",
	status: "normal",
	nickname: "dada",
	avatar: "https://image.aishencn.com/2020/11/04/182622730_98197351-user.venus/cache/ext/crop/1604518314542_jpg",
	distance: 27190,
	images_arr: ["https://image.aishencn.com/2020/11/04/215134979_98197351-bbs.jpg"]
}],

預覽效果如圖:

在這里插入圖片描述

在這里插入圖片描述

定位附近門店

代碼如下(示例):

// 兩點間距離
distance(la1, lo1, la2, lo2) {
	var La1 = (la1 * Math.PI) / 180.0
	var La2 = (la2 * Math.PI) / 180.0
	var La3 = La1 - La2
	var Lb3 = (lo1 * Math.PI) / 180.0 - (lo2 * Math.PI) / 180.0
	var s =
		2 *
		Math.asin(
			Math.sqrt(
				Math.pow(Math.sin(La3 / 2), 2) +
				Math.cos(La1) * Math.cos(La2) * Math.pow(Math.sin(Lb3 / 2), 2)
			)
		)
	s = s * 6378.137 //地球半徑
	s = Math.round(s * 10000) / 10000
	return s
},
// 計算最近的距離
nearDistance(array, centerLatitude, centerLongitude) {
	let temp = []
	for (let i = 0, l = array.length; i < l; i++) {
		const element = array[i]
		let d = this.distance(
			element.latitude,
			element.longitude,
			centerLatitude,
			centerLongitude
		)
		temp.push(d)
	}
	this.distanceL = Math.min.apply(null, temp)
}

效果如下圖:
在這里插入圖片描述

滑動軌跡

代碼如下(示例):

<map :polyline="polyline" :scale="scale" id="maps" :markers="markers" :latitude="center.latitude"
:longitude="center.longitude">
</map>
// 播放標記點
playMarkars() {
	if (this.polyline.length == 0) {
		uni.showModal({
			content: '當前時間范圍內沒有軌跡,無法播放!',
		})
		this.isPlay = false // 無
		this.playIndex = 0 // 第一個
		return
	}
	this.playIndex = Math.min(this.points.length - 1, this.playIndex)
	this.markers = [this.formatMarker(this.points[this.playIndex++], 'ALWAYS')]
	this.timer = setInterval(_ => {
		var i = this.playIndex++
		this.nextAdaress(i);
		if (i >= this.points.length) {
			clearInterval(this.timer)
			this.isPlay = false
			this.playIndex = 0
			this.initMarkers()
			return
		}
		this.markers = [this.formatMarker(this.points[i], 'ALWAYS')]
	}, 1000)
},

formatMarker(point, display = "BYCLICK") {
	let content = [
		"時間:" + parseTime(point.create_time),
		"運動狀態:" + (point.sport == 1 ? '運動' : '靜止'),
		"地址:" + point.address || ''
	]
	return {
		id: point.id,
		iconPath: '/static/dada.png',
		width: 35,
		height: 35,
		latitude: point.latitude,
		longitude: point.longitude,
		callout: {
			display: display,
			padding: 10,
			borderRadius: 5,
			content: content.join("\n")
		}
	}
},
nextAdaress(index) {
	const len = 10;
	if (this.isGetAddress) {
		return
	}
	for (let i = 0; i < len; i++) {
		if (!this.points[i + index]) {
			break
		}
		if (this.points[i + index].address === undefined) {
			this.isGetAddress = true
			this.getAddress(i + index, len * 2, _ => {
				this.isGetAddress = false
			});
			break
		}
	}
},

圖片效果如下:

在這里插入圖片描述

vue接入騰訊地圖介面

騰訊(推薦)

https://apis.map.qq.com/ws/location/v1/ip={$ip}&key={$key}

需要申請key,速度快,有基本資訊

首頁點擊可以進行注冊,申請一個獲取key:https://lbs.qq.com?lbs_invite=VJJIFLV

key管理,創建新密鑰,填寫相應資訊即可
在這里插入圖片描述

1.創建地圖預覽效果圖如下:
在這里插入圖片描述

<script charset="utf-8" src="https://map.qq.com/api/gljs?v=1.exp&key=申請的key"></script>

 <script type="text/javascript">
    function initMap() {
        var center = new TMap.LatLng(39.984104, 116.307503);
        //初始化地圖
        var map = new TMap.Map("container", {
            rotation: 20,//設定地圖旋轉角度
            pitch:30, //設定俯仰角度(0~45)
            zoom:12,//設定地圖縮放級別
            center: center//設定地圖中心點坐標
        });
    }
</script>

2.地圖加載完成效果圖:
在這里插入圖片描述

<script>
    function initMap() {
        //初始化地圖
        var map = new TMap.Map("container", {
            center: new TMap.LatLng(39.984104, 116.307503)
        });
        //監聽地圖瓦片加載完成事件
        map.on("tilesloaded", function () {
            document.getElementById("tip").innerHTML = "地圖瓦片已加載完成"
        })
    }
</script>

3.異步加載地圖

<script>
        function initMap() {
            var map = new TMap.Map("container", {
                pitch: 45,
                zoom: 12,
                center: new TMap.LatLng(39.984104, 116.307503)
            });
        }
        function loadScript() {
            //創建script標簽,并設定src屬性添加到body中
            var script = document.createElement("script");
            script.type = "text/javascript";
            script.src = "https://map.qq.com/api/gljs?v=1.exp&key=申請key";
            document.body.appendChild(script);
        }
        window.onload = loadScript;
    </script>

4.同時加載兩個地圖效果圖如下:

在這里插入圖片描述

<script>
    function initMap() {
        //初始化地圖一
        var mapOne = new TMap.Map("containerOne", {
            pitch:45,
            center: new TMap.LatLng(39.984104, 116.307503)
        });
        //初始化地圖二
        var mapTwo = new TMap.Map("containerTwo", {
            center: new TMap.LatLng(39.984104, 116.307503)
        });
    }
</script>

5.獲取地圖中心效果如下圖:
在這里插入圖片描述

<script>
    var centerInfo = document.getElementById("center-info");

    var center = new TMap.LatLng(39.984104, 116.307503);//設定中心點坐標
    //初始化地圖
    var map = new TMap.Map("container", {
        center: center
    });
    //獲取地圖中心點事件
    function getCenter() {            
        var mapCenter = map.getCenter(); //獲取地圖中心點坐標
        centerInfo.innerHTML = "當前地圖中心為: " + mapCenter.getLat().toFixed(6) + "," + mapCenter.getLng().toFixed(6);
    }
    //設定地圖中心點事件
    function setCenter() {
        map.setCenter(new TMap.LatLng(39.908802,116.397502));//坐標為天安門
        centerInfo.innerHTML = "當前地圖中心為: 39.908802,116.397502";
    }
</script>

6.地圖平移效果圖如下:
在這里插入圖片描述

<script>
    function initMap() {
        var position = document.getElementById("position");
        var txt = document.getElementById("txt");
        var center = new TMap.LatLng(39.984104, 116.307503);//設定中心點坐標
        //初始化地圖
        var map = new TMap.Map("container", {
            center: center
        });
        location.innerHTML = map.getCenter().toString();
        //監聽地圖開始平移
        map.on("panstart", function () {
            txt.innerHTML = "地圖開始平移"
        })
        //監聽地圖平移
        map.on("pan",function(){
            txt.innerHTML = "地圖正在平移";
            position.innerHTML = map.getCenter().toString();//獲取地圖中心點
        })
        //監聽地圖平移結束
        map.on("panend",function(){
            txt.innerHTML = "地圖結束平移";
        })
    }
</script>

3.vue接入騰訊地圖

<template>
  <div>
    <div id="map" style="width:500px;height:500px;"></div>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      longitude: "",
      latitude: ""
    };
  },
  
  methods: {
    init() {
      let address = "";
      let that = this;
      var center = new qq.maps.LatLng(34.754152, 113.667636);
      var map = new qq.maps.Map(document.getElementById('map'), {
        center: center,
        zoom: 13,
        disableDefaultUI: true
      });
      var marker = new qq.maps.Marker({
        position: center,
        map: map
      });
      var infoWin = new qq.maps.InfoWindow({
        map: map
      });
      var geocoder = new qq.maps.Geocoder({
        complete: function(res) {
          console.log(res);
          address = res.detail.nearPois[0].name;
        }
      });
      qq.maps.event.addListener(map, "click", function(event) {
        this.longitude = event.latLng.getLat();
        this.latitude = event.latLng.getLng();
        console.log(event);
        let lat = new qq.maps.LatLng(this.longitude, this.latitude);
        geocoder.getAddress(lat);
        setTimeout(() => {
          infoWin.open();
          infoWin.setContent(
            '<div style="text-align:center;white-space:nowrap;">' +
              address +
              "</div>"
          );
          infoWin.setPosition(event.latLng);
        }, 200);
      });
    }
  },
  mounted() {
    this.init();
  }
};
</script>
<style scoped>
</style>

使用前需要在index.html里引入<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=YOUR_KEY"></script>才可以使用地圖,

<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=yourkey"></script>
<template>
    <div>
        <div id="container" style="width:500px;height:500px;"></div>
    </div>
</template>

<script>
    export default{
    	data() {
            return {
                longitude:39.956987, // 經度
                latitude:116.235128 // 緯度
            }
        },
        mounted () {
            this.init();
        },
        methods:{
            init() {
                var myLatlng = new qq.maps.LatLng(39.945687,116.3976968);
                var myOptions = {
                  zoom: 8,               // 設定地圖縮放級別
                  center: myLatlng,      // 設定中心點樣式
                  mapTypeId: qq.maps.MapTypeId.ROADMAP   
                }
                var map = new qq.maps.Map(document.getElementById("container"), myOptions);
            }
        }
    }
</script>

創建地圖實體

var map=new qq.maps.Map(document.getElement('container'),{
center,//坐標,即最初顯示的地圖中心
zoom    //縮放級別,即顯示的比例
}

給地圖添加事件

qq.maps.event.addListener(map,'click',function(res){
// res即點擊后的位置資訊
})

添加標記

var marker=new qq.maps.Marker({
position, // 標記點的位置,也可以是通過IP獲取到的坐標
map, // 標記在哪個地圖上
animation, // 標記顯示時的影片效果
title, // 滑鼠懸浮到標記上時的標題
draggable // 是否可拖拽
})

創建資訊視窗

var info=new qq.maps.InfoWindow({
map, // 標記在哪個地圖上
content // 資訊視窗的內容
})

覆寫物

var polyline=new qq.maps.Polyline({
map, // 標記在哪個地圖上
path, // 一個坐標陣列,折線、多邊形就是依靠這些坐標陣列來成形的
strokeColor, // 折線顏色
strokeDashStyle, // 折線樣式
strokeWeight, // 折線寬度
editable, // 折線是否可編輯
clickable // 是否可點擊
})

單個標注點

mounted生命周期或者從后臺介面獲得資訊后呼叫初始化地圖方法

initMap (latitude, longitude, message) {
    var center = new qq.maps.LatLng(latitude, longitude);
    var map = new qq.maps.Map(
        document.getElementById("container"),
        {
            center: center,
            zoom: 13
        }
    );

    var marker = new qq.maps.Marker({
        position: center,
        map: map
    });

    var info = new qq.maps.InfoWindow({
        map: map
    });
    
    // 懸浮標記顯示資訊
    qq.maps.event.addListener(marker, 'mouseover', function() {        
        info.open();
        info.setContent(`<div style="margin:10px;">${message}</div>`);
        info.setPosition(center);
    });
    qq.maps.event.addListener(marker, 'mouseout', function() {
        info.close();
    });
},

多個標注點

markers: [  ]; // 標記點陣列

mounted () {
    this.initMap(this.markers)
},

initMap (arr) {
    // 默認以陣列第一項為中心
    var center = new qq.maps.LatLng(arr[0].latitude, arr[0].longitude);
    
    var map = new qq.maps.Map(
        document.getElementById("container"),
        {
            center: center,
            zoom: 13
        }
    );
    
    // 提示窗
    var info = new qq.maps.InfoWindow({
        map: map
    });
    
    for (var i = 0; i < arr.length; i++) {
        var data = arr[i];

        var marker = new qq.maps.Marker({ 
            position: new qq.maps.LatLng(data.latitude, data.longitude), 
            map: map 
        });

        marker.id = data.id;
        marker.name = data.name;
        // 點擊事件
        qq.maps.event.addListener(marker, 'mouseover', function() {
            info.open();
            // 設定提示窗內容
            info.setContent(`<div><p>${this.name}</p></div>`);
            // 提示窗位置 
            info.setPosition(new qq.maps.LatLng(this.position.lat, this.position.lng));
        });
        qq.maps.event.addListener(marker, 'mouseout', function() {
            info.close();                    
        });
    }
}

4.個性化地圖樣式

為什么要用個性化地圖,提高不同場景下地圖的展現效果和用戶體驗,
在這里插入圖片描述
為什么選擇騰訊位置服務個性化地圖:

  1. 全平臺通用
  2. 開發成本極小
  3. 個性化樣式支持動態更新
  4. 支持全域配置和分級配置
  5. 編輯平臺UI控制元件全面優化
  6. 每個元素可配置的屬性全部開放
  7. 能夠支持自定義的地圖元素擴充為52種

5.騰訊位置入門步驟

  1. 登錄騰訊位置服務
  2. 驗證手機 與 郵箱
  3. 申請開發密鑰(Key
  4. 選擇您需要的產品

https://lbs.qq.com/webApi/component/componentGuide/componentMarker

位置展示組件
在這里插入圖片描述
路線規劃組件

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
地圖選點組件
在這里插入圖片描述
前端定位組件
在這里插入圖片描述

三.微信小程式JavaScript SDK

  1. 我申請了開發者密鑰key
  2. 開通webserviceAPI服務:控制臺 -> key管理 -> 設定(使用該功能的key)-> 勾選webserviceAPI -> 保存
    (小程式SDK需要用到webserviceAPI的部分服務,所以使用該功能的KEY需要具備相應的權限)

日呼叫量:1萬次 / Key----并發數:5次 / key / 秒

onLoad() {
	console.log('頁面加載了')
	// 實體化API核心類
	qqmapsdk = new QQMapWX({
		// key: '申請的key'
	});
},
onShow() {
	console.log('頁面顯示了')
	// 呼叫介面dadaqianduan
	qqmapsdk.search({
		keyword: '酒店',
		success: (res) => {
			console.log(res);
		},
		fail: (err) => {
			console.log(err);
		},
		complete: (cres) => {
			console.log(cres);
		}
	})
},

我回傳的資料如圖:
在這里插入圖片描述
QQMapWX – 小程式JavaScriptSDK核心類 – new QQMapWX(options:Object)
在這里插入圖片描述

// 引入SDK核心類
var QQMapWX = require('xxx/qqmap-wx.js');
 
// 實體化API核心類
var demo = new QQMapWX({
    key: '開發密鑰(key)' // 必填
});

地點搜索:

// 地點搜索
nearbySearchBtn() {
	qqmapsdk.search({
		keyword: 'kfc', //搜索關鍵詞
		location: '39.980014,116.313972', //設定周邊搜索中心點
		success: (res) => {
			var mks = []
			for (var i = 0; i < res.data.length; i++) {
				mks.push({ // 獲取回傳結果,放到mks陣列中
					title: res.data[i].title,
					id: res.data[i].id,
					latitude: res.data[i].location.lat,
					longitude: res.data[i].location.lng,
					iconPath: "/location.png", //圖示路徑
					width: 20,
					height: 20
				})
			}
			this.markers = mks
		},
		fail: (res) => {
			console.log(res);
		},
		complete: (res) => {
			console.log(res);
		}
	});
},

效果如圖:
在這里插入圖片描述

<script>
	// 引入SDK核心類,js檔案根據自己業務,位置可自行放置
	// var QQMapWX = require('../../js_sdk/wxmp-qqmap/qqmap-wx-jssdk.js');
	import QQMapWX from '../../js_sdk/wxmp-qqmap/qqmap-wx-jssdk.js';
	var qqmapsdk;
	export default {
		components: {},
		data() {
			return {
				backfill: '',
				markers: [],
				suggestion: [],
			}
		},
		onLoad() {
			console.log('頁面加載了') // 實體化API核心類
			qqmapsdk = new QQMapWX({ // key: '申請的key'
				key: '自己申請,我的就不放出來了'
			});
		},
		onShow() {
			console.log('頁面顯示了') // 呼叫介面dadaqianduan
			qqmapsdk.search({
				keyword: '酒店',
				success: (res) => {
					console.log(res);
				},
				fail: (err) => {
					console.log(err);
				},
				complete: (cres) => {
					console.log(cres);
				}
			})
		},
		onReady() {
			console.log('頁面初次渲染完成了')
		},
		methods: {
			getsuggest(e) {
				console.log(e.detail.value)
			    qqmapsdk.getSuggestion({
			      keyword: e.detail.value, //用戶輸入的關鍵詞,可設定固定值,如keyword:'KFC'
			      //region:'北京', //設定城市名,限制關鍵詞所示的地域范圍,非必填引數
			      success: (res) => {//搜索成功后的回呼
			        console.log(res);
			        var sug = [];
			        for (var i = 0; i < res.data.length; i++) {
			          sug.push({ // 獲取回傳結果,放到sug陣列中
			            title: res.data[i].title,
			            id: res.data[i].id,
			            addr: res.data[i].address,
			            city: res.data[i].city,
			            district: res.data[i].district,
			            latitude: res.data[i].location.lat,
			            longitude: res.data[i].location.lng
			          });
			        }
			         this.suggestion = sug
			      },
			      fail: (error)=> {
			        console.error(error);
			      },
			      complete: (res)=> {
			        console.log(res);
			      }
			    });
			},
			backfillBtn(e) {
				var id = e.currentTarget.id;
				for (var i = 0; i < this.suggestion.length; i++) {
					if (i == id) {
						this.backfill = this.suggestion[i].title
					}
				}
			},
			// 地點搜索
			nearbySearchBtn() {
				qqmapsdk.search({
					keyword: 'kfc', //搜索關鍵詞
					location: '39.980014,116.313972', //設定周邊搜索中心點
					success: (res) => {
						var mks = []
						for (var i = 0; i < res.data.length; i++) {
							mks.push({ // 獲取回傳結果,放到mks陣列中
								title: res.data[i].title,
								id: res.data[i].id,
								latitude: res.data[i].location.lat,
								longitude: res.data[i].location.lng,
								iconPath: "/static/location.png", //圖示路徑
								width: 20,
								height: 20
							})
						}
						this.markers = mks
					},
					fail: (res) => {
						console.log(res);
					},
					complete: (res) => {
						console.log(res);
					}
				});
			},
		},
		onHide() {
			console.log('頁面隱藏了')
		},
	}
</script>

預覽效果如圖下:

在這里插入圖片描述

<script>
	import QQMapWX from '../../js_sdk/wxmp-qqmap/qqmap-wx-jssdk.js';
	var qqmapsdk;
	export default {
		components: {},
		data() {
			return {
				backfill: '',
				markers: [],
				poi: {
					latitude: 39.984060,
					longitude: 16.307520
				},
			}
		},
		onLoad() {
			console.log('頁面加載了') // 實體化API核心類
			qqmapsdk = new QQMapWX({ // key: '申請的key'
				key: ''
			});
		},
		onShow() {
			console.log('頁面顯示了')
		},
		onReady() {
			console.log('頁面初次渲染完成了')
		},
		methods: {
			formSubmit(e) {
				qqmapsdk.reverseGeocoder({
					location: e.detail.value.reverseGeo || '',
					//獲取表單傳入的位置坐標,不填默認當前位置,示例為string格式
					//get_poi: 1, //是否回傳周邊POI串列:1.回傳;0不回傳(默認),非必須引數
					success: (res) => {
						console.log(res);
						var res = res.result;
						var mks = [];
						/**
						 *  當get_poi為1時,檢索當前位置或者location周邊poi資料并在地圖顯示,可根據需求是否使用
						 *
						    for (var i = 0; i < result.pois.length; i++) {
						    mks.push({ // 獲取回傳結果,放到mks陣列中
						        title: result.pois[i].title,
						        id: result.pois[i].id,
						        latitude: result.pois[i].location.lat,
						        longitude: result.pois[i].location.lng,
						        iconPath: './resources/placeholder.png', //圖示路徑
						        width: 20,
						        height: 20
						    })
						    }
						*
						**/
						//當get_poi為0時或者為不填默認值時,檢索目標位置,按需使用
						mks.push({ // 獲取回傳結果,放到mks陣列中
							title: res.address,
							id: 0,
							latitude: res.location.lat,
							longitude: res.location.lng,
							iconPath: '/static/location.png', //圖示路徑
							width: 20,
							height: 20,
							callout: { //在markers上展示地址名稱,根據需求是否需要
								content: res.address,
								color: '#000',
								display: 'ALWAYS'
							}
						});
						this.markers = mks;
						// this.poi = {
						// 	latitude: res.location.lat,
						// 	longitude: res.location.lng
						// }
					},
					fail: (error) => {
						console.error(error);
					},
					complete: (res) => {
						console.log(res);
					}
				})
			}
		},
		onHide() {
			console.log('頁面隱藏了')
		},
	}
</script>

geocoder – 提供由地址描述到所述位置坐標的轉換,與逆地址決議reverseGeocoder()的程序正好相反,

預覽效果如圖:
在這里插入圖片描述

formSubmit(e) {
    //呼叫地址決議介面
    qqmapsdk.geocoder({
      //獲取表單傳入地址 e.detail.value.geocoder
      address: e.detail.value, //地址引數,例:固定地址,address: '北京市海淀區彩和坊路海淀西大街74號'
      success: (res)=> {//成功后的回呼
        console.log(res);
        var res = res.result;
        var latitude = res.location.lat;
        var longitude = res.location.lng;
        //根據地址決議在地圖上標記決議地址位置
         this.markers = [{
            id: 0,
            title: res.title,
            latitude: latitude,
            longitude: longitude,
            iconPath: '/static/location.png',//圖示路徑
            width: 20,
            height: 20,
            callout: { //可根據需求是否展示經緯度
              content: latitude + ',' + longitude,
              color: '#000',
              display: 'ALWAYS'
            }
          }],
          this.poi= { //根據自己data資料設定相應的地圖中心坐標變數名稱
            latitude: Number(latitude),
            longitude:  Number(longitude),
          }
      },
      fail: (error)=> {
        console.error(error);
      },
      complete: (res)=> {
        console.log(res);
      }
    })
}

預覽效果圖如下:
在這里插入圖片描述

formSubmit(e){
	    //呼叫距離計算介面
		console.log(this.start,'dadaqianduan')
	    qqmapsdk.calculateDistance({
	        //mode: 'driving',//可選值:'driving'(駕車)、'walking'(步行),不填默認:'walking',可不填
	        //from引數不填默認當前地址
	        //獲取表單提交的經緯度并設定from和to引數(示例為string格式)
	        // from: e.detail.value.start || '', //若起點有資料則采用起點坐標,若為空默認當前地址
			from: this.start || '',
			to: this.end,
	        // to: e.detail.value.dest, //終點坐標
	        success: (res)=> {//成功后的回呼
	          console.log(res);
	          var res = res.result;
	          var dis = [];
	          for (var i = 0; i < res.elements.length; i++) {
	            dis.push(res.elements[i].distance); //將回傳資料存入dis陣列,
	          }
	          this.distance=dis
	        },
	        fail: (error)=> {
	          console.error(error);
	        },
	        complete: (res)=> {
	          console.log(res);
	        }
	    });
	}
},

呼叫獲取城市串列介面,效果圖如下:
在這里插入圖片描述

onShow() {
	console.log('頁面顯示了')
	//呼叫獲取城市串列介面
	qqmapsdk.getCityList({
		success: (res) => { //成功后的回呼
			console.log(res);
			console.log('省份資料:', res.result[0]); //列印省份資料
			this.a = res.result[0]
			console.log('城市資料:', res.result[1]); //列印城市資料
			this.b = res.result[1]
			console.log('區縣資料:', res.result[2]); //列印區縣資料
			this.c = res.result[2]
		},
		fail: (error) => {
			console.error(error);
		},
		complete: (res) => {
			console.log(res);
		}
	});
},

獲取城市區縣,效果圖如下:
在這里插入圖片描述

onShow() {
	console.log('頁面顯示了')
	//呼叫獲取城市串列介面
	qqmapsdk.getCityList({
		success: (res) => { //成功后的回呼
			console.log(res);
			console.log('省份資料:', res.result[0])
			var city = res.result[0];
			//根據對應介面getCityList回傳資料的Id獲取區縣資料(以北京為例)
			qqmapsdk.getDistrictByCityId({
				// 傳入對應省份ID獲得城市資料,傳入城市ID獲得區縣資料,依次類推
				id: city[0].id, //對應介面getCityList回傳資料的Id,如:北京是'110000'
				success: (res) => { //成功后的回呼
					console.log(res);
					console.log('對應城市ID下的區縣資料(以北京為例):', res.result[0]);
				},
				fail: (error) => {
					console.error(error);
				},
				complete: (res) => {
					console.log(res);
				}
			});
		},
		fail: (error) => {
			console.error(error);
		},
		complete: (res) => {
			console.log(res);
		}
	});
},

參考地址:https://lbs.qq.com/miniProgram/jsSdk/jsSdkGuide/jsSdkOverview

騰訊位置服務為微信小程式提供了基礎的標點能力、線和圓的繪制介面等地圖組件和位置展示、地圖選點等地圖API位置服務能力支持,使得開發者可以自由地實作自己的微信小程式產品, 在此基礎上,騰訊位置服務微信小程式JavaScript SDK是專為小程式開發者提供的LBS資料服務工具包,可以在小程式中呼叫騰訊位置服務的POI檢索、關鍵詞輸入提示、地址決議、逆地址決議、行政區劃和距離計算等資料服務,讓您的小程式更強大!

插件市場:https://ext.dcloud.net.cn/plugin?id=3746可以多下載試試玩,后續更新插件內容,
在這里插入圖片描述
在這里插入圖片描述
點擊下方鏈接,申請騰訊地圖開發者所用到的key,到官方進行注冊:
專屬邀請鏈接: https://lbs.qq.com?lbs_invite=VJJIFLV
專屬邀請碼: VJJIFLV

我是Jeskson(達達前端),感謝各位人才的:點贊、收藏和評論,我們下期見!

文章持續更新,本文個人網站 http://www.dadaqianduan.cn/#/ 已經收錄,歡迎Star,


總結

以上就是今天要講的內容,本文僅僅簡單介紹了騰訊位置服務開發應用-使用教程,案例分享,知識總結,

程式員哆啦A夢 CSDN認證博客專家 CSDN博客專家 簡書萬粉優秀創作 掘金優秀作者
我是程式員哆啦A夢,藍胖子,簡書萬粉優秀創作者,掘金優秀作者、CSDN博客專家,云+社區社區活躍作者,致力于打造一系列能夠幫助程式員提高的優質文章,網站@http://www.dadaqianduan.cn

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/240012.html

標籤:AI

上一篇:鴻蒙OS,華為智慧屏“常用常新,十年不過時”的底氣所在

下一篇:Python繪制愛心圣誕樹

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more