实时搜索: map有哪些常用类

map有哪些常用类

228条评论 4979人喜欢 1639次阅读 579人点赞
将MAPGIS属性数据用EXCEL表输出时,其中一步是创建新数据源,那里有很多数据类型,都是什么类型,什么时候用,望有关人士解答一下,非常感谢! ...

JSP中,常用的集合类有哪些?他们之间有什么差别?: 常用的集合类有一下几种:
List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类
Map结构的集合类:HashMap类,Hashtable类
Set结构的集合类:HashSet类,TreeSet类
Queue结构的集合:Queue接口

HashMap和Hashtable的区别:
HashMap和Hashtable都是java的集合类,都可以用来存放java对象,这是他们的相同点
以下是他们的区别:
1.历史原因:
Hashtable是基于陈旧的Dictionary类的,HashMap是java 1.2引进的Map接口的一个现实。
2.同步性:
Hashtable是同步的,这个类中的一些方法保证了Hashtable中的对象是线程安全的,而HashMap则是异步的,因此HashMap中的对象并不是线程安全的,因为同步的要求会影响执行的效率,所以如果你不需要线程安全的结合那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率,我们一般所编写的程序都是异步的,但如果是服务器端的代码除外。
3.值:
HashMap可以让你将空值作为一个表的条目的key或value
Hashtable是不能放入空值(null)的

ArrayList和Vector的区别:
ArrayList与Vector都是java的集合类,都是用来存放java对象,这是他们的相同点,
区别:
1.同步性:
Vector是同步的,这个类的一些方法保证了Vector中的对象的线程安全的,而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的,因为同步要求会影响执行的效率,所以你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。
2.数据增长:
从内部实现的机制来讲,ArrayList和Vector都是使用数组(Array)来控制集合中的对象,当你向两种类型中增加元素的时候,如果元素的数目超过了内部数组目前的长度他们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大,所以如果你要在集合中保存大量的数据,那么使用Vector有一些优势,因为你可以通过设置集合的初始大小来避免不必要的资源开销。

总结:
1)如果要求线程安全,使用Vector,Hashtable
2)如果不要求线程安全,使用ArrayList,LinkedList,HashMap
3)如果要求键值对,则使用HashMap,Hashtable
4)如果数据量很大,又要求线程安全考虑Vector

次世代游戏中最常用的材质类型又哪几种?: 次时代游戏开发时材质的需求会根据项目的不同而不一样的,
一般情况下,场景、角色所能用到的材质都是使用:
Diffuse map(颜色贴图)
specularlevelmap(高光级别)
SpecularColormap(高光颜色)
Opacitymap(透明贴图)
Emissivemap(高光贴图)
Normalmap(法线贴图)等贴图配合组成。

在做游戏的时候材质的要求不同于渲染,更多的是靠贴图表现,
颜色贴图、高光贴图、法线贴图是最基本的几张贴图,
另外配合着开发的要求,会使用高光贴图制作模型的自发光效果,
使用双面通道开启模型的双面观察效果,
使用透明贴图制作类似于植被、毛发等透明的材质。

当然游戏的开发还需要更多的效果如反射材质、动态材质、顶点色混合等,
这些根据开发引擎的不同会有不同的计算方式,但一般需要程序计算完成。
另外多维材质也是游戏开发用的比较多的一种,
支持多种材质同时使用在一个独立的模型上,比较方便。

更多关于次世代材质类型,或其他游戏开发知识问题,请搜索GA。

JSP中,常用的集合类有哪些?它们之间有什么差别?: 常用的集合类有一下几种:
List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类
Map结构的集合类:HashMap类,Hashtable类
Set结构的集合类:HashSet类,TreeSet类
Queue结构的集合:Queue接口

HashMap和Hashtable的区别:
HashMap和Hashtable都是java的集合类,都可以用来存放java对象,这是他们的相同点
以下是他们的区别:
1.历史原因:
Hashtable是基于陈旧的Dictionary类的,HashMap是java 1.2引进的Map接口的一个现实。
2.同步性:
Hashtable是同步的,这个类中的一些方法保证了Hashtable中的对象是线程安全的,而HashMap则是异步的,因此HashMap中的对象并不是线程安全的,因为同步的要求会影响执行的效率,所以如果你不需要线程安全的结合那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率,我们一般所编写的程序都是异步的,但如果是服务器端的代码除外。
3.值:
HashMap可以让你将空值作为一个表的条目的key或value
Hashtable是不能放入空值(null)的

