学习 成长之路(初章 )

三个月 建成微信小程序商城 、ArcEngine C# GIS开发入门

自我简介

先简单介绍一下,我是Domen,是一个彻彻底底的新手 。

大一

大学大一没好好学习,搞这搞那一开始做各种产品的销售(好像什么吃的喝的,玩的,学的产品都做过),到后面可以自己卖卖自己的东西(主要做 了生活用品床上用品,还有自己家乡的普洱茶),最后有点成绩沾沾自喜,越发不想学习,落下不少课程。


大二

  • 大二上学期在我们班导师的开导下,发现要是自己不学习天花板太低,以后什么也做不了,幡然醒悟开始学习了,学习的重点又放在了课程之外的事上买了各种畅销书来浏览(不包含技术类),成绩勉强是能够毕业的水平。

  • 大二下因为暑假卖东西的事需要一个微信小程序来辅助,一头扎入技术的浪潮,东瞄瞄西看看,心想在暑假之前做一个小程序商城出来,一开始,因为没有基础大一C语言60分刚刚及格,觉得自己肯定不行,在网上,学校里疯狂找人,发现学校里没人学过微信小程序开发,网上开发的又太贵,最后被逼到了绝境,立下3个月独立完成小程序商城的开发,想办法搞了些学习资源。

    • 第一个月简单看了一些小程序速成的课程,发现这样从底层学起根本没法3个月完成,(要开发需要会 前端,后端 的各类语言);

    • 所以第二个月开始立马想到直接看网上有没有现成的源代码,直接可以用,开始各种搜索,发现还真的有网站直接有(这里不打广告,想知道的联系我就行),我就开了个会员,下了很多源代码,发现自己没有基础根本不会用。

      • 最后运气好找到了一个自带微信小程序源码安装教程的资源,就直接按上面操作做了,一步一步从云服务器的购买配置安装,域名的使用,到小程序前端后端的链接,发现问题还是很多,根本运行不了,很多错误,最后一个文件一个文件看代码,不断调试,尝试着改代码,实现小程序的线上收款(当时对收款这个功能真的慌,总是怕收的钱在网上不见了,为了确保没更多的问题,还让我妈在商城里买了一个20元的空产品,发现安全到账了才放心, 后面发现只要微信收款接口的对应的收款码复制粘贴对了,在机器这种运算下基本不会有问题,比人收钱都安全,除了有黑客的攻击,不过一般黑客也不会对我们这种小产品感兴趣)。
      • 一个月左右成功运行,又发现商城前端奇丑,这里找不到一开始的界面了,放一个修改过一点的还是可以体会:
      • 最后一个月找了个学长指点,知道了简单的前端UI的语法,比如改按键,宽度,高度,颜色的这些,像颜色都是有 # 标志的很好识别(比如 # FFFFFF是白色),微信开发工具又有点傻瓜化,改了一些界面,用PS,corelDRAW X7 ,P了些图换了一些图标,最后结果如图:

        再贴一张后台的图,这个后台也是弄了好久,记得刚做出来的时候,急急忙忙给舍友给我的朋友们看,想想那时候真有趣:

        用户中心最底下这里强调一下by Domen Wang 哈哈哈哈哈

  • 就这样我人生中第一个产品误打误撞的‘开发’出来了,从而我也从中管中窥豹大致了解了软件从前端到后端开发的过程。同时对编程的兴趣开始高涨起来,人总是会对自己了花时间了解得多的事情感兴趣。

  • 就这样,我们暑假利用这个小程序商城,完成了今年的销售,因为在我开发小程序时,没找到合适的人去带销售团队,又加上暑期重修高数下(大一的伤)和学车(我爸吓我要是这个暑假不学就白留南京了),这个18年的暑假销售额和17年的差不多,要知道我可是找了比17年多5倍的人来销售呀,让我有了很大的失败感。

  • 就这样大三上学期一开始,我失落了1个月,明白了自己属于那种没点技术,没点深厚的学识,就做不成事的人,在中秋节去周庄去了我一直想去的沈万三故居缓了3天后,回到学校决定了好好学习使自己达到能上研究生的水平,补上大一大二欠下的学习债,考上心中的技术方向的研究生。


