当前位置:首页 > 数码游戏 > 正文内容

GIS地图开发(gis地图开发工具)

2023-05-13 08:48:22数码游戏1

大家好,下面小编给大家分享一下。很多人不知道GIS地图开发。以下是详细的解释,现在让我们来看看!

很多朋友对gis地图开发工具,GIS地图开发不是很了解,125小编刚好整理了这方面的知识,今天就来带大家一探究竟。

gis地图开发工具,GIS地图开发

一、地图是怎么制作的首先说说地图是怎么制作的。你可能认为这是废话,但实际上很多人都不知道如何下手。

我觉得需要先给大家一个思路:地图是用绘图语句绘制的!要从底层绘制地图,可以使用绘图功能。在.NET中,可以使用Graphics类的方法在窗口中绘制点、线、面、标准、网格等。

合并后,它是一张地图(瓦片),图表除外)。关于.NET的绘图,本文不做讲解。

如果您不熟悉它,我建议您先阅读此信息。二、坐标转换——地图绘制的关键。

NET提供了大量的绘图方法,基本都是Graphics类的函数形式,包括各种几何形状、图像、文字的绘制。灵活运用这些方法,你可以画出漂亮的图画。

假设你已经熟悉.NET绘图,那么只需要解决一个问题:我可以画地图,但是地图元素通常是地理坐标(经纬度),应该画在地图的什么地方?这就涉及到坐标变换的问题。不管怎么实现,我们首先需要这样一个函数:///“概括”///将经纬度转换为屏幕坐标///“/概括”///《param name="xy"》经纬度《/param》///“返回”屏幕坐标“/returns”公共点WorldToScreen(PointF xy)还有一个,有时候,需要根据点在屏幕上的位置,反算出它的经纬度。

比如需要显示鼠标指针的经纬度,那么也需要这样一个函数:///“概括”///将屏幕坐标转换为经纬度///“/概括”///"param name="xy""屏幕坐标"/param"///“返回”纬度和经度“/returns”公共PointF ScreenToWorld(点xy)通过这两个函数,可以将经纬度表示的地理坐标转换成屏幕坐标,然后在屏幕上绘图。为了完成坐标变换,需要用到几个地图参数变量:地图缩放因子、地图中心点经纬度、地图大小、地图参数,请参考这篇文章:http://hi.baidu.com/geochenyj/blog/item/6b5c5c1294057557f819b835.html此外,还需要对地图进行缩放和平移。

这些操作本质上是对地图参数的操作。例如,放大是对地图缩放因子的操作,平移是对地图中心点的操作。

我们也把这些操作写在了Coordinator类的方法中。投影变换也是坐标变换的一部分,Coordinator类也增加了投影方法,后面会讲到。

将以上两个坐标转换函数和三个地图参数封装成一个类Coordinator。类看起来像这样:三、绘图借助坐标转换类Coordinator,可以使用经纬度数据进行绘图。

如果得到某省行政边界的经纬度坐标数据,可以将经纬度数据转换成屏幕坐标,然后用Graphics方法绘制出来,那么Graphics对象从哪里来呢?它可以从Image 对象创建,或从控件的Paint 事件中获取。总之,有了坐标,发挥你的想象力,自己画。

在气象数据分析中,除了绘制点、线、面、文字、网格外,还需要绘制一些特殊的符号,如风、天气现象、云等。这些符号可以用图片、天气等来实现字体和符号库。

图像法实现简单,色彩丰富,但缩放效果不佳;字体方法需要安装,程序部署比较麻烦;符号库方式写代码比较麻烦。 FreeMicaps天气现象符号使用符号库方法,参见:http://blog.csdn.net/HZGJF/archive/2009/05/27/4220508.aspx风符号和云覆盖符号是使用计算坐标绘制的。

为了方便使用,FreeMicaps将符号绘制功能封装成三个符号类,由静态方法提供。.NET的绘图是对GDI+的封装,包括对点、线、面等各种图形元素的封装,图形图像的绘制,坐标旋转,各种抗锯齿和平滑功能,功能非常强大(的当然,效率也不会太高),用它来绘制漂亮的图形。