ArrayList和Vector的区别:
ArrayList与Vector都是java的集合类,都是用来存放java对象,这是他们的相同点,
区别:
1.同步性:
Vector是同步的,这个类的一些方法保证了Vector中的对象的线程安全的,而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的,因为同步要求会影响执行的效率,所以你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。
2.数据增长:
从内部实现的机制来讲,ArrayList和Vector都是使用数组(Array)来控制集合中的对象,当你向两种类型中增加元素的时候,如果元素的数目超过了内部数组目前的长度他们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大,所以如果你要在集合中保存大量的数据,那么使用Vector有一些优势,因为你可以通过设置集合的初始大小来避免不必要的资源开销。

总结:
1)如果要求线程安全,使用Vector,Hashtable
2)如果不要求线程安全,使用ArrayList,LinkedList,HashMap
3)如果要求键值对,则使用HashMap,Hashtable
4)如果数据量很大,又要求线程安全考虑Vector

MAPGIS数据类型: 0 引言

正在开展的国土资源科学数据共享工程的建设是一项长期的工程,其目标之一是对已有资源进行整合发布,以供广大用户使用。因此,科学数据共享工程所提供的数据,其格式必须是能够让大多数用户都能够使用的,而能够被大多数用户所使用的数据就是当前占主流地位的ArcGIS 数据。

但是由于一直以来地矿部门所采用GIS 软件基本上是MapGIS ,导致我们目前拥有大量的MapGIS 格式的GIS 数据需要被转换成可供发布的ArcGIS 数据格式。例如:当前《水文地质图集》里面的68 幅图都是MapGIS 格式,需要将其转换成可被共享的ArcGIS 数据格式。因此现在的首要任务是找到便利的手段将MapGIS 数据转换成ArcGIS 数据。

MapGIS 数据向ArcGIS 的转换是一个复杂的课题。虽然研究的都是GIS 数据,由于GIS 数据本身的复杂性,涉及到点、线、区等不同特征的图形数据,MapGIs 与ArcGIs 的数据格式和数据组织存储方式都不相同,导致ArcGIS 软件并不能直接读取MapGIS 数据。所以,当前一个重要任务就是研究出MapGIS 向ArcGIS 数据无损转换工具。

另外,从避免重复建设这一角度来看,这一研究课题也具有很深的意义。由于MapGIS 在我国各领域应用十分广泛,我国很多GIS 数字化工作都是基于MapGIS 这一平台来加以实现的。而生产ArcGIS 的 ESRI 公司一直引领着全球GIS 技术的发展方向,30 多年来始终保持其全球第一的市场占有率。随着Arc GIS 平台在我国各领域的应用逐渐广泛,这就需要Arc GIS 软件能够读取已经投入大量人力物力进行数字化工作后得到MapGIS 数据。否则,就会造成数据矢量化的重复建设。

综上所述,MapGIs 向ArcGIs 数据转换研究也就成为了当前一个重要的研究内容。

1 现实转换存在的问题

通过大量的调研发现,当前国内所普遍采用的MapGIS 数据向ArcGIS 数据转换的方法主要是运用MapGIS 自身所提供的文件转换模块来进行,其提供的向ArcGIS 转换的方式包括转换成ArcGIS 的SHAPE 格式或者是E00 格式。但是运用这种方式转换后会存在很多问题,不能实现无损转换,转换后还需要进行大量的手工修补工作,因此这种当前普遍采用的方法会耗费大量的人力、物力,并不能够很好地满足实际需要;另外,经研究发现,很多的研究人员发现了这一问题,也进行了大量的研究工作,取得了一定的理论成绩,但是却还没有形成可供投人使用的成果,即自动转换工具。综上所述,当前国内MapGIS 数据向ArcGIS 数据转换的研究还不很成熟,不能很好地满足实际需要。

经亲自试验MapGIS 文件转换模块所提供的MapGIs ArCGIS 转换工具后发现存在着诸多问题。

( l )转换成ArcGIS 的SHAPE 格式时存在的问题为:

