以上代码出现了问题函数或变量 'a1' 无法识别。 出错 untitled (第 78 行) eqn = u1 == u30_1 + 3*a1*u21_1 + 3*a^2*u12_1 + a^3*u03_1;

时间: 2023-12-18 15:11:20 浏览: 126
在第78行之前添加 `syms a1;`语句,即可解决问题函数或变量 'a1' 无法识别的问题。修改后的代码如下: ```matlab [m,n] = size(I1); for i = 1:m for j = 1:n u12_1 = sum(sum((i-x_bar_1)^1*(j-y_bar_1)^2*I1)); u21_1 = sum(sum((i-x_bar_1)^2*(j-y_bar_1)^1*I1)); u03_1 = sum(sum((i-x_bar_1)^0*(j-y_bar_1)^3*I1)); u30_1 = sum(sum((i-x_bar_1)^3*(j-y_bar_1)^0*I1)); u12_2 = sum(sum((i-x_bar_2)^1*(j-y_bar_2)^2*I2)); u21_2 = sum(sum((i-x_bar_2)^2*(j-y_bar_2)^1*I2)); u03_2 = sum(sum((i-x_bar_2)^0*(j-y_bar_2)^3*I2)); u30_2 = sum(sum((i-x_bar_2)^3*(j-y_bar_2)^0*I2)); u12_3 = sum(sum((i-x_bar_3)^1*(j-y_bar_3)^2*I3)); u21_3 = sum(sum((i-x_bar_3)^2*(j-y_bar_3)^1*I3)); u03_3 = sum(sum((i-x_bar_3)^0*(j-y_bar_3)^3*I3)); u30_3 = sum(sum((i-x_bar_3)^3*(j-y_bar_3)^0*I3)); u12_4 = sum(sum((i-x_bar_4)^1*(j-y_bar_4)^2*I4)); u21_4 = sum(sum((i-x_bar_4)^2*(j-y_bar_4)^1*I4)); u03_4 = sum(sum((i-x_bar_4)^0*(j-y_bar_4)^3*I4)); u30_4 = sum(sum((i-x_bar_4)^3*(j-y_bar_4)^0*I4)); end end syms a1; eqn = u1 == u30_1 + 3*a1*u21_1 + 3*a1^2*u12_1 + a1^3*u03_1; eqn = subs(eqn, u1, 0); a1 = solve(eqn, a1); ```
阅读全文

相关推荐