按照OGC标准,GIS系统首先需要对地图元素进行抽象和封装,但在FreeMicaps中,经过深思熟虑,放弃了这种方式。一是因为工作量比较大,二是因为我不能保证能很好的封装,可能会给插件的开发带来麻烦。

不如把绘图权完全交给图层,让大家自由发挥。四、Layer 为了便于绘制过程的管理,可以对绘制过程进行分组。

比如地图的绘制可以分为:绘制世界地图、绘制中国地图、绘制河流、填充地名等。叠加形成地图。

在这里,每一个绘制过程都形象地称为一层。地图分层后,可以添加或删除图层,隐藏每一层,设置属性等,更重要的是,可以使用面向对象技术将每一层作为一个对象进行管理。

详见:http://blog.csdn.net/HZGJF/archive/2008/10/03/3014558.aspx对图层进行抽象,应该有一个图层绘制方法(Render),一个图层标题(LayerName),一个用来表示数据源的字符串(DataSource),一个用来表示绘制样式设置的LayerStyle,添加一些辅助方法属性,最终形成如下抽象层类(CustomLayer),各个层都继承自它:在FreeMicaps 中,每个数据对应一个图层类。为了方便图层类的编写,使用设计模式中的模板方法来定义绘制过程。

当主程序调用图层的Render()方法时,会自动判断数据是否已经读入,根据需要读取数据绘制。对于一类数据,需要从CustomLayer继承一个新的图层类。

各类数据层的工作方式完全相同,只是在数据读取和绘制方面有所不同。因此,在编写新的图层类时,只需要实现DoLoad()和DoRender()两个抽象方法即可完成读取数据和绘制图层代码。

FreeMicaps 使用字符串作为数据源标识符。一般的GIS 系统对数据源进行抽象。

我也尝试过这样做,但是代码太复杂,增加了层开发的难度,最终增加了插件开发的难度,所以放弃了。前面说了一张地图有多个图层,所以需要把图层放到一个列表中,在绘制地图的时候遍历图层,调用每个图层的Render()方法绘制出一张完整的地图。

对于图层列表,大家马上就会想到使用List类,但是图层的绘制需要有顺序。比如在卫星云图上叠加地名,需要先绘制卫星云图,然后填写地名,否则云图会覆盖地名,所以在ZOrder属性中放置了一个ZOrder属性图层样式(LayerStyle),通过它来控制图层顺序。

但是由于List本身的排序方式是一种“不稳定排序”,也就是说当两层的ZOrder相等时,它们的顺序是不确定的。为了避免这个问题,FreeMicaps从CollectionBase继承了一个类LayerList,实现了层的管理,并实现了IXmlSerializable接口来完成层的序列化功能。

此外,还添加了添加层和删除层事件。 LayerList类如下:在FreeMicaps 中,每个数据对应一个图层类。

为了方便图层类的编写,使用设计模式中的模板方法来定义绘制过程。当主程序调用图层的Render()方法时,会自动判断数据是否已经读入,根据需要读取数据绘制。

对于一类数据,需要从CustomLayer继承一个新的图层类。各类数据层的工作方式完全相同,只是在数据读取和绘制方面有所不同。

因此,在编写新的图层类时,只需要实现DoLoad()和DoRender()两个抽象方法即可完成读取数据和绘制图层代码。 FreeMicaps 使用字符串作为数据源标识符。

一般的GIS 系统对数据源进行抽象。我也尝试过这样做,但是代码太复杂,增加了层开发的难度,最终增加了插件开发的难度,所以放弃了。

前面说了一张地图有多个图层,所以需要把图层放到一个列表中,在绘制地图的时候遍历图层,调用每个图层的Render()方法绘制出一张完整的地图。对于图层列表,大家马上就会想到使用List类,但是图层的绘制需要有顺序。

比如在卫星云图上叠加地名,需要先绘制卫星云图,然后填写地名,否则云图会覆盖地名,所以在ZOrder属性中放置了一个ZOrder属性图层样式(LayerStyle),通过它来控制图层顺序。但是由于List本身的排序方式是一种“不稳定排序”,也就是说当两层的ZOrder相等时,它们的顺序是不确定的。