a 、点文件:MapGIS 点文件中的子图、注释都用一种不对应的子图符号在ArcGIS 中显示出来,而且对应的颜色都丢失,变为ArcGIS 的缺省颜色;

b 、线文件:将MapGIS 线文件转换后,在ArcGIS 中显示出来时,发现线的颜色都变成了统一的ArcGIS 的缺省颜色;

c 、区文件:将MapGIS 区文件转换后,在ArcGIS 中显示出来时,发现区的颜色都变成了统一的Arc GIS 的缺省颜色,而且因为SHAPE 文件并不保存拓扑关系,所以MapGIS 区文件的拓扑关系也被丢失。

( 2 )转换成ArcGIS 的E00 格式时存在的问题为:

a 、点文件:MapGIS 点文件中的子图、注释都可以转换过去,但是子图符号不对应,对应的颜色都丢失,变为ArcGIS 的缺省颜色,并且点文件的属性信息丢失;

b 、线文件:将MapGIS 线文件转换后,在Arc GIS 中显示出来时,发现线的颜色都变成了统一的ArcGIS 的缺省颜色,并且线文件的属性信息丢失;

c 、区文件:将MapGIS 区文件转换后,在Arc GIS 中显示出来时,发现区的颜色都变成了统一的ArcGIS 的缺省颜色,而且区文件的属性信息丢失。由此可以看出,在将MapGIS 文件向Arc 以S 文件转换的过程中,为使文件正确显示,按照目前通用的方法转换后通常需要进行复杂的手工调整,而转换的数据量较大,这将耗费大量的人力、物力和时间。

2 技术路线及具体实施方案

2 . 1 技术路线的选择通过研究,发现通用的数据格式转换方式有以下几种:

( l )常规的GIS 数据格式转化方法

就是采用某种编程语言首先读取源数据文件,提取源文件中的图形信息和属性信息,然后再写人目标文件中去。这种方法的优点是由于访问的是明码数据格式,可用程序进行直接读取。但是,这种方法会导致数据的丢失,也无法进行渲染方式的转换。因此,从根本上来说,此种方法无法实现GIS 数据的无损转换。例如:首先将MapGIS 点(wt )、线( wl )、面(wp ) 文件在MapGIS 的文件转换模块中转换成MapGIS 的明码文件,运用C + +来进行编程,读取MapGIS 明码文件中的图形及其属性的相关信息,再对应地写人到ArcGIS 的SHAPEFILE 文件中去。但是MapGIS 的明码文件不保存图形的属性信息,所以无法通过明码文件之间的转换来实现数据无损转换。

( 2 )利用数据格式转换工具

这种方法简单方便,易于实现,但是通用数据格式转换器难以避免的会丢失一些图形信息,转换出来的图形一般还需要一些特别的处理,如图形颜色设置,符号设置,区域填充设置,拓扑的重建等。例如:运用MapGIS 的文件转换模块,将MapGIS 的点(wt )、线(wl )、面(wp )文件转换成ArcGIS 的E00 格式文件,用ArcGIS 进行读取。这种方法只需要借助于MapGIS 现已提供的文件转换模块就可以进行。但是转换后发现会存在信息的丢失,转换出来的图形一般还需要一些特别的处理,如图形颜色设置,符号设置,区域填充设置、拓扑的重建等。例如:对于点文件,由于两种软件的子图库并不对应,所以会出现转换后,点图形文件的子图显示不一致现象。

( 3 )利用第三方数据文件访问工具进行数据格式转换

这种方法需要开发出第三方的数据访问组件。随着GIS 组件式开发技术的逐渐成熟,各种GIS 软件基本都提供了访问其本身的GIS 数据的组件,如Ar-cobject 可以访问ESRI ShaPe Files 、Arclnfo Coverage 和VPF 等矢量数据格式;MaPGIS SDE 可以访问MapGIS 的WT 、WL 、WP 等文件的数据信息。利用GIS 组件的这种特点可以自己灵活的编写与其他数据格式转换的程序,或者在GIS 系统的二次开发中集成数据格式转换的功能,实现GIS 数据共享。

例如:运用VB 工具进行编程,运用MapGISSDK 和ArcoBJECT 对MapGIS 和ArcGIS 进行二次开发,开发出实现MapGIS 到ArcGIS 数据转换的组件。