text/plain
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>便民设施系统</title> <meta http-equiv="content-type" content="text/html; charset=gbk"/> <script src="http://ditu.google.com/maps?file=api&v=2& key=ABQIAAAAzr2EBOXUKnm_jVnk0OJI7xSosDVG8KKPE1-m51RBrvYughuyMxQ- i1QfUnH94QxWIa6N4U6MouMmBA&h1=zh-CN" type="text/javascript"></script> <script type="text/javascript"> //实现框选放大缩小功能 function DragZoomControl(opts_boxStyle, opts_other, opts_callbacks) { this.globals = { draggingOn: false, cornerTopDiv: null, cornerRightDiv: null, cornerBottomDiv: null, cornerLeftDiv: null, mapPosition: null, outlineDiv: null, mapWidth: 0, mapHeight: 0, mapRatio: 0, startX: 0, startY: 0, borderCorrection: 0 }; //设置边框的style this.globals.style = { opacity: .2, fillColor: "#000", border: "2px solid blue" }; var style = this.globals.style; for (var s in opts_boxStyle) { style[s]=opts_boxStyle[s]; } var borderStyleArray = style.border.split(' '); style.outlineWidth = parseInt(borderStyleArray[0].replace(/\D/g,'')); style.outlineColor = borderStyleArray[2]; style.alphaIE = 'alpha(opacity=' + (style.opacity * 100) + ')'; this.globals.backStack=[]; //其他选项 this.globals.options={ buttonHTML: 'zoom ...', buttonStartingStyle: {width: '52px', border: '1px solid black', padding: '2px'}, buttonStyle: {background: '#FFF'}, backButtonHTML: 'zoom back', backButtonStyle: {background: '#FFF', display: 'none'}, buttonZoomingHTML: 'Drag a region on the map', buttonZoomingStyle: {background: '#FF0'}, overlayRemoveTime: 6000, backButtonEnabled: false, stickyZoomEnabled: false, rightMouseZoomOutEnabled: false }; for (var s in opts_other) { this.globals.options[s] = opts_other[s] } //callbacks:buttonclick,dragstart,dragging,dragend,backbuttonclick if (opts_callbacks == null) { opts_callbacks = {} } this.globals.callbacks = opts_callbacks; } DragZoomControl.prototype = new GControl(); /** *方法 */ DragZoomControl.prototype.saveMapContext = function(text) { if (this.globals.options.backButtonEnabled) { this.saveBackContext_(text,true); this.globals.backButtonDiv.style.display = 'block'; } }; DragZoomControl.prototype.initiateZoom = function() {this.buttonclick_()}; DragZoomControl.prototype.initiateZoomBack = function() { if (this.globals.options.backButtonEnabled) this.backbuttonclick_()}; DragZoomControl.prototype.initButton_ = function(buttonContainerDiv) { var G = this.globals; var buttonDiv = document.createElement('div'); buttonDiv.innerHTML = G.options.buttonHTML; DragZoomUtil.style([buttonDiv], {cursor: 'pointer', zIndex:200}); DragZoomUtil.style([buttonDiv], G.options.buttonStartingStyle); DragZoomUtil.style([buttonDiv], G.options.buttonStyle); buttonContainerDiv.appendChild(buttonDiv); return buttonDiv; }; //初始化后退按钮 DragZoomControl.prototype.initBackButton_ = function(buttonContainerDiv) { var G = this.globals; var backButtonDiv = document.createElement('div'); backButtonDiv.innerHTML = G.options.backButtonHTML; DragZoomUtil.style([backButtonDiv], {cursor: 'pointer', zIndex:200}); DragZoomUtil.style([backButtonDiv], G.options.buttonStartingStyle); DragZoomUtil.style([backButtonDiv], G.options.backButtonStyle); buttonContainerDiv.appendChild(backButtonDiv); return backButtonDiv; }; //设置按钮模式 DragZoomControl.prototype.setButtonMode_ = function(mode){ var G = this.globals; if (mode == 'zooming') { G.buttonDiv.innerHTML = G.options.buttonZoomingHTML; DragZoomUtil.style([G.buttonDiv], G.options.buttonStartingStyle); DragZoomUtil.style([G.buttonDiv], G.options.buttonZoomingStyle); } else { G.buttonDiv.innerHTML = G.options.buttonHTML; DragZoomUtil.style([G.buttonDiv], G.options.buttonStartingStyle); DragZoomUtil.style([G.buttonDiv], G.options.buttonStyle); } }; //初始化控件 DragZoomControl.prototype.initialize = function(map) { var G = this.globals; var me = this; var mapDiv = map.getContainer(); // Create div for both buttons var buttonContainerDiv = document.createElement("div"); DragZoomUtil.style([buttonContainerDiv], {cursor: 'pointer', zIndex: 150}); // create and init the zoom button //DOM:button var buttonDiv = this.initButton_(buttonContainerDiv); // create and init the back button //DOM:button var backButtonDiv = this.initBackButton_(buttonContainerDiv); // Add the two buttons to the map mapDiv.appendChild(buttonContainerDiv); //DOM:map covers var zoomDiv = document.createElement("div"); var DIVS_TO_CREATE = ['outlineDiv', 'cornerTopDiv', 'cornerLeftDiv', 'cornerRightDiv', 'cornerBottomDiv']; for (var i=0; is in case we inherit text-align:center from map in IE. DragZoomUtil.style([G.mapCover, G.cornerTopDiv, G.cornerRightDiv, G.cornerBottomDiv, G.cornerLeftDiv], {top: '0px', left: '0px', width: G.mapWidth + 'px', height: G.mapHeight +'px'}); }; //初始化style DragZoomControl.prototype.initStyles_ = function(){ var G = this.globals; DragZoomUtil.style([G.mapCover, G.cornerTopDiv, G.cornerRightDiv, G.cornerBottomDiv, G.cornerLeftDiv], {filter: G.style.alphaIE, opacity: G.style.opacity, background:G.style.fillColor}); G.outlineDiv.style.border = G.style.border; }; //框选button的click事件 DragZoomControl.prototype.buttonclick_ = function(){ var G = this.globals; G.backButtonDiv.style.display='none'; if (G.mapCover.style.display == 'block') { // reset if clicked before dragging this.resetDragZoom_(); if (G.options.backButtonEnabled) { this.restoreBackContext_(); // pop the backStack on a button reset if (G.backStack.length==0) G.backButtonDiv.style.display='none'; } } else { this.initCover_(); if ( G.options.backButtonEnabled ) this.saveBackContext_(G.options.backButtonHTML,false); // save the map context for back button } }; //后退按钮的click事件 DragZoomControl.prototype.backbuttonclick_ = function(){ var G = this.globals; if (G.options.backButtonEnabled && G.backStack.length > 0) { this.restoreBackContext_(); // invoke the callback if provided if (G.callbacks['backbuttonclick'] != null) { G.callbacks.backbuttonclick(G.methodCall); } } }; //后退保存功能 DragZoomControl.prototype.saveBackContext_ = function(text,methodCall) { var G = this.globals; var backFrame = {}; backFrame["center"] = G.map.getCenter(); backFrame["zoom"] = G.map.getZoom(); backFrame["maptype"] = G.map.getCurrentMapType(); backFrame["text"] = G.backButtonDiv.innerHTML; // this saves the previous button text backFrame["methodCall"] = methodCall; //This determines if it was an internal or method call G.backStack.push(backFrame); G.backButtonDiv.innerHTML = text; // Back Button is turned on in resetDragZoom_() }; //后退功能 DragZoomControl.prototype.restoreBackContext_ = function() { var G = this.globals; var backFrame = G.backStack.pop(); G.map.setCenter(backFrame["center"],backFrame["zoom"],backFrame["maptype"]); G.backButtonDiv.innerHTML = backFrame["text"]; G.methodCall = backFrame["methodCall"]; if (G.backStack.length==0) G.backButtonDiv.style.display = 'none'; // if we're at the top of the stack, hide the back botton }; //在地图上显示叠加层 DragZoomControl.prototype.initCover_ = function(){ var G = this.globals; G.mapPosition = DragZoomUtil.getElementPosition(G.map.getContainer()); this.setDimensions_(); this.setButtonMode_('zooming'); DragZoomUtil.style([G.mapCover], {display: 'block', background: G.style.fillColor}); DragZoomUtil.style([G.outlineDiv], {width: '0px', height: '0px'}); //invoke callback if provided if(G.callbacks['buttonclick'] != null){ G.callbacks.buttonclick(); } }; //获得鼠标的坐标 DragZoomControl.prototype.getRelPos_ = function(e) { var pos = DragZoomUtil.getMousePosition(e); var G = this.globals; return {top: (pos.top - G.mapPosition.top), left: (pos.left - G.mapPosition.left)}; }; //当用户拉框时求的矩形 DragZoomControl.prototype.getRectangle_=function(startX,startY,pos,ratio){ var left=false; var top=false; var dX=pos.left-startX; var dY=pos.top-startY; if(dX<0){ dX=dX*-1; top=true; } delta=dX>dY?dX:dY; return{ startX:startX, startY:startY, endX:startX+delta, endY:startY+parseInt(delta*ratio), width:delta, height:parseInt(delta*ratio), left:left, top:top } }; //重置Buttonde的CSS DragZoomControl.prototype.resetDragZoom_=function(){ var G=this.globals; DragZoomUtil.style([G.mapCover,G.cornerTopDiv,G.cornerRightDiv,G.cornerBottomDiv,G.cornerLeftDiv], {display:'none',opacity:G.style.opacity,fillter:G.style.alphaIE}); G.outlineDiv.style.display='none'; this.setButtonMode_('normal'); if(G.options.backButtonEnabled && (G.backStack.length>0))G.backButtonDiv.style.display='block'; }; var DragZoomUtil={}; //根据ID取得元素 DragZoomUtil.gE=function(sId){ return document.getElementById(sId); }; //取得DOM元素的绝对位置 DragZoomUtil.getMousePosition=function(e){ var posX=0; var posY=0; if(!e)var e=window.event; if(e.pageX||e.pageY){ posX=e.pageX; posY=e.pageY; }else if(e.clientX||e.clientY){ posX=e.clientX+(document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft); posY=e.clientY+(document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop); } return {left:posX,top:posY}; }; //取得某一DOM元素的位置 DragZoomUtil.getElementPosition=function(element){ var leftPos=element.offsetLeft; var topPos=element.offsetTop; var parElement=element.offsetParent; while(parElement!=null){ leftPos+=parElement.offsetLeft; topPos+=parElement.offsetTop; parElement=parElement.offsetParent; } return{left:leftPos,top:topPos}; }; //将style应用于DOM元素 DragZoomUtil.style=function(elements,styles){ if(typeof(elements)=='string'){ eiements=DragZoomUtil.getManyElements(elements); } for(var i=0;i<elements.length;i++){ for(var s in styles){ elements[i].style[s]=styles[s]; } } }; //根据DOM元素的集合ID取得DOM元素 DragZoomUtil.getManyElements=function(idsString){ var idsArray=idsString.split(','); var eiement=[]; for(var i=0;i<idsArray.length;i++){ eiements[elements.length]=DragZoomUtil.gE(idsArray[i]) }; return eiement; }; //实现搜索功能 var geocoder=null; var map; var contextmenu; var GoogleGeocoder=null; var GGeoAddressAccuracy=["Unkown location.", "Country level accuracy.", "Region (state,province,prefecture,etc.)level accuracy.", "Sub-region(country,municipality,etc.)level accuracy.", "Town(city,village)level accuracy.", "Post code (zip code)level accuracy.", "Street level accuracy.", "Intersection level accuracy.", "Address level accuracy.", "Premise (building name,property name,shopping center,etc.)level accuracy." ]; var status=[]; status[G_GEO_SUCCESS]="Success"; status[G_GEO_MISSING_ADDRESS]="Missing Address"; status[G_GEO_UNKNOWN_ADDRESS]="Unknown Address"; status[G_GEO_UNAVAILABLE_ADDRESS]="Unavailable Address"; status[G_GEO_BAD_KEY]="Bad Key"; status[G_GEO_TOO_MANY_QUERIES]="Too Many Queries"; status[G_GEO_SERVER_ERROR]="Server Error"; function showLocation(){ //清除marker map.clearOverlays(); document.getElementById('divOutput').innerHTML="搜索中..."; var address=document.getElementById('txtAddress').value; geocoder.getLocations(address,cb_showLocation); } function cb_showLocation(result){ //显示结果 if(result.Status.code==G_GEO_SUCCESS){ //成功表明 document.getElementById("divOutput").innerHTML="成功("+result.Placemark.length+")
"; for(var i=0;i<result.Placemark.length;i++){ var lat=result.Placemark[i].Point.coordinates[1]; var lng=result.Placemark[i].Point.coordinates[0]; var address=result.Placemark[i].address;//地址 var point=new GLatLng(lat,lng); var marker=new GMarker(point,{title:i+1});; map.addOverlay(marker); document.getElementById("divOutput").innerHTML+=((i+1)+""+ address+""+point.toString()+"
"); //(address"
go
"); }//for }//if else{ document.getElementById("divOutput").innerHTML=result.Status.code; }//else } /** * 这个例子演示了 Google Map API 的以下功能: * * 可拖拽的标注 * * 在地图上覆盖折线 * * 计算地理距离 * * 事件处理(单击、拖拽) * * 消息提示窗口(气泡窗口) * * 利用链表维护各种对象 * * 自定义控件 * * 注意:为了在 IE6 中正常显示折线,必须在网页的 <HTML> 标签中加上: * <html xmlns:v="urn:schemas-microsoft-com:vml"> * * @author haogang */ /** * 本示例用一个双向链表维护用户设定的标注,能够容易的实现标注的遍历和删除 * 每个链表结点 m 有如下字段: * m.prev 前驱标注 * m.next 后继标注 * m.segPrev 连接本标注与前驱标注的线段 * m.segNext 连接本标注与后继标注的线段 */ function GRulerControl() { var me = this; // 可国际化的字符串 me.RESET_BUTTON_TITLE_ = '清除所有测距标注'; me.ENABLE_BUTTON_TITLE_ = '添加测距标注已启用,单击这里禁用'; me.DISABLE_BUTTON_TITLE_ = '添加测距标注已禁用,单击这里启用'; me.DELETE_BUTTON_TITLE_ = '删除'; me.RESET_BUTTON_IMAGE_ = 'images/ruler_clear.png'; me.ENABLE_BUTTON_IMAGE_ = 'images/ruler_enabled.png'; me.DISABLE_BUTTON_IMAGE_ = 'images/ruler_disabled.png'; me.BACKGROUND_IMAGE_ = 'images/ruler_background.png' me.KILOMETER_ = '公里'; me.METER_ = '米'; } GRulerControl.prototype = new GControl(); /** * 初始化标尺控件 */ GRulerControl.prototype.initialize = function(map) { var me = this; var container = document.createElement('div'); /** *默认位置在右上角 */ GRulerControl.prototype.getDefaultPosition = function() { return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(8, 30)); } me.setButtonStyle_(container); // “启用/禁用”按钮 var btnEnable = document.createElement('img'); btnEnable.width = btnEnable.height = 20; GEvent.addDomListener(btnEnable, 'click', function() { me.setEnabled(!me.isEnabled()); } ); container.appendChild(btnEnable); // “重置”按钮 var btnReset = document.createElement('img'); btnReset.width = btnReset.height = 20; btnReset.src = me.RESET_BUTTON_IMAGE_; btnReset.title = me.RESET_BUTTON_TITLE_; GEvent.addDomListener(btnReset, 'click', function() { me.reset(); } ); container.appendChild(btnReset); // 距离标签 var txtInfo = document.createElement('div'); txtInfo.style.font = 'small Arial'; txtInfo.style.fontWeight = 'bold'; txtInfo.style.fontSize = '9pt'; txtInfo.style.width = "82px"; container.appendChild(txtInfo); // 初始化内部变量 map.rulerControl_ = me; me.map_ = map; me.head_ = new Object(); me.tail_ = new Object(); me.head_.next_ = me.tail_; me.tail_.prev_ = me.head_; me.btnEnable_ = btnEnable; me.btnReset_ = btnReset; me.txtInfo_ = txtInfo; me.setEnabled(true); map.getContainer().appendChild(container); return container; } /** * 设置控件的格式 */ GRulerControl.prototype.setButtonStyle_ = function(button) { button.style.backgroundImage = 'url(' + this.BACKGROUND_IMAGE_ + ')'; button.style.font = "small Arial"; button.style.border = "1px solid #888888"; button.style.padding = "4px"; button.style.textAlign = "right"; button.style.cursor = "pointer"; } /** * 用恰当的格式表示距离 */ GRulerControl.prototype.formatDistance_ = function(len) { var me = this; len = Math.round(len); if (len <= 1000) { return len + ' ' + me.METER_; } else if (len <= 1000000) { return len / 1000 + ' ' + me.KILOMETER_; } return Math.round(len / 1000) + ' ' + me.KILOMETER_; } /** * 格式化角度为字符串 */ GRulerControl.prototype.formatDegree_ = function(value) { value = Math.abs(value); var v1 = Math.floor(value); var v2 = Math.floor((value - v1) * 60); var v3 = Math.round((value - v1) * 3600 % 60); return v1 + '°' + v2 + '\'' + v3 + '"'; } /** * 格式化经纬度为字符串 */ GRulerControl.prototype.formatLatLng_ = function(pt) { var me = this; var latName, lngName; var lat = pt.lat(); var lng = pt.lng(); latName = lat >= 0 ? '北纬' : '南纬'; lngName = lng >= 0 ? '东经' : '西经'; return lngName + me.formatDegree_(lng) + ',' + latName + me.formatDegree_(lat); } /** * 返回控件的默认位置 */ GRulerControl.prototype.getDefaultPosition = function() { return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(8, 8)); } /** * 返回控件是否已启用 */ GRulerControl.prototype.isEnabled = function() { return this.enabled_; } /** * 设置控件的“启用/禁用"状态 */ GRulerControl.prototype.setEnabled = function(value) { var me = this; if (value == me.enabled_) return; me.enabled_ = value; if (me.enabled_) { me.mapClickHandle_ = GEvent.addListener(me.map_, 'click', me.onMapClick_); me.txtInfo_.style.display = 'block'; me.btnReset_.style.display = 'inline'; me.btnEnable_.src = me.ENABLE_BUTTON_IMAGE_; me.btnEnable_.title = me.ENABLE_BUTTON_TITLE_; me.updateDistance_(); } else { GEvent.removeListener(me.mapClickHandle_); me.txtInfo_.style.display = 'none'; me.btnReset_.style.display = 'none'; me.btnEnable_.src = me.DISABLE_BUTTON_IMAGE_; me.btnEnable_.title = me.DISABLE_BUTTON_TITLE_; } } /** * 事件处理函数:当用户单击地图时,要在该位置添加一个标注 */ GRulerControl.prototype.onMapClick_ = function(marker, point) { var me = this.rulerControl_; // 如果用户单击的是标注,不再这里处理 if (marker) return; // 创建标注,并添加到链表中 var newMarker = new GMarker(point, {draggable: true}); var pos = me.tail_.prev_; newMarker.prev_ = pos; newMarker.next_ = pos.next_; pos.next_.prev_ = newMarker; pos.next_ = newMarker; // 为标注添加事件处理函数:拖拽标注时要更新连接线段和距离 GEvent.addListener(newMarker, 'dragend', function() { me.map_.closeInfoWindow(); me.updateSegments_(newMarker); me.updateDistance_(); } ); // 为标注添加事件处理函数:单击标注时要显示气泡窗口 GEvent.addListener(newMarker, 'click', function() { newMarker.openInfoWindow(me.createInfoWindow_(newMarker)); } ); // 将创建的标注添加到地图中 me.map_.addOverlay(newMarker); if (newMarker.prev_ != me.head_) { // 如果这不是第一个标注,则创建连接到上一个标注的线段,并显示在地图中 var segment = [newMarker.prev_.getPoint(), point]; newMarker.segPrev_ = new GPolyline(segment); newMarker.prev_.segNext_ = newMarker.segPrev_; me.map_.addOverlay(newMarker.segPrev_); // 更新距离显示 me.updateDistance_(); } } /** * 统计总距离,并显示在网页中 */ GRulerControl.prototype.updateDistance_ = function() { var me = this; var len = me.getDistance(); // 结果显示在网页中 me.txtInfo_.innerHTML = me.formatDistance_(len); } /** * 遍历链表,统计总距离 */ GRulerControl.prototype.getDistance = function() { var me = this; var len = 0; // 周游链表,累计相邻两个标注间的距离 for (var m = me.head_; m != me.tail_; m = m.next_) { if (m.prev_ && m.prev_.getPoint) len += m.prev_.getPoint().distanceFrom(m.getPoint()); } return len; } /** * 清除所有标注,初始化链表 */ GRulerControl.prototype.reset = function() { var me = this; for (var m = me.head_.next_; m != me.tail_; m = m.next_) { me.map_.removeOverlay(m); if (m.segNext_) me.map_.removeOverlay(m.segNext_); } me.head_ = new Object(); me.tail_ = new Object(); me.head_.next_ = me.tail_; me.tail_.prev_ = me.head_; me.updateDistance_(); } /** * 事件处理函数:当用户拖拽标注、标注坐标改变时被调用,这里要更新与该标注连接的线段 * @param {GMarker} marker 被拖拽的标注 */ GRulerControl.prototype.updateSegments_ = function(marker) { var me = this; var segment; // 更新连接前驱的线段 if (marker.segPrev_ && marker.prev_.getPoint) { // 从地图上删除旧的线段 me.map_.removeOverlay(marker.segPrev_); // 根据标注的当前坐标构造新的线段,并更新链表结点的相关字段 segment = [marker.prev_.getPoint(), marker.getPoint()]; marker.segPrev_ = new GPolyline(segment); marker.prev_.segNext_ = marker.segPrev_; // 将新线段添加到地图中 me.map_.addOverlay(marker.segPrev_); } // 更新连接后继的线段,与上类似 if (marker.segNext_ && marker.next_.getPoint) { me.map_.removeOverlay(marker.segNext_); segment = [marker.getPoint(), marker.next_.getPoint()]; marker.segNext_ = new GPolyline(segment); marker.next_.segPrev_ = marker.segNext_; me.map_.addOverlay(marker.segNext_); } } /** * 为气泡提示窗口创建 DOM 对象,包括标注的坐标和“删除”按钮 * @param {GMarker} marker 对应的标注 */ GRulerControl.prototype.createInfoWindow_ = function(marker) { var me = this; // 为气泡提示窗口创建动态 DOM 对象,这里我们用 DIV 标签 var div = document.createElement('div'); div.style.fontSize = '10.5pt'; div.style.width = '250px'; div.appendChild( document.createTextNode(me.formatLatLng_(marker.getPoint()))); var hr = document.createElement('hr'); hr.style.border = 'solid 1px #cccccc'; div.appendChild(hr); // 创建“删除”按钮 var lnk = document.createElement('div'); lnk.innerHTML = me.DELETE_BUTTON_TITLE_; lnk.style.color = '#0000cc'; lnk.style.cursor = 'pointer'; lnk.style.textDecoration = 'underline'; // 为“删除”按钮添加事件处理:调用 removePoint() 并重新计算距离 lnk.onclick = function() { me.map_.closeInfoWindow(); me.removePoint_(marker); me.updateDistance_(); }; div.appendChild(lnk); // 当用户关闭气泡时 Google Map API 会自动释放该对象 return div; } /** * 事件处理函数:当用户选择删除标注时被调用,这里要删除与该标注连接的线段 * @param {GMarker} marker 要删除的标注 */ GRulerControl.prototype.removePoint_ = function(marker) { var me = this; // 先从地图上删除该标注 me.map_.removeOverlay(marker); // 对于中间结点,还要把它的前驱和后继用线段连接起来 if (marker.prev_.getPoint && marker.next_.getPoint) { var segment = [marker.prev_.getPoint(), marker.next_.getPoint()]; var polyline = new GPolyline(segment); marker.prev_.segNext_ = polyline; marker.next_.segPrev_ = polyline; me.map_.addOverlay(polyline); } marker.prev_.next_ = marker.next_; marker.next_.prev_ = marker.prev_; if (marker.segPrev_) me.map_.removeOverlay(marker.segPrev_); if (marker.segNext_) me.map_.removeOverlay(marker.segNext_); } </script> <script type="text/javascript"> function load(){ //检查浏览器的兼容性 if(GBrowserIsCompatible()){ //加载地图 map=new GMap2(document.getElementById("map_canvas")); //设置地图的中心坐标 var center=new GLatLng(24.49933,118.13800); map.setCenter(center,12); //设置地图的缩放工具 map.setUIToDefault(); //添加缩略图 map.addControl(new GOverviewMapControl()); //激活地图的双击放大功能和支持滑轮缩放 map.enableDoubleClickZoom(); map.enableScrollWheelZoom(); //给地图添加右键菜单 createContextMenu(map); //位于左上角 var topLeft=new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(0,0)); //添加地址导航控件 map.addControl(new GNavLabelControl(),topLeft); //添加自定义的控件 map.addControl(new GRulerControl()); //定义一个框选缩放控件样式 var styleOpts={}; //定义框选控件的参数 var otherOpts={}; //设置按钮的名称 otherOpts.buttonHTML='框选缩放'; //设置点击后的名称 otherOpts.buttonZoomingHTML='请在地图上拉一个框'; //支持连续框选缩放 otherOpts.stickyZoomEnabled=true; //设置拉框清除的时间间隔 otherOpts.overlayRemoveTime=60; //拉框时地图的透明度,取值从0~1 styleOpts.opacity=0; //支持右键啦框缩小地图 otherOpts.rightMouseZoomOutEnabled=true; var zcontrol=new DragZoomControl(styleOpts,otherOpts,{}); //位于左下角 var bottomLeft=new GControlPosition(G_ANCHOR_BOTTOM_LEFT,new GSize(0,0)); //添加自定义的控件 map.addControl(zcontrol,bottomLeft); //初始化GClientGeocoder对象 GoogleGeocoder=new GClientGeocoder(); var icon=new GIcon(); html='这是什么'; icon.image="http://labs.google.com/ridefinder/images/mm_20_red.png"; icon.iconSize=new GSize(21,29); var marker=createMarker(point,icon,html); var point=marker.getPoint(112.429714,39.934522); map.addOverlay(marker); geocoder=new GClientGeocoder(); var marker=new GMarker(center,{draggable:true}); map.addOverlay(marker); document.getElementById("lat").innerHTML=center.lat().toFixed(5); document.getElementById("lng").innerHTML=center.lng().toFixed(5); GEvent.addListener(marker,"dragend",function(){ var point=marker.getPoint(); map.panTo(point); document.getElementById("lat").innerHTML=point.lat().toFixed(5); document.getElementById("lng").innerHTML=point.lng().toFixed(5); }); GEvent.addListener(map,"moveend",function(){ map.clearOverlays(); var center=map.getCenter(); var marker=new GMarker(center,{draggable:true}); map.addOverlay(marker); document.getElementById("lat").innerHTML=center.lat().toFixed(5); document.getElementById("lng").innerHTML=center.lng().toFixed(5); GEvent.addListener(marker,"dragend",function(){ var point=marker.getPoint(); map.panTo(point); document.getElementById("lat").innerHTML=point.lat().toFixed(5); document.getElementById("lng").innerHTML=point.lng().toFixed(5); }); }); } else alert("error"); } //创建右键菜单,参数为地图对象,即为该地图添加右键菜单功能 function createContextMenu(map){ //右键菜单其实是一个DIV contextmenu=document.createElement("div"); //初始创建时右键菜单不可见 contextmenu.style.visibility="hidden"; //设置右键菜单的背景色及宽度 contextmenu.style.background="#ffffff"; contextmenu.style.border="1px solid #8888FF"; //获取地图对象的容器,并将菜单的DIV添加上去,但此时的菜单中不可见的 map.getContainer().appendChild(contextmenu); //为地图的右键添加事件侦听。当右键点击地图时,在地图右键点击的地方把菜单显示出来 GEvent.addListener(map,"singlerightclick",function(pixel,title){ //获取右键点击时的坐标位置(指像素) clickedPixel=pixel; var x=pixel.x; var y=pixel.y; //如果右键点击达到了屏幕的边界,调整菜单的位置 if(x>map.getSize().width-120) { x=map.getSize().width-120 } if(y>map.getSize().height-100) { y=map.getSize().height-100 } //实例化一个地图的位置控件 var pos=new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(x,y)); //把菜单DIV作为对象传递给地图位置控件 pos.apply(contextmenu); //把菜单设置为可见 contextmenu.style.visibility="visible"; }); //为地图添加click事件侦听器,当单击地图时,把菜单隐藏 GEvent.addListener(map,"click",function(){ contextmenu.style.visiblity="hidden"; }); } function createMarker(point,baseIcon,html){ var icon=new GIcon(baseIcon); var marker=new GMarker(point,icon); GEvent.addListener(marker,"click",function(){ marker.openInfoWindowHtml(html); }); return marker; } //初始化地图 window.onload=load; //卸载地图 window.onunload=GUnload; </script> </head> <body onload="load()" onunload="GUnload()" topmargin="0" leftmargin="0"> 厦门旅游服务系统 查询地址:<input type="text" id="txtAddress" name="txtAddress" size="40" /> <input type="button" value="查询" onclick="showLocation();"/> 提示:单击您的当前位置和每个便民设施标注点通过测量距离选择您要的路线 用鼠标拖拉地图中心的红色气球标记就可以显示所在位置的经纬度坐标数据 纬度: 经度: </body> </html>

