html5頁面熱力圖幾十萬數據,基于百度地圖的數據可視化,包括大量數據的標繪以及熱力圖的插入...

(function(global, factory) {

typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :

typeof define === 'function' && define.amd ? define(factory) :

(global.PointLine = factory());

}(this, (function() {

'use strict';

/**

* @author https://github.com/chengquan223

* @Date 2017-02-27

* */

function CanvasLayer(options) {

this.options = options || {};

this.paneName = this.options.paneName || 'labelPane';

this.zIndex = this.options.zIndex || 0;

this._map = options.map;

this._lastDrawTime = null;

this.show();

}

CanvasLayer.prototype = new BMap.Overlay();

CanvasLayer.prototype.initialize = function(map) {

this._map = map;

var canvas = this.canvas = document.createElement('canvas');

var ctx = this.ctx = this.canvas.getContext('2d');

canvas.style.cssText = 'position:absolute;' + 'left:0;' + 'top:0;' + 'z-index:' + this.zIndex + ';';

this.adjustSize();

this.adjustRatio(ctx);

map.getPanes()[this.paneName].appendChild(canvas);

var that = this;

map.addEventListener('resize', function() {

that.adjustSize();

that._draw();

});

return this.canvas;

};

CanvasLayer.prototype.adjustSize = function() {

var size = this._map.getSize();

var canvas = this.canvas;

canvas.width = size.width;

canvas.height = size.height;

canvas.style.width = canvas.width + 'px';

canvas.style.height = canvas.height + 'px';

};

CanvasLayer.prototype.adjustRatio = function(ctx) {

var backingStore = ctx.backingStorePixelRatio || ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio ||

ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;

var pixelRatio = (window.devicePixelRatio || 1) / backingStore;

var canvasWidth = ctx.canvas.width;

var canvasHeight = ctx.canvas.height;

ctx.canvas.width = canvasWidth * pixelRatio;

ctx.canvas.height = canvasHeight * pixelRatio;

ctx.canvas.style.width = canvasWidth + 'px';

ctx.canvas.style.height = canvasHeight + 'px';

// console.log(ctx.canvas.height, canvasHeight);

ctx.scale(pixelRatio, pixelRatio);

};

CanvasLayer.prototype.draw = function() {

var self = this;

var args = arguments;

clearTimeout(self.timeoutID);

self.timeoutID = setTimeout(function() {

self._draw();

}, 15);

};

CanvasLayer.prototype._draw = function() {

var map = this._map;

var size = map.getSize();

var center = map.getCenter();

if (center) {

var pixel = map.pointToOverlayPixel(center);

this.canvas.style.left = pixel.x - size.width / 2 + 'px';

this.canvas.style.top = pixel.y - size.height / 2 + 'px';

this.dispatchEvent('draw');

this.options.update && this.options.update.call(this);

}

};

CanvasLayer.prototype.getContainer = function() {

return this.canvas;

};

CanvasLayer.prototype.show = function() {

if (!this.canvas) {

this._map.addOverlay(this);

}

this.canvas.style.display = 'block';

};

CanvasLayer.prototype.hide = function() {

this.canvas.style.display = 'none';

//this._map.removeOverlay(this);

};

CanvasLayer.prototype.setZIndex = function(zIndex) {

this.canvas.style.zIndex = zIndex;

};

CanvasLayer.prototype.getZIndex = function() {

return this.zIndex;

};

var tool = {

merge: function merge(settings, defaults) {

Object.keys(settings).forEach(function(key) {

defaults[key] = settings[key];

});

},

//計算兩點間距離

getDistance: function getDistance(p1, p2) {

return Math.sqrt((p1[0] - p2[0]) * (p1[0] - p2[0]) + (p1[1] - p2[1]) * (p1[1] - p2[1]));

},

//判斷點是否在線段上

containStroke: function containStroke(x0, y0, x1, y1, lineWidth, x, y) {

if (lineWidth === 0) {

return false;

}

var _l = lineWidth;

var _a = 0;

var _b = x0;

// Quick reject

if (y > y0 + _l && y > y1 + _l || y < y0 - _l && y < y1 - _l || x > x0 + _l && x > x1 + _l || x < x0 - _l && x <

x1 - _l) {

return false;

}

if (x0 !== x1) {

_a = (y0 - y1) / (x0 - x1);

_b = (x0 * y1 - x1 * y0) / (x0 - x1);

} else {

return Math.abs(x - x0) <= _l / 2;

}

var tmp = _a * x - y + _b;

var _s = tmp * tmp / (_a * _a + 1);

return _s <= _l / 2 * _l / 2;

},

// 判斷點擊圖片的位置

containStrokeImage: function(clickPoint, markerPoint) {

var markerWidth = 32,

markerHeight = 32,

self = this;

var marker = self.isimageContent(markerPoint);

var arr = [];

if (marker.leftTopX <= clickPoint.x && clickPoint.x <= marker.rightBottomX && clickPoint.y < marker.rightBottomY &&

marker.leftTopY < clickPoint.y) {

return true;

} else {

return false;

}

// ctx.clearRech(0,0,ctx.width,ctx.height);

/**

* 1.點擊的位置

* 2.計算出四個邊角的位置

* 3. 篩選出是否在四邊之內

*

*

*

*

* **/

},

isimageContent: function(markerPoint) {

return {

leftTopX: markerPoint.x,

leftTopY: markerPoint.y,

rightBottomX: markerPoint.x + 32,

rightBottomY: markerPoint.y + 32

}

},

//點擊的區域重合的時候

selectZjFunc: function(markerarr, e) {

var thatSelectjl = 0;

var thatIndex = 0

var self = this;

markerarr.forEach((item, index) => {

var markerpix = item.marker.pixel;

var thisjl = self.selectjsFunc(markerpix, e)

if (thisjl > thatSelectjl) {

thatSelectjl = thisjl

thatIndex = index

}

})

return thatIndex;

},

// 計算點擊的位置距離部署點位的距離

selectjsFunc: function(marker, e) {

return Math.sqrt((marker.x - e.x) * (marker.x - e.x) + (e.y - marker.y) * (e.y - marker.y))

},

//點聚合算法的實現1. 實現拆分屏幕

//2. 數據判斷

//3. 實現繪制(僅限熱力圖,如果有后續需要做出標繪的點聚合,也可以)

cfpmFunc: function(width, height, cfWidth) {

var self = this;

//橫向

var widthLength = parseInt(width / cfWidth) + 1;

var widthOver = width % cfWidth

var widthHeight = parseInt(height / cfWidth) + 1;

var heightOver = height % cfWidth

var pointarr = [];

for (var i = 1; i <= widthLength; i++) {

for (var j = 1; j <= widthHeight; j++) {

var obj = {}

obj.leftTopX = (i - 1) * cfWidth;

obj.leftTopY = (j - 1) * cfWidth;

obj.rightBottomX = (i - 1) * cfWidth;

obj.rightBottomY = (j - 1) * cfWidth;

if (i == widthLength) {

if (j == widthHeight) {

obj.rightBottomX = (i - 1) * cfWidth + widthOver;

obj.rightBottomY = (j - 1) * cfWidth + heightOver;

} else {

obj.rightBottomX = (i - 1) * cfWidth + widthOver;

obj.rightBottomY = j * cfWidth;

}

} else {

obj.rightBottomX = i * cfWidth;

obj.rightBottomY = (j - 1) * cfWidth + heightOver;

}

pointarr.push(obj)

}

}

return pointarr;

},

// 當前方框內是否存在數據

jhFunc: function(clickPoint, marker, width, height) {

var self = this;

if (marker.leftTopX <= clickPoint.x && clickPoint.x <= marker.rightBottomX && clickPoint.y < marker.rightBottomY &&

marker.leftTopY < clickPoint.y) {

return true;

} else {

return false;

}

},

};

//所有圖片存儲的位置

var base64Image = {

tzred:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozMmMyNjgwOS1mOTMwLTQyYTEtYjBjZi1kNjYyNjY3MjFhYzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDREODQ2QTAxMTgyMTFFNDk0QTg5MjZDRjBEOTA3RDkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDREODQ2OUYxMTgyMTFFNDk0QTg5MjZDRjBEOTA3RDkiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjY2N2Q2MDAtM2RkMS00ZWZhLTgyNTktZTA0MWUyYTkwOTZjIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjMyYzI2ODA5LWY5MzAtNDJhMS1iMGNmLWQ2NjI2NjcyMWFjMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpvwpEgAAAXeSURBVHjavJh7TJZ1FMd5X15AROQShCGJNISMRWktcmYspw0rVpYtrc2yGlJuteVmW5dRc6ykWisV5kz/KNtyWmu4soumZLGo7EKaaV6mIg4vKXF7ub59j32fdXZ63qurs332PL/7eX6Xc87v8QQCgbgYJAVMA1NABUgH+8Fh0Mz3QeDncwCMgL6oRxIFo2QGWA9OB/6WH8Aj4FLgiaG/kERT2QtWgp7AP1IVpo2H7WJW0BfhRMeDT8AspveBMtAFskEO8IBEMBVcBwpZ5uPSngG/gC/BtoiXO8IvaVaztoV5BeBdcAScBF2gLxCZSN0akBTLEtslWa06/gk8CHYw3QsGArFLO1gQjYIJ5qsqVWdD4GelUC14O8jAovhRcMqlrBscB8MqrzZSBbOMgj+qTobVqS0Br7kM/hmYYvr08eRvVfWawMOglWn56LpwCqaCXJWe46LAfpbVuZTdo9rOBSvAcvA4P0jy88DvrP8G815SK1QdSsFCMEGl640CZ5n/rMmXjktZ1hhivw1S6WKwjnkvs91tLD8IprkpKMswC+Sowj1mgFu4/FYquYSRygmwGHzPdAXHE8XO0QmkWQUncll8TBebTpuZ32DyN4BFMZzeAbX/ZCLGsP95TFdaQ30FGAOGmL7KmMsVfC4y+afBMy7mVfzueXAIHKU/vpK+WyQBXM33EnAHeA9sBpeDOeAL0OOlpZ8IMtQAl5kBPwVFIEnlHaQ3KbS2n4wCk6iAKFjN+gdcPmi2en8LdIJSSXjZ0QSQpSqNMx1IVJJr8pJBsctgHrrG0YxyJoOF/Mgstllj2sznDMfRfW7jql5QMJXTmqgaXGs6yOYsaMkEY6MInETZj8BSzuYrqkw+ZqVKfwU6QJqXimVwCZ1Yb7LLErS5zKAvhljyVXA/WAY+V/kSiNzE935wXHTxcvn8DECdgcebTp8EZ8GvQQZtBy9wv5XwvV2VS8A6rNL1fL5o+qlS750XtguOcjpYxSOfTxskct7EfmIHHw1iNmpc3FSNKu8AbabNfNbTY3SCDOYniuv10hycoNYV1FxkB/hWfdHr4Buw12UGN4XJE7Oyh6fbkYf41Kda9vStyhr0e02lp3iiB7hx16vG14DVYIP6iEhF9vhvYLvKK+Mh7TB1S5Qt9TsK7mTEKwdlLmjkl3zMk+fIzWAB+Job2ZF7XZSyeX+C78zFaxyV1OLsf9mzg84plAPwPlhME3CY+aLkXcbElNIA/8FQ36s29yalXJUZ+BToVek+ti9wMUeuIb9EMv3KoTubVsrKXQ7GCAkEKRs2eRKMzFTpVkYxOtoReUcfNj29x0Ad33PVppV92ASmc9a0x/C4LG03L1XDxszsMuZrq3KTu9WW0ebpX+v/PPeXFgkQlvBCnsPTfM5FMVnCjWAd3WeCKmukAuUq7wh4gAduC/ek4+ND3uqSGTlbsfeGHMZw5QxYp4KlvG/Y0CqVbbqYJ3V28n0JeIzvZxg4h724Z6p4TctuhuVFNKiZDOMXgu1B9qNzuX/aXKpEWlj2IdMbo/2z0BDiEPh5QxsJEZjOYz9lLmVyNxkLRqn79J3hFBT3Em/yZBl3RRkxy+U+m+3vdimXmZvE8mXM20xlQyqYTF8cH+Sn0T41SA+vpbI8H4A1vF84g4w3fyQceVP9HMihnz4AbnRbRXuK+2iU8xjvaREzcT1YRT85mnGinOgWhuhiZJ/jSWxTEZIja8ETdGNxdAryvpx+PuJ/M5eA6YxgslzK8/lLpDuKZa83fczmn4pqt6V18IT4gSl2bAYvNyfp/sQA95h6cn+5gYZ8JqPxeFNHZrVWpYuYbqIj6A2mhCeCP6zOLauSxvQYHf8hboksLm05I54kY4zvM0FCAY3/Xvr/oVCDR6JgHD1DPkP/2/kPMM0o40gP92MD3Zn+x1jEy5GsRquJDy9KQatsHpc0nYclhbPaQvymjY8RUDLjwt5IB4tFwVg+KEVd5qMa0Bf334uHe9UfrXL/1wxelPwlwADs4pvH5P8anQAAAABJRU5ErkJggg=="

}

var PointLine = function PointLine(map, userOptions) {

var self = this;

self.map = map;

self.lines = [];

self.pixelList = [];

//默認參數

//需要的數據

/**

* 經度,緯度,標題頭 添加的點擊事件

*

* **/

var options = {

};

//全局變量

var baseLayer = null,

//獲取當前所需要的canvas的寬高

width = map.getSize().width,

height = map.getSize().height;

function Line(opts) {

// this.message = opts.message;//裝備信息

// this.path = opts.path;//裝備的位置

this.tzArr = opts.tzArr;

}

//繪制軍標

Line.prototype.draw = function() {

var self = this;

var ctx = self.ctx;

var img = new Image();

//等待處理

// img.setAttribute("crossOrigin","")

img.onload = function() {

for (let i = 0; i < self.pixelList.length; i++) {

const item = self.pixelList[i]

ctx.drawImage(img, item.pixel.x, item.pixel.y, 32, 32);

}

// 存儲到這個的全局變量

}

img.src = base64Image.tzred;

}

//熱力圖繪制

Line.prototype.drawHot = function() {

var self = this;

var ctx = self.ctx;

var radius = 50;

for (let i = 0; i < self.jhArr.length; i++) {

const item = self.jhArr[i]

if(!item){

continue

}

ctx.beginPath()

ctx.arc(item.pixel.x, item.pixel.y, radius, 0, 2 * Math.PI);

ctx.closePath()

let radialGradient = ctx.createRadialGradient(item.pixel.x, item.pixel.y, 0, item.pixel.x, item.pixel.y,

radius);

radialGradient.addColorStop(0.0, "rgba(0,0,0,1)")

radialGradient.addColorStop(1.0, "rgba(0,0,0,0)")

ctx.fillStyle = radialGradient;

//權重對比算法,替換算法

// let globalAlpha = (value - min) / (max - min);

// ctx.globalAlpha = Math.max(Math.min(globalAlpha, 1), 0)

ctx.fill()

}

//自定義調色板

var paientCanvas = document.createElement('canvas')

var paientctx = paientCanvas.getContext('2d');

let gradentConfig = {

'0.2': 'rgba(0,0,255,0.2)',

'0.3': 'rgba(43,111,231,0.3)',

'0.4': 'rgba(2,192,241,0.4)',

'0.6': 'rgba(44,222,148,0.6)',

'0.8': 'rgba(254,237,83,0.8)',

'0.9': 'rgba(255,118,55,0.9)',

'1.0': 'rgba(255,64,28,1)',

}

paientCanvas.width = 256;

paientCanvas.height = 1;

var gradient = paientctx.createLinearGradient(0, 0, 256, 1)

for (var key in gradentConfig) {

gradient.addColorStop(key, gradentConfig[key])

}

paientctx.fillStyle = gradient;

paientctx.fillRect(0, 0, 256, 1)

//獲取到需要映射的imagedata

var imgdata = paientctx.getImageData(0, 0, 256, 1).data;

var img = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height)

var ctxImagedata = img.data

for (var i = 3; i < ctxImagedata.length; i += 4) {

var alpha = ctxImagedata[i]

var offset = alpha * 4;

if (!offset) {

continue

}

ctxImagedata[i - 3] = imgdata[offset]

ctxImagedata[i - 2] = imgdata[offset + 1]

ctxImagedata[i - 1] = imgdata[offset + 2]

}

//卡頓,需要點聚合的算法進行相應處理

ctx.putImageData(img, 0, 0, 0, 0, ctx.canvas.width, ctx.canvas.height)

}

//底層canvas添加

var brush = function brush() {

// 創建一個新的canvas

var baseCtx = baseLayer.canvas.getContext('2d');

if (!baseCtx) {

return;

}

//添加軍標

addLine();

baseCtx.clearRect(0, 0, width, height);

//獲取當前地圖層級

var zoom = map.getZoom();

self.lines.pixelList = [];

self.lines.tzArr.forEach((item) => {

self.lines.pixelList.push({

message: item.message,

pixel: map.pointToPixel(item.H)

})

})

self.lines.ctx = baseCtx

if (zoom > 12) {

self.lines.draw();

} else {

//將屏幕分為50*50的網格,并且確定左上角和右下角的點的位置

var pmWg = tool.cfpmFunc(baseCtx.canvas.width, baseCtx.canvas.height, 50)

//將網格內存在的點做進一步的篩選

// console.log(pmWg)

var jhArr = []

self.lines.tzArr.forEach((item) => {

var thisPixel = map.pointToPixel(item.H);

//篩選掉超出屏幕邊界的點

if (thisPixel.x < 0 || thisPixel.y < 0 || thisPixel.x > baseCtx.canvas.width || thisPixel.y > baseCtx.canvas

.height) {

return

}

//進一步篩選點

for (let k in pmWg) {

var itemWg = pmWg[k]

if (tool.jhFunc(thisPixel, itemWg, 50, 50)) {

if (jhArr[k]) {

continue;

} else {

jhArr[k] = {

message: item.message,

pixel: thisPixel

}

}

}

}

})

self.lines.jhArr = jhArr;

self.lines.drawHot();

}

};

var addLine = function addLine() {

// if (self.lines!=""&&!self.lines) return;

var dataset = options.data;

dataset.forEach((item, index) => {

item.H = new BMap.Point(item.lng, item.lat)

})

var line = new Line({

tzArr: dataset

})

self.lines = line;

};

self.init(userOptions, options);

baseLayer = new CanvasLayer({

map: map,

update: brush

});

this.clickEvent = this.clickEvent.bind(this);

this.bindEvent();

};

PointLine.prototype.init = function(settings, defaults) {

//合并參數

tool.merge(settings, defaults);

this.options = defaults;

};

PointLine.prototype.bindEvent = function(e) {

var map = this.map;

if (this.options.methods) {

if (this.options.methods.click) {

map.setDefaultCursor("default");

map.addEventListener('click', this.clickEvent);

}

if (this.options.methods.mousemove) {

map.setDefaultCursor("default");

map.addEventListener('mousemove', this.moveEvent);

}

}

};

PointLine.prototype.clickEvent = function(e) {

var self = this,

lines = self.lines.pixelList;

var curPt = e.pixel;

var arr = []

if (lines.length > 0) {

lines.forEach(function(marker, i) {

var markerPixel = marker.pixel;

var isOnMarker = tool.containStrokeImage(curPt, markerPixel)

if (isOnMarker) {

arr.push({

index: i,

marker: marker

})

}

});

}

if (arr.length > 1) {

var lastGod = tool.selectZjFunc(arr, curPt)

self.options.methods.click(e, arr[lastGod].marker.message);

return;

} else if (arr.length == 1) {

var lastGod = arr[0].marker.message

self.options.methods.click(e, arr[0].marker.message);

return;

} else {

return;

}

};

return PointLine;

})));

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372493.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372493.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372493.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