利用第三方数据文件访问工具进行数据格式转换具有很高的可行性。因为随着GIS 组件式开发技术的逐渐成熟,各种GIS 软件基本都提供了访问其本身的GIS 数据的组件。通过这些提供的组件可以获取图形参数,在不同平台提供的数据接口间进行传递,实现对MapGIS 图形信息的读取,并写人到ArcGIS 的相应文件。这种方式比第一种方式具有更高的可行性,比第二种方式更能够实现图形的正确读取,节省人力、物力。

综合比较这三种数据格式转换方式的优缺点,本次设计决定采用第三种方式来进行数据转换,即利用第三方数据文件访问工具进行数据格式转换。

2 . 2 具体实施方案

本次设计的实施方案就是避免采用中间格式(如E00)进行转换,运用VB 编程语言对这两个GIS 平台进行二次开发,通过MaPGIS 提供的MapGIS SDK 开发包调用相应的接口实现对MapGIS 图形数据文件的访问,通过ArcGIS 提供的开发包ArcOBJECTS 调用相应的接口实现数据向目标文件的写人和文件的生成。开发出可以实现MapGIS 到AroGIS 进行数据无损转换的工具,实现ArcGIS 平台对MapGIS 数据的有效读取。

两个GIS 平台的数据组织方式不同,MapGIS 的数据文件包括点文件、线文件、面文件,ArcGIS 的数据文件包括点文件、注记文件、线文件、面文件。它们的对照关系如表1所示。

具体实施方案主要分为三个大的方面:

( l ) MapGIS 文件内容的读取

MapGIS 平台提供两种数据格式:一种是MapGIS 明码数据格式,这种格式访问方便,利用程序可以直读直取,但是由于此种文件不保存MapGIS 平台所生成的属性信息,所以在本次设计中不加以使用;

第二种是MapGIS 自带的加密数据格式,即wT 、WL 、WP 格式,这种格式保存了所有数据的内容,程序不能直接读取,但通过调用MapGIS 提供的开发包

SDK )可以实行对文件的访问。

本设计决定在MapGIS SDK 的基础上进行MapGIs 的wT 、wL 、wP 文件内容的全部读取。包括:

① 点文件的图形坐标、属性信息、渲染方式(子图号、注释内容、颜色、字体等);

读取点文件的图形坐标信息可通过调用PNTAREA 的getpos 方法来实现。

读取点文件的属性信息主要是通过读取字段头Record- Head 的相关信息,来获取相应点文件共包含多少字段,字段类型及名称。通过Record 的item ( index )属性来获取每条记录。

Fori = 0 To pntAi . att . stru . numbfield 一l

pfldname = pntAi . att . stru ( i ) . FieldName

pfldtype = pntAi . att . stru ( i ) . FieldType

¨¨¨¨¨¨

¨¨¨¨¨¨

Next i

代码中,numbfield 为字段数,FieldName 为字段名,Field pe 为字段类型。

Dim att As Record

Dim flag As Integer

flag = pntAi . att . Get ( pi , att )

¨¨¨¨¨¨

¨¨¨¨¨¨

代码中,att 为Record 类型变量,记录了相应点实体的属性记录值,通过对att 相应属性的调用可以读取各字段对应点实体的相关记录。读取点文件的渲染方式信息需要调用PNTAREA 的Getlnfo 方法,通过Pnt-Info 的type 等属性来获取点实体类型、子图号等信息;通过Pnt-Info 的iclr 属性来获取点实体的颜色信息。

② 线文件的图形坐标、线颜色、属性信息;

读取线文件的图形坐标信息可以通过调用LinArea 、D_Dotset 、LinArea 的att 属性以及Get 方法等来实现。

Dim inf As Lin Info

Dim pos AsD 一Dotset

Dim dot 1 As D Dot

Dim dotZ As D Dot

rtl = linAi . Get ( 11 , pos , inf , dimension )

Set dotl = pos . ltem ( i )

Set dotZ = pos . Item ( i + l )

¨¨¨¨¨¨

¨¨¨¨¨¨

代码中, li为线实体号,inf 为Lin--Info 类型变量,pos为D_Dotset 类型变量,pos的Item 属性是存储了系列线坐标的数组。

