精华内容
下载资源
问答
  • 有趣的选修课

    2021-03-13 17:46:06
  • 大学里选修课的《趣味逻辑学》教案,趣味逻辑,里面有有趣实用例子
  • 我心中python

    2019-09-29 18:59:07
    1990年,由于一个偶然事件,python语言诞生了,于是,经过二十多年持续不断地发展,有了现在做在同一个...于是,当得知这学期有python选修课的时候,我便不假思索地选上了这门课,想再一次沉醉在python带给我奇...

        1990年,由于一个偶然事件,python语言诞生了,于是,经过二十多年的持续不断地发展,有了现在做在同一个班级里学python的我们。

        在上学期,我曾必修过python。当时觉得这门课有趣极了,通过一排又一排令人难以捉摸的代码,竟然会出现一个又一个神奇的现象。于是,当得知这学期有python选修课的时候,我便不假思索地选上了这门课,想再一次沉醉在python带给我的奇幻世界里,无法自拔。

        可是去年老师的讲课方法有点枯燥,所以在理论课上我并不是听得很认真,于是在课下花费了很多的功夫去弥补上课不好好听讲所带来的巨大损失。可这学期的python理论课,我不想再那么昏昏沉沉了。

        所有的课程都有其存在的意义,我希望python课可以更多的涉及一些计算机二级考试(python考试)所出现的多频率题目,同时也想学习有关游戏开发涉及到python的内容,真正做到学有所用,在实践中更多体验到python的乐趣。

        对于理论课来说,我希望不要再像“满堂灌”那样,老师一味地在讲课,不去体会学生究竟是否听懂其课程,剥夺了学生对这门课程的兴趣,渐渐地将这门选修课变成了学生玩手机的一方天地。寓教于乐,设身处地,不妨时不时地找几个学生上去讲课,或者采取游戏的方式,让学生在玩乐中体会到其中的奥秘。实验上机课,教师清晰地布置好任务后,剩下的交给学生做就可以了,让学生自己通过查阅资料等方法做题,并通过自己动手真正掌握其中的真理。

        python课,我来了!

    转载于:https://www.cnblogs.com/1278693754ljx/p/9637116.html

    展开全文
  • 头疼又有趣的坐标系

    2019-07-31 11:00:18
    也难怪,我那时候并不是GIS专业学生,仅仅是一门开卷考试专业选修课,就没怎么在意。 等我真正接触到了各种空间数据产品,我才知道万里长征第一步就是:处理坐标系统。 想必多多少少都会听说过几个名词,也许...

    原文地址:https://www.cnblogs.com/onsummer/p/7451128.html
    作者:@秋意正寒
    从第一次上地图学的课开始,对GIS最基本的地图坐标系统就很迷。也难怪,我那时候并不是GIS专业的学生,仅仅是一门开卷考试的专业选修课,就没怎么在意。

    等我真正接触到了各种空间数据产品,我才知道万里长征第一步就是:处理坐标系统。

    想必多多少少都会听说过几个名词,也许悠远,也许模糊。高斯克吕格,北京54,西安80,WGS84,投影坐标系统,etc.

    今天就从头说起,讲讲那些坐标系统的事情。

    惯例,给个目录:

    1. 经纬度与GCS(Geographic Coordinate System, 地理坐标系统)
    
    2. 方里网与PCS(Projection Coordinate System, 投影坐标系统)
    
    3. GCS和PCS的转化问题(三参数与七参数问题)
    
    4. 火星坐标问题
    
    在第一部分,我介绍一下以经纬度为准的地理坐标系统,也顺带提及一下我国的高程坐标系。主要涉及的内容有:大地水准面问题,椭球问题,常见的GCS(如北京54,西安80,CGCS2000,WGS84等),让大家看到GIS数据中的GCS马上就能知道这是什么东西。
    
    在第二部分,我介绍一下以平面直角坐标系为量度的投影坐标系统。主要涉及的内容有:PCS与GCS的关系,我国常见的PCS(高斯克吕格、兰伯特/Lambert、阿尔伯斯Albers、墨卡托Mercator、通用横轴墨卡托UTM、网络墨卡托Web Mercator)。
    
    在第三部分,是实际操作过程中遇到的种种问题,如投影不对会出现什么情况、如何转换GCS、如何切换PCS(重投影问题)等问题,涉及一些数学转换的思维,需要有一定的空间想象能力。
    
    在第四部分,我简单介绍一下所谓的火星坐标。
    

    那么我们开始吧!

    1. 经纬度与GCS

    天气预报也好,火箭发射也罢,地震、火山等事故发生时,电视台总会说东经XX度,北纬YY度。这个经纬度中学地理就学过了,我就不细说了。

    我从如何描述地球说起。
    1.1 凹凸不平的地球

    谁都知道地球表面不平坦,它甚至大概形状都不是一个正球体,是一个南北两极稍扁赤道略胖的胖子,胖度大概是20km,在外太空几乎看不出来的,这也可能和星球长期受到潮汐引力、太阳引力以及自身旋转的向心力有关。这里不是地球科学,就不再深究了。

    为了能让地球出现在数学家的公式里,我们曾经走过了2个阶段:用平静的海面描述地球——用虚拟的旋转椭球面描述地球表面。

    这里也不是地图学,再深入下去其实还有似大地水准面等概念。就挑重点讲。

    “假设地球表面都是水,当海平面风平浪静没有波澜起伏时,这个面就是大地水准面。”大家应该知道,在太空失重的环境下,水相对静止状态是个正球体,那么肯定很多人就认为,大地水准面就是个正球面。不是的,还需要考虑一个问题:地球各处的引力不同。引力不同,就会那儿高一些,这儿低一些,尽管这些微小的差距肉眼难以观测出来,可能隔了好几千米才会相差几厘米。所以,在局部可能看起来是个球面,但是整体却不是。显然,用大地水准面来进行数学计算,显然是不合适的,至少在数学家眼中,认为这不可靠。

    所以找到一个旋转椭球面就成了地理学家和数学家的问题。(注意区分椭球面和旋转椭球面这两个数学概念,在GCS中都是旋转椭球面)

    给出旋转椭球面的标准方程:

    (x2+y2)/a2+z2/b2=1

    其中x和y的参数相同,均为a,这就代表一个绕z轴旋转的椭圆形成的椭球体。不妨设z轴是地球自转轴,那么这个方程就如下图是一个椭球体,其中赤道是个圆。
    在这里插入图片描述
    这样,有了标准的数学表达式,把数据代入公式计算也就不是什么难事了。

    由此我们可以下定义,GIS坐标系中的椭球,如果加上高程系,在其内涵上就是GCS(地理坐标系统)。其度量单位就是度分秒。

    描述一个旋转椭球面所需的参数是方程中的a和b,a即赤道半径,b即极半径,f=(a-b)/a称为扁率。

    与之对应的还有一个问题:就是坐标中心的问题。(地球的中心在哪里?)

    【注】十九世纪发现赤道也是一个椭圆,故地球实际应以普通椭球面表示,但是由于各种原因以及可以忽略的精度内,一直沿用旋转椭球体作为GCS。
    1.2 参心坐标系、地心坐标系

    上过中学物理的人知道,物体均有其质心,处处密度相等的物体的质心在其几何中心。所以,地球只有一个质心,只是测不测的精确的问题而已。由地球的唯一性和客观存在,以地球质心为旋转椭球面的中心的坐标系,叫地心坐标系,且唯一。当然,由于a、b两个值的不同,就有多种表达方式,例如,CGCS2000系,WGS84系等,这些后面再谈。

    【注】地心坐标系又名协议地球坐标系,与GPS中的瞬时地球坐标系要对应起来。

    但是又有一个问题——政治问题,地图是给一个国家服务的,那么这地图就要尽可能描述准确这个国家的地形地貌,尽量减小误差,至于别国就无所谓。

    所以,就可以人为的把地球的质心“移走”,将局部的表面“贴到”该国的国土,使之高程误差尽量减小到最小。

    这个时候,就出现了所谓的“参心坐标系”。即椭球中心不在地球质心的坐标系。如下图:
    在这里插入图片描述
    绿色的球就是为了贴合赤道某个地方而产生了平移的参心系(这里只是个例子,而且画的有点夸张)。

    我国常用的参心系及对应椭球:

    北京54坐标系:克拉索夫斯基椭球体
    
    西安80坐标系:IAG75椭球体
    

    我国常用的地心系及对应椭球:

    WGS84坐标系:WGS84椭球体(GPS星历的坐标系,全球统一使用,最新版于2002年修正)
    
    CGCS2000坐标系:CGCS2000椭球体(事实上,CGCS2000椭球和WGS84椭球极为相似,偏差仅有0.11mm,完全可以兼容使用)
    

    为什么CGCS2000和WGS84要略微有些偏差?这是因为WGS84系是GPS的坐标系,而我国北斗定位则是需要自己的坐标系,就搞了一波CGCS2000。

    这几个坐标系的介绍放在下一节,而这些椭球体的转换将在第三部分介绍(主要就是数学中,空间直角坐标系旋转的问题)。
    1.3 我国常见GCS

    借助以下4个常见坐标系及椭球体,就可以推及到世界各地不同的GCS及椭球体,完成数据的转化问题。
    1.3.1 北京54坐标系(参心)

    新中国成立以后,我国大地测量进入了全面发展时期,再全国范围内开展了正规的,全面的大地测量和测图工作,迫切需要建立一个参心大地坐标系。由于当时的“一边倒”政治趋向,故我国采用了前苏联的克拉索夫斯基椭球参数,并与前苏联1942年坐标系进行联测,通过计算建立了我国大地坐标系,定名为1954年北京坐标系。因此,1954年北京坐标系可以认为是前苏联1942年坐标系的延伸。它的原点不在北京而是在前苏联的普尔科沃。

    椭球体:Krasovsky椭球
    
    极半径b=6 356 863.0187730473 m
    
    赤道半径a=6 378 245m
    
    扁率=1/298.3
    
    高程系:56黄海系
    

    1.3.2 西安80坐标系(参心)

    改革开放啦,国家商量要搞一个更符合国用的坐标系——西安80坐标系,该坐标系的大地原点设在我国中部的陕西省泾阳县永乐镇,位于西安市西北方向约60公里。

    椭球体:IAG椭球(全名是啥还得去翻翻课本。。。)
    
    极半径b=6 356 755m
    
    赤道半径a=6 378 140m
    
    扁率=1/298.25722101
    
    高程系:85黄海系
    

    1.3.3 WGS84坐标系(地心)

    全称World Geodetic System - 1984,是为了解决GPS定位而产生的全球统一的一个坐标系。

    椭球体:WGS84椭球
    
    极半径b=6 356 752.314 245 179 5m
    
    赤道半径a=6 378 137 m
    
    扁率=1/298.257223563
    
    高程系:?根据国家需求定?
    

    1.3.4 CGCS2000坐标系(地心)

    2000国家大地坐标系是全球地心坐标系在我国的具体体现,其全称为China Geodetic Coordinate System 2000,其原点为包括海洋和大气的整个地球的质量中心。

    椭球体:CGCS2000坐标系
    
    极半径b=6 356 752.314 140 355 8m
    
    赤道半径a=6 378 137m
    
    扁率=1/298.257222101
    
    高程系:85黄海系
    

    【注】CGCS2000的定义与WGS84实质一样。采用的参考椭球非常接近。扁率差异引起椭球面上的纬度和高度变化最大达0.1mm。当前测量精度范围内,可以忽略这点差异。可以说两者相容至cm级水平

    最后一张表总结一下:
    在这里插入图片描述
    有趣的是,在ArcGIS的GCS文件夹下,找到了一个“新北京54坐标系”,这是为了使54和80之间方便转化而产生的一个过渡坐标系。
    2. 方里网与PCS

    说完了以经纬度为计量单位的GCS,那么我再来说说以平面(空间)直角坐标系为度量衡的投影坐标系(PCS,Projection Coordinate System)。

    说一个具体的问题以解释为什么要用PCS。

    如何用经纬度表达一块地的面积?

    这没办法吧?经纬度本身不带单位,度分秒仅仅是一个进制。

    而且同样是1度经度,在不同的纬度时代表的弧段长是不一样的。

    这就给一些地理问题带来了困惑:如何建立一个新的坐标系使得地图分析、空间分析得以定量计算?

    PCS——投影坐标系就诞生了。

    我要着重介绍一下我国的6种常用投影方式:

    高斯克吕格(Gauss Kruger)投影=横轴墨卡托(Transverse Mercator)投影
    
    墨卡托(Mercator)投影
    
    通用横轴墨卡托(UTM)投影
    
    Lambert投影
    
    Albers投影
    
    Web Mercator(网络墨卡托)投影
    

    很多课本、博客都写的很详细了,我想从3D的图形来描述一下他们是怎么个投影的。
    2.1 从投影说起
    在这里插入图片描述
    如上图。光线打到物体上,使得物体产生的阴影形状,就叫它的投影。这个不难理解。

    这里我想问一个问题:既然投影物体,是不变的,那么我把投影的平面改为曲面呢?

    这就产生了不同的投影,比如投射到一个圆锥面上,一个圆柱面上,一个平面上…等等。

    不同的投影方式有不同的用途,也有了不同的投影名称。

    但是,PCS是基于存在的GCS的,这个直接规定。没有GCS,就无从谈PCS,PCS是GCS上的地物投射到具体投影面的一种结果。

    即:

    PCS=GCS+投影方式
    2.2 我国常见投影
    2.2.1 高斯克吕格投影/横轴墨卡托投影

    英文名Gauss Kruger。在一些奇奇怪怪的原因中,又名横轴墨卡托投影,英文名Transverse Mercator。

    它的投影面是椭圆柱面,假设椭圆柱躺着,和地轴垂直,而且投影面与之相切,就是横轴墨卡托了。
    在这里插入图片描述
    中央那条黑线就是投影中心线,与椭圆柱面相切。这条线逢360°的因数就可以取,一般多用3度带、6度带。

    就是说,这个投影椭圆柱面可以继续绕着地轴继续转,图中还有一条经线,两条相差6度。

    椭圆柱面旋转6度,继续投影,直到360/6=60个投影带投影完毕。
    在这里插入图片描述
    注意3度带和6度带的起算经线不同,以及Y方向(赤道方向)前需要加投影带号。

    高斯克吕格已经广为熟知了,我就不作具体介绍,大家可以找比我解释的更好的,我只是摆个图希望大家看的更仔细。

    这个投影的特点是,等角/横/切椭圆柱/投影。

    投影后的地图,角度不变,面积有变。离中央经线越远的地区,面积变化越大。此投影合适用于导航。
    
    投影椭圆柱面是横着的;
    
    投影椭圆柱面与椭球体相切。
    

    适用比例尺:1:2.5万1:100万等使用6度分带法;1:50001:10000使用3度分带法。

    【注】在ArcGIS中,不同的GCS的PCS是不同的,以CGCS2000、西安80和北京54为例:
    
    CGCS2000_3_Degree_GK_CM_111E:CGCS2000的GCS下,使用高斯克吕格3度分带法,以中央经线为东经111度的投影带的投影坐标系
    
    CGCS2000_3_Degree_GK_Zone_30:CGCS2000的GCS下,使用高斯克吕格3度分带法,第30个投影带的投影坐标系
    
    Beijing_1954_3_Degree_GK_CM_111E:北京54的GCS下,使用高斯克吕格3度分带法,以中央经线为东经111度的投影带的投影坐标系
    
    Beijing_1954_3_Degree_GK_Zone_35:北京54的GCS下,使用高斯克吕格3度分带法,第35个投影带的投影坐标系
    
    Xian_1980_3_Degree_GK_CM_111E:西安80的GCS下,使用高斯克吕格3度分带法,以中央经线为东经111度的投影带的投影坐标系
    
    Xian_1980_3_Degree_GK_Zone_34:西安80的GCS下,使用高斯克吕格3度分带法,第34个投影带的投影坐标系
    
    不难发现,都是以GCS起头的命名法。
    

    2.2.2 墨卡托投影

    英文名Mercator投影。

    数学上,投影面是一个椭圆柱面,并且与地轴(地球自转轴)方向一致,故名:“正轴等角切/割圆柱投影”。

    既可以切圆柱,也可以割圆柱。

    其实就是高斯克吕格的圆柱面竖起来。
    2.2.3 通用横轴墨卡托投影(UTM投影)

    英文全称Universal Transverse Mercator。是一种“横轴等角割圆柱投影”

    和高斯克吕格类似,高斯克吕格的投影面是与椭球面相切的,这货与椭球面相割。

    实质上

    UTM投影=0.9996高斯投影
    

    其余性质都和高斯克吕格投影一样。

    割于纬度80°S和84°N。中央经线投影后,是原长度的0.9996倍。

    不过,起算投影带是180°经线,174°W则是第二个投影带的起算经线。

    由于有以上优点,UTM投影被许多国家和地区采用,作为大地测量和地形测量的投影基础。

    【注】UTM投影是我国各种遥感影像的常用投影。

    【注2】UTM投影在ArcGIS中的定义

    例如:

    WGS_1984_UTM_Zone_50N,就代表WGS1984的GCS下,进行UTM投影,投影带是50N.

    WGS_1984_Complex_UTM_Zone_25N,就代表WGS1984的GCS下,进行3度分带UTM投影,投影带是25N.
    2.2.4 Lambert投影

    中文名兰伯特投影、兰博特投影。

    我国地形图常用投影,比如1:400万基础数据:
    在这里插入图片描述
    (GCS是北京54)可以看到授权是自定义,说明这个投影是自定义的,没有被官方收录。等到第三部分再说怎么自定义投影。

    我国的基本比例尺地形图(1:5千,1:1万,1:2.5万,1:5万,1:10万,1:25万,1:50万,1:100万)中,1:100万地形图、大部分省区图以及大多数这一比例尺的地图多采用Lambert投影。

    兰伯特投影是一种“等角圆锥投影”。

    ArcGIS中的投影系一般带有Lambert_Conformal_Conic等字样,国际上用此投影编制1∶100万地形图和航空图。

    它就像是一个漏斗罩在乒乓球上:在这里插入图片描述

    更标准的画法,见下图,有切和割两种。
    在这里插入图片描述
    它没有角度变形。

    这个漏斗的倾斜程度,就有三种:正轴、横轴、斜轴。就是圆锥的方向和地轴的方向的问题。
    2.2.5 Albers投影

    中文名阿伯斯投影。又名“正轴等积割圆锥投影”,常用于我国各省市的投影。

    和上一个兰伯特图形类似,就是一个圆锥与椭球面切割,进行等积投影。
    在这里插入图片描述
    给了官方WKID:102025.

    与Lambert投影的区别大概就在一个等角,一个等积投影了。
    2.2.6 Web墨卡托(WebMercator投影)

    这是一个由Google提出的、为了自家GoogleMap而专门定义的一种投影,是墨卡托投影的一种变种。

    主要是将地球椭球面当作正球面来投影,这就会导致一定的误差。

    直接看看ArcGIS中的定义:
    在这里插入图片描述
    给了WKID:3857,名字是WGS_1984_Web_Mercator_Auxiliary_Sphere,意思就是在WGS84的GCS下进行web墨卡托投影。

    现在,经常被百度地图等网络地图采用,估计是Web程序员想省事吧。
    3. GCS与PCS的转换问题(ArcGIS实现)
    3.1 GCS转GCS

    这就是属于空间解析几何里的空间直角坐标系的移动、转换问题,还有个更高级的说法——仿射变换。

    我们知道,空间直角坐标系发生旋转移动缩放,在线性代数里再常见不过了。在摄影测量学中,旋转矩阵就是连接像空间辅助坐标系与像空间坐标系的转换参数(好像不是这俩坐标系,忘了)

    欲将一个空间直角坐标系仿射到另一个坐标系的转换,需要进行平移、旋转、缩放三步,可以无序进行。

    而平移、旋转又有三个方向上的量,即平移向量=(dx,dy,dz)和旋转角度(A,B,C),加上缩放比例s,完成一个不同的坐标系转换,就需要7参数。

    我们知道,地心坐标系是唯一的,即原点唯一,就说明平移向量是0向量,如果缩放比例是1,那么旋转角度(A,B,C)就是唯一的仿射参数,即3参数。
    在这里插入图片描述
    上图左图为坐标系平移,右图为坐标系旋转。缩放可以在任意阶段进行。

    ——————以上为理论预备——————

    说了这么多理论,如何进行GCS转换呢?假设一个数据源已经有了GCS,我们需要做的操作只有一个:

    打开如下工具:数据管理工具/投影和变换/投影,设置界面如下(以WGS1984转西安80为例):
    在这里插入图片描述
    别选错了,这里输入输出都是GCS。然后出现以下警告:
    在这里插入图片描述
    这就告诉你,需要参数转换。在这里,WGS84转西安80,是属于7参数转换(地心转参心),但是缺少7参数,就需要自己去测绘局买或者自己粗略算。

    那么如何定义一个地理坐标变换呢?
    在这里插入图片描述
    使用投影的旁边的工具:

    即可。见下图:
    在这里插入图片描述
    使用Position_Vector方法(即7参数法)即可输入7参数。我就不输入了,各位有数据的可以继续做。

    关于3参数和7参数,在ArcGIS帮助文档里都写有的,目录如下:
    在这里插入图片描述
    3.2 GCS进行投影

    这个就更简单了。

    随便挑个GCS,喜欢什么用什么,如西安80投影到UTM投影,都可以的。

    仍然是上节提及的“投影工具”:

    这样就可以了,这里是以WGS84的GCS投影到UTM的第50分度带上。

    如果是进行栅格数据的投影,就用“栅格”文件夹下的“投影栅格”工具。

    如果所需投影系没有自己需要的GCS,就自定义一个:
    在这里插入图片描述
    这个窗口在Catalog浮动窗或者Catalog软件里打开某个数据的属性,找到XY坐标系的选项卡,就可以新建。

    【注】如果在数据的属性页的XY坐标系选项卡,或者图层数据框的XY坐标系选项卡中修改GCS,这仅仅是改个名,坐标值还是原来的坐标系上的,这代表老坐标值并没有转换到新坐标系上。形象的说,就是换汤不换药,这是不对的。我这里说的用投影的方法,才是真正的坐标仿射变换到新的坐标系,使之更改数值,形成在新的坐标系下的新坐标值。
    3.3 PCS转PCS(重投影)

    最常见的就是下载了谷歌影像图,是Web墨卡托的投影,但是实际又需要高斯投影,那么基于WGS84这个GCS,就可以进行重投影。

    在这里,我就以UTM投影转Web墨卡托投影为例:

    这次是用“栅格”文件夹下的“投影栅格”工具:
    在这里插入图片描述
    一般选好红框的三个参数即可。

    如果仍然提示需要地理坐标变换的警告,说明不是一个GCS的数据,需要3参数或者7参数转换。

    栅格数据类似,使用“投影工具”。
    在这里插入图片描述
    工具定位。
    3.4 定义投影

    这不是定义一个投影坐标系,而是给有坐标值的矢量或者栅格数据添加一个投影坐标系而已。

    使用“定义投影”工具即可,既可以定义GCS,也可以定义PCS(这软件的中文翻译有点毛病)。
    3.5 地理配准与空间校正

    这个就不多说了,地理配准就是使屏幕坐标系的扫描地图仿射、二次三次变换到真正投影坐标系的过程,自动加上目标数据的PCS。有了PCS后就会自动加上GCS。

    地理配准主要是针对栅格数据。

    空间校正则是针对矢量数据进行仿射、二次、三次变换。
    3.6 可能出现的错误
    3.6.1 显示几十万位数字的“经纬度”
    在这里插入图片描述
    如上图。

    这是有了PCS后,在Catalog的数据属性页的XY坐标系选项卡里,选中GCS,然后应用的结果。

    原本是方里网的数字,变成了GCS才有的度分秒。

    解决方法:Catalog属性页将GCS改回原来的PCS即可。
    3.6.2 显示三位数、两位数的“米”

    这个暂时没找到案例,曾经见过。
    3.6.3 显示一个几乎是0,一个又很大很大位数的数字

    如上图。

    这个属于数据本身有GCS,但是在Catalog的XY坐标系选项卡里给它添加PCS然后应用后,可能会出现的错误。

    解决方法:在Catalog属性页的XY坐标系选项卡里,选中原来的GCS然后应用即可。

    如果数据本身没有PCS,应该做的是投影操作。
    3.6.4 大范围的数据给了小范围的投影

    例如,整个中国地图理应跨越好几个投影带,却给了某一个投影带的投影坐标系,这就会出现负值。如下图,红框箭头是鼠标的位置。
    在这里插入图片描述
    这个按理说应该用兰伯特投影,但是却给了一个UTM第49区的PCS,所以在中央经线靠左很多的位置会出现负值。

    解决方法:这个直接做重投影即可。

    以上四种错误比较常见,但是手头没有案例,以后遇到再发上来吧。

    总结一下:
    在这里插入图片描述
    4. 火星坐标

    火星坐标这个东西很常见,出现在互联网地图上。例如百度、腾讯、谷歌等地图。

    出于保密等政治因素,地图的GCS坐标值,会被一种特殊的数学函数加密一次,会偏离真实坐标数百米的距离,但是反馈到用户端的却是正确的位置信息(也就是说你拿到GCS坐标也没用,拿GPS到实地跑跟拿着地图定位,可能会偏出几十米甚至一百米的距离)。

    火星坐标系原名国测局坐标系(GCJ-02),有篇文章比我写的透彻多了,甚至给出了还原代码,我放到参考资料了,有兴趣的可以看看
    参考资料

    你所不知的有趣投影方法:https://blog.csdn.net/kikitamoon/article/details/50634331

    ArcGIS将WGS84坐标转北京54或西安80

    百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系互转:https://cnodejs.org/topic/564c0a27e4766d487f6fe38d

    展开全文
  • 我随心所欲地添加了一些我认为很有趣的选修课。 课程 MSDS课程的灵感来自美国一流大学的硕士课程。 模板课程可以在以下位置找到: : 轨迹课程 附加信息 麻省理工学院提供的MicroMasters:registered:计划的证书可...
  • 自从我目前主修软件工程专业以来,我希望这是数学选修课一个有趣话题,而且我知道我将接触到新编程范例。 该课程是一个混合远程演示课程,与来自科罗拉多州亚当斯州立大学一群学生一起工作。 该课程主要由...
  • Python学习心得

    2018-12-21 19:12:00
    Python学习心得 首先很庆幸自己选到了这门个性化选修课,可能是我个人比较认为这门课程所用语言很特别很奇妙,老师也很有趣,能让我们更好了解Python这门课程真正用途。在学习Python这门课程这段时间以来...

    Python的学习心得
    首先很庆幸自己选到了这门个性化选修课,可能是我个人比较认为这门课程所用的语言很特别很奇妙,老师也很有趣,能让我们更好的了解Python这门课程真正的用途。在学习Python这门课程的这段时间以来,并且自己也能认识并且学习到很多知识,以下就是对这门课程所做的总结:

    Python是一种高级动态,完全面向对象的语言,方便快捷。运行程序时,打个比方,计算圆周率类的高级算术题 只要import math math.sqrt()就可以轻松的计算出圆周率,Python就类似于一个超级计算机。

    学习的知识点如下:

    1、 整型int与浮点型float:可以进行基本的运算 如5*7=35 、7/2=3.5、7%3=1等 一些相关的数学函数类似于sin之类都在math模块中

    a = [1,True,'ab']
    a + ["Hello"]
    a + [False]
    a + [False]
    print(len(a))
    print(a[1:3])
    print(a[0:3:2])
    print(a[::-1])
    a+a
    2、复数计算与逻辑值:复数的与或非()相关的都可以很快捷的运算出结果 逻辑值如1>2为false、 bool(999)为true
    3、 字符串的相关操作:+拼接、 *复制、len长度、[start:end:step]用来提取一部分和以及一些相关高级操作 如下图(含例):

    #字符串操作
    a,b = 'abc','xyz'
    print('a' in a)
    print(ord(a[0]))
    print(chr(65))
    print(r'武汉')
    print('\u4e2d\u6587')

    4、.列表与元组:列表可以增加、删除、替换和重排的作用和一些切片拆分的操作 如下图:

    #List列表
    a=[1,2,3,4]
    b = a
    b[1] = True
    print(a)

    #列表元组的基本操作
    # + * len() [] in
    a=[1,2,3]
    a+[4]
    a*2
    len(a)
    2 in a

    #列表元素的高级操作
    mylist=[1,2,3,4,5]
    mylist[1:4]
    mylist[2:5]
    mylist[-3::-1]
    mylist[::2]

    #切片
    s='abcdefg12345'
    print(s[3:9])
    print(s[5:])
    print(s[-1:-6:-1])
    print(s[:10:2])

    #拆分
    t='Mike and Tom'
    print(t.split(' '))
    5、range函数:是连续序列生成器


    #range函数
    list(range(10))
    list(range(5,10))
    range(0,10)
    tuple(range(10))
    6、集合set:集合是不重复元素的无序组合、用set可以创建空集也可用set从其他序列转换生成集合 如下图


    #set集合
    #不重复元素的无序组合
    a=[1,2,3,4,3,2,1]
    b=set(a)
    print(a)
    print(b)
    #upper/lower/swapcase修改大小写
    print(t.upper())
    print(t.lower())
    print(t.swapcase())
    7、字典dict:是通过key值来索引values元素 如下图


    mydict={1:'Mon','linel':3332}
    mydict['Mon']=3
    'linel' in mydict
    mydict.keys()
    mydict.values()
    mydict.items()
    8、运算表达式,函数调用如 import math /n math.sqrt 和赋值 如a=3 是讲3赋值给a这个逻辑


    9、if条件语句:包含elif或多条elif语句和一条else语句组成 while语句是条件循环语句 其中break语句是直接跳出循环 如下图


    #条件if
    #elif<逻辑条件>:可以多个elif
    a=12
    if a>10:
    print("Great!")
    elif a>6:
    print("Middle!")
    else:
    print("Low!")


    #while循环
    numbers=[12,37,5,42,8,3]
    even = []
    odd = []
    while len(numbers) > 0:
    number = numbers.pop()
    if(number % 2 == 0):
    even.append(number)
    else:
    odd.append(number)
    print('even:',even)
    print('odd:',odd)
    10、函数function :定义函数为def语句 调用函数为<函数名>(<参数>) 相关例子如下图:


    def sum_list(alist): #定义一个带参数的函数
    sum_temp = 0
    for i in alist:
    sum_temp += i
    return sum_temp #函数返回值

    print(sum_list) #查看函数对象sum_List
    my_list = [23,45,67,89,100] #调用函数,讲返回值赋值给my_sum
    my_sum = sum_list(my_list)
    print("sum of my List;%d" % (my_sum,))


    def func(n):
    total = 1
    for i in range(1, n+1):
    total = total+1
    return total


    def sum(n):
    total = 0
    for i in range(1,n + 1):
    total += func(i)
    print(sum)
    sum(3)


    def func_test(key1,key2,key3=23):
    print("k1=%s,k2=%s,k3=%s" % (key1,key2,key3))

    print("====fun_test")
    func_test('v1','v2')
    func_test('ab','cd',768)
    func_test(key2='kk',key1='k')
    11、参数 及位置参数


    #参数的默认值
    def thank_you(name='everyone'):
    print('You are doing good work ,%s!' %name)
    thank_you()
    thank_you('张三')


    #位置参数
    def desc_person(first_name,last_name,age):
    print("First name: %s" % first_name.title())
    print("Last name: %s" % last_name.title())
    print("Age: %d" % age)
    desc_person('brain','kernighan',30)
    desc_person(age=20,first_name='zhang',last_name='hai')


    #混合位置和关键字参数
    def desc_person(first_name,last_name,age=None,favorite_language=None):
    print("First name: %s" % first_name.title())
    print("Last name: %s" % last_name.title())
    if age:
    print("Age :%d" % age)
    if favorite_language:
    print("Favorite language : %s" % favorite_language)
    desc_person('brian','kernighan',favorite_language='C')
    desc_person('ken','thompson',age=22)


    #接受任意数量的参数
    def example_function(num_1,num_2,*nums):
    sum = num_1+num_2

    #Then add any other numbers that were sent.
    for num in nums:
    sum = sum + num

    # Print the results.
    print("The sum of your numbers is %d." % sum)
    example_function(1,2)
    example_function(1,2,3)
    example_function(1,2,3,4)
    example_function(1,2,3,4,5)
    12、.map函数:需要对列表中每个元素做一个相同的处理,得到新列表


    #map
    def add(a,b):
    return a + b

    lst = [1,2,3,4,5]
    print(map (add,lst,lst))
    print(list(map(add,lst,lst)))

    #filter
    def is_even(x):
    return x % 2 == 0
    lst = [1,2,3,4,5]
    print(list(filter(is_even,lst)))

    #reduce函数对参数进行累积
    from functools import reduce
    def myadd(x , y):
    return x + y
    lst = [1,2,3,4,5]
    sum = reduce(myadd,lst)
    print(sum)
    13、 匿名函数lambda:可以返回一个匿名函数 表达式为:lambda<参数表>:<表达式>


    #lambda函数(匿名函数)
    answer = lambda x:x**2
    print(answer(5))

    #map(),filter() reduce()结合lambda表达式
    print(list(map( lambda x: x+x, [y for y in range(10)])))
    print(list(map( lambda a, b: a+b,[x for x in range(10)],[y for y in range(10)])))
    print(list(filter( lambda a: a & 1 ==0 , [x for x in range(10)])))
    print(reduce(lambda x,y : x*y , [a for a in range(1,10)]))
    14、time()函数


    #获取当前的时间戳
    time.time()
    localtime = time.localtime(time.time())
    print("本地时间为:",localtime)

    #格式化时间
    localtime = time.asctime(time.localtime(time.time()))
    print("本地时间为:",localtime)
    print(time.s)

    15、面向对象


    #力
    class Force:
    def __init__(self, x, y): #x,y方向分量
    self.fx, self.fy =x,y
    def show(self): #打印出力的值
    print("Force<%s,%s>" % (self.fx, self.fy))
    def add(self,force2): #与另一个力合成
    x = self.fx + force2.fx
    y = self.fy + force2.fy
    return Force(x,y)

    #类定义中的特殊方法
    def __str__(self):
    return 'Force<%r, %r>' % (self.x, self.y)

    def __mul__(sel,n):
    x, y = self.x * n, self.y *n
    return Force(x,y)

    def __add__(self, other):
    x ,y = self.x + other.x, self.y + other.y
    return Force(x, y)

    def __eq__(self, other):
    return(self.x == other.x) and (self.y == other.y)

    def __repr__(self):
    return 'Force({0.x!r},{0.y!r})'.format(self)

    #生成一个力对象
    f1 = Force(0,1)
    f1.show()

    #生成另一个力对象
    f2 = Force(3,4)
    #合成为新的力
    f3 = f1.add(f2)
    f3.show()


    class Student:
    def __init__(self, name, grade):
    self.name, self.grade = name, grade
    #内置sort函数只引用<比较符来判断前后
    def __lt__(self, other):
    #成绩比other高的,排在他前面
    return self.grade > other.grade
    #Student的易读字符串表示
    def __str__(self):
    return "(%s,%d)" % (self.name, self.grade)
    #Student的正式字符串表示,我们让它跟易读表示相同
    __repr__=__str__

    #构造一个Python list对象
    s = list()

    #添加到student对象到list中
    s.append(Student("Jack",80))
    s.append(Student("Jane",75))
    s.append(Student("Smith",82))
    s.append(Student("Cook",90))
    s.append(Student("Tom",70))
    print("Original:", s)

    #对list进行排序,注意这是内置sort方法
    s.sort()

    #查看结果,已经按照成绩排好序
    print("Sorted:",s)


    class Car:
    def __init__(self, name):
    self.name = name;
    self.remain_mile = 0

    def fill_fule(self, miles):
    self.remain_mile = miles

    def run(self, miles):
    print (self.name,end=':')
    if self.remain_mile >= miles:
    self.remain_mile -= miles
    print("run %d miles!" % (miles,))
    else:
    print("fuel out!")

    class GasCar(Car):
    def fill_fuel(self,gas): #加汽油gas升
    self.remain_mile = gas * 6.0 #每升跑6英里

    class ElecCar(Car):
    def fill_fuel(self, power): #充电power度
    self.remain_mile = power * 3.0 #每度电3英里

    gcar=GasCar("BMW")
    gcar.fill_fuel(50.0)
    gcar.run(200.0)

    ecar=ElecCar("Tesla")
    ecar.fill_fuel(60.0)
    ecar.run(200.0)

    try:
    print('try...')
    r = 10 / 'xyz'
    print('result:',r)
    except TypeError as e:
    print('TypeError:',e)
    except ZeroDivisionError as e:
    print('no error!')
    else:
    print('no error!')
    finally:
    print('finally...')
    print('END')
    以上就是我对Python这门课知识点的总结和理解,以后也会学习更多这方面的相关的来丰富自己

    转载于:https://www.cnblogs.com/spxp/p/10158503.html

    展开全文
  • Python学习心得首先很庆幸自己选到了这门个性化选修课,可能是我个人比较认为这门课程所用语言很特别很奇妙,老师也很有趣,能让我们更好了解Python这门课程真正用途。在学习Python这门课程这段时间以来,...
  • 首先很庆幸自己选到了这门个性化选修课,可能是我个人比较认为这门课程所用语言很特别很奇妙,老师也很有趣,能让我们更好了解Python这门课程真正用途。在学习Python这门课程这段时间以来,并且自己也能认识...
  • 介绍 姓名:加布里埃尔·杜克(Gabriel Duke) 皇家墨尔本理工大学学生编号:s3785307 学生电子邮件地址:s3785307@...我实际上有0年IT经验,因此为什么要参加这个选修课! 您为什么选择参加RMIT?我之所以选择去RMI
  • 第一篇博客

    2017-11-04 16:28:24
    不过当时好像是选修课,所以也没太上心。到了大二,我开始学习c++,鉴于大一时c语言毫无基础,所以打算从零开始,把学校那本教材从头开始,认认真真读,慢慢了解了c,深入接触后,发现其中蕴含思想很有趣。...
  • 第四周小结

    2019-03-26 21:44:15
    这周又结束了,转眼间,都一个月了,感觉时间过得好快,在上周学习中,学了Java流程控制结构,感觉自己在慢慢进步。这也告诉自己,什么都学不... 这周除了自己专业课外,还意外收获了一门选修课,那就是中...
  • 毕业设计过程记录一,接触opencv

    千次阅读 2018-12-21 15:32:17
    对于图像处理了解...后来又选修学院老师一门《机器视觉》选修课,跟着老师一点一点搭建OpenCV环境,使用OpenCV函数。当时只是觉得非常有趣。  后来导师给我了一份学长做基于OpenCV天梯防撞系统论文,...
  • 海龟画图----python画美队盾牌

    千次阅读 2018-10-09 00:05:10
    之前上选修课老师首先讲的就是海龟画图,后来还是稍微研究一下了的,海龟画图其实还是蛮有趣的,随便改一些数据可以画出意料之外的惊喜。 开发环境 :win10 + pycharm 需要的包就是turtle,这个是python自带的,不...
  • 第00次py作业

    2018-09-12 20:14:00
    我选py这门课程,不是因为它学分高,而是因为它是一种编程语言。作为一个计算机专业... 这门课,虽然他是选修课,我是当必修对待,尽我努力学好一点,。对于老师您教学,我感觉十分生动有趣,能提起兴趣...
  • 2月15

    2020-02-15 22:47:31
    这学期的课都很有趣有:电视节目编制与制作、虚拟现实交互技术、二维动画等,还选了两门很感兴趣的选修课:中医药养生、新闻采访与写作(这门课的老师很棒,自己出版有书而且经常在群里给我们看他的公众号)。...
  • 用分享的方式成长,用有趣的眼光看世界。 欢迎来到22 26 25的博客 ! 热爱编码、算法、知识总结,不定期更新有趣、有料、有营养内容。... 在智慧树/知到看选修课是很多大学生所要经历的过程。然而
  • 倒计时:19天

    2010-12-21 22:13:00
    又一门课结束了,形体训练课,虽然是选修课,但我挺喜欢它的。令自己感到有趣的事物才有意义,是不是?今天分小组比赛,我们一组不是很好,我通过这次比赛,充分证明我不适合做一个领导者,我还是更适合做一个追随者...
  • 被播种了疫苗

    2016-01-23 09:50:23
    不知道是不是意味着,安全了。 附加: 下午跟小林、贤俊、潇潇在...恰好卓茜也有一本《基础书法》,是为上学期的选修课而买,老师著(……)。几乎没用过,整书散发着新鲜,给我无限期看。 以前的拿笔方法是错的,
  • 1、选修课“酒店英语”老师最开始全程英语交流,我表示压力山大。不过在上课十多分钟后老师开始讲中文了,我们学到了很多有趣的单词。比如“河马”,河马单词:hippo,你知道老师是怎么解释的吗?她说道:你跟河马打...
  • 转载黄文奇教授语录,安息~

    千次阅读 2013-04-25 16:44:55
    选修过黄老师一门,是关于一系列NP问题理论和算法研究,深入浅出,思路非常清晰。能把这些问题讲 明白,而且对象是给非数学专业又没有研究经历学生, 是需要深厚功力。非常棒老师和学者!同时,他也是...
  • 上学期选修了一门《现代数学方法选讲》,包含两部分内容:模糊数学和分形几何。觉得分形几何中论点新颖有趣,其中比较基础就是朱里叶集和曼得布罗特集了。这两种集合图形体现了无限可分概念,往往带给人们...
  • 机器人选修课 Andrew Davison课程: Robotics Lecture Course (course code 333) Simultaneous Localization and Mapping: Part I Simultaneous Localization and Mapping: Part II 瑞士苏黎世理工学生练习 ...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

有趣的选修课