怎么解决VB Script中Len函数的问题

zdg 2000-02-17 02:34:00
Len(str)将计算字符串的长度, 可是将一个汉字计算成一个字符了, 怎么得到真实的字符串长度???也就是一个汉字是两个字符的...
急!急!急!
...全文
463 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdg 2000-02-28
  • 打赏
  • 举报
回复
peacock的方法最好, 已经应用到主页了...
大家看看是不是对齐了很多...
谢谢大家的帮助...
peacock 2000-02-25
  • 打赏
  • 举报
回复
这里有一个简单的方法:
Function Len_Str(Strs As String) As Long
Dim ReLen As Long
Dim I As Long
ReLen=0
For I=1 To Len(Strs)
'属于ASCII码
If (Asc(Mid$(Strs,I,1))>=0) And (Asc(Mid$(Strs,I,1))<=255) Then
ReLen=ReLen+1
'不'属于ASCII码
Else
ReLen=ReLen+2
End If
Next
Len_Str=ReLen
End Function
Un1 2000-02-25
  • 打赏
  • 举报
回复
支持Tony_Yuan!
Tony_Yuan 2000-02-17
  • 打赏
  • 举报
回复
因为VB使用UNICODE,所以每个字符都占2个字节,
你可以查看每个字的高位字节,若大于0该字符就是汉字,按这个方法可以确定实际字节数,以下是个函数,发现一个汉字就多加一个字节数,你可以根据这个原理来处理你的问题

Public Function GetByteLen(ByVal str As String) As Long
Dim I As Long
Dim a() As Byte
GetByteLen = 0
str = Trim(str)
a = str
For I = UBound(a) To 0 Step -1
If I Mod 2 Then
If a(I) > 0 Then
GetByteLen = GetByteLen + 1
End If
Else
GetByteLen = GetByteLen + 1
End If
Next
End Function
DOU 2000-02-17
  • 打赏
  • 举报
回复
可靠的权宜方法是用VB做一个非常简单ActiveX DLL,实现简单的这方面的几个函数功能,在ASP中调用
TBBT 2000-02-17
  • 打赏
  • 举报
回复
可以用FOR循环,对字符串的每一个字符取ASC码值,如小于0即为中文,大于0为英文
,再累加。
DOU 2000-02-17
  • 打赏
  • 举报
回复
以上例子为VB.
VBScript中没有StrConv函数,惨啦!
DOU 2000-02-17
  • 打赏
  • 举报
回复
对不起,我试了一下,MSDN的做法好象有问题,这样试试:

str = LeftMbcs("中国人Good", 9)

Function LeftMbcs(ByVal StrArg As String, ByVal arg1 As Long) As String
AnsiLeftB = StrConv(LeftB(StrConv(StrArg, vbFromUnicode), arg1), vbUnicode)
End Function

不过如果arg1为单数,可能会出现半边字,比如str = LeftMbcs("中国人Good", 3)
zdg 2000-02-17
  • 打赏
  • 举报
回复
我在ASP中用
Function LenMbcs(str)
LenMbcs = LenB(StrConv(str, vbFromUnicode))
End Function
报错, 说
"类型不匹配: 'StrConv' "
为什么???
DOU 2000-02-17
  • 打赏
  • 举报
回复
应该如此:
Function AnsiStrConv(StrArg, flag)
nsiStrConv = StrConv(StrArg, flag)
End Function

' LeftB ANSI Unicode
Function AnsiLeftB(ByVal StrArg As String, ByVal arg1 As Long) As String
AnsiLeftB = AnsiStrConv(LeftB(AnsiStrConv(StrArg, _
vbFromUnicode), arg1), vbUnicode)
End Function
详细请见MSDN:“Differences in String Function Operations”
zdg 2000-02-17
  • 打赏
  • 举报
回复
DOU, LeftMbcs相应的函数应该怎么写呢???
zdg 2000-02-17
  • 打赏
  • 举报
回复
谢谢, 看来应该用LenMbcs, 可是有相应的LeftMbcs函数吗???
DOU 2000-02-17
  • 打赏
  • 举报
回复
不能使用LenB, 看下面你就会明白

The example uses LenB and a user-defined function (LenMbcs) to return the number of byte characters in a string if ANSI is used to represent the string.

Function LenMbcs (ByVal str as String)
LenMbcs = LenB(StrConv(str, vbFromUnicode))
End Function

Dim MyString, MyLen
MyString = "ABc" '//将 MyString = "中国人Good" 更清楚一些
' Where "A" and "B" are DBCS and "c" is SBCS.
MyLen = Len(MyString) '// 7
' Returns 3 - 3 characters in the string.
MyLen = LenB(MyString) '// 14
' Returns 6 - 6 bytes used for Unicode.
MyLen = LenMbcs(MyString) '// 10
' Returns 5 - 5 bytes used for ANSI.
zdg 2000-02-17
  • 打赏
  • 举报
回复
谢谢, 其实我是想将过长的字符串截掉, 使得显示一样长, 请littletao看看以下函数, 怎么转换的还是不一样长...

function conv(num, str)
conv=str
if lenb(str)>num then conv=left(str, num)+"..."
end function
littletao 2000-02-17
  • 打赏
  • 举报