读取线文件的属性信息需要用到LinAit 的Get 方法以及stm 属性,主要是通过读取字段头Record _ Head 的相关信息,来获取相应线文件共包含多少字段,字段类型及名称。通过Record 的item ( index )属性来获取每条记录。

读取线文件的渲染方式信息需要调用LinArea 的Getlnfo 方法。

③ 区文件的边界组成坐标、区填充颜色、填充图案、属性信息。

读取区文件的图形坐标信息需要用到MapGIS SDK 提供的对象RegArea、D Dotset、D_Dotset 的Count及Item 属性、Re rea 的Get 方法等。

读取区文件的属性信息需要用到RegAtt 的Get 方法,Record 的item ( index )属性,主要是通过读取字段头Record_Head 的相关信息,来获取相应区文件共包含多少字段,字段类型及名称。通过Record 的item ( index )属性来获取每条记录。

读取区文件的渲染方式信息需要调用RegArea 的Getlnfo 方法,通过Reglnfo的Path 。等属性来获取区实体填充图案等信息;通过Reg--Info 的。lr属性来获取区实体的填充颜色信息。

Dim reginfo As Reg--Info 、

rtl = regAi . Getlnfo ( ri , reginfo )

¨¨¨¨¨¨

¨¨¨¨¨¨

代码中,reginfo 为Re Info 二类型变量,通过调用Reg--Info 的dr 属性可以获取区实体填充颜色信息。

( 2 )图形数据向ArcGIS 接口写人,生成SHAPE - FILE 文件

目前ArcGIS 使用的shapefile 文件是GIS 的通用文件格式,在该步骤中,决定统一通过访问ArcGIS 提供的开发包生成shapefile 数据文件。

Shapefile 文件由包含空间信息和属性信息的三个文件组成,分别为:坐标文件(. shp )、属性文件( . dbf )、索引文件(. Shx )。

坐标文件(. shp )的文件头是一个长度固定(100 bytes )的记录段,一个有9 个int 型和7 个double 型数据。坐标文件的实体信息负责记录坐标信息,它以记录段为基本单位,每一个记录段记录一个地理实体目标的坐标信息,每个记录段分为记录头和记录内容两部分(表2 )。

属性文件(.dbf )用于记录属性信息。它是一个标准的D BF 文件,由头文件和实体信息两部分构成(表3 )。

索引文件(.shx )主要包含坐标文件的索引信息,文件中每个记录包含对应的坐标文件记录距离坐标文件头的偏移量。通过索引文件,可以很方便地在坐标文件中定位到指定目标的坐标信息。生成,hapefile 文件,首先要建立相应的字段,这些字段作为属性数据被保存在属性文件中。

Set pField = New esriGeodat ase . Field

Set pFieldEdit = pField

With pFieldEdit

. Name = " aoname "

. Type = esriFieldType . esriFieldTypeInteger

End With

pFieldsEdit . AddField pField

代码中,添加了名为“aoname " ,类型为intege类型的字段。

有了字段后,就可以创建shapefile 文件了。

Set pfeatclass = pFWS . CreateFeatureClass ( strName , pFields , Nothing , Nothing , esriFYSimple , strshapeField - Name , " " )

该代码创建了名为MyshaPeFilepnt 的shenle 文件。

最后就是向shapefile 文件中添加记录。要用到IFeatureCursor 、IFeatureBuffer 、IFeatureClasS 的insert 方法来向属性表中插入每一条记录,并调用IFeatureClaSS 的CreateFeatureBuffer 来创建缓冲区存放这些记录。

Set pfeaturecursor = pfeatclass . Insert ( True )

Set pFeatureBuffer = Pfeatclass . CreateFeatureBuffer

pFeatureBuffer . Value ( l ) = pPoint

¨¨¨¨¨¨

¨¨¨¨¨¨

nFeatureNumber = pfeaturecursor . InsertFeature ( pFea 一tureBuffer )

该代码是调用生成的Shapefile 文件对应的IFeatureClasS 接口的CreateFeatureBuffe :方法创建缓冲区,通过游标IFeatureCursor 的InsertFeature 方法加人记录。

至此,就生成了shapefile 文件。此时的shapefile 文件保存了MapGIS 文件的坐标信息,属性信息,但是渲染样式还没有对应起来,即图形的颜色、图案还没有达到一致。需要在下一步的操作中来达到这一要求。

