gis地图制作 价格(gis地图制作)

2022-08-29 21:40:01   编辑:李航昭
导读 很多朋友对gis地图制作 价格,gis地图制作还不了解,今天小绿就为大家解答一下。一 地图是如何制作的。首先说一下地图是怎么出来的。也许

很多朋友对gis地图制作 价格,gis地图制作还不了解,今天小绿就为大家解答一下。

一.地图是如何制作的。首先说一下地图是怎么出来的。也许你觉得这是废话,但实际上很多人不知道怎么做。我觉得这里需要给你一个思想准备:地图是用画图语句画出来的!

要从底层绘制地图,可以使用绘图功能。英寸NET,可以画点、线、面、标准、网格等。在窗口中使用图形类的方法。组合起来就是一张地图(平铺绘制除外)。

至于的绘制。NET,本文就不解释了。如果你不熟悉,建议你先看看这个资料。

二。坐标变换是地图绘制的关键。NET提供了大量的绘制方法,基本上都是以Graphics类的函数的形式提供,包括各种几何形状、图像、字符的绘制。灵活运用这些方法,你就能画出漂亮的画。假设你熟悉。NET,只有一个问题需要解决:我会画地图,但是我得到的地图元素一般都是地理坐标(经纬度)。我应该在地图上的什么地方画它们?这就需要涉及到坐标变换的问题。

先不管怎么实现,你首先需要这样一个函数:

///《summary》

///纬度和经度被转换成屏幕坐标

///《/summary》

///《param name=“xy”》经纬度《/param》

///《returns》屏幕坐标《/returns》

公共点WorldToScreen(点F xy)

再一个,有时候需要计算屏幕上一点的经纬度,比如鼠标指针需要显示的经纬度,所以也需要这个函数:

///《summary》

///屏幕坐标转换为纬度和经度

///《/summary》

///《param name=“xy”》屏幕坐标《/param》

///《returns》经纬度《/returns》

公共点f屏幕到世界(xy点)

有了这两个函数,就可以把经纬度表示的地理坐标转换成屏幕坐标,然后在屏幕上进行绘制。

为了完成坐标转换,需要用到地图参数的几个变量:地图缩放因子、地图中心点的经纬度、地图大小。有关地图参数,请参考本文:

http://hi . Baidu . com/geochenyj/blog/item/6b 5c 5 c 1294057557 f 819 b 835 . html

此外,还需要缩放和平移地图。这些操作本质上都是地图参数的操作,比如放大就是地图缩放因子的操作,平移就是地图中心点的操作。我们还将这些操作编写为协调器类方法。投影变换也是坐标变换的一部分,Coordinator类还增加了一个投影方法,后面会讲到。

上述两个坐标转换函数和三个地图参数被封装到一个类协调器中。的类别如下:

3.用坐标转换坐标绘图,可以用经纬度数据绘图。比如得到一个省的行政边界的经纬度数据,可以把经纬度数据转换成屏幕坐标,然后用图形的方法画出来。图形对象从何而来?您可以从Image对象创建它,也可以从控件的Paint事件获取它。总之有了坐标,发挥你的想象力,自己画出来。

在气象数据分析中,除了绘制点、线、面、字符、网格外,还需要绘制一些特殊的符号,如风、天气现象、云等。这些符号可以通过图片、天气字体、符号库来实现。图片简单,色彩丰富,但是缩放效果不好。字体模式,需要安装字体,程序部署比较麻烦;用符号库模式写代码比较麻烦。FreeMicaps使用天气现象符号的符号库。详情见http://blog.csdn.net/HZGJF/archive/2009/05/27/4220508.aspx。

风符号和云量符号是通过计算坐标绘制的。

为了使用方便,FreeMicaps将符号绘制函数封装成三个符号类,由静态方法提供。

的图画。NET是GDI的封装,包括点、线、面等各种图形元素的封装,图形图像的绘制,坐标旋转,各种反走样和平滑函数等。功能很强大(当然效率不算太高),可以用来画漂亮的图形。

根据OGC标准,GIS系统首先需要对地图元素进行抽象和封装。但是在FreeMicaps中,经过反复考虑,已经放弃了这种方法。一个原因是工作量比较大,另一个原因是我不能保证能封装好,可能会给插件开发带来麻烦。还不如把制图权完全交给图层,让大家自由发挥。

四。图层为了使绘图过程易于管理,可以将绘图过程分成组。比如一张地图的绘制,可以分为几个过程:绘制世界地图、绘制中国地图、绘制河流、填写地名。每一幅画都像是画在一块玻璃上,叠加起来就成了图图。在这里,每个绘制过程都被形象地称为一层。地图分层后,可以添加或删除图层,并且可以隐藏每个图层并单独设置属性。更重要的是,通过使用面向对象技术,每一层都可以作为一个对象来管理。详见: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类,但是图层绘制需要有序。比如在卫星云图上叠加地名,需要先画出卫星云图,然后再填入地名,否则云图会覆盖地名。因此,您在LayerStyle中放置了一个ZOrder属性来控制层顺序。但是,由于链表的排序方式本身就是一种“不稳定排序”,也就是说,当两层的ZOrder相等时,它们的顺序是不确定的。为了避免这个问题,FreeMicaps从CollecTIonBase继承了一个类LayerList,实现了对层的管理,并实现了IXmlSerializable接口来完成层序列化功能。此外,还添加了添加图层和删除图层的事件。图层类如下所示:

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

对于一种类型的数据,需要从CustomLayer继承一个新的图层类。各种数据层的工作方式完全一样,只是在数据读取和绘制方面。因此,在编写新的图层类时,只需要实现两个抽象方法DoLoad()和DoRender(),就可以读取数据和绘制图层代码。FreeMicaps使用一个字符串作为数据源标识符,通用GIS系统对数据源进行抽象。我也尝试过这样做,但是代码太复杂,增加了层开发和最后插件开发的难度,所以放弃了。

如前所述,一张地图有多个图层,所以还需要将图层放入一个列表中,在绘制地图时遍历图层,调用每个图层的Render()方法来绘制一张完整的地图。对于图层列表,你会马上想到使用List类,但是图层绘制需要有序。比如在卫星云图上叠加地名,需要先画出卫星云图,然后再填入地名,否则云图会覆盖地名。因此,您在LayerStyle中放置了一个ZOrder属性来控制层顺序。但是,由于链表的排序方式本身就是一种“不稳定排序”,也就是说,当两层的ZOrder相等时,它们的顺序是不确定的。为了避免这个问题,FreeMicaps从CollecTIonBase继承了一个类LayerList,实现了对层的管理,并实现了IXmlSerializable接口来完成层序列化功能。此外,还添加了添加图层和删除图层的事件。

以上问题已解答完毕,如果想要了解更多内容,请关注本站

免责声明:本文由用户上传,如有侵权请联系删除!

猜你喜欢

最新文章