管理Jenkins作業配置

在JBoss工具和Developer Studio中&#xff0c;我們在Jenkins中管理許多構建作業。 實際上&#xff0c;對于3.2.x / 4.x和3.3.x / 5.x流&#xff0c;有195個以上的作業。 當我們開始建立明年的第一個里程碑時&#xff0c;我們將再產生40多個工作崗位。 這里是其中的一些&#xf…

Redis命令拾遺三(列表List類型)

本文版權歸博客園和作者吳雙本人共同所有。轉載和爬蟲請注明原文地址 Redis五種數據類型之列表類型Redis五種數據類型之列表類型。你可以存儲一個有序的字符串列表一類數據。比如你想展示你所存儲的所有文章中的前十條&#xff0c;當分頁取下一頁的時候&#xff0c;你也可以取接…

angular2安裝筆記

主要摘自&#xff1a;http://www.runoob.com/angularjs2/angularjs2-typescript-setup.html http://blog.csdn.net/lgpwwa/article/details/51788035 開始嘗試的時候npm install一直不能正常生成modules文件內的東東&#xff0c;后來試了多次才知道&#xff0c;大概是因為服務器…

計算機桌面上的聲音圖標沒了怎么辦,電腦聲音圖標不見了怎么辦超詳細教程

我們在用電腦或者平板看視頻、聽歌的時候&#xff0c;如果聲音不合適&#xff0c;大了或小了就會調節音量&#xff0c;除了可以選擇設備自帶的外部音量大小調節按鍵外&#xff0c;還可以用自帶的聲音圖標來調節&#xff0c;而屏幕上的聲音圖標是最方便的。如果屏幕上的聲音圖標…