( 3 ) A rcGIS 工程文件(MXD )的生成

ArcGIS 的数据与渲染样式是分开保存的,数据保存在shape 、coverage 、geodatabase 等格式的数据文件中,渲染样式保存在MXD 工程文件中。因此对渲染样式方面参数的写入主要是通过在相应的数据文件里添加扩展字段,用来存储这些渲染信息。

具体如下:

① 建立MapGIs 与ArcGIs 符号对照表,记录MapGIS 符号索引和相应ArcGIS 符号索引;

② 建立ArcGIS 要素文件的扩展字段,记录渲染信息参数,这些记录渲染信息的扩展字段(包括:MapGIS 符号索引、ArcGIS 符号索引、MapGIS 颜色号、对应RGB 颜色)存储在shapefile 文件的.dbf 文件中;(这部分的工作在第二步生成shapefile 文件字段的时候已经完成)

具体做法为:

根据MaPGIS 符号索引号字段记录的内容,从符号对照表中读取相应的ArcGIS 符号,将其写到对应要素的ArcGIS 符号索引字段中;

根据MapGIS 颜色号字段记录的内容,从颜色对照表中读取相应的RGB 颜色,将其写到对应要素RGB 颜色字段中;

详情见图1

该文件中,ID 为点实体号,mappntcoln 为MapGIS 点实体对应颜色号,mapPntrsb 为颜色号对应的RGB 值,为字符串类型,R--int为intege类型的red 值,G--int 为integer 类型的green 值,B_int 为integer 类型的hiue 值,这几个值在进行颜色渲染的时候会用到;类型字段存储的为点类型相关信息,在进行分类为ArcGIS 点文件和注记文件时会用到(图2 )。

各字段对应含义与用途和点文件字段类似,可参见点文件方面的描述(图3 )。

各字段对应含义以用途与点文件字段类似,可参见点文件方面的描述。

③ 记录各要素符号信息后,可根据这些信息对各要素进行自动渲染操作;

利用ARCOBJECTS 中IUniquevalueRenderer 类、StyleGalle类、StyleGalle Item 类、EnumstyleGalle 巧Item 类进行符号匹配显示;

定义IUniquevalueRenderer 类的Isymbol 属性来存储颜色信息,将定义好的IUniquevalueRenderer 赋值给IGeoFeatureLayer ( mapcontrol 控件上加载的shaPe - file 文件),来对加载的文件进行渲染。

Private Function GetRGBColor ( y ourRed As Integer , yourGreen As Integer , yourBhie As Integer ) As IRgbColor

Dim prgb As IRghColor

Set prgb = New RghColor

With prgb

·Red = yourRed

·Green = yourGreen

· Blue = yourBlue

End With

Set GetRGBColor = prgb

End Function

该函数可以根据给定的整型数据来生成RGB 颜色。

④ 将编辑完的要素保存成.mxd 格式,即ArcGIS 的工程文件。

该过程需要用到IAppliCation 的saveDocument 以及Shutdown 方法。

至此,就完成了对MapGIS 的完全读取,并保存成ArcGIS 所支持的数据格式。

2 . 3 开发环境的选择

在GIS 二次开发中,VB 开发语言具有使用方便、开发速度快的优势,因此决定采用VB 作为编程语言;另外,还要用到MapGIS SDK 、ArcMAP 、ArcoB - JECTS 开发包。

4 技术关键点

本次设计中的技术关键点包括如下几个方面:

1 、在点数据的读取和写入中,由于双方的点数据类型不一致,需要将MapGIs 所提供的注释类点数据写人到ArcGIS 的注记类文件中,而不是写到点文件中。

2 、子图类的点数据传递时,需要在ArcGIS 数据文件中建立扩展字段加以存储子图的类型信息,还要建立MapGIs 与AroGIS 的子图对照表,进行进一步的转换。

3 、在区文件的读取和写人中,要处理好“岛”的问题,即环中环的问题,需要调用接口用算法实现环数、点数、每个环的点数等信息;另外,还要建立MapGIs 与ArcGIs 区填充图案对照表。