最新推荐

recommend-type

火炬连体网络在MNIST的2D嵌入实现示例

资源摘要信息:"Siamese网络是一种特殊的神经网络,主要用于度量学习任务中,例如人脸验证、签名识别或任何需要判断两个输入是否相似的场景。本资源中的实现例子是在MNIST数据集上训练的,MNIST是一个包含了手写数字的大型数据集,广泛用于训练各种图像处理系统。在这个例子中,Siamese网络被用来将手写数字图像嵌入到2D空间中,同时保留它们之间的相似性信息。通过这个过程,数字图像能够被映射到一个欧几里得空间,其中相似的图像在空间上彼此接近,不相似的图像则相对远离。 具体到技术层面,Siamese网络由两个相同的子网络构成,这两个子网络共享权重并且并行处理两个不同的输入。在本例中,这两个子网络可能被设计为卷积神经网络(CNN),因为CNN在图像识别任务中表现出色。网络的输入是成对的手写数字图像,输出是一个相似性分数或者距离度量,表明这两个图像是否属于同一类别。 为了训练Siamese网络,需要定义一个损失函数来指导网络学习如何区分相似与不相似的输入对。常见的损失函数包括对比损失(Contrastive Loss)和三元组损失(Triplet Loss)。对比损失函数关注于同一类别的图像对(正样本对)以及不同类别的图像对(负样本对),鼓励网络减小正样本对的距离同时增加负样本对的距离。 在Lua语言环境中,Siamese网络的实现可以通过Lua的深度学习库,如Torch/LuaTorch,来构建。Torch/LuaTorch是一个强大的科学计算框架,它支持GPU加速,广泛应用于机器学习和深度学习领域。通过这个框架,开发者可以使用Lua语言定义模型结构、配置训练过程、执行前向和反向传播算法等。 资源的文件名称列表中的“siamese_network-master”暗示了一个主分支,它可能包含模型定义、训练脚本、测试脚本等。这个主分支中的代码结构可能包括以下部分: 1. 数据加载器(data_loader): 负责加载MNIST数据集并将图像对输入到网络中。 2. 模型定义(model.lua): 定义Siamese网络的结构,包括两个并行的子网络以及最后的相似性度量层。 3. 训练脚本(train.lua): 包含模型训练的过程,如前向传播、损失计算、反向传播和参数更新。 4. 测试脚本(test.lua): 用于评估训练好的模型在验证集或者测试集上的性能。 5. 配置文件(config.lua): 包含了网络结构和训练过程的超参数设置,如学习率、批量大小等。 Siamese网络在实际应用中可以广泛用于各种需要比较两个输入相似性的场合,例如医学图像分析、安全验证系统等。通过本资源中的示例,开发者可以深入理解Siamese网络的工作原理,并在自己的项目中实现类似的网络结构来解决实际问题。"
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

