首页 > 编程 > .NET > 正文

GIS开发随笔--GIS技术的一点理解和MapNet控件试验

2024-07-21 02:30:10
字体:
来源:转载
供稿:网友

今天我们来讨论几个没有太大关联的内容,如果在这几个问题方面有人有自己独特的见解,或已经知道了这方面的技术,那么还请您在评论中提出来,供大家探讨,下面我们就来探讨一下吧。

一、这几天忙着测试和修改gis系统,发现了一些bug的同时也有了新的需求,不仅改变了界面风格和布局而且代码也少有变化,地图变化最大,需要加入栅格图(太可怕了,一幅栅格图竟然有1.3g),如何加载呢?因为这次的gis系统是b/s结构的,而且功能也不小,除了栅格图外还有很多层的矢量图,并且提供图层数据和数据库数据的互查功能,所以非常担心加载和显示栅格图时会非常的慢,或者造成服务器死机,但是今天发现过去好像有些“杞人忧天”,栅格图加载和显示还是可以成功的。具体内容如下:

1、想了解栅格图是否能加载,需要了解arcims的工作原理,这方面的知识我们在本系列随笔的前几篇随笔中也有讨论过,下面再简单说明一下:mapnet控件是解读arcims回传得arcxml文档,并通过虚拟路径来加载arcims根据请求所产生的图片。arcims图形服务可以产生的图片类型有*.jpg、*.jpeg、*.png-8bit、*.png-24bit、*.gif(需要特殊的序列号或注册文件)。

2、也正是因为有这种工作原理,虽然栅格图的整幅图文件很大,但是arcims会否将自身来处理生成的图片文件大小,并不会产生一个上g的图片文件在b/s程序和网络中传送呢。经过本人的试验证明arcims确实控制了传送文件的大小,再加入了栅格图后,图片文件并没有想象的大,所以也就不用去切割栅格图文件了,这使本人很高兴。(<!--此处写有栅格图的图片文件的大小,最小和最大文件大小-->,图片大小仅供参考)

二、还有一个问题是mapnet控件的问题,mapnet控件有一个去获得图层数据的函数myil.recordset(myisq2, true, false, myigf),但是此函数最多加载的数据为2000条,最后生成数据集dataset,那么这就意味着此dataset的第0张表最多有2000条数据,但是mapnet控件又给我们提供了一个对象的属性myisq2.where,来查询所需要的图层上某个或某些元素,这个属性中可以使用sql语句,下面是有关的代码片断:

以下为引用的内容:
1using system;
 2using system.collections;
 3using system.componentmodel;
 4using system.data;
 5using system.drawing;
 6using system.web;
 7using system.web.sessionstate;
 8using system.web.ui;
 9using system.web.ui.webcontrols;
10using system.web.ui.htmlcontrols;
11using gongansys.class;
12using studioat.ims;
13using studioat;
14using system.xml;
15
16……
17
18        private void mapnet1_load(object sender, system.eventargs e)
19        {
20            imapnet myimapnet = mapnet1;
21                icollectionlayers myicl = myimapnet.collectionlayers;
22                igetfeatures myigf = null;
23                isimplemarkersymbol myisms = new simplemarkersymbolproperty();
24                imapnetacetateobjects myimnao = (imapnetacetateobjects)myimapnet;
25                myimnao.clear();
26                iobjectacetatelayer myioal;
27                ipoint myip1;
28                try
29                {
30                    ilayer myil = (ilayer)myicl.findbyid (session["layerid"].tostring());
31                    ispatialquery2 myisq2 = new spatialquery();
32                    string columnsname = "gis_id";
33                    myisq2.where = columnsname + " = '" + session["gis_id"].tostring() + "'";
34                    dataset ds = myil.recordset(myisq2, truefalse, myigf);//根据图层读取数据
35                    int dscount = ds.tables[0].rows.count;
36……
37}

38                catch
39                               {
40……
41                }

42        }

43
44……
45
46

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表