AE C# GIS 设计与开发课程分享(一)

  • 所以这学期在想学习的动力下,刚结束了GIS开发与设计课,简单入门了刚学的C#和ArcEngine,想趁热写点东西记录下来。

    写这篇文章:
    1.第一,是为了纪念一下我Domen的入门IT的人生重大转折点;
    2.第二是为了锻炼一下自己写作的能力;
    3.还有因为我为了增加印象我重新整理了一下自己作业的代码花了很多时间不想浪费,直接拿出来供分享希望做点贡献;

    虽然下面的代码质量肯定是经不住的各种考验,但还是可以运行的,慢慢来。相信有很多和我一样的入门级的同胞,没事的,都是这么一窍不通过来的啦,我也是零基础过来的多亏了舍友,同学的讲解,才能勉强更得上大家的步伐。踩了贼多坑,建议还是了解一下控件和类的功能实现原理等等,那样捋的舒服点,不然这里搬一点那里搬一点不怎么好整,写别的代码也一样吧,都是从看代码到模仿的。然后没有一点C#基础的话看起来可能会有点吃力,我这学期其实也算是没C#基础,虽然大二下选修了C#但根本就是水过的,所以还是花了很多很多时间,其实我昨前天重新理一遍作业后才会自己写一点代码,之前都是复制粘贴。

  • 好的现在终于步入正题了,一不小心简单介绍写这么多,我们的GIS开发与设计,是利用ArcEngine10.2和VS2012配套学习的,一边课上听老师讲教材,一边课下完成老师的作业

相应的教材和作业文件在这里:
  • 链接:https://pan.baidu.com/s/15QGSjIotHGx86Ugvt36xpQ
    提取码:reqo
    复制这段内容后打开百度网盘手机App,操作更方便哦
    因为每个地图文件与空间数据库的路径是设置好的,所以每个作业需要打开对应的文件夹下的地图否则打不开,比如说把地图单独粘贴到其他地方就打不开了

  • 首先是第一部分安装和配置了,对应的VS和engine是这样,vs2012-ArcGIS10.2,vs2013 / 2015-ArcGIS10.4,VS10.6-ArcGIS2015 / 2017,按需求吧,我自己的安装是参考这位大哥的文章 https://blog.csdn.net/qq_35117024/article/details/80131198?utm_source=blogxgwz0 ,很详细,其他版本的vs和gis我也都有,有需要可以留言,注意如果有安装ArcGIS的话看一下破解文件service.txt,改成本地主机。安装和配置完按照结尾步骤生成一个窗体瞧瞧,相信大家就迫不及待的打开窗体想开始干活了。

  • 首先大家最好设置一下,桌面右击,显示设置,屏幕分辨率为100%,不然窗体会乱彪,大小定不下来,设置完应该要注销一下才生效。

题目要求

EX01:ArcObjects中有哪几种Class,Class之间存在哪些关系?采用ArcObjects中的实例进行说明,每种举3~5例。

  • 这里不赘述了,在我上面分享的百度云链接里有作业文档。

EX02 :关系编写程序,获取MapDocument 中的地图,获取地图中的图层,获取图层的基本属性。

功能需求:
  1. 加载MapDocument,并获取其包含的Map。
  2. 获取当前选中Map所包含的Layer。
  3. 显示选中Layer的属性信息。
实现效果

  • 这个作业的功能需求,我一开始看上去,完全不知道什么意思,先跟着给的截图布置一下窗体,慢慢的就理解了
    进去正题,在创建工程后(我创建的是EngineWindowsApplication),首先在from1.cs[设计]*窗口添加控件进去(我这里将from1改成了MainFrom02文件,下面就用MainFrom02.cs*来叙述),如图
  • 依次将地图控件,LicenseControl(如果在普通的Windows项目中没有这个控件无法运行)拖入窗体(窗体的大小可以自行拉伸),这个界面呢,Ctrl+W,X打开工具箱,根据要求布置窗体界面就是按钮等等这个C#基本的控件,如下图,控件的分类什么和基本用法的自己可以去搜索一下,简单来说就是一个属性和一个事件。属性就是控件在基本的显示效果,在窗体中的位置和一些基本功能的设置,是不需要编写代码的;事件则是触发之后执行相关操作,如按钮点击,鼠标移动,下拉选择等等,选择控件右击属性,右侧属性窗格中一个闪电标志,就可以双击点进去写代码了,函数体什么的它都会帮你生成后,然后就可以按自己需求在生成的函数体力改动。