为了避免这个问题,FreeMicaps从CollectionBase继承了一个类LayerList,实现了层的管理,并实现了IXmlSerializable接口来完成层的序列化功能。此外,还添加了添加层和删除层事件。

五、封装地图有了坐标转换类、图层类、图层列表类,可以用它们制作地图,具有缩放和平移、图层管理等功能,但为了更方便要对地图进行操作,还需要对这些类进行组合封装。创建一个新类WeatherMap,并添加Coordinator 和LayerList 类的实例作为其属性。

为了更符合您的操作习惯,将Coordinator类的实例作为私有成员,在WeatherMap类中添加地图坐标转换等方法,即地图坐标转换,而不是访问Coordinator,调用WeatherMap类的一个方法。类图如下:回到抽象图层类CustomLayer,它有一个成员Map,也就是WeatherMap对象,在图层添加到图层列表时会自动赋值。

编写CustomLayer的子类时,可以调用它进行坐标变换和地图操作。为了防止在绘制复杂图形的过程中地图假死,以及在绘制过程中随时中断绘制,例如快速缩放和平移地图,可以终止上一次绘制过程,最后一次绘制过程可以直接画出来。

地图绘制使用了多线程,但是多线程增加了代码编写的难度,尤其是多线程操作UI,给程序流程造成了一些混乱,影响了程序结构。幸运的是,它不会给图层代码带来困难。

六、再次封装——在UI上添加已经完成的地图绘制核心代码。为了让代码写起来更简单,需要重新封装WeatherMap类(MapView类),增加UI部分,也就是给地图增加一个shell,带有界面的shell,可以在上面进行缩放、拖动等地图操作被实施。

MapView 继承自PictureBox 类,并具有WeatherMap 类的内置实例。在MapView的Refresh()方法中调用了WeatherMap.Render()绘制地图。

为了完成对地图的操作,FreeMicaps定义了一个IMapTool接口,它包括了鼠标和键盘的操作方法。 MapView 类有一个内置的IMapTool 接口成员。

MapView 的鼠标和键盘操作将由IMapTool 接口的实例接管。当实现了IMapTool接口的类中,就可以对地图进行各种操作,比如平移、缩放等,可以随时更换这个对象来实现不同的地图操作。

在FreeMicaps中,已经完成了一个实现了IMapTool接口的ZoomTool类,它是默认的地图缩放和平移工具。 IMapTool接口类图如下:另外,在MapView中还引入了一个当前图层的概念CurrentLayer,用于表示当前正在操作的图层,后期用于实现图层元素拾取、图层工具栏等功能。

MapView类图如下:七、概览图分类图如下:活动图的地图绘制部分如下:上面已经介绍了FreeMicaps地图的设计框架。相信大家对设计思路都有一定的了解。

该框架不仅适用于气象图分析软件,也适用于通用的GIS系统。本文只介绍FreeMicaps的地图部分框架,不涉及具体的地图数据读取和绘制,将在下一篇介绍。

以上就是关于gis地图开发工具,GIS地图开发的知识,希望能够帮助到大家!

以上解释了GIS地图开发。本文到此结束,希望对大家有所帮助。如果信息有误,请联系我们进行更正。

本网站文章仅供交流学习 ,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除. 邮箱jdapk@qq.com

分享给朋友:

相关文章

佳能照相机快门在哪里按(佳能照相机快门在哪里按的)

佳能照相机快门在哪里按(佳能照相机快门在哪里按的)

1. 佳能照相机快门在哪里按佳能相机快门曝光符号是s,S模式又称快门速度优先模式,是尽量调高快门速度,保持高ISO。我们使用S模式,一般在拍运动的情况,比如拍摄球类运动,还有抓拍一些精彩的竞赛。此时不仅可以保证抓拍的质量,还有更高的还原度。此时快门速度相当快,可以捕捉动作。在S模式下拍摄时,要尽量保...

佳能神机(vlog神机 佳能)

佳能神机(vlog神机 佳能)

1. 佳能神机佳能5D Mark III是佳能单反时代一款准专业级别的高端单反相机,各方面都比较均衡,曾被誉为神机,具备视频拍摄功能,但其侧重于图片拍摄,视频拍摄能力肯定与现在的微单相机不可同日而语。如果你的拍摄需求主要是视频拍摄,还是建议购买微单相机。2. vlog神机 佳能佳能SX220 HS采...