4 、在颜色的处理上,要将MapGIS 的颜色库文件转换成文本文件,在运用MaPGIS SDK 得到颜色号信息后,根据颜色号在文本文件夹中索引出对应的颜色参数值。还需要在ArcGIS 的数据文件里建立扩展字段用来存储传递过来的颜色参数值。另外,还要建立MapGIs 与ArcGIs 的颜色对照表,加以转换(图4)。

5 结论

根据以上设计思路,在VB 开发环境下,调用Mapcls sDK 、ARCMAP 、ARCoBJECT 开发包进行程序设计,基本实现了初步设想,实现了点、线、面文件在坐标、属性上的完全一致,颜色、图案信息的基本一致。为后续GIS 格式转换方面的研究提供了一个好的解决思路。

Java五个最常用的集合类之间的区别和联系: 常用的集合类有一下几种:
List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类
Map结构的集合类:HashMap类,Hashtable类
Set结构的集合类:HashSet类,TreeSet类
Queue结构的集合:Queue接口

HashMap和Hashtable的区别:
HashMap和Hashtable都是java的集合类,都可以用来存放java对象,这是他们的相同点
以下是他们的区别:
1.历史原因:
Hashtable是基于陈旧的Dictionary类的,HashMap是java 1.2引进的Map接口的一个现实。
2.同步性:
Hashtable是同步的,这个类中的一些方法保证了Hashtable中的对象是线程安全的,而HashMap则是异步的,因此HashMap中的对象并不是线程安全的,因为同步的要求会影响执行的效率,所以如果你不需要线程安全的结合那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率,我们一般所编写的程序都是异步的,但如果是服务器端的代码除外。
3.值:
HashMap可以让你将空值作为一个表的条目的key或value
Hashtable是不能放入空值(null)的

ArrayList和Vector的区别:
ArrayList与Vector都是java的集合类,都是用来存放java对象,这是他们的相同点,
区别:
1.同步性:
Vector是同步的,这个类的一些方法保证了Vector中的对象的线程安全的,而ArrayList则是异步的,因此ArrayList中的对象并不 是线程安全的,因为同步要求会影响执行的效率,所以你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必 要的性能开销。
2.数据增长:
从内部实现的机制来讲,ArrayList和Vector都是使用数组(Array)来控制集合中的对象,当你向两种类型中增加元素的时候,如果元素的数目超过了内部数组目前的长度他们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大,所以如果你要在集合中保存大量的数据,那么使用Vector有一些优势,因为你可以通过设置集合的初始大小来避免不必要的资源开销。

总结:
1)如果要求线程安全,使用Vector,Hashtable
2)如果不要求线程安全,使用ArrayList,LinkedList,HashMap
3)如果要求键值对,则使用HashMap,Hashtable
4)如果数据量很大,又要求线程安全考虑Vector

1.ArrayList: 元素单个,效率高,多用于查询
2.Vector: 元素单个,线程安全,多用于查询
3.LinkedList:元素单个,多用于插入和删除
4.HashMap: 元素成对,元素可为空
5.HashTable: 元素成对,线程安全,元素不可为空

ArrayList
底层是Object数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点。
而在LinkedList的底层是一种双向循环链表。在此链表上每一个数据节点都由三部分组成:前指针(指向前面的节点的位置),数据,后指针(指向后面的节点的位置)。最后一个节点的后指针指向第一个节点的前指针,形成一个循环。
双向循环链表的查询效率低但是增删效率高。
ArrayList和LinkedList在用法上没有区别,但是在功能上还是有区别的。

LinkedList
经常用在增删操作较多而查询操作很少的情况下:队列和堆栈。
队列:先进先出的数据结构。
栈:后进先出的数据结构。
注意:使用栈的时候一定不能提供方法让不是最后一个元素的元素获得出栈的机会。

Vector
(与ArrayList相似,区别是Vector是重量级的组件,使用使消耗的资源比较多。)
结论:在考虑并发的情况下用Vector(保证线程的安全)。
在不考虑并发的情况下用ArrayList(不能保证线程的安全)。

面试经验(知识点):
java.util.stack(stack即为堆栈)的父类为Vector。可是stack的父类是最不应该为Vector的。因为Vector的底层是数组,且Vector有get方法(意味着它可能访问到并不属于最后一个位置元素的其他元素,很不安全)。
对于堆栈和队列只能用push类和get类。
Stack类以后不要轻易使用。
实现栈一定要用LinkedList。
(在JAVA1.5中,collection有queue来实现队列。)