XML解組基準:JAXB,STAx,Woodstox

介紹 上周末&#xff0c;我開始考慮如何以一種資源友好的方式處理大量XML數據。我要解決的主要問題是如何以塊的形式處理大型XML文件&#xff0c;同時提供上游/下游系統&#xff0c;需要處理一些數據。 當然&#xff0c;我已經使用JAXB技術已有幾年了。 使用JAXB的主要優點是可…

ArcGIS空間分析工具

1. 3D分析 1.1. 3D Features toolset 工具 工具 描述 3D Features toolset &#xff08;3D 要素工具集&#xff09; Add Z Information 添加 Z 信息 添加關于具有 Z 值的要素類中的要素的高程屬性的信息。 Buffer 3D 3D 緩沖 圍繞點或線創建三維緩沖區以生成球形或圓柱形的多面…

SHELL編程中如果路徑名遇到括號

linux中&#xff0c;如果文件名中帶括號&#xff0c;應先對括號處理&#xff0c;在“(”和“&#xff09;”前加上“\”。Bracket_Handle給出了處理方法&#xff1a;sub Bracket_Handle { my ($tmp_name) _; $tmp_name ~ s/\(/\\\(/g; # ( > \( $tmp_name ~ s/\)/…

計算機科學家和心理學家合作,生物智能與人工智能之間的合作

