地理信息技术——平民化时代的来临(一)
2011-08-15 15:01
351 查看
原作出处:/article/1446426.html
一直认为地理信息系统建设是个小众化的圈子,但是随着越来越多的人开始使用GIS软件,发现GIS已经从蛰伏期转变到了繁荣期,而且技术也越来越成熟。慢慢想来,几乎每个行业都在使用GIS技术,如国土,环保,航测等等。虽然GIS技术是一个跨学科综合型的IT技术,但在早先的应用仅局限在一些专业软件内部,如ArcGIS,mapGIS等等。
为什么GIS没有像其他IT技术一样很快的流行开?我觉得可能和他的一些专业背景知识有关。大部分人觉得GIS有难度,而且难度大部分是集中在投影啊坐标系的理解上,这些知识点的理解造成了GIS使用的局限。其实GIS的快速发展和组件式GIS的流行分不开,Esri在这方面抢在了所有人的前面,简单的搭建环境后,就能开发出独立的GIS功能,这是何等的强大。随着时间的推移,众多厂商开始介入GIS领域,最先进入大众眼球的是Google Earth,这个软件的强大,以至于让Esri感到害怕,随着国内大厂商如高德,天地图的在线功能,使得很多人开始了解GIS,熟悉GIS,GIS也变得大众化。
因为一直在GIS的圈子,从参与者的角度来说,GIS技术发展的确很快,web GIS,云等等很多新奇概念的涌现越来越快,但是无论现在还是以后只要还和地理位置相关,GIS背后的基石是不会变的,这个基石就是计算机图形学,算法,如此而已。这里就从最实用的角度出发,告诉你一个真实的GIS技术如何实现。
大部分人如果使用GIS,最先想到的功能是显示地图。这也是GIS产生的缘由所在。如果要我们自己动手写一个展示地图的系统如何实现呢?如果你说我会用第三方组件,那我知道你肯定熟悉GIS,只是你仍然不清楚组件背后的实现技术。要自己写一个GIS系统出来,需要越过三个坎。
第一个坎,你了解坐标系转换么?从地理坐标直接转化为屏幕坐标,这个过程如何实现?
第二个坎,如何给出正确的地理对象的描述,也就是怎么用地理坐标去描述,河流,大洲,城市这些地物?
第三个坎,计算机图形学,如何用合适的方式显示你的地理信息。
做了很长时间的GIS,我终究觉得,隐藏在GIS背后的东西才是我需要真正抓住的本质。随着对Arcgis的逆向工程的开始,我逐渐明白,其实本质的东西是非常容易理解和掌握的,就和我下面给大家讲得例子一样简单。
我们的GIS开发之路从绘制世界地图开始。
本文解决的第一个问题,如何绘制地理坐标到屏幕上?这个问题的解决,很多监控类项目,就不需要第三方组件了。 这个问题其实很简到,就是一个坐标系的转换问题,如何把地理坐标系转换到屏幕坐标系。我们可以参考ArcMap的绘制。以下是实现的几个步骤:
第一步,我们要确定坐标,屏幕坐标系是左上角为原点,水平向右是X 轴,竖直向下是Y轴。地理坐标则是笛卡儿坐标系,在这里需要注意,我们的地理坐标原点(0,0)需要和屏幕中心(w,h)对应。屏幕坐标的原点(0,0)和地理坐标的(-180*1.1,90*1.1)对应,因为坐标系线性转换需要三个点,我们再选一个点,屏幕上的(0,h)点,对应地图上的(-180*1.1,0)通过上面三个点就能确定出一个坐标对应关系。有了关系,我们可以得到从地图到屏幕的坐标转换,具体就是一个方程系数求解过程:
X=ax+by+c
Y=dx+ey+f
X,Y指屏幕坐标,x,y地理坐标
把上述三个对应点代入方程就可以得到六个方程,求解除a,b,c,d,e,d,f六个参数,这样对于地理上的任意一个点就可以得到转换方法。
在上述对应点中,w,h分别指屏幕宽度的一半,和屏幕高度的一半。为什么要1.1这个是比例系数,为了不让地图画到屏幕边界上。事实上ArcMap的全图就是按1.1绘制的
第二步,如何得到地理对象的描述数据,很简单,用ArcGIS的工具自己转出一份数据,可以是文本的或其他来源。我这里是用ArcToolBox下的工具转出的一份数据他的格式类是如下
Polygon
0 0
0 35.488323 -21.6850039673 1.#QNAN 1.#QNAN
1 35.452215 -21.7874959673 1.#QNAN 1.#QNAN
2 35.445546 -21.7872259673 1.#QNAN 1.#QNAN
3 35.435556 -21.7833379673 1.#QNAN 1.#QNAN
4 35.428059 -21.7761109673 1.#QNAN 1.#QNAN
5 35.42319 -21.7627819673 1.#QNAN 1.#QNAN
6 35.424432 -21.7275019673 1.#QNAN 1.#QNAN
7 35.435826 -21.6552859673 1.#QNAN 1.#QNAN
8 35.471385 -21.5336059673 1.#QNAN 1.#QNAN
9 35.483328 -21.5252809673 1.#QNAN 1.#QNAN
10 35.496801 -21.5463949673 1.#QNAN 1.#QNAN
11 35.497215 -21.5813869673 1.#QNAN 1.#QNAN
12 35.494722 -21.6583369673 1.#QNAN 1.#QNAN
13 35.488323 -21.6850039673 1.#QNAN 1.#QNAN
0 1
0 55.721934 -21.3644419673 1.#QNAN 1.#QNAN
1 55.674162 -21.3738919673 1.#QNAN 1.#QNAN
2 55.659438 -21.3736129673 1.#QNAN 1.#QNAN
3 55.533339 -21.3547309673 1.#QNAN 1.#QNAN
4 55.427769 -21.3125029673 1.#QNAN 1.#QNAN
.....
7 187
0 -81.71028 12.4908400327 1.#QNAN 1.#QNAN
1 -81.713052 12.4902730327 1.#QNAN 1.#QNAN
2 -81.720135 12.4963210327 1.#QNAN 1.#QNAN
3 -81.720144 12.5452720327 1.#QNAN 1.#QNAN
4 -81.713898 12.5650000327 1.#QNAN 1.#QNAN
5 -81.704727 12.5802730327 1.#QNAN 1.#QNAN
6 -81.692361 12.5902720327 1.#QNAN 1.#QNAN
7 -81.681318 12.5857630327 1.#QNAN 1.#QNAN
8 -81.690984 12.5322220327 1.#QNAN 1.#QNAN
9 -81.702522 12.5072200327 1.#QNAN 1.#QNAN
10 -81.71028 12.4908400327 1.#QNAN 1.#QNAN
END
第三步,在MFC中我自己用程序解析了一下数据源,然后把地理坐标转成屏幕坐标绘制出来,就能得到如下效果
普通渲染下的效果:
下一次我们需要了解如何对地理对象作简单描述。
一直认为地理信息系统建设是个小众化的圈子,但是随着越来越多的人开始使用GIS软件,发现GIS已经从蛰伏期转变到了繁荣期,而且技术也越来越成熟。慢慢想来,几乎每个行业都在使用GIS技术,如国土,环保,航测等等。虽然GIS技术是一个跨学科综合型的IT技术,但在早先的应用仅局限在一些专业软件内部,如ArcGIS,mapGIS等等。
为什么GIS没有像其他IT技术一样很快的流行开?我觉得可能和他的一些专业背景知识有关。大部分人觉得GIS有难度,而且难度大部分是集中在投影啊坐标系的理解上,这些知识点的理解造成了GIS使用的局限。其实GIS的快速发展和组件式GIS的流行分不开,Esri在这方面抢在了所有人的前面,简单的搭建环境后,就能开发出独立的GIS功能,这是何等的强大。随着时间的推移,众多厂商开始介入GIS领域,最先进入大众眼球的是Google Earth,这个软件的强大,以至于让Esri感到害怕,随着国内大厂商如高德,天地图的在线功能,使得很多人开始了解GIS,熟悉GIS,GIS也变得大众化。
因为一直在GIS的圈子,从参与者的角度来说,GIS技术发展的确很快,web GIS,云等等很多新奇概念的涌现越来越快,但是无论现在还是以后只要还和地理位置相关,GIS背后的基石是不会变的,这个基石就是计算机图形学,算法,如此而已。这里就从最实用的角度出发,告诉你一个真实的GIS技术如何实现。
大部分人如果使用GIS,最先想到的功能是显示地图。这也是GIS产生的缘由所在。如果要我们自己动手写一个展示地图的系统如何实现呢?如果你说我会用第三方组件,那我知道你肯定熟悉GIS,只是你仍然不清楚组件背后的实现技术。要自己写一个GIS系统出来,需要越过三个坎。
第一个坎,你了解坐标系转换么?从地理坐标直接转化为屏幕坐标,这个过程如何实现?
第二个坎,如何给出正确的地理对象的描述,也就是怎么用地理坐标去描述,河流,大洲,城市这些地物?
第三个坎,计算机图形学,如何用合适的方式显示你的地理信息。
做了很长时间的GIS,我终究觉得,隐藏在GIS背后的东西才是我需要真正抓住的本质。随着对Arcgis的逆向工程的开始,我逐渐明白,其实本质的东西是非常容易理解和掌握的,就和我下面给大家讲得例子一样简单。
我们的GIS开发之路从绘制世界地图开始。
本文解决的第一个问题,如何绘制地理坐标到屏幕上?这个问题的解决,很多监控类项目,就不需要第三方组件了。 这个问题其实很简到,就是一个坐标系的转换问题,如何把地理坐标系转换到屏幕坐标系。我们可以参考ArcMap的绘制。以下是实现的几个步骤:
第一步,我们要确定坐标,屏幕坐标系是左上角为原点,水平向右是X 轴,竖直向下是Y轴。地理坐标则是笛卡儿坐标系,在这里需要注意,我们的地理坐标原点(0,0)需要和屏幕中心(w,h)对应。屏幕坐标的原点(0,0)和地理坐标的(-180*1.1,90*1.1)对应,因为坐标系线性转换需要三个点,我们再选一个点,屏幕上的(0,h)点,对应地图上的(-180*1.1,0)通过上面三个点就能确定出一个坐标对应关系。有了关系,我们可以得到从地图到屏幕的坐标转换,具体就是一个方程系数求解过程:
X=ax+by+c
Y=dx+ey+f
X,Y指屏幕坐标,x,y地理坐标
把上述三个对应点代入方程就可以得到六个方程,求解除a,b,c,d,e,d,f六个参数,这样对于地理上的任意一个点就可以得到转换方法。
在上述对应点中,w,h分别指屏幕宽度的一半,和屏幕高度的一半。为什么要1.1这个是比例系数,为了不让地图画到屏幕边界上。事实上ArcMap的全图就是按1.1绘制的
第二步,如何得到地理对象的描述数据,很简单,用ArcGIS的工具自己转出一份数据,可以是文本的或其他来源。我这里是用ArcToolBox下的工具转出的一份数据他的格式类是如下
Polygon
0 0
0 35.488323 -21.6850039673 1.#QNAN 1.#QNAN
1 35.452215 -21.7874959673 1.#QNAN 1.#QNAN
2 35.445546 -21.7872259673 1.#QNAN 1.#QNAN
3 35.435556 -21.7833379673 1.#QNAN 1.#QNAN
4 35.428059 -21.7761109673 1.#QNAN 1.#QNAN
5 35.42319 -21.7627819673 1.#QNAN 1.#QNAN
6 35.424432 -21.7275019673 1.#QNAN 1.#QNAN
7 35.435826 -21.6552859673 1.#QNAN 1.#QNAN
8 35.471385 -21.5336059673 1.#QNAN 1.#QNAN
9 35.483328 -21.5252809673 1.#QNAN 1.#QNAN
10 35.496801 -21.5463949673 1.#QNAN 1.#QNAN
11 35.497215 -21.5813869673 1.#QNAN 1.#QNAN
12 35.494722 -21.6583369673 1.#QNAN 1.#QNAN
13 35.488323 -21.6850039673 1.#QNAN 1.#QNAN
0 1
0 55.721934 -21.3644419673 1.#QNAN 1.#QNAN
1 55.674162 -21.3738919673 1.#QNAN 1.#QNAN
2 55.659438 -21.3736129673 1.#QNAN 1.#QNAN
3 55.533339 -21.3547309673 1.#QNAN 1.#QNAN
4 55.427769 -21.3125029673 1.#QNAN 1.#QNAN
.....
7 187
0 -81.71028 12.4908400327 1.#QNAN 1.#QNAN
1 -81.713052 12.4902730327 1.#QNAN 1.#QNAN
2 -81.720135 12.4963210327 1.#QNAN 1.#QNAN
3 -81.720144 12.5452720327 1.#QNAN 1.#QNAN
4 -81.713898 12.5650000327 1.#QNAN 1.#QNAN
5 -81.704727 12.5802730327 1.#QNAN 1.#QNAN
6 -81.692361 12.5902720327 1.#QNAN 1.#QNAN
7 -81.681318 12.5857630327 1.#QNAN 1.#QNAN
8 -81.690984 12.5322220327 1.#QNAN 1.#QNAN
9 -81.702522 12.5072200327 1.#QNAN 1.#QNAN
10 -81.71028 12.4908400327 1.#QNAN 1.#QNAN
END
第三步,在MFC中我自己用程序解析了一下数据源,然后把地理坐标转成屏幕坐标绘制出来,就能得到如下效果
普通渲染下的效果:
下一次我们需要了解如何对地理对象作简单描述。
相关文章推荐
- 地理信息技术——平民化时代的来临(三)
- 地理信息技术——平民化时代的来临(一)
- 地理信息技术——平民化时代的来临(二)
- 微软office在线使用,web时代真的来临了
- 火云开发课堂 - 《使用Cocos2d-x 开发3D游戏》系列 第一节:3D时代来临!
- 读图时代来临 图片存储服务Imgur仅用5月就将月PV从10亿增加到20亿
- BIG DATA 大数据时代来临
- 大数据时代已来临,分析成难点
- 中国“芯”时代,已经来临!
- 通用计算时代来临 论CUDA与OpenCL的异同
- 4G时代来临,百度何以大展拳脚?
- 3G时代来临,小灵通还能走多远?
- 移动网游时代来临?国产网游登陆PSP平台
- 下一个时代已经来临,它是属于我们这一代的,人生一次重大的机遇在前方等待着我们,下一个十年
- SteamOS 时代来临,Linux 游戏的现状如何?
- iOS WKWebView 混合应用开发时代来临 - 嵌入式 JS 的调试成为催化剂
- 迎接RIA时代的来临[转]
- 道特韦伯:云时代仍未真正来临
- 泛媒体时代是否来临