Set-HashSet实现类:
遍历一个Set的方法只有一个:迭代器(interator)。
HashSet中元素是无序的(这个无序指的是数据的添加顺序和后来的排列顺序不同),而且元素不可重复。
在Object中除了有finalize(),toString(),equals(),还有hashCode()。
HashSet底层用的也是数组。
当向数组中利用add(Object o)添加对象的时候,系统先找对象的hashCode:
int hc=o.hashCode(); 返回的hashCode为整数值。
Int I=hc%n;(n为数组的长度),取得余数后,利用余数向数组中相应的位置添加数据,以n为6为例,如果I=0则放在数组a[0]位置,如果I=1,则 放在数组a[1]位置。如果equals()返回的值为true,则说明数据重复。如果equals()返回的值为false,则再找其他的位置进行比 较。这样的机制就导致两个相同的对象有可能重复地添加到数组中,因为他们的hashCode不同。
如果我们能够使两个相同的对象具有相同hashcode,才能在equals()返回为真。
在实例中,定义student对象时覆盖它的hashcode。
因为String类是自动覆盖的,所以当比较String类的对象的时候,就不会出现有两个相同的string对象的情况。
现在,在大部分的JDK中,都已经要求覆盖了hashCode。
结论:如将自定义类用hashSet来添加对象,一定要覆盖hashcode()和equals(),覆盖的原则是保证当两个对象hashcode返回相同的整数,而且equals()返回值为True。
如果偷懒,没有设定equals(),就会造成返回hashCode虽然结果相同,但在程序执行的过程中会多次地调用equals(),从而影响程序执行的效率。

  • 100克奶片有多少颗

    现有哪些直播平台可以播原石?: 贴吧,微信,QQ都可以,还有微博,头条,小火山视频,这些都能做到。 ...

    681条评论 5881人喜欢 2386次阅读 285人点赞
  • 2012中俄联合军演时候俄国的总统是谁啊

    杂合突变能治: 基因突变可以是自发的,也是可以诱导的,诱导因素有物理因素和化学因素,物理因素主要有电离辐射,紫外线,X射线,等,化学因素主要是一些诱变剂,如吖啶染料,秋水仙素,叠氮化合物等。 自发突变主要是由于自身基因复制时的小概率...

    314条评论 5086人喜欢 2096次阅读 977人点赞
  • icloud 照片在哪里

    影响基因频率的因素有哪些: 原发布者:zhshiwen1968 影响基因频率改变的因素我们在给学生讲生物进化时,讲到生物进化的实质是种群基因频率的改变。在应用中经常提到“哈代──韦恩贝格”定律,即(p+q)2=1,其中p、q分别代表控制一对相对...

    551条评论 5127人喜欢 4640次阅读 272人点赞
  • nespresso哪个好

    除草剂敏感型的大豆经辐射获得抗性突变体,且敏感基因与抗性基因是1对等位基因.下列叙述正确的是: 这个题目没有一个答案是正确的。A肯定不对,这世界上没有东西是一定的,A的条件存在许多例外,比如敏感性大豆为Rr,R为抗性基因,为显性,r为敏感基因,为阴性。但在R的启动子部位有一个多余片段N,致使RNA聚合酶不能结合...

    652条评论 5760人喜欢 2086次阅读 979人点赞
  • m1怎么刷机

    淘宝优惠券是什么公司发行的 大家认可吗: 我的建议是用促说apρ,可以领一些我们生活中比较熟知的比如淘宝,拼多多,唯品会等,这些大平台的优惠券,使用后效果会很显著,真的可以省不少钱。 ...

    669条评论 3994人喜欢 3285次阅读 271人点赞
  • 360焦点资讯如何关闭

    不是说手机有辐射吗,我揣手机都是习惯放屁股兜里。会不会对我臀部造成什么影响。变异或什么的?: 会的,何为辐射?辐射的本质就是电磁震荡,震荡的电磁波会穿透你的臀部肌肉,同时电磁波也会促使构成肌肉的分子原子加速做无规律运动,而这分子原子的无规律运动又是温度的本质,所以你的屁股会被手机辐射加热。并且,从生物学角度分...

    756条评论 3838人喜欢 2823次阅读 810人点赞