李飛飛帶領的斯坦福“以人為本AI研究院”發表文章&#xff0c;探討人工智能、神經科學、心理學和認知科學&#xff0c;以及數學、物理和社會科學等學科過去是怎樣、以及未來將如何共同合作&#xff0c;追求對理解和創造智能系統的探索。最初的類人智能出現在幾百萬年前的非洲大…

JavaOne 2012 – 2400小時! 一些建議

您可能已經看到JavaOne 2012 Content Catalog在線。 計劃委員會經過數周的艱苦工作&#xff0c;對每個提案進行了分類&#xff0c;審查&#xff0c;評分和討論&#xff0c;我們終于為您設置了&#xff08;希望如此&#xff09;有趣的組合。 整整105天或2400個小時&#xff0c;我…

C語言

自定義函數 &#xff08;1&#xff09;在函數使用之前定義函數 &#xff08;2&#xff09;先聲明這個函數&#xff0c;然后使用&#xff0c;使用的代碼后面定義這個函數 include <stdio.h> void syahello(){ println("helloo"); }int main(){ sayhello(); // 調…

【Centos】yum 安裝mariaDB

[dream361za ~]$ sudo yum search mariadb #查找需安裝的包 mariadb-libs.x86_64 : The shared libraries required for MariaDB/MySQL clients #mariadb客戶端 mariadb-server.x86_64 : The MariaDB server and related files #mariadb服務 [dream361za ~]$ sudo yum instal…

