geoway3.6完美破解的图层转shap后没有字段属性,怎么可以实现转shap后仍保留原图层的属性值

ArcEnging 导入shp资料后自定义图层中各要素的颜色_Linux停sed,awk,grep,cut,find学习笔记_【转】数字证书的运用和实施机制__脚本百事通
稍等,加载中……
^_^请注意,有可能下面的2篇文章才是您想要的内容:
ArcEnging 导入shp资料后自定义图层中各要素的颜色
Linux停sed,awk,grep,cut,find学习笔记
【转】数字证书的运用和实施机制
ArcEnging 导入shp资料后自定义图层中各要素的颜色
ArcEnging 导入shp文件后自定义图层中各要素的颜色经过前面一段时间狂乱的baidu&google,目前ArcEngine开的项目算是完成了基本的外观,这次解决的问题是从CAD导成shp文件后,先前在CAD中定义的颜色也是可以读取到的,只不过它的Color值是采用的 ACI 规范,需要转换成RGB我们才方便使用。当然主要的问题是MapControl导入shp文件时,它给每个图层中要素的颜色是随机的,不是原图中所定义的颜色,所以我们需要这样在google中搜索"ArcEngine 修改 图层颜色","ArcEngine 自定义要素颜色",又是一阵狂乱的搜索,当然也能找到一些信息,但最后还是在看那个E文的MSDN帮助时找到了解决办法。上面直接有一例子,这里做了一些修改,贴出来:
public static void DefineFeatureColor(IGeoFeatureLayer pGeoFeatureLayer, string fieldName)
//Make the renderer.
IUniqueValueRenderer pUniqueValueRenderer = new UniqueValueRendererClass();
//These properties should be set prior to adding values.
pUniqueValueRenderer.FieldCount = 1;
pUniqueValueRenderer.set_Field(0, fieldName);
IDisplayTable pDisplayTable = pGeoFeatureLayer as IDisplayT
IFeatureCursor pFeatureCursor = pDisplayTable.SearchDisplayTable(null, false) as IFeatureC
IFeature pFeature = pFeatureCursor.NextFeature();
int fieldI
IFields pFields = pFeatureCursor.F
fieldIndex = pFields.FindField(fieldName);
while (pFeature != null)
string classValue = pFeature.get_Value(fieldIndex).ToString();
IColor color =
ColorUtilities.GetColorByACI(Int16.Parse(classValue));
IRgbColor rgb = color as
//System.Console.WriteLine("KVL:" + classValue+"--&RGB"+ rgb.Red + "," + rgb.Green + "," + rgb.Blue);
ISymbol pClassSymbol = getSymbolByShapType(pGeoFeatureLayer.FeatureClass.ShapeType, color);
//Test to see if this value was added
//to the renderer. If not, add it.
ValFound =
for (int i = 0; i &= pUniqueValueRenderer.ValueCount - 1; i++)
if (pUniqueValueRenderer.get_Value(i) == classValue)
ValFound =
//Exit the loop if the value was found.
//If the value was not found, it is new and it will be added.
if (ValFound == false)
pUniqueValueRenderer.AddValue(classValue, fieldName, pClassSymbol as ISymbol);
pUniqueValueRenderer.set_Label(classValue, classValue);
pUniqueValueRenderer.set_Symbol(classValue, pClassSymbol as ISymbol);
pFeature = pFeatureCursor.NextFeature();
//'** If you didn't use a predefined color ramp
//'** in a style, use "Custom" here. Otherwise,
//'** use the name of the color ramp you selected.
pUniqueValueRenderer.ColorScheme = "Custom";
ITable pTable = pDisplayTable as IT
bool isString = pTable.Fields.get_Field(fieldIndex).Type == esriFieldType.esriFieldTypeS
pUniqueValueRenderer.set_FieldType(0, isString);
pGeoFeatureLayer.Renderer = pUniqueValueRenderer as IFeatureR
//This makes the layer properties symbology tab
//show the correct interface.
IUID pUID = new UIDClass();
pUID.Value = "{683C994E-A17B-11D1-EC732A}";
pGeoFeatureLayer.RendererPropertyPageClassID = pUID as UIDC
上面的代码大部分来自帮助文档中的例子,做了一些逻辑上的修改,就是把原例子中的Random颜色换成读取要素Color转成RGB再渲染。参数fieldName其实可以不用要,我这里就是"Color"这个字段名。
Linux停sed,awk,grep,cut,find学习笔记
Linux下sed,awk,grep,cut,find学习笔记
grep 相关内容:
grep [options] PATTERN file...
option 有以下几种:
不区分大小写
只显示没有匹配到的
显示匹配到的行在原文中所处的位置
不但显示搜索到的行 还显示后面(after)的
..................显示前面的n 行
...................context
把匹配到的窜高亮显示
pattern(模式)本来挺简单的但是因为它支持了正则表达式开始变得复杂起来
正则表达式有以下几个符号:
各个表达式的意思就省略了 ,如果想知道具体含义的话,可以翻看我上上一篇博客
在这里想说明的是这些只是grep所支持的“基本正则表达式” egrep 支持扩展的
正则表达式包括以下几个:(扩展的正则表达式不支持 /( /)
grep相关练习题:
命令sed的有关内容(steam edit):
sed特点: 非交互式编辑器
没有破坏性,不修改原文件,除非使用shell重定向符来保存结果
sed还支持sed脚本
格式:sed [options] /pattern/commend
sed [options] add1,add2+commend 文件
sed [options] /cache/,/wp/p
sed "addr1,addr2s/ / /ig"
options 有以下几个选项
不显示没有被匹配到的行
一次指定多个选项
把一些改变写到一个文件里面然后
用-f选项读入
直接修改原文件的
sed内建命令有以下一些:
在一行之后追加内容
在一行之前写内容
给以下几个例子:
sed '1,$-2s/yes/YES/g'
/proc/cpuinfo
sed '1,$s/^c/C/g'
/proc/cpuinfo
sed '1,$s/\b[cC]pu/&s/g' /proc/cpuinfo
sed '1,$s/\b[Cc][[:alpha:]_]*\b/&s/g' /proc/cpuinfo
sed '1,$s/\bm\([[:alpha:]]*\)/\bM\1/g' /proc/cpuinfo
sort 命令相关内容:
几个option如下:
只显示没有重复的行
以什么字段分割
以第几个字段排序
例如:tail -n 6 /etc/passwd | sort -n -t : -k 3
uniq命令:
只显示没有重复的行
显示重复的行
显示重复的行并且给出重复几次
awk 命令相关内容:
'program' file
program里面都是这样一种格式--》pattern{action}
awk 与sed一样都是按行读取文件内容,但是不同的是awk 会把一行分成片
(field)$1 $2 $3 $4 $5... 每一行是一个record
默认情况下片的分割
是按“空格”分割,record的默认分隔符是“\n”
pattern的情况有以下几种:
/regular expression/
expression
两者一般都是为了改变内建变量
也可以在输出前加一些内容
例子如下:
awk '{print $3}' /etc/fstab
awk 'BEGIN{FS=":"}{print $3}' /etc/passwd
awk 'BEGIN{print "device mount point"}{print $2}' /etc/fstab
awk 'BEGIN{FS=":" ; RS=";"}'{print $3} /etc/passwd
Linux文件查找命令find,xargs
find命令的格式:
find pathname -options [-print -exec -ok ...]
find 命令的参数:
按照文件权限模式查找
读权限:r:4 写权限:w:2 执行权限:x:1
文件属主具有读、写权限: rw:4+2=6
其他用户具有读权限:r:4
查找的文件类型
-type f 文件
-type d 目录
-type l 符号链接文件
-exec 参数后面跟的是 command命令
command命令的终止,使用 ';' (分号)来判定,在后面必须有一个 ';'
'{}',使用{}来表示文件名,也就是find前面处理过程中过滤出来的文件,用于command命令进行处理
对于不同的系统,直接使用分号可能会有不同的意义, 使用转义符 '\'在分号前明确说明
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有
改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。
关于sed的hold space(内存缓冲区)和pattern space(模式空间)
sed在处理文件的时候,每一行都需要存放在一个叫“模式空间”的临时缓存区。每处理完一行,便清理一次(pattern space),并把下一行再次放入该临时缓冲区。
而保留空间(hole space),是当sed用到h命令的时候,把匹配的模式放在一个叫做"hold buffer"的保留缓冲里,但需要使用G(sed的取得命令)的时候,sed
从这个保留空间(hold space)中取得。
sed 是以行为单位进行读取,读取后的内容存放在pattern space。
holding space是通过h,H,x,g,G命令和pattern space产生关连,利用这5个特性可以辅助pattern space解决问题。
表示行内全面替换,当前处理行进行全局替换。
获得内存缓冲区的内容,并追加到当前模板块文本的后面。
函数参数G 与g 唯一差别是, sed执行g 时, 数据盖掉(overwrite) pattern space 内原来的数据
而G , 数据则是"添加(append)" 在pattern space 原来数据后。
如果在一行中有多个命令,要用分号隔开。
s/re/string
用string替换正则表达式re。
从模板块(Pattern space)位置删除行。
函数参数d 表示删除数据行, 其指令格式如下:
[address1[ ,address2]] d
对上述格式有下面几点说明:
函数参数d 最多与两个地址参数配合。
sed执行删除动作情况如下:
将pattern space 内符合地址参数的数据删除。
将下一笔资料读进pattern space 。
重新执行sedscript。n
读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
函数参数n 表示读入下一行资料。
其指令格式如下:
[address1[ ,address2]] n
对上述格式有下面几点说明:
函数参数n 最多配合两个地址参数。
sed执行读入下一行动作的情况如下:
输出在pattern space 的数据。
将下一笔资料读到pattern space。
执行下一个编辑指令。
-n, --quiet, --silent
安静模式,取消默认输出。
交换pattern和hold space
打印模式空间的行,通常 p 会与参数 sed -n 一起使用
追加下一行数据到模式空间,数据行间以换行字符(embedded newline character)分隔。
函数参数N 表示添加下一笔资料在pattern space 内。
其指令格式如下:
[address1 ,[address2]] N
对上述格式有下面几点说明:
函数参数N 最多配合两个地址参数。
sed执行时, 将下一行数据读入并添加在pattern space 内, 数据行间以换行字符(embedded newline character)分隔。
此外, 在替换时, 换行字符可用\n 来match。
打印当前行号
匹配一个非换行符的字符
拷贝模板块的内容到内存中的缓冲区。
表示后面的命令对所有没有被选定的行发生作用。
锚定行的结束 如:/sed$/匹配所有以sed结尾的行。也可以表示文件最后一行。
表示文件第一行
直接在指令列模式上进行 sed 的动作编辑,允许多台编辑。
表示建立一个标签label
跳转命令,这个命令是无条件跳转
ba表示跳转到标签a处
删除模板块的第一行。
函数参数D 与d 的比较如下:
当pattern space 内只有一数据行时, D 与d 作用相同。
当pattern space 内有多行资料行时D 表示只删除pattern space 内第一行资料; d 则全删除。
D 表示执行删除后, pattern space 内不添加下一笔数据, 而将剩下的数据重新执行 d 则读入下一行后执行sedscript。
grep简介:
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、
egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是 fixedgrep或fast
grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux 使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
打印匹配模板的文件清单
递归地搜索目录。在缺省情况下,按照到目录的链接。
锚定行的开始
匹配一个不在指定范围内的字符
匹配文字和数字字符,也就是[A-Za-z0-9]
重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
'\w\{3,\}'即是至少有4个字符的已登录用户
锚定行的结束 如:/sed$/匹配所有以sed结尾的行。
awk是一种用于处理文本的编程语言工具。AWK 实用工具的语言在很多方面类似于 shell 编程语言,尽管AWK
具有完全属于其本身的语法。在最初创造AWK 时,其目的是用于文本处理,并且这种语言的基础是,只要在输入数据中有模式匹配,就执行一系列指令。该实用工具扫描文件中的每一行,查找与命令行中所给定 内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。
awk命令的语法
awk '{pattern + action}' {filenames}
其中 pattern 表示
AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号 ({}) 不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。
$0,关于awk的字段
实用工具将每个输入行分为记录和字段。记录是单行的输入,而每条记录包含若干字段。默认的字段分隔符是空格或制表符,而记录的分隔符是换行。虽然在默认情况下将制表符和空格都看作字段分隔符(多个空格仍然作为一个分隔符),但是可以将分隔符从空格改为任何其它字符。
AWK 读取输入内容时,整条记录被分配给变量 $0。每个字段以字段分隔符分开,被分配给变量 $1、$2、$3 等等。一行在本质上可以包含无数个字段,通过字段号来访问每个字段。
BEGIN和END
在awk 中两个特别的表达式,BEGIN和END,这两者都可用于pattern中,提供BEGIN和END的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾的工作。任何在BEGIN之后列出的操作(在{}内)将在awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。
gsub(r,s,t)
在字符串t中用字符串s和正则表达式r匹配的所有字符串。返回值是替换的个数。如果没有给出t,默认是$0。
表示awk开始执行程序后所读取的数据行数.
表示当前处理的整行数据
Linux的cut命令
关于cut命令:
cut命令可以从一个文本文件或者文本流中提取文本列,具体的说就是在文件中负责剪切数据用的。cut是以每一行为一个处理对象的,这种机制和sed是一样的。
cut -d'分隔字元' -f fields
-d ∶后面接分隔字元。与 -f 一起使用;
-f ∶依据 -d 的分隔字元将一段讯息分割成为数段,用 -f 取出第几段的意思;
-c ∶以字元 (characters) 的单位取出固定字元区间;
Linux的wc命令
关于WC命令:
该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。
该命令各选项含义如下:
wc -m filename:显示一个文件的字符数wc -l filename:显示一个文件的行数wc -L filename:显示一个文件中的最长行的长度wc -w filename:显示一个文件的字数
关于ls命令
ls 命令经常要使用,通过使用 ls 命令可以查看linux文件夹包含的文件,查看文件权限(包括目录、文件夹、文件权限),查看目录信息等等,ls 命令在平常的linux操作中使用很频繁,所以这里介绍下 ls 命令的相关使用方法。
选项说明:
-a 用于显示所有文件和子目录(保罗点文件)。
-l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来。
-r 将目录的内容清单以英文字母顺序的逆序显示。
-t 按文件修改时间进行排序,而不是按文件名进行排序。
关于sort命令
Sort命令的功能是对文件中的各行进行排序。Sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上,Sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。
-n按照数字方式排序。不加-n参数时排序结果根据最左面的数字开始,等同于字母的比较方式。按算术值对数字字段排序。数字字段可包含前导空格、可选减号、十进制数字、千分位分隔符和可选基数符。对包含任何非数字字符的字段进行数字排序会出现无法预知的结果。
-r 颠倒指定排序的顺序。
-k作用是根据某个列来排序,默认是第1列(从1开始)。
-t表示分割符,以:分割,默认情况下以空格分割
-nrk 5即是按照数字方式倒序排序,根据文件属性的第5列即是文件大小排序
关于tr命令
通过使用 tr,可以非常容易地实现
sed 的许多最基本功能。可以将 tr 看作为
sed 的(极其)简化的变体。使用tr命令可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符。
tr的命令格式为:
tr -c -d -s ["string1_to_translate_from"] ["string2_to_translate_to"] & input-file
用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。
删除字符串1中所有输入字符。
删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
string1_to_translate_from
要转换的原字符串
string2_to_translate_to
想要转换成的字符串
关于mv命令
mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中。该命令等同于DOS系统下的ren和move命令的组合。它的使用权限是所有用户。
mv [options] 源文件或目录 目标文件或目录。
awk是一种程序语言,对文档资料的处理具有很强的功能。awk擅长从格式化报文或从一个大的文本文件中抽取数据。
awk的命令格式为:
view plaincopyprint?
awk [-F filed-separator] “commands” input-file(s)
awk [-F filed-separator] “commands” input-file(s)
每一个命令(commands)都由两部分组成:一个模式(pattern)和一个相应的动作
(action)
view plaincopyprint?
/pattern1/{action1}
/pattern2/{action2}
/pattern3/{action3}
/pattern1/{action1}
/pattern2/{action2}
/pattern3/{action3}
awk将一行文字按分隔符(filed-separator)分为多个域,依次记为$ 1,$ 2 . . . $ n。$0代表所有域值。因此awk更适合于以域为单位来处理文件。加之ARGIND等内置变量,使awk能处理多个文件。典型的应用为查找一个文件中的某个字段是否在另一个文件中出现。例子见我的另一篇博客【awk】诡异的错误,linux和windows换行的区别。但由于$0代表所有域,即整行,因此awk也有简单行处理能力。
sed 是一个精简的、非交互式的编辑器。它能执行与编辑vi和emacs相同的编辑任务,但sed编辑器不提供交互使用方式,只能在命令行下输入编辑命令。
sed的命令格式为:
view plaincopyprint?
sed [options] 'command' file(s)
sed [options] -f scrīptfile file(s)
sed [options] 'command' file(s)
sed [options] -f scrīptfile file(s)
作为编辑器,当然少不了插入(a/、i/)、删除(d)、查找替换(s)等命令。详见sed命令详解 。
如果文件是格式化的,即由分隔符分为多个域的,优先使用awk
awk适合按列(域)操作,sed适合按行操作
awk适合对文件的抽取整理,sed适合对文件的编辑。
(想到再补~)
【转】数字证书的运用和实施机制
【转】数字证书的应用和实施机制
为什么需要数字证书?
1. 标志和证明网络通信双方身份,确保交易实体的真实性或者签名信息的不可否认性。(数字签名和签名验证)
2. 对在网络上传输的信息进行加密,确保信息的机密性、完整性。
总而言之,我们用数字证书核心的加密功能,提供网络安全。下面,让我们一一分析数字证书在保证网络安全的各方面所采用的方式或实施的机制。
A. 身份认证
情景:A和B双方,A要对B的身份进行验证。
初步实施机制:B用自己的私钥对自己的口令进行数字签名,然后发给A。A用B提供的公钥来来验证B用自己独有的私钥进行的数字签名。
问题:B乐于给A提供公钥,而且他也不担心谁得到了他的公钥,因为本身公钥就是公开的。但是,A却担心他得到的公钥是否真的是B的公钥。假设这时有个黑客H,在B给A传输公钥的过程中截断了信息并用自己的公钥替代B的公钥,H取得了A的信任后就可以侵入A的系统。这个问题即如何安全地发布公钥的问题。
进阶实施机制:其实我们可以看到,公钥发布也是一个认证问题。我们可以通过为B的公钥进行签名,而使H想修改B公钥的企图变得困难。这就是现今很多证书发布机构的作用。他们首先认证了B的身份,为B的公钥用机构的私钥进行签名,这时候得到的数字序列即称为证书。这时候,A首先得用证书机构提供的公钥解密来得到B的公钥。而如果H想篡改B的公钥,他首先得得到机构的私钥。
还有问题:如何保证机构公钥发布的安全性?
其实:没有一种安全认证能去除所有的风险。本质上,我们只是让它更加安全而已。而安全性是一种代价和安全之间的折衷---安全风险越小,安全的代价就越高。
B. 数据完整性
情景:A给B传输数据。
问题:B要知道A传送给他的数据是否完整。
初步实施机制:A通过哈希算法生成一个数值跟数据一起传送给B。因为哈希算法的特点是输入数据的任何变化都会引起输出数据的不可预测的极大变化。B接收到数据和哈希数值后,再次对数据进行哈希求值来验证。
问题:如何保证哈希数值是正确的,或者说在传输过程中没有被修改?
进阶实施方案:A用自己的私钥为哈希数值加密。谁都可以利用A的公钥来查看哈希数值,但是因为没有A的私钥,所以无法篡改哈希数值。B在接收到A的数据之后,即可验证数据的完整性。
C. 数据保密性
情景:同样是A给B传送数据。我们可以通过哈希算法和私钥来保证数据完整性,但是如果传输的是一些敏感数据,我们不想在传输过程中被其他人”窃看“传输数据。
实施机制:我们采用”数字信封“机制来实施保密性服务。A先产生一个对称性密钥,然后对敏感数据进行加密。同时,A用B的公钥对对称密钥进行加密,像装入一个‘数字信封”中。然后将“数字信封”和被加密的敏感数据一起发送给B。B用自己的私钥拆开“数字信封”,得到对称密钥。然后用对称密钥对敏感数据进行解密。
问题:为什么不直接用B的公钥对数据进行加密?
原因:原因在于速度。对称加密是一种速度极快的加密方法,在数据量较大的时候,优势很明显。
D. 不可否认性
情景:A传送数据给B。B可不想A在某一天否认他曾经给B传送过数据。
实施机制:很简单,即我们在上面很多场景中应用的数字签名。因为A传送的数据用了A的密钥加密,此数据只能用A的公钥解密,所以同时也验证了数据确实来源于A。
其它场景:接受后的不可否认性,传输的不可否认性,创建的不可否认性,同意的不可否认性等等。
如果您想提高自己的技术水平,欢迎加入本站官方1号QQ群:&&,&&2号QQ群:,在群里结识技术精英和交流技术^_^
本站联系邮箱:

我要回帖

更多关于 geoway3.6 的文章

 

随机推荐