然后在Program.cs中加入下列有备注的三行代码:

using ESRI.ArcGIS;//需加
using ESRI.ArcGIS.esriSystem;//需加
//引用,本作业程序要用到
有用到别的当然可以自行添加static void Main(){ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);//需加//engine控件的使用需加入此行Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new Form1());}

然后在MainFrom02.cs中加入下图中用红框框出的部分(被#region 和#endregion 框起来的代码部分可以缩成上图中的灰色小框#region 后的文字会显示在灰色小框里在每个功能块之间用了一个空行来分开方便阅读)

  • 这里就直接放代码了,每句话我都尝试着写出了其中的含义,应该还是有错的不过大部分是没问题的(这里必须提个醒,下面代码里面的函数都是由MainFrom02.cs[设计]*窗口中双击相应控件的事件自动生成的,比如下图生成private void button2_Click(object sender, EventArgs e) 的这样,所以如果直接复制粘贴下面的代码到自己的form1文件是一般不能运行的,我们需要在自己设计的窗口中对不同的控件的事件进行下图的方式在form1.cs文件里生成相对应的函数头,再把下面代码的对应函数中的内容复制粘贴到自己生成的空函数里,才可以运行

    然后就会在MainFrom02.cs窗口中生成private void button2_Click(object sender, EventArgs e) 函数
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;using ESRI.ArcGIS.Carto; //用来应用下面代码中的 IMapDocument,IMap,ILayernamespace EngineWindowsApplication1
{public partial class MainForm02 : Form{public MainForm02(){ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);//engine控件的使用需加入此行InitializeComponent();}#region    //文件打开  1、加载MapDocument,并获取其包含的Map。private void button2_Click(object sender, EventArgs e){OpenFileDialog OFD = new OpenFileDialog();//创建一个新的OpenFileDialog类(也就是打开文件的对话框控件),并命名为ODFOFD.Title = "打开地图文档文件";//设置对话框控件的对话框名字为"打开地图文档文件",就是对话框的左上角的名字OFD.Filter = "地图文档(*.mxd)|*.mxd";//在对话框中的文件类型中,筛选掉除了*.mxd为后缀名的文件,(这样在对话框中打开的文件夹中就只有*.mxd为后缀的文件了)if (OFD.ShowDialog() ==DialogResult.OK)//检查地图文件是否有效,有效就继续执行if下面的语句块{string filePath = OFD.FileName;//将选择的文件的路径赋予新创建的filePath字符串中if (axMapControl1.CheckMxFile(filePath))//  CheckMxFile用来判断地址是否有效,同理有效执行if下面的语句块{axMapControl1.LoadMxFile(filePath, 0,Type.Missing);//使用axMapControl1.LoadMxFile来加载filePath路径中的文件(即mxd地图文件),下面的代码是依次访问各个地图,并将地图显示在axMapControl中。IMapDocument pMapDocument = new MapDocumentClass();pMapDocument.Open(filePath, null);//这里是获取路径文件的地图,将地址存入pMapDocument中for (int i = 0; i <= pMapDocument.MapCount-1; i++){axMapControl1.Map = pMapDocument.get_Map(i);//这里将pMapDocument中的地图获取到axMapControl1中,以得到显示comboBox1.Items.Add(axMapControl1.Map.Name);//这里将获取到的地图名字,添加到combox1里显示}axMapControl1.Refresh();//刷新一下axMapControl1窗口axMapControl1.Extent = axMapControl1.FullExtent;//将获取到的地图全局显示在axMapControl1中}else{MessageBox.Show("无法打开!" + filePath + "不是有效的文档");//如果文件路径无效,弹出一个文本为"无法打开!" + filePath + "不是有效的文档"的窗口}}}#endregion#region 下拉框comboBox1读入地图文件中所含的地图名字,且所选图层变化时 读取地图文件 地图信息private void comboBox1_SelectedIndexChanged(object sender, EventArgs e){string filePath = axMapControl1.DocumentFilename;int i = comboBox1.SelectedIndex;//将下拉框中已获取的地图引索号,赋予自定义变量 iIMapDocument pMapDocument = new MapDocumentClass();pMapDocument.Open(filePath,null);axMapControl1.Map = pMapDocument.get_Map(i);//按照下拉框中所选择的地图的索引,将索引相对应的地图获取到axMapControl1中IMap pMap= axMapControl1.Map;//将当前选择的地图获取到pMap中,以便下面获取图层到ListBox中axMapControl1.Extent = axMapControl1.FullExtent;//将地图设置为全空间铺满,这样axMapControl1中在选择相应地图后将会缩放到全控件显示状态listBox1.Items.Clear();//在获取新的图层信息前先清空之前的图层信息for (int j=0; j <= pMap.LayerCount-1;j++ ){ILayer pLayer = pMap.get_Layer(j);//获取索引为j的图层listBox1.Items.Add(pLayer.Name);//获取当前获取图层的名字添加到ListBox1中}//第一幅地图中 Kauai and Niihau为栅格地图,所以用UID方法第一个不能完全加载bool showtips = pMap.get_Layer(0).ShowTips;//获取第一个图层的显示信息textBox1.Text = pMap.get_Layer(0).MaximumScale.ToString();//获取第一个图层的最大比例尺值,转化为String值,并赋予textBox1textBox2.Text = pMap.get_Layer(0).MinimumScale.ToString();//获取第一个图层的最小比例尺值,转化为String值,并赋予textBox2//第一个图层的显示信息的bool值==ture,textBox3.Text显示Yes,否则显示Noif (showtips.ToString() == "ture")textBox3.Text = "Yes";elsetextBox3.Text = "No"; ;}#endregion#region button1清空的功能实现private void button1_Click(object sender, EventArgs e)//点击button1后,清空所有控件中的信息{axMapControl1.ClearLayers();axMapControl1.Refresh();comboBox1.Items.Clear();listBox1.Items.Clear();textBox1.Clear();textBox2.Clear();textBox3.Clear();}#endregion#region 在listBox1中所选的图层变化时变化  下面各个textBox的文本显示为相应的值private void listBox1_SelectedIndexChanged(object sender, EventArgs e){listBox1.SelectionMode = SelectionMode.One;//设置ListBox1中只能单选int i = listBox1.SelectedIndex;//将listBox1中所选择的图层的引索值赋予i,以方便下面读取图层的相关信息(ShowTips,MaximumScale,MinimumScale)IMap pMap = axMapControl1.Map;//用IMap创建一个将axMapControl1中的地图,赋予新创建的pMaif (i < 0)return;//这里是为了防止异常报错,如果i为-1,即没选择listBox1中的选项(一般此类空值,程序默认设为-1)bool ShowTips = pMap.get_Layer(i).ShowTips;textBox1.Text = pMap.get_Layer(i).MaximumScale.ToString();textBox2.Text = pMap.get_Layer(i).MinimumScale.ToString();if (ShowTips.ToString() == "ture")textBox3.Text = "Yes";elsetextBox3.Text = "No";ILayer pLayer = pMap.get_Layer(i);}#endregion}
}
  • 这里还没完,在把所有代码按规矩一个个复制粘贴到对应的函数里后还会有错,这里是为什么呢?查了一下之后,网上大家都说这是因为相应应用集的嵌入互操作类型没设置为false,也就是嵌入互操作类型没设置为true 如下图
  • 所以这里需要在引用里设置嵌入互操作,具体为什么后面了解了再作补充,右击属性,设置,嵌入互操作类型为假,我为了图方便统一shift 点开头和结尾的引用都设置了(这里如果一开始创建工程项目的时候如果选的是普通的Windows应用工程项目就不会有ESRI.ArcGIS.——的引用集,需要在应用里右键添加一下相应的应用ESRI.ArcGIS.开头的引用



    然后错误应该就没有了,就成功完成了资料中的作业EX02还有错误可以留言。之后还会接着继续更接下来的作业,之后可能一年都不会再更了,考研嘛~不过欢迎大家发现上面的错误,后面我会改的,感谢!

学习成长之路 (初章 三个月建成微信 小程序商城、ArcEngine C# GIS开发入门)相关推荐

  1. 微信小程序商城源码学习

    微信小程序从申请appid到创建hello,收集了好久的源码资源.让你两天学会小程序开发. 经过一番学习,总算学会了小程序的开发,学会搭建后台服务器,接下来打算租个阿里云服务器,研究一下微信小游戏的开 ...

  2. 学习微信小程序的第一天——认识开发工具的各个组件

    学习致谢:https://www.bilibili.com/video/BV1834y1676P?p=8&vd_source=eea46c4b2d8e22202f61369ffd3e079d ...

  3. 通过一个微信小程序商城一步步来学习小程式开发

    想通过直接写一个商城小程序来学习一下小程的开发,写小程序就是得到需求,并实现需求的过程,大这个过程中我们一步步的会发现很多问题,同时一步步解决,通过这个过程能开始掌到小程的开发.在开发之前我们的开发环 ...

  4. 微信小程序+java后台+云服务器开发学习记录

    仅作为个人学习记录

  5. web前端学习(三):微信小程序基于H5规范,开发Android应用程序

    前言: 微信小程序开发框架的目标是通过尽可能简单,高效的方式让开发者可以在微信中开发具有原生APP体验的服务. 整个小程序框架系统分为两部分,逻辑层,视图层,小程序提供了自己的视图层描述语言, WXM ...

  6. 微信小程序:三个月学习开发实录

    一.引言 因为工作的原因,我接触到了微信小程序.这是一个我从未接触过的领域,在这之前,我是从事 C++ 桌面端开发的,对于前端知识可以说是一无所知的,不仅仅对于 Html.CSS 没有一个宏观上的概念 ...

  7. 什么是微信小程序【重点学习系列---干货十足--一文详解】

    引言 本文主要从什么是微信小程序.微信小程序的介绍.小程序开发流程.小程序代码构成.小程序安装使用.配置分析.开发特点.实战项目等多角度手把手带你详解微信小程序. 文章目录 引言 第一章-什么是微信小 ...

  8. 新手从零开始学习微信小程序开发01

    新手从零开始学习小程序开发01 文章目录 新手从零开始学习小程序开发01 前言 一.什么是微信小程序? 二.如何着手学习微信小程序 1.开发工具下载安装 2.注册账户 前言 本章主要介绍微信小程序开发 ...

  9. 【计算机毕业设计】Java基于微信小程序的数学学习辅导系统(源码+论文)

    一.课题概述 随着社会对教育重视程度的不断提高,各种课外辅导班也纷纷兴起.学生接受课外辅导有了很多的方式,比如说,社会辅导机构辅导.家教辅导.网校辅导以及家长辅导.对于辅导机构和家教辅导,辅导效率相对 ...

最新文章

  1. matlab 弹出提示,谁能告诉我为什么一打开matlab2014b就弹出一个框就自动退出
  2. python绘制3d图形-Python基于matplotlib实现绘制三维图形功能示例
  3. python中range和xrange的异同
  4. python伪装浏览器什么意思_用python2和python3伪装浏览器爬取网页
  5. SpringBoot实现定时器定时处理任务
  6. Linux进程通信之管道
  7. 点击按钮弹出iframe_WEB安全(四) :CSRF与点击劫持
  8. ${ctx} 的那些事
  9. 如何在Linux/MacOS系统上安装Microsoft SQL Server
  10. Android实现登录
  11. 一秒带你穿越!AI 修复百年前北京影像,路边摊、剃头匠太真实了
  12. 命令历史及快捷键介绍
  13. [转载] 实训心得体会
  14. chm文件打开空白或显示不全
  15. flex java blazeds 注解_flex java blazeds 注解
  16. staf框架_测试自动化以及与STAF / STAX的持续集成
  17. 1525C - Robot Collisions
  18. python opencv调用摄像头并追踪移动物体,浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估...
  19. 父类声明子类实例化对象详解
  20. java小游戏——飞翔的小鸟(java初学作品)

热门文章

  1. 国庆西北环游之旅(一大波照骗来袭)
  2. Zigbee——协调器组建网络
  3. SAP Router是个啥
  4. 利用scrapy-splash爬取JS生成的动态页面
  5. 超级简单易懂的蓝桥杯《成绩统计》解法
  6. python一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
  7. 【Linux】vim文本编辑器的使用
  8. Java ByteBuffer用法
  9. 操作Excel之“=VLOOKUP(V2,Sheet2!J:K,2)”公式解读
  10. 珍藏多年的神网站都捐了,你需要的我都有,有了这些网站工作生活不用愁(二)