對口升學計算機組裝與維護,對口升學信息技術(計算機)類2017年專業課考試大綱...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓山西省中等職業學校對口升學考試大綱信息技術類專業本考試大綱是以國家中等職業學校計算機專業教學指導方案為依據&#xff0c;以中等職業教育國家規劃教材《物理(電工電子類)》(李廣華、郝翠蘭主編&#xff0c;電子工業出版社)、《…

網頁性能優化(初窺)

面試的時候經常會被問到的有關于前端性能優化這一塊的問題&#xff0c;扯扯個人的理解 第一條&#xff1a;減少 HTTP 次數的請求 80%的最終用戶響應時間花在前端程序上&#xff0c;而其大部分時間則花在各種頁面元素&#xff0c; 如圖像、 樣式表、 腳本和 Flash 等&#xff0c…

STM32F10x_硬件I2C主從通信(輪詢發送,中斷接收)

Ⅰ、寫在前面 關注我分享文章的朋友應該知道我在前面講述過&#xff08;軟件、硬件&#xff09;I2C主機控制從機EEPROM的例子。在I2C通信主機控制程序是比較常見的一種&#xff0c;可以說在實際項目中&#xff0c;很多應用都會使用到I2C通信。但在實際項目中作為I2C從機的應用相…

JavaFX 2:創建登錄表單