回复
lenb
欢迎光临 VBScript 语言参考 这里的信息可以帮你很方便地浏览 Visual Basic 脚本的许多不同部分。 你可以找到在按字母排序的关键字列表列出的 VBScript 语言的所有部分。如果你只想调阅某一部分,例如“对象”,那么语言的每一部分都有它自己更严密的章节。 如何查找呢?单击左边的某个标题,即显示该部分包含的项目列表。从这张列表选择要查看的主题。当这个主题打开后,再链接到其他相关的部分就简单多了。 好了,让我们试一试,体会体会!学习几个语句,研究几种方法,或者熟悉几个函数。你就能学会如何巧妙地运用 VBScript 语言,充分发挥 VBScript 语言的强大功能。 特性 说明 VBScript 特性 VBScript 最新特性列表 未包含在 VBScript VBA 特性 VBScript 最新特性列表:未包含在 VBScript 的应用程序编辑。 未包含在 VBA VBScript 特性 未包含在 Visual Basic VBScript 特性列表:应用程序编辑。 Microsoft Scripting 运行时特性 VBScript 最新的 Scripting 运行时特性列表。 语言元素 说明 Abs 函数 返回数的绝对值。 加法运算符 (+) 两数相加。 And 运算符 执行两个表达式的逻辑连接。 Array 函数 返回含一数组的 变体 。 Asc 函数 返回字符串首字母的 ANSI 字符代码。 赋值运算符 (=) 给变量或属性赋值。 Atn 函数 返回数的反正切值。 调用语句 将控制移交 Sub 或 Function 过程。 CBool 函数 返回已被转换为 Boolean 子类型的变体的表达式。 CByte 函数 返回已被转换为字节子类型的变体的表达式。 CCur 函数 返回已被转换为货币子类型的变体的表达式。 CDate 函数 返回已被转换为日期子类型的变体的表达式。 CDbl 函数 返回已被转换为双精度子类型的变体的表达式。 Chr 函数 返回指定 ANSI 字符码的字符。 CInt 函数 返回已被转换为整数子类型的变体的表达式。 Class 对象 提供对已创建的类的事件的访问。 Class 语句 声明类名 Clear 方法 清除 Err 对象的所有属性设置。 CLng 函数 返回已被转换为 Long 子类型的变体的表达式。 颜色常数 颜色常数列表。 比较常数 用于比较运算的常数列表。 连接运算符 (&) 强制两个表达式的字符串连接。 Const 语句 声明用于字母值的常数。 Cos 函数 返回角度的余弦值。 CreateObject 函数 创建并返回对“自动”对象的引用。 CSng 函数 返回已被转换为单精度子类型的变体的表达式。 CStr 函数 返回已被转换为字符串子类型的变体的表达式。 日期和时间常数 在日期和时间运算用来定义星期几和其他常数的常数列表。 日期格式常数 用于日期和时间格式的常数列表。 Date 函数 返回当前系统日期。 DateAdd 函数 返回加上了指定的时间间隔的日期。 DateDiff 函数 返回两个日期之间的间隔。 DatePart 函数 返回给定日期 的指定部分。 DateSerial 函数 返回指定年月日的 日期子类型的变体 。 DateValue 函数 返回日期子类型的变体 。 Day 函数 返回日期,取值范围为 1 至 31。 Description 属性 返回或者设置说明某个错误的字符串。 Dictionary 对象 存储数据键、项目对的对象。 Dim 语句 声明变量并分配存储空间。 除法运算符 (/) 两数相除并以浮点数格式返回商。 Do...Loop 语句 当条件为 True 或者当条件变为 True 时,重复一语句块。 Empty 表示尚未初始化的变量值。 Eqv 运算符 使两个表达式相等。 Erase 语句 重新初始化固定数组的元素并重新分配动态数组的存储空间。 Err 对象 含有关于运行时错误的信息。 Eval 函数 计算并返回表达式的值。 Execute 方法 根据指定的字符串,执行正则表达式的搜索。 Execute 语句 执行单个或更多的指定语句。 Exit 语句 退出 Do...Loop、For...Next、 Function 或 Sub 代码块。 Exp 函数 返回 e (自然对数的底)的多少次方。 自乘运算符 (^) 指数函数,幂为自变量。 False 关键字,其值为零。 FileSystemObject 对象 提供对计算机文件系统的访问。 Filter 函数 根据指定的筛选条件,返回含有字符串数组子集的、下限为 0 的数组。 FirstIndex 属性 返回字符串匹配的位置。 Fix 函数 返回数的整数部分。 For...Next 语句 以指定的次数重复一组语句。 For Each...Next 语句 对于数组或集合的每一个元素,重复一组语句。 FormatCurrency 函数 返回的表达式为货币值格式,其货币符号采用系统控制面板定义的。 FormatDateTime 函数 返回格式化为日期或时间的表达式。 FormatNumber 函数 返回格式化为数的表达式。 FormatPercent 函数 返回格式化为百分比(乘以 100)的表达式,以 % 符号结尾。 Function 语句 声明形成 Function 过程体的名称、参数和代码。 GetObject 函数 从文件返回对“自动”对象的访问。 GetRef 函数 返回对可以绑定到事件的过程的引用。 Global 属性 设置或返回 Boolean 值。 Hex 函数 返回表示数的十六进制值的字符串。 HelpContext 属性 设置或返回帮助文件某主题的上下文 ID。 HelpFile 属性 设置或返回帮助文件的全路径。 Hour 函数 返回小时数,取值范围为 0 至 23。 If...Then...Else 语句 根据表达式的值,有条件地执行一组语句。 IgnoreCase 属性 设置或返回 Boolean 值,指示模式搜索是否区分大小写。 Imp 运算符 执行两个表达式的逻辑隐含。 初始化事件 发生在创建相关类的实例时。 InputBox 函数 在对话框显示提示,等待用户输入文本或者单击按钮,并返回文本框的内容。 InStr 函数 返回一个字符串在另一个字符串第一次出现的位置。 InStrRev 函数 返回一个字符串在另一个字符串出现的位置,是从字符串的末尾算起。 Int 函数 返回数的整数部分。 整数除法运算符(\) 两数相除,返回的商取其整数部分。 Is 运算符 比较两个对象引用变量。 IsArray 函数 返回 Boolean 值,表示变量是否为数组。 IsDate 函数 返回 Boolean 值,表示表达式是否可以转换为日期。 IsEmpty 函数 返回 Boolean 值,表示变量是否已被初始化。 IsNull 函数 返回 Boolean 值,表示表达式是否含有无效数据 (Null)。 IsNumeric 函数 返回 Boolean 值,表示表达式能否当作一个数,用来计算。 IsObject 函数 返回 Boolean 值,表示表达式是否引用了有效的“自动”对象。 Join 函数 返回连接许多包含在一个数组的子串而创建的字符串。 LBound 函数 对于指示的数组维数,返回最小的可用下标。 LCase 函数 返回已被转换为小写字母的字符串。 Left 函数 返回字符串最左边的指定数量的字符。 Len 函数 返回字符串的字符数量,或者存储变量所需的字节数。 Length 属性 返回在搜索字符串匹配的长度。 LoadPicture 函数 返回图片对象。仅用于 32 位平台。 Log 函数 返回数的自然对数。 LTrim 函数 返回去掉前导空格的字符串副本。 Match 对象 提供访问匹配正则表达式的只读属性。 Matches 集合 正则表达式匹配对象的集合。 Mid 函数 从字符串返回指定数量的字符。 Minute 函数 返回小时内的分钟数,取值范围为 0 至 59。 杂项常数 不能纳入任何其他类的常数列表。 Mod 运算符 两数相除,只返回余数。 Month 函数 返回月份,取值范围为 1 至 12。 MonthName 函数 返回表示月份的字符串。 MsgBox 常数 与MsgBox 函数一起使用的常数列表。 MsgBox 函数 在对话框显示消息,等待用户单击按钮,并返回表示用户所击按钮的数值。 乘法运算符 (*) 两数相乘。 取反运算符 (-) 表示数值表达式的相反数。 Not 运算符 执行表达式的逻辑“非”运算。 Now 函数 返回当前计算机的系统日期和时间。 Nothing 使对象变量与所有实际的对象没有任何关联。 Null 表示变量含有无效的数据。 Number 属性 返回或设置代表某个错误的数值。 Oct 函数 返回表示一数的八进制值的字符串。 On Error 语句 启用错误处理。 运算符的优先级 表示各种 VBScript 运算符的优先顺序的列表。 Option Explicit 语句 强制显式声明脚本的所有变量。 Or 运算符 执行两个表达式的逻辑“或”运算。 Pattern 属性 设置或返回正被搜索的正则表达式的模式。 Private 语句 声明私有变量并分配存储空间。 PropertyGet 语句 声明在窗体属性过程获取(返回)属性值的名称,参数和代码。 PropertyLet 语句 声明在窗体属性过程指定属性值的名称,参数和代码。 PropertySet 语句 声明在窗体属性过程设置引用到对象的名称,参数和代码。 Public 语句 声明公有变量并分配存储空间。 Raise 方法 产生运行时错误。 Randomize 语句 初始化随机数发生器。 ReDim 语句 声明动态数组变量,并分配或重新分配过程级的存储空间。 RegExp 对象 提供简单正则表达式的支持。 Rem 语句 包含程序的注释。 Replace 函数 返回一个字符串,其某个指定的子串被另一个子串替换,替换的次数也有规定。 Replace 方法 替换在正则表达式搜索已发现的正文。 RGB 函数 返回表示 RGB 颜色值的数。 Right 函数 返回字符串最右边的指定数量的字符。 Rnd 函数 返回一随机数。 Round 函数 返回指定位数、四舍五入的数。 RTrim 函数 返回去掉尾部空格的字符串副本。 ScriptEngine 函数 返回表示正在使用的脚本语言的字符串。 ScriptEngineBuildVersion 函数 返回使用的脚本引擎的编译版本号。 ScriptEngineMajorVersion 函数 返回使用的脚本引擎的主版本号。 ScriptEngineMinorVersion 函数 返回使用的脚本引擎的次版本号。 Second 函数 返回时间的秒数,取值范围为 0 至 59。 Select Case 语句 根据表达式的值,在若干组语句选择一组执行。 Set 语句 将对象引用赋予变量或属性。 Sgn 函数 返回表示数的符号的整数。 Sin 函数 返回角度的正弦值。 Source 属性 返回最早出错的对象或应用程序的名称。 Space 函数 返回由指定数量的空格组成的字符串。 Split 函数 返回下限为 0 的、由指定数量的子串组成的一维数组。 Sqr 函数 返回数的平方根。 StrComp 函数 返回反映字符串比较结果的值。 字符串常数 字符串常数的列表。 String 函数 返回重复的字符串,达到指定的长度。 StrReverse 函数 返回一字符串,其字符的顺序与指定的字符串的顺序相反。 Sub 语句 声明形成 Sub 过程体的名称、参数和代码。 减法运算符 (-) 求两数之差,或表示某数值表达式的相反数。 Tan 函数 返回角度的正切值。 终结事件 发生在相关类的实例终结之时。 Test 方法 根据指定的字符串,执行正则表达式的搜索。 Time 函数 返回反映当前系统时间的日期子类型的变体。 Timer 函数 返回时经子夜 12:00 AM 后的秒数。 TimeSerial 函数 返回含有指定时分秒时间的日期子类型的变体。 TimeValue 函数 返回含有时间的日期子类型的变体。 Trim 函数 返回去掉前导空格或末尾空格的字符串副本。 三态常数 在代码使用,以便表示每个显示的值。 True 其值为 -1 的关键字。 TypeName 函数 返回一字符串,它提供了关于变量的变体子类型信息。 UBound 函数 返回指定维数数组的最大有效下标。 UCase 函数 返回的字符串已经被转换为大写字母。 Value 属性 返回在搜索字符串已发现匹配的值或正文。 VarType 常数 定义变体子类型的常数列表。 VarType 函数 返回标识变体子类型的数值。 VBScript 常数 在 VBScript 提供不同种类的常数。 Weekday 函数 返回表示星期几的数值。 WeekdayName 函数 返回表示星期几的字符串。 While...Wend 语句 只要给定的条件为 True,便执行一串语句。 With 语句 对单个的对象执行一串语句。 Xor 运算符 执行两个表达式的逻辑“异或”运算。 Year 函数 返回表示年份的数值。 语言元素 说明 颜色常数 颜色常数列表。 比较常数 用于比较运算的常数列表。 日期和时间常数 定义星期几和用于日期和时间运算的其他常数的常数列表。 日期格式常数 用于日期和时间格式的常数列表。 杂项常数 不能纳入任何其他类的常数列表。 MsgBox 常数 和 MsgBox 函数一起使用的常数列表。 字符串常数 字符串常数列表。 三态常数 使用代码,以便表示每个显示的值。 VarType 常数 定义变体子类型的常数列表。 VBScript 常数 在 VBScript 提供不同种类的常数。 语言元素 说明 初始化事件 发生在相关类的实例被创建时。 终结事件 发生在相关类的实例被终结时。 语言元素 说明 Abs 函数 返回数的绝对值。 Array 函数 返回含有数组的变体。 Asc 函数 返回字符串首字母的 ANSI 字符码。 Atn 函数 返回数值的反正切。 CBool 函数 返回已被转换为 Boolean 子类型的变体的表达式。 CByte 函数 返回已被转换为字节子类型的变体的表达式。 CCur 函数 返回已被转换为货币子类型的变体的表达式。 CDate 函数 返回已被转换为日期子类型的变体的表达式。 CDbl 函数 返回已被转换为双精度子类型的变体的表达式。 Chr 函数 返回与指定的 ANSI 字符码相关的字符。 CInt 函数 返回已被转换为整形子类型的变体的表达式。 CLng 函数 返回已被转换为Long子类型的变体的表达式。 Cos 函数 返回角度的余弦。 CreateObject 函数 创建并返回对“自动”对象的引用。 CSng 函数 返回已被转换为单精度子类型的变体的表达式。 CStr 函数 返回已被转换为字符串子类型的变体的表达式。 Date 函数 返回当前系统日期。 DateAdd 函数 返回的日期已经加上了指定的时间间隔。 DateDiff 函数 返回两个日期之间的间隔。 DatePart 函数 返回给定日期的指定部分。 DateSerial 函数 返回指定年月日的日期子类型的变体。 DateValue 函数 返回日期子类型的变体。 Day 函数 返回日期,取值范围为 1 至 31。 Eval 函数 计算表达式并返回结果。 Exp 函数 返回 e (自然对数的底) 的多少次方。 Filter 函数 根据指定的筛选条件,返回含有字符串数组子集的、下限为 0 的数组。 Fix 函数 返回数的整数部分。 FormatCurrency 函数 返回的表达式为货币值格式,其货币符号采用系统控制面板定义的。 FormatDateTime 函数 返回的表达式为日期和时间格式。 FormatNumber 函数 返回的表达式为数字格式。 FormatPercent 函数 返回的表达式为百分数(乘以 100)格式,后面有 % 符号。 GetObject 函数 返回从文件对“自动”对象的引用。 GetRef 函数 返回对能够绑定到一事件的过程的引用。 Hex 函数 返回一字符串,代表一个数的十六进制值。 Hour 函数 返回表示钟点的数字,取值范围为 0 至 23。 InputBox 函数 在对话框显式一提示,等待用户输入文本或单击按钮,并返回文本框的内容。 InStr 函数 返回一个字符串在另一个字符串首次出现的位置。 InStrRev 函数 返回一个字符串在另一个字符串出现的位置,但是从字符串的尾部算起。 Int 函数 返回数的整数部分。 IsArray 函数 返回 Boolean 值,反映变量是否为数组。 IsDate 函数 返回 Boolean 值,反映表达式能否转换为日期。 IsEmpty 函数 返回 Boolean 值,反映变量是否已被初始化。 IsNull 函数 返回 Boolean 值,反映表达式是否含有无效数据(Null)。 IsNumeric 函数 返回 Boolean 值,反映表达式能否转换为数字。 IsObject 函数 返回 Boolean 值,反映表达式是否引用了有效的“自动”对象。 Join 函数 返回通过连接许多含有数组的子串而创建的字符串。 LBound 函数 返回指定维数数组的最小有效下标。 LCase 函数 返回的字符串已被转换为小写字母。 Left 函数 返回字符串最左边的指定数量的字符。 Len 函数 返回字符串的字符数或存储变量所需的字节数。 LoadPicture 函数 返回图片对象。只用于 32 位平台。 Log 函数 返回数的自然对数。 LTrim 函数 返回去掉前导空格的字符串。 Mid 函数 从字符串返回指定数量的字符。 Minute 函数 返回分钟数,取值范围为 0 至 59。 Month 函数 返回表示月份的数,取值范围为 1 至 12。 MonthName 函数 返回表示月份的字符串。 MsgBox 函数 在对话框显示消息,等待用户单击按钮,并返回表示用户所击按钮的数值。 Now 函数 返回计算机的当前系统日期和时间。 Oct 函数 返回表示该数八进制数值的字符串。 Replace 函数 返回一字符串,其指定的子串已被另一个子串替换了规定的次数。 RGB 函数 返回代表 RGB 颜色值的数字。 Right 函数 返回字符串最右边的指定数量的字符。 Rnd 函数 返回随机数。 Round 函数 返回指定位数、四舍五入的数。 RTrim 函数 返回去掉尾部空格的字符串副本。 ScriptEngine 函数 返回反映使用的脚本语言的字符串。 ScriptEngineBuildVersion 函数 返回使用的脚本引擎的编译版本号。 ScriptEngineMajorVersion 函数 返回使用的脚本引擎的主版本号。 ScriptEngineMinorVersion 函数 返回使用的脚本引擎的次版本号。 Second 函数 返回秒数,取值范围为 0 至 59。 Sgn 函数 返回反映数的符号的整数。 Sin 函数 返回角度的正弦值。 Space 函数 返回由指定数量的空格组成的字符串。 Split 函数 返回下限为 0 的、由指定数量的子串组成的一维数组。 Sqr 函数 返回数的平方根。 StrComp 函数 返回反映字符串比较结果的数值。 String 函数 返回指定长度的重复字符串。 StrReverse 函数 返回一字符串,其字符的顺序与指定的字符串的顺序相反。 Tan 函数 返回角度的正切值。 Time 函数 返回表示当前系统时间的“日期”子类型的“变体”。 Timer 函数 返回时经子夜 12:00 AM 后的秒数。 TimeSerial 函数 返回含有指定时分秒时间的日期子类型的变体。 TimeValue 函数 返回含有时间的日期子类型的变体。 Trim 函数 返回去掉前导空格或尾部空格的字符串副本。 TypeName 函数 返回一字符串,它提供了关于变量的变体子类型信息。 UBound 函数 返回指定维数数组的最大有效下标。 UCase 函数 返回的字符串已经被转换为大写字母。 VarType 函数 返回标识变体子类型的数值。 Weekday 函数 返回表示星期几的数值。 WeekdayName 函数 返回表示星期几的字符串。 Year 函数 返回表示年份的数值。 语言元素 说明 Clear 方法 清除 Err 对象的所有属性设置。 Execute 方法 根据指定的字符串,执行正则表达式的搜索。 Raise 方法 产生运行时错误。 Replace 方法 替换在正则表达式搜索发现的正文。 Test 方法 根据指定的字符串,执行正则表达式的搜索。 语言元素 说明 类对象 提供对于已创建的类的事件的访问。 字典对象 存储数据键、项目对的对象。 Err 对象 含有关于运行时错误的信息。 FileSystemObject 对象 提供对计算机文件系统的访问。 Match 对象 提供访问匹配正则表达式的只读属性。 Matches 集合 正则表达式匹配对象的集合。 RegExp 对象 提供简单正则表达式的支持。 语言元素 说明 加法运算符 (+) 两数相加。 And 运算符 执行两个表达式的逻辑连接。 赋值运算符 (=) 给变量或属性赋值。 连接运算符 (&) 强制两个表达式的字符串连接。 除法运算符 (/) 两数相除,返回的商为浮点数格式。 Eqv 运算符 使两个表达式相等。 自乘运算符 (^) 指数函数,幂为自变量。 Imp 运算符 执行两个表达式的逻辑隐含。 整数除法运算符 (\) 两数相除,返回的商取整数。 Is 运算符 比较两个对象引用变量。 Mod 运算符 两数相除,仅返回余数。 乘法运算符 (*) 两数相乘。 取反运算符 (-) 表示数值表达式的相反数。 Not 运算符 执行表达式的逻辑“非”运算。 运算符优先级 表示各种 VBScript 运算符的优先顺序的列表。 Or 运算符 执行两个表达式的逻辑“或”运算。 减法运算符 (-) 求两数之差,或表示数值表达式的相反数。 Xor 运算符 执行两个表达式的逻辑“异或”运算。 语言元素 说明 Description 属性 返回或设置某个错误的说明性字符串。 FirstIndex 属性 返回匹配搜索字符串的位置。 Global 属性 设置或返回 Boolean 值。 HelpContext 属性 设置或返回帮助文件主题的上下文 ID。 HelpFile 属性 设置或返回帮助文件的全路径。 IgnoreCase 属性 设置或返回 Boolean 值指示模式搜索是否区分大小写。 Length 属性 返回已发现在搜索字符串匹配的长度。 Number 属性 返回或设置表示错误的数值。 Pattern 属性 设置或返回正搜索的正则表达式的模式。 Source 属性 返回或设置最早发生错误的对象或应用程序的名称。 Value 属性 返回已发现在搜索字符串匹配的值或正文。 语言元素 说明 Call 语句 将控制移交 Sub 或 Function 过程。 Class 语句 声明类名。 Const 语句 声明用于字母值的常数。 Dim 语句 声明变量并分配存储空间。 Do...Loop 语句 当条件为 True 或者当条件变为 True 时,重复一语句块。 Erase 语句 重新初始化固定数组的元素并重新分配动态数组的存储空间。 Execute 语句 执行一条或更多的指定语句。 Exit 语句 退出 Do...Loop、For...Next、 Function 或 Sub 代码块。 For...Next 语句 以规定的次数重复一组语句。 For Each...Next 语句 对于数组或集合的每一个元素,重复一组语句。 Function 语句 声明形成 Function 过程体的名称、参数和代码。 If...Then...Else 语句 根据表达式的值,有条件地执行一组语句。 On Error 语句 启用错误处理。 Option Explicit 语句 强制显式声明脚本的所有变量。 Private 语句 声明私有变量并分配存储空间。 PropertyGet 语句 声明在窗体属性过程获取(返回)属性值的名称,参数和代码。 PropertyLet 语句 声明在窗体属性过程指定属性值的名称,参数和代码。 PropertySet 语句 声明在窗体属性过程设置引用到对象的名称,参数和代码。 Public 语句 声明公有变量并分配存储空间。 Randomize 语句 初始化随机数发生器。 ReDim 语句 声明动态数组变量并在过程级上分配或重新分配存储空间。 Rem 语句 在程序表示注释。 Select Case 语句 根据表达式的值,在若干组语句选择一组执行。 Set 语句 给变量或属性分配一个对象引用。 Sub 语句 声明形成 Sub 过程体的名称、参数和代码。 While...Wend 语句 只要给定的条件为 True,便执行一串语句。 With 语句 对单个的对象执行一串语句。
VBScript 语言参考 特性信息 字母顺序关健字列表 常数 错误 事件 函数 方法 对象 运算符 属性 语句 欢迎使用 VBScript 语言参考 通过对信息进行分组,可以使您方便地研究 Visual Basic 脚本的各个主题。 可以在“字母顺序关键字列表”找到 VBScript 语言的所有主题。如果只需要查看某个主题(例如对象),则有对该主题进行详细说明的章节可供查阅。 如何操作呢?单击左边任意一个标题,即可显示该标题所包含的项目列表。从该列表选择要查看的主题。打开所选主题之后,就能够很容易地链接到其他相关章节。 请尽情浏览 JScript 语言参考的各个部分,您会发现 VBScript 语言有多么丰富。 特性 说明 版本信息 按主机应用排序的 VBScript 版本列表和按版本排序的特性列表. VBScript 特性 VBScript 最新特性列表 未包含在 VBScript VBA 特性 VBScript 最新特性列表:未包含在 VBScript 的应用程序编辑。 未包含在 VBA VBScript 特性 未包含在 Visual Basic VBScript 特性列表:应用程序编辑。 Microsoft Scripting 运行时特性 VBScript 最新的 Scripting 运行时特性列表。 语言元素 说明 Abs 函数 返回数的绝对值。 加法运算符 (+) 两数相加。 And 运算符 执行两个表达式的逻辑连接。 Array 函数 返回含一数组的 变体 。 Asc 函数 返回字符串首字母的 ANSI 字符代码。 赋值运算符 (=) 给变量或属性赋值。 Atn 函数 返回数的反正切值。 Call 语句 将控制移交 Sub 或 Function 过程。 CBool 函数 返回已被转换为 Boolean 子类型的变体的表达式。 CByte 函数 返回已被转换为字节子类型的变体的表达式。 CCur 函数 返回已被转换为货币子类型的变体的表达式。 CDate 函数 返回已被转换为日期子类型的变体的表达式。 CDbl 函数 返回已被转换为双精度子类型的变体的表达式。 Chr 函数 返回指定 ANSI 字符码的字符。 CInt 函数 返回已被转换为整数子类型的变体的表达式。 Class 对象 提供对已创建的类的事件的访问。 Class 语句 声明类名 Clear 方法 清除 Err 对象的所有属性设置。 CLng 函数 返回已被转换为 Long 子类型的变体的表达式。 颜色常数 颜色常数列表。 比较常数 用于比较运算的常数列表。 连接运算符 (&) 强制两个表达式的字符串连接。 Const 语句 声明用于字母值的常数。 Cos 函数 返回角度的余弦值。 CreateObject 函数 创建并返回对“自动”对象的引用。 CSng 函数 返回已被转换为单精度子类型的变体的表达式。 CStr 函数 返回已被转换为字符串子类型的变体的表达式。 日期和时间常数 在日期和时间运算用来定义星期几和其他常数的常数列表。 日期格式常数 用于日期和时间格式的常数列表。 Date 函数 返回当前系统日期。 DateAdd 函数 返回加上了指定的时间间隔的日期。 DateDiff 函数 返回两个日期之间的间隔。 DatePart 函数 返回给定日期 的指定部分。 DateSerial 函数 返回指定年月日的 日期子类型的变体 。 DateValue 函数 返回日期子类型的变体 。 Day 函数 返回日期,取值范围为 1 至 31。 Description 属性 返回或者设置说明某个错误的字符串。 Dictionary 对象 存储数据键、项目对的对象。 Dim 语句 声明变量并分配存储空间。 除法运算符 (/) 两数相除并以浮点数格式返回商。 Do...Loop 语句 当条件为 True 或者当条件变为 True 时,重复一语句块。 Empty 表示尚未初始化的变量值。 Eqv 运算符 使两个表达式相等。 Erase 语句 重新初始化固定数组的元素并重新分配动态数组的存储空间。 Err 对象 含有关于运行时错误的信息。 Eval 函数 计算并返回表达式的值。 Execute 方法 根据指定的字符串,执行正则表达式的搜索。 Execute 语句 执行单个或更多的指定语句。 ExecuteGlobal 语句 执行一个或多个在全局脚本名字空间所指定的语句。 Exit 语句 退出 Do...Loop、For...Next
VBScript常用函数大全
Abs (数值)
Array (以逗点分隔的数组元素)
Asc (字符串)
CBool(表达式)
CDate (日期表达式)
CDbl(表达式)
Chr ( ANSI 字码)
CInt (表达式)
CLng (表达式)
CSng (表达式)
CStr (表达式)
Date ( )top
DateAdd ( I , N , D )
DateDiff (I , D1 , D2[,FW[,FY]])
DatePart (I,D,[,FW[,FY]])
Dateserial (year,month,day)
DateValue ( 日期的字符串或表达式 )
Day( 日期的字符串或表达式 )
Fix( 表达式 )top
Hex( 表达式 )top
Hour( 时间的字符串或表达式 )
InStr ([start,]string1,string2[,compare]) top
InstrRev ([start,]string1,string2[,compare])
Int ( 表达式 )
IsArray ( 变数 )
IsDate ( 日期或字符串的表达式 )
IsEmpty ( 变数 )
IsNull ( 变数 )
IsNumeric ( 表达式 )
LCase ( 字符串表达式 ) top
Left( 字符串表达式 ,length)
Len( 字符串表达式 变量 )
VBScript常用函数汇总:
LTrim ( 字符串表达式 )
Mid( 字符串表达式 ,start[,length]) top
Minute( 日期的字符串或表达式 )
Month(日期的字符串或表达式)
MonthName(month[,abbreviate])
Now()
Oct()
Replace( 字符串表达式,findnreplacewith[,start[,count[,compare]]])
Right( 字符串表达式 ,length)
Rnd [(number)]
Round( 数值表达式 [,D])
RTrim ( 字符串表达式 )
Second( 时间的字符串或表达式 )top
Space( 重复次数 )
String( 重复次数,待重复的字 )
StrReverse (String(10,71))
Time()
TimeSerial (hour,minute,second)
TimeValue ( 日期的字符串或表达式 )
Trim( 字符串表达式 )
UCase ()top
VarType ( 变数 )
Weekday( 日期表达式 ,[FW])
WeekDayName (W,A,FW)
Year()
等。
arcgis工具总结 1. 要素的剪切与延伸 实用工具 TASK 任务栏 Extend/Trim feature 剪切所得内容与你画线的方向有关。 2. 自动捕捉跟踪工具 点击Editor工具栏Snapping来打开Snapping Environment对话框 捕捉设置有3个选项, vertex edge end 分别是节点、终点、和边,选择end应该会捕捉端点 3. 图斑面积计算及长度计算 应用工具CALCULATE AREA 或者使用VBA代码实现 新建字段并开启Advanced 写入代码,面积计算: Dim Output as double Dim pArea as Iarea Set pArea = [shape] 在最后的一个空格里面写入代码(即:字段名)pArea.area 长度计算: Dim Output as double Dim pCurve as ICurve Set pCurve = [shape] Output = pCurve.Length 4. 剪切图斑 Task任务栏 cut polygon feature工具,需要sketch工具画线辅助完成 5. 配准工具 Spatial Adjustment 工具 需要注意先要 set adjustment data 然后配准 6. 影像校正 Georeferncing工具 7. 要素变形 Task 工具条的reshape feature 配合sketch工具 8. 添加节点 Modify feature 在需要加点的地方右键单击insert vertex 也可单击右键选择properties 打开edit sketch properties对话框,在坐标点位置右键插入节点 9. 共享多边形生成 Auto-complete polygon 工具生成共享边的多边形,配合snapping environment更好。 10. 画岛图 1).使用任务栏的sketch工具,当画完外面的一圈时,右键 选择finish part 然后画间的部分 再右键finish sketch 2).分别画连个图斑然后应用Editor 工具栏的工具先intersect(图斑重叠的地方创建一个新的图斑)然后Clip(剪切)即可。(补充其他工具:Union,把多个图斑联合起来并形成一个新的连接在一起的图斑,原图斑无变化,联合后的图斑不继承原任何图斑的属性;Merge,把多个图斑合并到其一个图斑上并继承它的属性,原图斑变化;Split用于间断线段,但得知道具体的长度,如果不知道那么长度或者没必要那么精确就直接用Eeitor工具栏的Split tool工具 ) 11. 连接外界属性数据(如:.xsl文件等) 利用JOIN 工具可以方便的实现与外界属性数据的关联,但这种关联是依赖于外界数据库本身的,需经过重新导出之后即完全保存在相应图层属性页。在做外联如EXCEL等的时候对数据有一些要求,确保第一行包含字段名,这些字段名不能超过十个字母,不能出现特殊字符。最好把EXCEL保存为.csv文件去除一些不兼容的内容再连接。 转载ESRI论坛Lucy1114帖子说明: 12. 导出Shape格式为其他软件识别的打印格式如JEPG等格式 FILE/EXPORT MAP 然后选择相应的图片格式,此时也可设置答应的分辨率 pdi 13. 建立注记层 方法一.carvert to Ananotation ,方法二.Draw工具条 方法三.从其他地方转换注记图层 14. 查看特定区域范围内的某种地物分布情况 Selection / select by location 15. 如何用面生成线 先把数据转成coverage格式,workstion里有Centerline命令。 另外ArcToolBox->Data Management Tools->Generalization->Collapse Dual Lines To Centerline也行。不过以上做法要求边界是双线。你必须先把面转成线,特别是参数的设置。也可以尝试下sketch工具条的midpoint tool 后面有详细的讲解过程。 16. 根据坐标数据生成点 方法一. :[工具] >>[添加XY 数据],在“添加XY 数据”窗口,选择已添加的 XY 数据表,指定X 坐标字段(东经)和Y 坐标字段(北纬),按“编辑”按钮,选择坐标系统。一般GPS系统采用的坐标系统为WGS_1984。 方法二.直接用TOOL工具下的ADD XY 可以单个加点 17. 用任意多边形剪切栅格数据(矢量数据转换为栅格数据) 在ArcCatalog下新建一个要素类(要素类型为:多边形),命名为:ClipPoly.shp 在ArcMap,加载栅格数据:Landuse、和ClipPoly.shp 打开 编辑器工具栏,开始编辑ClipPoly ,根据要剪切的区域,绘制一个任意形状的多 边形。打开属性表,修改多边形的字段“ID”的值为1,保存修改,停止编辑。 打开 空间分析工具栏 GIS软件应用-ArcGIS 执行命令:--- 指定栅格大小:查询要剪切的栅格图 层Landuse 的栅格大小,这里指定为25 指定输出栅格的名称为路径 执行命令: - 构造表达式:[Landuse]*[polyClip4-polyclip4] ,执行栅格图层:Landuse 和 用以剪切 的栅格polyClip4 之间的相乘运算 GIS软件应用-ArcGIS 得到的结果即是以任意多边形剪切的Landuse数据 18. 栅格重分类(Raster Reclassify) 通过栅格重分类操作可以将连续栅格数据转换为离散栅格数据 19. Eliminate合并破碎多边形 以下的操作将会把面积小于10000 平方米的多边形合并到周围与之有最长公共 边的多边形: 执行菜单命令[选择]>>[通过属性选择],查询”Area”Masking Tools->Intersecting Layer Masks,为注记创建模版,模版的大小用参数Margin来决定 3).右键点击数据框,在环境菜单选择高级绘制选项(Advanced Drawing Options),用注记的模版图层去遮盖线图层,确定 23.同一图层使用Clip实现图斑的无缝拼接 当一个图斑的边界确定,需要实现两个图斑的无缝拼接时,可以把图斑拉伸覆盖确定边界的图斑的一部分,然后用下面的图斑剪区上面的图斑。 方法二:图斑之间有小的缝隙,可以先在缝隙上任意补画一个图斑,然后合并(merge)图斑,最后再剪切(Clip)即可得到无缝的图斑。 如下图所示: 24.利用两个相交图斑创建新图斑。 两个图斑都选然后 Eidtor 工具条intersect,此方法原图斑不会被接切。 25.属性表选择集与非选择集的切换 Options/switch selection 26.快速把选择的要素另存为一个图层并加载进来。 先选责需要另存图层的要素(直接选择或者属性表),然后在图层上右键Selection/create Layer From Selected Features。 (以前都是直接export竟然没有发现) 27.利用Hyperlinks丰富数据库,为其添加超链接。 单击rowse工具栏Identify按钮。 单击地图一个要素,在Identify Results窗口右击需要设置超链接的要素,然后点击Add Hyperlink菜单。若要将一个Web页加为超链接,单击项,并输入URL。要链接到一个文档,单击Link to a Document,并输入文档路径名。 单击Tools工具栏的Hyperlink工具,并单击图上某一个要素即可实现。 使用一个属性字段作为超链 在内容表右击包含一个超链接字段的图层,然后点击properties ,单击Display选项卡。选Supprt Hyper3. Hyperlinks using field选项,单击下拉箭头并点击一个字段。 单击Document or URL。单击OK,单击Tools的Hyperlink按钮,将鼠标指移到一要素上并单击以显示其超链接。 28.Arcmap的SQL语言 当查询ArcInfo coverages, shape文件, INFO表以及dBASE表时,SQL表达式的字段名必须用双引号扩起。如:“AREA”,如果查询的是个人地理数据库数据,则需要将字段名包含在方括号内,如:[AREA],如果查询的是ArcSDE地理数据库数据或是ArcIMS要素类或ArcIMS影象服务子层的数据,则不需要将字段名括起,如:AREA 有些运算符和关键字也可能有所变化。 在查询表达式,字符串必须加单引号,例如: [STATE_NAME]=‘California’ 除个人地理数据库要素类和表之外,查询表达式的字符串是区分字母大小写的。如果搜索不需要区分大小写,可以使用SQL函数将所有的值都转换成大写或者小写。对于基于文件的数据源,例如shape文件或coverages,既可以使用UPPER函数,也可以使用LOWER函数。 例如下面这个查询将选出那些姓名的最后为Jones或JONES的顾客。 UPPER("LAST_NAME") = 'JONES' 可以用LIKE运算符(不是 = 运算符)与通配符一起构建部分字符串查询。 例如,表达式 [STATE_NAME] LIKE 'Miss*'将在美国州名选择Mississippi和Missouri。 *表示多个字符。 还比如,查询表达式 [OWNER_NAME] LIKE '?atherine smith' 将找出Catherine Smith和Katherine Smith。 ?表示单个字符。通配符的使用依赖于不同的数据库。例子使用的通配符只适用于个人地理数据库。 可以使用NULL关键字来选择那些在指定字段值为NULL的要素和记录。通常,NULL关键字的前面总有IS或IS NOT。 29.Select by location小结 按位置查找要素的方法 使用按位置选择(Select By Location) 对话框,可以根据要素间的相对空间位置进行查找。可以使用多种方法,查找在同一图层或不同图层间相互邻近或叠置的点、线、多边形等要素。 被…跨越边界(Are crossed by the outline of) 利用这种方法,选择被另一图层要素覆盖的某个图层上的要素。例如,搜索道路跨越的荒地,得到的结果是道路跨越其边界的所有荒地。 相交(Intersect) 与Are crossed by the outline of类似,但是该方法可以选择与参照要素接连的要素。例如,选择与道路相交的荒地,选择的结果将包括该道路在其边界范围之内或在其边界之上的所有荒地。 在…距离范围内(Are within a distance of) 这一方法将选择同一图层或不同图层上相邻或邻近的要素。例如,现有一个包括清洁井和污染井的图层,使用该方法可以找出距离污染井500米范围内的所有清洁井。同样,也可以找出距离污染井500米范围内其他图层上的水库和农田。还可以用该选项选择与其他要素相毗邻的要素。例如,假如用户已选定了公司可能购买的地块,现在想获取邻近地块的信息。这种情况下,利用该选项选择选地块零距离范围内的所有地块即可。 心在…里(Have their center in) 这种方法选择某一图层上的要素,其心点落在另一图层要素。 完全在…内(Are completely within) 这种方法选择完全落在另一图层多边形内部的某一图层上的要素,例如,选择林区里面的湖泊。通过指定一个缓冲距离,可以选择落于多边形内部并距离多边形边界一定范围内的所有要素。例如,选择林区内部500米范围内的湖泊。 完全包含(Completely contain) 这种方法选择某一图层上完全包含另一图层上的要素的多边形。例如,选择内部包含湖泊的林区。通过指定一个缓冲距离,可以选择在其内部一定范围内包含要素的多边形。例如,对湖泊做缓冲区,可以选择距离湖泊500米范围内的林区。 与…有公共线段(Share a line segment with) 这种方法选择那些与其他要素具有公共线段、顶点或节点的要素。 与…等同(Are identical to) 这种方法选择与另一图层某一要素具有同样几何形状的所有要素。这时,要素类型必须相同。举个例子:必须用多边形选择多边形,用线段选择线段,用点选择点。 包含(Contain) 这种方法选择某一图层包含另一图层要素的要素。这种方法与完全包含(Completely contain)方法的区别在于:要素间的边界可以接触。例如,使用包含(Contain)方法,即使湖泊的边界和包含该湖泊的森林的边界接触,森林也会被选。但是在用完全包含(Completely contain)方法时,森林是不会选的。 包含于(Are Contained by) 这种方法选择某一图层被另一图层要素包含的要素。例如,选择被乡村包围的城市。这种方法和完全包含于(Are completely within)方法的区别在于,要素的边界可以接触。 与…接触(Touch the boundary of) 如果使用包含线的图层来选择要素,则该方法将选择那些与此图层里的线有公共线段,顶点或端点(节点)的线和多边形要素。如果跨越了线,则这些线和多边形将不会被选。 如果使用包含多边形的图层来选择要素,则该方法将选择那些与此图层里的多边形边界有公共线段或顶点的线和多边形要素。如果跨越了多边形边界,则这些线和多边形将不会被选。 31. 将选的要素放大至整个窗口 在内容表右击包含选要素的图层,单击Selection菜单,并单击Zoom To Selected Features子菜单。 选要素将放大至整个ArcMap窗口。 32.显示选要素的属性 在内容表右击选要素所在图层,单击Open Attribute Table,单击Show Selected records。 窗口显示出选要素的属性记录。也可以打开属性表在select和all之间切换。 33. 通过单击要素添加文本 1). 在内容表,右击需要添加标注的图层,单击Properties。 2). 单击Labels选项卡。 3). 单击Label Field下拉箭头,单击作为标注的字段。 4). 单击OK。 5). 单击Draw工具条上的Label按钮。 应该是只需单击下拉箭头选择Label按钮。 6). 单击Place label at position clicked。 如果选择了Automatically find best placement,ArcMap会自动的为标注寻找合适的位置。 7). 单击Choose a style,然后单击需要的标注样式。 8). 在需要标注的要素上单击鼠标,标注就添加上去了。 (先在Draw工具条下新建标注组方便管理,New Annotation Group) 34. 标注工具条和标注管理器 如果图层有一些要素需要指定特殊的标注属性,需要在标注管理器生成其它的标注类。 点击左侧面板上的一个图层,在右侧面板上为其添加一个新的标注类。 个人认为此方法虽然没有转为注记后的标注灵活,但却可以方便的实现自动相对智能化的标注,相比之下更省心,提高效率。 35. 在进行地图查询或编辑的时候为什么会总是选所有的图层 诀窍在这里(虽然是一点点小问题,但当我第一次遇到这个问题时却花费了我不少时间,甚至于怀疑自己的数据有问题) 36.建立拓扑关系检查图斑 先根据需要在Catalog建立相应的拓扑关系规则,然后在Arcmap进行拓扑处理,辅助工具条Topolygon,下图所示为重叠图斑检查。(也可以在Arctoolbox下的Data Management tools/topology来做) 有关geodatabase的topology规则 多边形topology 1).must not overlay:单要素类,多边形要素相互不能重叠 2).must not have gaps:单要素类,连续连接的多边形区域间不能有空白区(非数据区) 3).contains point:多边形+点,多边形要素类的每个要素的边界以内必须包含点层至少一个点 4).boundary must be covered by:多边形+线,多边形层的边界与线层重叠(线层可以有非重叠的更多要素) 5).must be covered by feature class of:多边形+多边形,第一个多边形层必须被第二个完全覆盖(省与全国的关系) 6).must be covered by:多边形+多边形,第一个多边形层必须把第二个完全覆盖(全国与省的关系) 7).must not overlay with:多边形+多边形,两个多边形层的多边形不能存在一对相互覆盖的要素 8).must cover each other:多边形+多边形,两个多边形的要素必须完全重叠 9).area boundary must be covered by boundary of:多边形+多边形,第一个多边形的各要素必须为第二个的一个或几个多边形完全覆盖 10).must be properly inside polygons:点+多边形,点层的要素必须全部在多边形内 11).must be covered by boundary of:点+多边形,点必须在多边形的边界上 线topology 1).must not have dangle:线,不能有悬挂节点 2).must not have pseudo-node:线,不能有伪节点 3).must not overlay:线,不能有线重合(不同要素间) 4).must not self overlay:线,一个要素不能自覆盖 5).must not intersect:线,不能有线交叉(不同要素间) 6).must not self intersect:线,不能有线自交叉 7).must not intersect or touch interrior:线,不能有相交和重叠 8).must be single part:线,一个线要素只能由一个path组成 9).must not covered with:线+线,两层线不能重叠 10).must be covered by feature class of:线+线,两层线完全重叠 11).endpoint must be covered by:线+点,线层的终点必须和点层的部分(或全部)点重合 12).must be covered by boundary of:线+多边形,线被多边形边界重叠 13).must be covered by endpoint of:点+线,点被线终点完全重合 14).point must be covered by line:点+线,点都在线上 Topology工具条及功能介绍: 37.给多个要素同一赋值 选你需要同一赋值的是所有图斑,然后点击Atrributes,此时出现属性修改对话框,点击根目录是对所有要素同一赋值,点击下面的支目录则可以分别赋值。(也可以用字段计算器实现) 38.如何根据确定的点画出以他相应的点 例如:我在地图上已经指导了一个一直点,而其他的点在地图上都是以他为心画出来的。学校  SE60度,140米  意思是学校在心点南偏东60度,距离是140米,这样的点在arcmap怎么加呢?我的方法有二分别如下。 1). 确定已有一个点图层,其有学校,然后: 对该图层开始编辑 选择工具栏editor---direction-distance tool 以心点为心,先画角度线(arcmap左下角会有角度提示),再画距离/半径(注:画的过程点击A键可以输入角度值,点击D键可以输入距离值) 确定,即可 如果找不到direction-distance tool 的同志请看下面 Direction-distance tool is here 第二种方法就是直接编写代码实现 下面是一段示例的VBA代码(本段代码作者:GIS空间站 knight_sl) Option Explicit Dim dPoint(2, 1) As Double Sub aaa() Call bbb Dim aa As IMxDocument Set aa = ThisDocument Dim pFLyr As IFeatureLayer Set pFLyr = aa.FocusMap.Layer(0) Dim pFCsr As IFeatureCursor Dim pFt As IFeature Set pFCsr = pFLyr.FeatureClass.Update(Nothing, False) Set pFt = pFCsr.NextFeature Dim pPoint As IPoint Set pPoint = pFt.ShapeCopy Dim pNewPoint As IPoint Dim X0 As Double, Y0 As Double Dim X As Double, Y As Double Dim dAngle As Double Dim i As Long For i = 0 To UBound(dPoint, 1) Set pFt = pFLyr.FeatureClass.CreateFeature Set pNewPoint = New Point dAngle = dPoint(i, 0) * 3.14159263579893 / 180 pNewPoint.X = dPoint(i, 1) * Cos(dAngle) + pPoint.X pNewPoint.Y = dPoint(i, 1) * Sin(dAngle) + pPoint.Y Set pFt.Shape = pNewPoint pFt.Store Next Set pFLyr = Nothing Set pFCsr = Nothing Set pFt = Nothing Set pPoint = Nothing Set pNewPoint = Nothing End Sub Sub bbb() '定义新加三个点的角度和距离 dPoint(0, 0) = 10 dPoint(0, 1) = 150 dPoint(1, 0) = 30 dPoint(1, 1) = 170 dPoint(2, 0) = 120 dPoint(2, 1) = 200 End Sub 这方法做起来需要一点编程经验,但是比上面那一个一个的画的方法要先进多了,可以把所有的点录入同时画出来。 如果你不会VBA编程,请看下面: 这是ArcGIS VBA的程序,运行的方法: 1),运行ArcMap,加载所需图层; 2),Tools菜单/Macros(宏)/Visual Basic Editor(VB编辑器),这样打开VB编辑器 3),双击打开VB编辑器左上工程资源管理器的Project/ArcMap对象/ThisDocument,把上面的代码粘进去。注意看首行 Option Explicit如果有两行,就删除一行。 4),点击VB编辑器工具栏的运行按钮运行(或菜单 运行/运行子过程),就可以了,再激活ArcMap可以看到发生了什么! 或者还有一种创建宏的方法(不过建议对ArcGIS VBA不大熟的同志不要用这种方法): 1),运行ArcMap,加载所需图层; 2),Tools菜单/Macros(宏)/Macros,这样打开宏编辑器 3),在宏名称输入aaa,确定后,会打开VB编辑器,将看到有一个aaa的过程,没有实体。你把上面的aaa过程的代码粘进去,然后在前面加上 Option Explicit(这个别重复了哈) Dim dPoint(2, 1) As Double 就可以。 4),点击VB编辑器工具栏的运行按钮运行(或菜单 运行/运行子过程),就可以了,再激活ArcMap可以看到发生了什么! 39.这里说道了工具的使用,那么就简单的再介绍下Sketch的几个工具吧 Sketch construction tools的使用: Sketch tool:主要是用来创造线和面特征的节点,在你完成了草图之后,ArcMAP就会增加最后的线段,形成矢量图。 Arc tool:这个主要是帮你创造一个弧段的,选这个工具后,先在弧段起点点一下,然后在弧段高度方向大致位置点一下(这个点是不可见的,只是给你确定弧段的高度),最后在弧段的终点点一下,就形成一条弧段了。 Direction-distance tool:这个主要是从已知某一个方向和某一个距离来确定一个点。首先点一个已知方向的点,这是会有一条线出来,你确定好方向后,再点已知距离的点,这是出来一个圆,确定距离后,直线和圆有交点,这就是你要的点,再上面点一下就ok! Distance-distance tool:这个和上面的一样的道理,只是它都用距离来确定一个点,也就是两个圆确定你要的点。 Endpoint arc tool:这也是创造弧段用的,与Arc tool 工具不同的是,它是先在弧段的起点点一下,然后在弧段的终点点一下,再点一个点确定弧段的半径。个人认为这个工具要比Arc tool工具更精确些。 Intersection tool:就是利用两条直线确定一个点。很简单一用就会! Midpoint tool:确定点的工具,比如马路的点,你可以先点一边,再点马路另一边,这时马路的点自动出现了。 (画道路线太可以试试,不过得是直线道路咯,^_^) Tangent tool:相切弧段工具,它能够在一条线段上画出一条切线,只有你用其他工具画了线段出来时你才可以用这个工具。 Trace tool: 主要是用来在跟踪已存在的特征,比如一栋房子,你要沿房子外围画一条线(比如围墙),那么你使用这个工具就非常方便,首先开始时你必须按O键,设置下跟踪的间距,如100,其还有三个角点的方式:mitered是直角 bevelled 是钝角rounded是圆角。(感觉那效果有点像CAD的偏移咯) 40.如何标注多个字段的属性及分子式标注 Propertis/label field /expression 实例:""& [单位名称] &"" & VbCrLf & " " & [PARCEL_NO] 输出分数线 VbCrLf 换行 效果图: 引用GIS空间站 兔八哥文章详解 以前用ArcGIS Label一般也就在图层的Properties里面定义一下Label字体大小和粗细。这两天遇到一个问题,需要在Label显示多个字段的内容,比如BlockName和CompanyName。其实这个本来不是很难的问题,因为Label支持VBScript,使用[BlockName] & VbNewLine & [CompanyName]。就可以实现标注第一行显示BlockName,第二行显示CompanyName. 现在问题出来了,出图时候希望突出BlockName效果,希望加粗显示,而CompanyName使用一般字体。考虑了很长时间终于从ArcGIS帮助找到了相关的内容,原来Label的VBScript里面支持类似于Html的VBScript标签,比如加粗就是用,上面问题就可以使用下面语句解决: "" & [BlockName] & "" & VbNewLine & [CompanyName] 除了加粗,ArcGIS还支持下面的文本格式标签: Font: "" & [LABELFIELD] & "" Color: "" & [LABELFIELD] & "" "" & [LABELFIELD] & "" Bold: "" & [LABELFIELD] & "" Italic: "" & [LABELFIELD] & "" Underline: "" & [LABELFIELD] & "" All caps: "" & [LABELFIELD] & "" Small caps: "" & [LABELFIELD] & "" Superscript "" & [LABELFIELD] & "" Subscript: "" & [LABELFIELD] & "" Character spacing (%): "" & [LABELFIELD] & "" Word spacing (%): "" & [LABELFIELD] & "" Leading (pts): "" & [LABELFIELD] & " nFZLength Then For i=0 To (nFMLength-nFZLength)/2 strLeftSpace =strLeftSpace +chr(32) strRightSpace =strRightSpace + chr(32) Next End If FindLabel = "" &strLeftSpace; & [OBJECTID]&strRightSpace;& ""&chr;(13)&chr;(10)& [SHAPE_Area] End Function 41.用点构面 ArcToolBox->Samples->Data Management->Features->Create Features From Text File 点组成面,最重要的是点序的排列,因此对数据的组织有一定的要求。 42.几个常用的VBA代码 在ARCGIS属性表增加需要的字段,并自动赋值 使用方法 1打开属性表,选择计算的字段,右点选择Calculate Values;2.选择“是”,进入Field Calculator; 2选择Advance选项; 3 在Pre-Logic VBA Script Code编辑框输入VBA代码; 4在下面编辑框输入赋值部分. 1--点坐标X VBA部分: Dim pGeo As IGeometry Set pGeo = [Shape] Dim pPoint As IPoint Set pPoint = pGeo 赋值部分: pPoint.X 2--点坐标Y VBA部分: 同上 赋值部分: pPoint.Y 坐标值为文件存储的固有值,和是否使用On the Fly坐标表示无关。返回当前显示的坐标值参看8,9 3--多边形周长 VBA部分: Dim pGeo As IGeometry Set pGeo = [Shape] Dim pPolygon As IPolygon Set pPolygon = pGeo 赋值部分: pPolygon.Length 4--多边形面积 VBA部分: Dim pGeo As IGeometry Set pGeo = [Shape] Dim pPolygon As IPolygon Set pPolygon = pGeo Dim pArea As IArea Set pArea = pPolygon 赋值部分: pArea.Area 5--多边形重心X VBA部分: Dim pGeo As IGeometry Set pGeo = [Shape] Dim pPolygon As IPolygon Set pPolygon = pGeo Dim pArea As IArea Set pArea = pPolygon Dim pPoint As IPoint Set pPoint = pArea.Centroid 赋值部分: pPoint.X 6--多边形重心Y VBA部分: 同上 赋值部分: pPoint.Y 7--Polyline长度 VBA部分: Dim pGeo As IGeometry Set pGeo = [Shape] Dim pPolyline As IPolyline Set pPolyline = pGeo Dim pCurve As IPolycurve Set pCurve = pPolyline 赋值部分: pCurve.Length 8--表示点坐标X VBA部分: Dim pDoc As IMxDocument Set pDoc = ThisDocument Dim pSpRef As ISpatialReference Set pSpRef = pDoc.FocusMap.SpatialReference Dim pClone As IClone Set pClone = [Shape] Dim pGeo As IGeometry Set pGeo = pClone.Clone Dim pPoint as IPoint Set pPoint = pGeo pGeo.Project pSpRef 赋值部分: pPoint.X 9--表示点坐标Y VBA部分: 同上 赋值部分: pPoint.Y 坐标值为On the Fly显示的坐标,不是文件存储的固有坐标 10--连续编号 VBA部分: Static lCount as long lCount=lCount+1 赋值部分: lCount (从1开始) lCount-1 (从0开始) 计算面的点 Dim Output As Double Dim pArea As IArea Set pArea = [Shape] Output = pArea.Centroid.X(或y) 当然这是很老的方法了,现在arcgis9.2以后都不需要用VBA啦,右键属性表字段然后直接选择 Caculate Geometry就可以实现比如面积计算,X,Y坐标等的属性赋值了咯。 43. 在同一图层如何对同一要素的不同部分以不同的符号表示 (注:要实现这种渲染需要两段具有不同的属性) 44.自己做arcMAP的图例 在Symbol property Editor进行制作了 1)、先在Style Manager的左侧列表,选择相应的Style文件,ArcGIS默认的符号库文件是ESRI.Style文件,当然也给出了C:\Documents and Settings\........................................目录下用于用户自定义的Style文件 2)、展开Style文件,选择要创建Symbol的类型,如:Fill Symbol(面填充)、Line Symbol(线)、Marker Symbol(点) 然后在右侧的列表鼠标右键->New 3)、在弹出的Symbol Property Editor窗体,进一步选择Marker Symbol的类型,如:Simple Marker Symbol、Picture Marker Symbol等等 4)、这个时候就要根据需要开始设计符号的各种属性了,由于不同种类的Marker Symbol有不同的属性,因此,属性也会不尽相同。 5)、另外介绍一个经常需要或比较使用的步骤,我们需要设计的符号可以由ESRI提供的现有符号组合而成,那么我们则需要添加2个Symbol Layer,然后进行2个Symbol Layer的叠加 6)、分别设置上述2个Symbol Layer的的Symbol的属性,之后确认保存,这样会在Style Manager看到我们新制作的符号 如图: (注:以上内容转载自ESRI社区 gis27) 45.计算属性相同的字段个数 选择要计算的字段然后右键选择Summarize根据相应的要求设置参数即可实现。功能示意如下图: 46.自动提取面的点并加点 Arctoolbox->Feature-> Feature to Point 47.合并属性相同的相邻图斑 使用Dissolve 当选择了create multipart feature时,所有具有相同属性的图斑将链接在一起做为一个图斑。 48.提取图斑转折点坐标 如果没有伪节点那么,选一个线或者面,打开sketch Properties,就可以看到节点坐标。 还有一种方法就是:通过toolbox-datamanagement-feature-FeatureVerticesToPoints得到转折点的图层然后Add XY Coordinates,该点图层的属性表就包含了X,Y字段,将其导出,就得到转折点坐标了。 ArcMap设置.mxd相对路径 复制拷贝地图文档后再次打开会遇到图层前一个!的标识符号,是因为加载图层的相对路径变化了,需要重新指定图层位置。对此将.mxd文档设置为相对路径起到作用,具体做法如下: (1)File-->Document Properties-->打开对话框,点击Data Source Options...按钮; (2)选store relative path names to data sources单选框,并勾选Make relative paths the defalut of...前的复选框。 以上两步操作即可。 在dissolve时,出现 ERROR 000354: The name contains invalid characters Failed to execute (Dissolve). End Time: Thu Mar 24 09:32:47 2011 (Elapsed Time: 0.00 seconds) output文件包括无效字符如划线等 Geometry First [Editor's note: I was having trouble last week dissolving a shapefile based on a common attribute. I kept getting the following error: "Invalid Topology [INCOMPLETE_VOID_POLY]“. Not entirely helpful! A little Google searching turned up the following tip from ESRI.] Republished from ESRI. Problem: Some Overlay Tools, such as Intersect, return unexpected results or fail Description Results do not look correct or operations fail with strange errors such as: “Invalid Topology [INCOMPLETE_VOID_POLY]“. If this type of error has occurred, it is most likely to occur when using one of the following: Clip, Erase, Identity, Intersect, Symmetrical Difference, Union, Update, Split Featureclass to Coverage, Dissolve, Feature to Line, Feature To Polygon, Integrate, or ValidateTopology. Cause It is possible that tool outputs may be strange or incorrect because one or more features in the input feature class have geometry problems. Some examples of geometry problems are: • short segments • null geometry • incorrect ring ordering • incorrect segment orientation • unclosed rings • self-intersections or empty parts Solution or Workaround If such errors occur or the output looks incorrect, the first step in assessing the situation is to run the ArcToolbox tool Data Management Tools > Features > Check Geometry. -show me This tool provides a list of the invalid features in the feature class and a short description of the problem. Features with problems can be fixed in one of two ways: Editing the feature class with the geometry problem, and fixing each individual problem identified. Some of these problems, like non-simple geometry, can be fixed by double-clicking the feature in the editor and saving the edits. Running the ArcToolBox tool Data Management Tools > Features > Repair Geometry on the feature class containing the problem features 昨天检查一区属性发现一区图层的面积属性shape_area竟然出现了负值,想必是数据转换的时候出现了问题。今天在论坛求证了一下,感谢各位的解答。 ArcGIS默认顺时针图形为正,手工画polygon的时候不管怎么画结果都是顺时针的。所以一般负值的出现是转换过程出现问题,polygon是由ring组成的,ring则是有更小的segement(line,circularArc,ellipticalArc,beziercurve)构成,所具有方向性。 解决方法是用ArcTool的check geometry和 repair geometry工具,上述的检查结果是Incorrect ring ordering。repair后会自动修复错误,已解决。 此外,repair工具只能修复以下五种错误: Null geometry—The feature will be deleted from the feature class. Short segment—The geometry's short segment will be deleted. Incorrect ring ordering—The geometry will be updated to have correct ring ordering. Incorrect segment orientation—The geometry will be updated to have correct segment orientation. Self intersections—The geometry's segments that intersect will be split at their intersection. Unclosed rings—The unclosed rings will be closed. Empty parts—The parts that are null or empty will be deleted. 更多的错误修复参照帮助的 How to salvage a corrupt shapefile

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