GIS二次开发学习专题(二) 基本地图控件使用

学习资料来自《牟乃夏 AE开发教程—基于C#.NET》
发的代码是我整理+老师布置的作业
这一部分是地图基本控件的使用与编写,包括:

一、二维控件的使用

二、自行编写代码:添加数据、控制地图:打开文件、添加数据、漫游、全图、放大、缩小、刷新、保存、另存为

三、TOCControl的右键菜单

四、鹰眼视图

一、二维控件的使用

拖入“ToolBarControl”,“TOCControl”,“MapControl”,“LicenseControl”控件,在“ToolBarControl”中添加按钮、设置“LicenseControl”

二、自行编写代码:添加数据、控制地图


using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.DataSourcesRaster;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Display;string m_BasicOperationTool = "";     //定义一个操作按钮变量public Form1(){ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine);InitializeComponent();}

1.ToolBarControl:
打开文件:
采用OpenFileDialog进行操作:

 /*打开文件按钮*/private void tlbOpen_Click(object sender, EventArgs e){System.Windows.Forms.OpenFileDialog openFileDialog;openFileDialog = new OpenFileDialog();openFileDialog.Title = "open map document";openFileDialog.Filter = "map document(*.mxd)|*.mxd";        //文件过滤器openFileDialog.ShowDialog();string strFilePath = openFileDialog.FileName;               //选择文件路径if (axMapControl1.CheckMxFile(strFilePath)){//加载mxd文档之前的鼠标指针,esriPointerArrowHourglass为等待光标axMapControl1.MousePointer = ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerArrowHourglass;//LoadMxFile方法有三个参数,文件路径、地图名称或索引和密码,也可以直接重载为只有一个文件路径参数axMapControl1.LoadMxFile(strFilePath, 0, Type.Missing);//axMapControl1.LoadMxFile(strFilePath);//加载mxd文档后的鼠标指针,esriPointerDefault为默认箭头axMapControl1.MousePointer = ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerDefault;}else{//不能加载mxd或加载失败时出现消息对话框MessageBox.Show(strFilePath + " is not a valid map document");}}

全图、放大、缩小、漫游、刷新:
都是采用点击之后用一个记录操作的字符串去记录,然后用一个方法根据操作去执行。此处是给每一个操作赋予名字,且改变光标样式。

/*全图浏览按钮*/private void tlbGlobal_Click(object sender, EventArgs e){m_BasicOperationTool = "isZoomFull";axMapControl1.Extent = axMapControl1.FullExtent; //变为全图显示,按钮直接生效axMapControl1.MousePointer = esriControlsMousePointer.esriPointerZoom;//设置鼠标指针样式}/*放大按钮*/private void tlbZoomIn_Click(object sender, EventArgs e){m_BasicOperationTool = "ZoomIn";axMapControl1.MousePointer = esriControlsMousePointer.esriPointerZoomIn;}/*缩小按钮*/private void tlbZoomOut_Click(object sender, EventArgs e){m_BasicOperationTool = "ZoomOut";axMapControl1.MousePointer = esriControlsMousePointer.esriPointerZoomOut;}/*刷新*/private void tlbRefresh_Click(object sender, EventArgs e){m_BasicOperationTool = "Refresh";axMapControl1.Refresh();                //点击直接生效axMapControl1.MousePointer = esriControlsMousePointer.esriPointerZoom; //```}/*漫游*/private void tlbPan_Click(object sender, EventArgs e){m_BasicOperationTool = "ZoomPan";axMapControl1.MousePointer = esriControlsMousePointer.esriPointerPan;}

点击地图的操作,需要设置axMapControl1的onMouseDown属性

/*点击地图界面的操作*/
private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e){//在axMapControl1上进行点击后才生效的功能,如放大缩小和漫游IEnvelope objEnvelope = null;  //地物包路线,地物最小外接矩形IPoint pPoint = null;IActiveView pActiveView = axMapControl1.ActiveView.FocusMap as IActiveView;pPoint = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);  //获取mousedown点switch (m_BasicOperationTool){case "ZoomIn":objEnvelope = axMapControl1.TrackRectangle(); //TrackRectangle为拉框矩形橡皮筋axMapControl1.Extent = objEnvelope;break;case "ZoomOut":objEnvelope = axMapControl1.TrackRectangle();double mapWidth = objEnvelope.Width;double mapHeight = objEnvelope.Height;double x1 = pPoint.X;double x2 = pPoint.X + mapWidth;double y1 = pPoint.Y;double y2 = pPoint.Y - mapHeight * 2;objEnvelope.XMax = x2 + mapWidth * 2;objEnvelope.XMin = x1 - mapWidth * 2;objEnvelope.YMax = y2 - mapHeight * 2;objEnvelope.YMin = y1 + mapHeight * 2;axMapControl1.Extent = objEnvelope;break;case "ZoomPan":axMapControl1.Pan();break;}}

添加数据:
添加矢量数据与栅格数据:


private void tlbAddDate_Click(object sender, EventArgs e){OpenFileDialog pOpenFileDialog = new OpenFileDialog();pOpenFileDialog.CheckFileExists = true;pOpenFileDialog.Title = "选择需要加载的地理数据文件";pOpenFileDialog.Filter = "Shape格式文件(*.shp)|*.shp|栅格文件(*.bmp;*.tif;*.jpg;*.img)|*.bmp;*.tif;*.jpg;*.img|(*.bmp)|*.bmp|(*.tif)|*.tif|(*.jpg)|*.jpg|(*.img)|*.img";pOpenFileDialog.ShowDialog();string pRasterFileName = pOpenFileDialog.FileName;if (pRasterFileName == "")return;string strFNaExten = System.IO.Path.GetExtension(pRasterFileName); //获得文件扩展名string pPath = System.IO.Path.GetDirectoryName(pRasterFileName); //返回指定路径字符串的目录信息string pFileName = System.IO.Path.GetFileName(pRasterFileName); //返回指定路径字符串的文件名和扩展名if (strFNaExten == ".shp"){string oFileName = System.IO.Path.GetFileNameWithoutExtension(pRasterFileName); //返回不具有扩展名的指定路径字符串的文件名axMapControl1.AddShapeFile(pPath, oFileName);       //加载地图}else{IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactory();//创建工作空间工厂对象IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(pPath, 0); //打开IRasterWorkspace pRasterWorkspace = pWorkspace as IRasterWorkspace;  //接口的实现IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(pFileName);//影响金字塔判断与创建IRasterPyramid3 pRasPyrmid;pRasPyrmid = pRasterDataset as IRasterPyramid3;if (pRasPyrmid != null){if (!(pRasPyrmid.Present)){pRasPyrmid.Create();//创建金字塔}}IRaster pRaster;pRaster = pRasterDataset.CreateDefaultRaster();IRasterLayer pRasterLayer;pRasterLayer = new RasterLayerClass();pRasterLayer.CreateFromRaster(pRaster);ILayer pLayer = pRasterLayer as ILayer;axMapControl1.AddLayer(pLayer, 0);}}

保存:

private void tlbSaveMap_Click(object sender, EventArgs e){try{string filePath = axMapControl1.DocumentFilename;IMapDocument pMapDocument = new MapDocumentClass();if (filePath != null && axMapControl1.CheckMxFile(filePath)){if (pMapDocument.get_IsReadOnly(filePath)){MessageBox.Show("本地图文档为只读,不能保存!");pMapDocument.Close();return;}}else{SaveFileDialog pSaveFileD = new SaveFileDialog();pSaveFileD.Title = "请选择保存路径";pSaveFileD.OverwritePrompt = true;      //pSaveFileD.Filter = "ArcMap文档(*.mxd)|X.mxd|ArcMap模板(*.mxt)|*.mxt";pSaveFileD.RestoreDirectory = true;     //if (pSaveFileD.ShowDialog() == DialogResult.OK)     //{filePath = pSaveFileD.FileName;}else{return;}}pMapDocument.New(filePath);pMapDocument.ReplaceContents(axMapControl1.Map as IMxdContents);    //pMapDocument.Save(pMapDocument.UsesRelativePaths, true);pMapDocument.Close();MessageBox.Show("保存地图文档成功!");}catch (Exception ex){MessageBox.Show(ex.Message);}}

另存为:


private void tlbSaveAs_Click(object sender, EventArgs e){try{SaveFileDialog pSaveFileD = new SaveFileDialog();pSaveFileD.Title = "另存为";pSaveFileD.OverwritePrompt = true;      //pSaveFileD.Filter = "ArcMap文档(*.mxd)|X.mxd|ArcMap模板(*.mxt)|*.mxt";pSaveFileD.RestoreDirectory = true;     //if (pSaveFileD.ShowDialog() == DialogResult.OK)     //{string filePath = pSaveFileD.FileName;IMapDocument pMapDocument = new MapDocumentClass(); //pMapDocument.New(filePath);pMapDocument.ReplaceContents(axMapControl1.Map as IMxdContents);pMapDocument.Save(true, true);       //pMapDocument.Close();}}catch (Exception ex){MessageBox.Show(ex.Message);}}

三、TocControl右键菜单

支持的功能:

需要新建一个form,拖入GirdView窗格,用于显示属性表
设置axTOCControl1的OnMouseDown属性:

 IFeatureLayer pTocFeatureLayer = null;private FormAtrribute frmAttribute = null;private ILayer pMoveLayer = null;private int toIndex;
private void axTOCControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvent e){if (e.button == 2)              //单击右键,左键为1{esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone;IBasicMap map = null;     //对属性值初始化,也可以=null; ILayer pLayer = null;object other = null;object index = null;axTOCControl1.HitTest(e.x, e.y, ref item, ref map, ref pLayer, ref other, ref index); //实现赋值,ref的参数必须初始化pTocFeatureLayer = pLayer as IFeatureLayer;if (item == esriTOCControlItem.esriTOCControlItemLayer && pTocFeatureLayer != null)   //点击的是图层的话,就显示右键菜单{tsm_Selectable.Enabled = !pTocFeatureLayer.Selectable;tsm_unSelectable.Enabled = pTocFeatureLayer.Selectable;ContextMenuStrip1.Show(Control.MousePosition);}}}/*属性表*/private void tsm_property_Click(object sender, EventArgs e){if (frmAttribute == null || frmAttribute.IsDisposed){frmAttribute = new FormAtrribute();}frmAttribute.CurFeatureLayer = pTocFeatureLayer;frmAttribute.InitUI();frmAttribute.ShowDialog();}/*移除图层*/private void tsm_Remove_Click(object sender, EventArgs e){if (pTocFeatureLayer == null) return;DialogResult result = MessageBox.Show("是否删除[" + pTocFeatureLayer.Name + "]图层", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);if (result == DialogResult.OK){axMapControl1.Map.DeleteLayer(pTocFeatureLayer);}axMapControl1.ActiveView.Refresh();}/*缩放到图层*/private void tsm_ScaleToLayer_Click(object sender, EventArgs e){if (pTocFeatureLayer == null) return;(axMapControl1.Map as IActiveView).Extent = pTocFeatureLayer.AreaOfInterest;(axMapControl1.Map as IActiveView).PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);}/*图层可选*/private void tsm_Selectable_Click(object sender, EventArgs e){pTocFeatureLayer.Selectable = true;tsm_Selectable.Enabled = !tsm_Selectable.Enabled;}/*图层不可选*/private void tsm_unSelectable_Click(object sender, EventArgs e){pTocFeatureLayer.Selectable = false;tsm_Selectable.Enabled = !tsm_Selectable.Enabled;}

四、鹰眼视图


/// <summary>
/// 鹰眼
/// </summary>   private bool bCanDrag;              //鹰眼地图上矩形框可移动的标志private IPoint pMoveRectPoint;      //记录在移动鹰眼地图上的矩形框时鼠标的位置private IEnvelope pEnv;             //记录数据视图的Event
/*确保鹰眼视图与数据视图的一致*/private void axMapControl1_OnMapReplaced(object sender, IMapControlEvents2_OnMapReplacedEvent e){if (EagleEyeMapControl2.LayerCount > 0){EagleEyeMapControl2.ClearLayers();}//设置鹰眼和主地图的坐标系一致EagleEyeMapControl2.SpatialReference = axMapControl1.SpatialReference;for (int i = axMapControl1.LayerCount - 1; i >= 0;i-- ){//使鹰眼地图与数据视图的图层上下顺序保持一致ILayer pLayer = axMapControl1.get_Layer(i);if (pLayer is IGroupLayer || pLayer is ICompositeLayer){ICompositeLayer pCompositeLayer = (ICompositeLayer)pLayer;for (int j = pCompositeLayer.Count - 1; j >= 0; j--){ILayer pSubLayer = pCompositeLayer.get_Layer(j);IFeatureLayer pFeatureLayer = pSubLayer as IFeatureLayer;if (pFeatureLayer != null){if (pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryPoint && pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryMultipoint){EagleEyeMapControl2.AddLayer(pLayer);}}}}else{IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;if (pFeatureLayer != null){if (pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryPoint && pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryMultipoint){EagleEyeMapControl2.AddLayer(pLayer);}}//设置鹰眼地图全图显示EagleEyeMapControl2.Extent = axMapControl1.FullExtent;pEnv = axMapControl1.Extent as IEnvelope;DrawRectangle(pEnv);EagleEyeMapControl2.ActiveView.Refresh();}}copyToPageLayout();             //数据视图与布局视图的数据拷贝}/*鹰眼与数据视图同步*/private void SynchronizeEagleEye(){if (EagleEyeMapControl2.LayerCount > 0){EagleEyeMapControl2.ClearLayers();}//设置鹰眼和主地图的坐标系一致EagleEyeMapControl2.SpatialReference = axMapControl1.SpatialReference;for (int i = axMapControl1.LayerCount - 1; i >= 0; i--){//使鹰眼地图与数据视图的图层上下顺序保持一致ILayer pLayer = axMapControl1.get_Layer(i);if (pLayer is IGroupLayer || pLayer is ICompositeLayer){ICompositeLayer pCompositeLayer = (ICompositeLayer)pLayer;for (int j = pCompositeLayer.Count - 1; j >= 0; j--){ILayer pSubLayer = pCompositeLayer.get_Layer(j);IFeatureLayer pFeatureLayer = pSubLayer as IFeatureLayer;if (pFeatureLayer != null){if (pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryPoint && pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryMultipoint){EagleEyeMapControl2.AddLayer(pLayer);}}}}else{IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;if (pFeatureLayer != null){if (pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryPoint && pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryMultipoint){EagleEyeMapControl2.AddLayer(pLayer);}}//设置鹰眼地图全图显示EagleEyeMapControl2.Extent = axMapControl1.FullExtent;pEnv = axMapControl1.Extent as IEnvelope;DrawRectangle(pEnv);EagleEyeMapControl2.ActiveView.Refresh();}}}/*画矩形框*/private void DrawRectangle(IEnvelope pEnvelope){//绘制前,清除之前的矩形框IGraphicsContainer pGraphicsContainer = EagleEyeMapControl2.Map as IGraphicsContainer;IActiveView pActiveView = pGraphicsContainer as IActiveView;pGraphicsContainer.DeleteAllElements();//当前视图范围IRectangleElement pRectangleElement = new RectangleElementClass();IElement pElement = pRectangleElement as IElement;pElement.Geometry = pEnvelope;//设置矩形框IRgbColor pColor = new RgbColor();pColor = GetRgbColor(255,0,0);   //红pColor.Transparency = 255;ILineSymbol pOutLine = new SimpleLineSymbol();pOutLine.Width = 2;pOutLine.Color = pColor;IFillSymbol pFillSymbol = new SimpleFillSymbol();pColor = new RgbColor();        //pColor.Transparency = 0;pFillSymbol.Color = pColor;pFillSymbol.Outline = pOutLine;//添加矩形框IFillShapeElement pFillShapeElement = pElement as IFillShapeElement;pFillShapeElement.Symbol = pFillSymbol;pGraphicsContainer.AddElement((IElement)pFillShapeElement, 0);//刷新pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null,null);}/*添加矩形框与数据视图范围的联动*/private void EagleEyeMapControl2_OnExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e){IEnvelope pEnvelope = (IEnvelope)e.newEnvelope;DrawRectangle(pEnvelope);}
/*点击鹰眼视图绘制矩形框*/private void EagleEyeMapControl2_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e){if (EagleEyeMapControl2.Map.LayerCount > 0){if (e.button == 1)          //左键{if (e.mapX > pEnv.XMin && e.mapY > pEnv.YMin){bCanDrag = true;}pMoveRectPoint = new ESRI.ArcGIS.Geometry.Point();      //pMoveRectPoint.PutCoords(e.mapX,e.mapY);}else if (e.button == 2)         //鼠标右键{IEnvelope pEnvelope = EagleEyeMapControl2.TrackRectangle();IPoint pTempPoint = new ESRI.ArcGIS.Geometry.Point();       //pTempPoint.PutCoords(pEnvelope.XMin + pEnvelope.Width / 2, pEnvelope.YMin + pEnvelope.Height / 2);axMapControl1.Extent=pEnvelope;//矩形框的高宽进行中心调整axMapControl1.CenterAt(pTempPoint);}}}
/*拖动矩形框*/private void EagleEyeMapControl2_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e){if (e.mapX > pEnv.XMin && e.mapY > pEnv.YMin && e.mapX < pEnv.XMax && e.mapY < pEnv.YMax){//EagleEyeMapControl2.MousePointer = esriControlsMousePointer.esriPointerHand;if (e.button == 2){EagleEyeMapControl2.MousePointer = esriControlsMousePointer.esriPointerDefault;}}else{EagleEyeMapControl2.MousePointer = esriControlsMousePointer.esriPointerDefault;}if (bCanDrag){double Dx, Dy;Dx = e.mapX - pMoveRectPoint.X;Dy = e.mapY - pMoveRectPoint.Y;pEnv.Offset(Dx,Dy);pMoveRectPoint.PutCoords(e.mapX, e.mapY);DrawRectangle(pEnv);axMapControl1.Extent = pEnv;}}/*判断鼠标是否是点击*/private void EagleEyeMapControl2_OnMouseUp(object sender, IMapControlEvents2_OnMouseUpEvent e){if (e.button == 1 && pMoveRectPoint != null){if (e.mapX == pMoveRectPoint.X && e.mapY == pMoveRectPoint.Y){axMapControl1.CenterAt(pMoveRectPoint);}bCanDrag = false;}}/*此处缺失该函数 请从博主其他文章内查找···信息还来不及完全更新,抱歉*/private IRgbColor GetRgbColor(int p, int p_2, int p_3){throw new NotImplementedException();}

其他:该代码我还写了数据视图与布局视图的切换,用不到可以删除该部分代码。

注意

鹰眼视图功能尚未完善,按照正常规划,应该小窗显示放大后数据视图中的全图,并且有矩形框显示,此部分内容改进,见后续文档

源码下载:

c# AE GIS二次开发学习专题(二) 基本地图控件使用相关推荐

  1. GIS二次开发学习专题(一)C#入门

    GIS二次开发学习专题(一) 假期时间想整理电脑内存,所以就把代码发到网上了,希望可以供大家参考,学习资料来自<牟乃夏 AE开发教程-基于C#.NET> 发的代码是我整理+老师布置的作业 ...

  2. 安卓开发学习笔记1:简单控件

    此文章仅为本人在学习安卓开发时的一些笔记 界面显示逻辑处理 使用XML标记.描绘应用界面,使用Java书写程序逻辑 使用XML描述APP界面 使用XML文件描述APP界面 一个界面布局可以被多处代码复 ...

  3. CAD二次开发学习笔记二(创建一个对话框)

    打开资源视图->右击->添加资源->Dialog 双击对话框,弹出MFC类向导,输入类名FirstClass, 确定,创建对话框类.FirstClass.h与FirstClass.c ...

  4. AutoCAD.net/Map 3D/AIMS/MapGuide/Civil 3D二次开发学习指南

    作者:杜长宇 Autodesk Infrastructure Map Server(AIMS)/MapGuide API二次开发学习指南 Autodesk Infrastructure Map Ser ...

  5. Map 3D API二次开发学习指南

    作者:杜长宇 – Autodesk开发技术顾问 2012年9月26日 AutoCAD Map 3D 是构建于AutoCAD之上,面向基础设施领域的产品,他采用FDO技术来实现对业界常见GIS数据格式的 ...

  6. 【作废】Inventor 二次开发学习指南入门到精通(含Inventor最新二次开发教程下载)

    (由于AU中国已关闭,很多链接失效,而且有些内容需要更新.特作废此文,另外撰写一篇新的) 年初我曾撰写了一篇文章,登载到我同事的博客,以及AU中国.我想这篇作为本博客的第一篇正式技术文章,应该是最合适 ...

  7. 开发指南专题二:JEECG微云快速开发平台JEECG框架初探

    开发指南专题二:JEECG微云快速开发平台JEECG框架初探 2.JEECG框架初探 2.1演示系统 打开浏览器输入JEECG演示环境地址:http://demo.jeecg.org:8090/可以看 ...

  8. IOS开发学习周报(二)

    IOS开发学习周报(二) 简介 课程名称 IOS开发实训 任课老师 郑贵锋老师&字节跳动工程师 学号 16340015 专业(方向) 软件工程(计应) 姓名 陈彬彬 Email 9441312 ...

  9. Revit二次开发学习笔记

    Revit二次开发学习笔记1 20220314: 概念:Application与Document 接口函数:IExternalCommand.ActiveView与Selection 20220316 ...

最新文章

  1. PM配置详解之三:维护计划、工作中心、作业列及产品资源与工具
  2. [ARM异常]-armv8-aarch64下当中断来时自动触发的硬件行为
  3. c语言计算坐标三角形面积公式,c语言计算三角形面积代码
  4. 无法加载安装程序库 wbemupgd.dll
  5. 在Java Web应用程序中阻止CSRF
  6. FileBeat + Pipeline 解析日志 保存至ElasticSearch(实战)
  7. ssh传输越多越慢_Linux下分析网站访问慢原因
  8. VIM E297: Write error in swap file
  9. 服务器哪种系统最好,云服务器哪种系统好用
  10. 按键显示按键编码 keycode
  11. UTF-8格式编码与UTF-8无BOM格式编码的区别(包括java文件)
  12. java反编译 混淆_Java反编译反混淆神器 - CFR
  13. Funcode实现黄金矿工
  14. matlab设置图片背景透明_Matlab保存透明图片程序
  15. 【成功解决】Error:(3, 46) java: 程序包org.springframework.context.annotation不存在
  16. matlab怎么输入学号姓名,matlab如何创建一个构架数组用于统计学生的情况包括学生的姓名学号各科成绩等??...
  17. win10自动连接WIFI的批处理文件
  18. 企业微信X微盛联合发布会回顾:All in企业微信赛道两年,微盛的增长逻辑
  19. Tableau 将 null 值显示在 0 处 (ZN 函数 或 显示特殊值)
  20. Hive months_between(日期相减不正确处理)

热门文章

  1. 快速从入门到精通,建议细读
  2. 防偷窥神器!这款Windows软件,绝了!
  3. windows账户名中文改成英文
  4. ATT-CNN(attention based CNN)
  5. 安装mt工具箱离线版本
  6. 基于springboot的家装平台设计与实现
  7. 查询Mysql 最近几天,最近几周的语句
  8. 网页上点击。直接打开QQ聊天!!!
  9. 为什么货币基金每万份收益会突然猛窜?
  10. 易信公众平台开发从入门到精通之获取凭证