L2正则化的终极指南:从入门到精通,揭秘机器学习中的性能优化技巧

![L2正则化的终极指南:从入门到精通,揭秘机器学习中的性能优化技巧](https://img-blog.csdnimg.cn/20191008175634343.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTYxMTA0NQ==,size_16,color_FFFFFF,t_70) # 1. L2正则化基础概念 在机器学习和统计建模中,L2正则化是一个广泛应用的技巧,用于改进模型的泛化能力。正则化是解决过拟
recommend-type

如何构建一个符合GB/T19716和ISO/IEC13335标准的信息安全事件管理框架,并确保业务连续性规划的有效性?

构建一个符合GB/T19716和ISO/IEC13335标准的信息安全事件管理框架,需要遵循一系列步骤来确保信息系统的安全性和业务连续性规划的有效性。首先,组织需要明确信息安全事件的定义,理解信息安全事态和信息安全事件的区别,并建立事件分类和分级机制。 参考资源链接:[信息安全事件管理:策略与响应指南](https://wenku.csdn.net/doc/5f6b2umknn?spm=1055.2569.3001.10343) 依照GB/T19716标准,组织应制定信息安全事件管理策略,明确组织内各个层级的角色与职责。此外,需要设置信息安全事件响应组(ISIRT),并为其配备必要的资源、
recommend-type

Angular插件增强Application Insights JavaScript SDK功能

资源摘要信息:"Microsoft Application Insights JavaScript SDK-Angular插件" 知识点详细说明: 1. 插件用途与功能: Microsoft Application Insights JavaScript SDK-Angular插件主要用途在于增强Application Insights的Javascript SDK在Angular应用程序中的功能性。通过使用该插件,开发者可以轻松地在Angular项目中实现对特定事件的监控和数据收集,其中包括: - 跟踪路由器更改:插件能够检测和报告Angular路由的变化事件,有助于开发者理解用户如何与应用程序的导航功能互动。 - 跟踪未捕获的异常:该插件可以捕获并记录所有在Angular应用中未被捕获的异常,从而帮助开发团队快速定位和解决生产环境中的问题。 2. 兼容性问题: 在使用Angular插件时,必须注意其与es3不兼容的限制。es3(ECMAScript 3)是一种较旧的JavaScript标准,已广泛被es5及更新的标准所替代。因此,当开发Angular应用时,需要确保项目使用的是兼容现代JavaScript标准的构建配置。 3. 安装与入门: 要开始使用Application Insights Angular插件,开发者需要遵循几个简单的步骤: - 首先,通过npm(Node.js的包管理器)安装Application Insights Angular插件包。具体命令为:npm install @microsoft/applicationinsights-angularplugin-js。 - 接下来,开发者需要在Angular应用的适当组件或服务中设置Application Insights实例。这一过程涉及到了导入相关的类和方法,并根据Application Insights的官方文档进行配置。 4. 基本用法示例: 文档中提到的“基本用法”部分给出的示例代码展示了如何在Angular应用中设置Application Insights实例。示例中首先通过import语句引入了Angular框架的Component装饰器以及Application Insights的类。然后,通过Component装饰器定义了一个Angular组件,这个组件是应用的一个基本单元,负责处理视图和用户交互。在组件类中,开发者可以设置Application Insights的实例,并将插件添加到实例中,从而启用特定的功能。 5. TypeScript标签的含义: TypeScript是JavaScript的一个超集,它添加了类型系统和一些其他特性,以帮助开发更大型的JavaScript应用。使用TypeScript可以提高代码的可读性和可维护性,并且可以利用TypeScript提供的强类型特性来在编译阶段就发现潜在的错误。文档中提到的标签"TypeScript"强调了该插件及其示例代码是用TypeScript编写的,因此在实际应用中也需要以TypeScript来开发和维护。 6. 压缩包子文件的文件名称列表: 在实际的项目部署中,可能会用到压缩包子文件(通常是一些JavaScript库的压缩和打包后的文件)。在本例中,"applicationinsights-angularplugin-js-main"很可能是该插件主要的入口文件或者压缩包文件的名称。在开发过程中,开发者需要确保引用了正确的文件,以便将插件的功能正确地集成到项目中。 总结而言,Application Insights Angular插件是为了加强在Angular应用中使用Application Insights Javascript SDK的能力,帮助开发者更好地监控和分析应用的运行情况。通过使用该插件,可以跟踪路由器更改和未捕获异常等关键信息。安装与配置过程简单明了,但是需要注意兼容性问题以及正确引用文件,以确保插件能够顺利工作。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

L1正则化模型诊断指南:如何检查模型假设与识别异常值(诊断流程+案例研究)

![L1正则化模型诊断指南:如何检查模型假设与识别异常值(诊断流程+案例研究)](https://www.dmitrymakarov.ru/wp-content/uploads/2022/10/lr_lev_inf-1024x578.jpg) # 1. L1正则化模型概述 L1正则化,也被称为Lasso回归,是一种用于模型特征选择和复杂度控制的方法。它通过在损失函数中加入与模型权重相关的L1惩罚项来实现。L1正则化的作用机制是引导某些模型参数缩小至零,使得模型在学习过程中具有自动特征选择的功能,因此能够产生更加稀疏的模型。本章将从L1正则化的基础概念出发,逐步深入到其在机器学习中的应用和优势
recommend-type

如何构建一个符合GB/T19716和ISO/IEC13335标准的信息安全事件管理框架,并确保业务连续性规划的有效性?

为了帮助你构建一个符合GB/T19716和ISO/IEC13335标准的信息安全事件管理框架,同时确保业务连续性规划的有效性,你需要从以下几个方面入手:(详细步骤、代码、mermaid流程图、扩展内容,此处略) 参考资源链接:[信息安全事件管理:策略与响应指南](https://wenku.csdn.net/doc/5f6b2umknn?spm=1055.2569.3001.10343) 在构建框架时,首先应明确信息安全事件和信息安全事态的定义,理解它们之间如何相互关联。GB/T19716-2005和GB/Z20986-2007标准为你提供了基础框架和分类分级指南,帮助你
recommend-type

实时三维重建:InfiniTAM的ros驱动应用

资源摘要信息:"InfiniTAM用ros驱动进行实时重建" InfiniTAM是一个开源的三维重建系统,利用ROS(Robot Operating System)作为驱动,实现了对环境的实时三维建模和重建。下面详细阐述关于InfiniTAM和ROS驱动实时三维重建的技术知识点。 首先,我们需要了解ROS(Robot Operating System),它是一个用于机器人软件开发的灵活框架,提供了一系列工具和库来帮助软件开发者创建复杂、可重复使用的机器人行为和功能。ROS的一个核心优势是其高度模块化的系统,它允许开发者分别开发和测试组件,之后再集成到一个完整的系统中。ROS广泛应用于机器人的感知、建图、导航、定位以及手臂控制等领域。 接着,我们来看InfiniTAM,它是一个专门针对实时三维场景理解的系统。InfiniTAM具备以下几个关键技术特点: 1. 实时性能:InfiniTAM利用高效的数据结构和算法,在单个或多个GPU上运行,能够处理大量数据,实现实时的三维重建。 2. 带宽优化:在进行三维重建时,数据的传输和存储是非常消耗资源的。InfiniTAM通过优化数据传输和存储来最小化带宽消耗,使得在有限的计算资源下也能高效运行。 3. 模块化和可扩展性:InfiniTAM的设计允许用户通过添加或修改模块来定制系统功能,易于扩展到不同的应用场景。 4. 多传感器融合:InfiniTAM支持包括深度相机、RGB相机和激光雷达等多种传感器的数据融合,增强重建过程的鲁棒性和精确度。 5. 相机标定与校正:系统内置了相机标定工具,可以处理镜头畸变等问题,确保重建结果的准确性。 现在,我们将重点放在如何使用ROS驱动InfiniTAM进行实时三维重建: ROS驱动InfiniTAM的实现,主要依赖于ROS的节点系统,每个节点可以执行一个特定的功能,如图像获取、数据处理、结果展示等。通过节点之间的消息传递,可以实现不同功能的协同工作。在InfiniTAM中,典型的节点可能包括: - 数据采集节点:负责从连接的硬件设备(如RGB-D相机)中获取图像和深度数据。 - 数据处理节点:对采集到的数据进行必要的预处理,例如滤波、归一化等。 - 三维重建节点:核心的处理节点,负责调用InfiniTAM系统内的算法对环境进行实时的三维建模。 - 结果展示节点:将重建的结果通过图形界面展示给用户,提供直观的三维模型显示。 为了实现上述节点在ROS框架中的协同工作,需要定义相应的ROS消息类型和话题,确保数据能够及时准确地在各个节点之间传递。例如,数据采集节点需要发布图像和深度数据到特定的话题上,而数据处理节点则订阅这些话题以接收数据进行处理。 总之,InfiniTAM利用ROS作为驱动进行实时三维重建,结合了ROS强大的模块化架构和InfiniTAM高效实时处理的优势,为开发者提供了强大的工具来构建实时三维重建应用。这套系统适合于需要高性能三维感知能力的应用场合,如自动驾驶汽车、机器人导航、增强现实等领域。
recommend-type

关系数据表示学习

关系数据卢多维奇·多斯桑托斯引用此版本:卢多维奇·多斯桑托斯。关系数据的表示学习机器学习[cs.LG]。皮埃尔和玛丽·居里大学-巴黎第六大学,2017年。英语。NNT:2017PA066480。电话:01803188HAL ID:电话:01803188https://theses.hal.science/tel-01803188提交日期:2018年HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaireUNIVERSITY PIERRE和 MARIE CURIE计算机科学、电信和电子学博士学院(巴黎)巴黎6号计算机科学实验室D八角形T HESIS关系数据表示学习作者:Ludovic DOS SAntos主管:Patrick GALLINARI联合主管:本杰明·P·伊沃瓦斯基为满足计算机科学博士学位的要求而提交的论文评审团成员:先生蒂埃里·A·退休记者先生尤尼斯·B·恩