索尼构图辅助线(a7r3构图辅助线在哪)

索尼构图辅助线(a7r3构图辅助线在哪)

1. 索尼构图辅助线第一步 把开机键拨到ON位置第二步 点击屏幕右侧转盘中间按钮第三部 把档位按钮调到A档第四部 按开机键上面的圆圈键 就可以拍照了在使用相机的时候,就是遵循以下方法来使用:首先,变焦或者移动机位,进行取景、构图。然后,根据具体情况设置拍摄参数。进行测光、对焦。接下来,半按快门完成对...

佳能750d参数(佳能760d参数)

佳能750d参数(佳能760d参数)

1. 佳能750d参数首先,打开佳能750d相机,可以看到其设置界面,然后进入下一步。其次,可以设置电影的大小,支持1920×1080,30fps,拍摄效果非常好。然后进入下一步。接着,设置了动画录制尺寸并切换后,可以看到该界面,然后进入下一步。然后,拍摄之前,需要调整格式,白平衡,快门,光圈和感光...

桂平尼康相机(尼康相机专卖店地址)

桂平尼康相机(尼康相机专卖店地址)

1. 尼康相机专卖店地址有两种方法。第1种方法,如果你有购买的售后卡或者电子发票,可以直接在电子发票上看到购买的时间,第二我们可以登录尼康相机的网站,输入自己的型号和姓名就可以查到一个电子保单,这个电子保单上就有我们购买的时间,购买的时间就是我们确认的时间。2. 尼康相机专卖店地址在哪里只要是尼康授...

佳能1300d怎么连接手机(佳能1300d怎么连接手机拍照)

佳能1300d怎么连接手机(佳能1300d怎么连接手机拍照)

1. 佳能1300d怎么连接手机具体操作如下:1.首先,在相机中找到要打开的wifi标志,然后进入无线功能,找到手机标志选择点击。2.此时,内部设备的历史记录并不需要在意,选择直接添加新设备并单击。3.直到相机出现账号和密码,我们需要记住帐号和密码。4.然后打开手机,点击wifi,找到相机上创建的w...

索尼PSVR游戏(索尼psv游戏机)

索尼PSVR游戏(索尼psv游戏机)

1. 索尼PSVR游戏索尼vr只能连ps主机的,ps vr必须和ps4配合使用才能玩的,不过很多玩家玩ps vr游戏有头晕的现象,你最好还是先试试,体验再决定是否入手的。2. 索尼psv游戏机PSV机器都是正版的,目前只有1000和2000版,推荐你去淘宝买,不过你担心的话,可以去本地电玩店买(电玩...

佳能m5和佳能200(佳能m5和佳能80d)

佳能m5和佳能200(佳能m5和佳能80d)

1. 佳能m5和佳能80d1.准备一个预装了64位Windows10系统的电脑,并通过佳能美国官网下载EOS Webcam Utility,完成安装;  2.打开已安装的EOS Webcam Utility软件,将相机通过原配的USB线与电脑连接,并开启相机的录像模式;  3.打开OBS等直播推流软...

索尼手机(索尼手机官网)

索尼手机(索尼手机官网)

1. 索尼手机不是杂牌。索尼手机牌子是日本的;但是,基本不是日本生产的,除了核心技术, 基本都是在 印度,中国,英国,瑞典,美国的工厂生产。索尼(英语:Sony Corporation),是日本的一家全球知名的大型综合性跨国企业集团。索尼是世界视听、电子游戏、通讯产品和信息技术等领域的先导者,是世界...

索尼386传感器(索尼335传感器)

索尼386传感器(索尼335传感器)

1. 索尼386传感器最新版本系统很不错哦,在旧版本基础上进行优化,增加了很多新功能,解决了很多小问题,推荐用户升级体验。2016年7月19日, 魅族在北京召开新品发布会,正式发布了旗下 MX系列新品 魅族MX6。 魅族MX6,采用了与 魅族PRO6相同的外观设计,但在背壳天线的弧度有所调整,厚度仅...