在本教程中&#xff0c;我將使用JavaFX 2和CSS設計漂亮的Login Form 。 它是經典的登錄表單&#xff0c;帶有用戶名和密碼以及登錄按鈕。 為了遵循本教程&#xff0c;我強烈建議您查看以下這些教程&#xff1a; Eclipse IDE中的JavaFX 2入門 JavaFX 2&#xff1a;HBox JavaFX…

c html導出成word,html轉word-html如何轉換成WORD

1、打開HTML文件&#xff0c;點擊菜單欄文件→使用MicrosoftOfficeWord編輯&#xff0c;之后系統會自動打開Word并顯示HTML文件的內容&#xff0c;這是保存即可。2、如果找不到“使用MicrosoftOfficeWord編輯”的話&#xff0c;點擊菜單欄工具→Internet選項→程序→HTML編輯器…

怎么解決tomcat占用8080端口問題

怎么解決tomcat占用8080端口問題 相信很多朋友都遇到過這樣的問題吧&#xff0c;tomcat死機了&#xff0c;重啟eclipse之后&#xff0c;發現Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are already in use.The server may already be running in…

ADO Recordset 對象鏈接

http://baike.baidu.com/link?url4Xdc46R8M5uj-BbOGaH761N5oDEYlGQJFeR2WbPwx1iQBusAUKU3qbWcHZCMmayatj9nzxPW7HdPToL6roD3Y_ 轉載于:https://www.cnblogs.com/loanhicks/p/5788451.html

mvc4 html.beginform,MVC4 Html.BeginForm在Internet Explorer中提交按鈕 9不工

我已經寫在ASP.NET MVC4 /剃刀的形式。 該表格后很完善在Firefox和Chrome&#xff0c;但由于某種原因在Internet Explorer 10和11&#xff0c;“提交”按鈕沒有反應。 (Internet Explorer 9的作品也不錯)。這是我的看法形式的樣子&#xff1a;using (Html.BeginForm("MyAc…

頁面傳值的方法 和JSON與字符串和對象之間的轉換

json數據解析 就是將json轉換為數組或對象 json數據序列化 就是將數組或對象轉化為json轉載于:https://www.cnblogs.com/yaomengli/p/6678709.html