首页 百科知识 创建地图对象

创建地图对象

时间:2022-06-19 百科知识 版权反馈
【摘要】:二、创建地图对象1.对象变量MapBasic支持一种特殊的变量类型——对象变量,用来存放图形对象。下列例程将表states和outlets进行连接,结果表Selection中的对象列来自states表。]其中,Window子句指定创建圆弧的地图窗口,window_id为窗口标识值;Variable子句指定创建的点对象保存到对象变量var_name中;(x,y)为创建点的位置;Symbol子句指定显示点对象的符号。

二、创建地图对象

1.对象变量

MapBasic支持一种特殊的变量类型——对象变量(Object),用来存放图形对象。MapBasic的对象变量可以像其他变量一样使用。使用Dim语句可以定义一个对象变量,可以用赋值符号(=)给变量赋值。例如:

Dim road,temproad As Object

temproad=CreateLine(-72.55,42.431,-72.568,42.435)

road=temproad

一个对象变量包含描述一个地图对象的全部信息。如果在一个对象变量中存放一个线对象,那么这个变量不但包含关于这条线的图形信息,而且还包含这条线的显示信息(如线的颜色、宽度和样式)。

2.对象列

在MapInfo表中以Obj命名的列是用于存放图形对象的特殊列。任何含有图形对象的表都有一个Obj列,但Obj列不在浏览窗口中出现。可以使用tablename.obj形式的表达式访问一个对象列,存取对象列的内容。下面的例程先声明一个对象变量curren_state,然后将表states中的一个对象复制给这个变量中。

Dim curren_state As Object

Open Table"states"

Fetch First From states'设置第一行为当前记录

curren_state=states.obj

对于对象列,你可以像其他普通列一样对它进行各种类型的操作。可以使用SQL查询对象列、更新对象列的值、读取对象列的内容到变量中。下面的例子创建了一个查询表,其中对象列用于函数Area()的参数。

Select state,Area(Obj,"sq mi")From states

一个表中有些行是不包含地图对象的。如果打开了一个数据库文件作为MapInfo的表,并且将这个表地理编码,但在编码过程中有些行不能与对象匹配,这些行就没有被地理编码,也就不包含地图对象。可以在Select语句的Where子句中使用条件Not Obj来选择所有不包含地图对象的行,例如:

Select*From sites Where Not obj

不是所有的表都是可地图化的,例如,一个基于电子表格或数据库文件的表一开始不能显

示在一个地图中。要使这个表可地图化,必须用Create Map语句向这个表中增加一个对象列。

从表中删除一个对象列,可使用Drop Map语句。Drop Map将删除整个对象列,如果只想删除表中的部分对象,可以使用Delete Object语句。调用函数TableInfo()可以获取一个表是否含有一个对象列的信息。

一个MapInfo表只能有一个对象列。如果对两个都包含对象列的表作连接,结果表也只能含有一个对象列,这个对象列来自From子句的第一个表。下列例程将表states和outlets进行连接,结果表Selection中的对象列来自states表。

Select*From states,outlets

Where states.state=Outlets.state

Map From Selection

3.创建对象语句

MapBasic提供了一组能创建图形对象的语句。以下语句除了Create Frame语句只能在布

局窗口中创建框架对象外,其他语句都可以在布局窗口和地图窗口中创建对象。

(1)创建点对象。Create Point语句用于一点对象,其语法形式为:

Create Point

[Into{Window window_id|Variable var_name}](x,y)

[Symbol…]其中,Window子句指定创建圆弧的地图窗口,window_id为窗口标识值;Variable子句指定创建的点对象保存到对象变量var_name中;(x,y)为创建点的位置;Symbol子句指定显示点对象的符号。

(2)创建线对象。Create Line语句用于创建一线对象,其语法形式为:

Create Line

  [Into{Window window_id|Variable var_name}]

  (x1,y1)(x2,y2)

  [Pen…]

其中,(x1,y1)和(x2,y2)为线的起点和终点坐标,Pen子句定义了线的样式。

(3)创建折线对象。Create Pline语句用于创建一折线对象,其语法形式为:

Create Pline

  [Into{Window window_id|Variable var_name}]

num_points

(x1,y1)(x2,y2)[…][Pen….][Smooth]

其中,num_points指定折线的节点数,x、y坐标系列定义节点坐标,Smooth关键字用于指定是否对折线光滑处理。

(4)创建圆弧。Create Arc语句用于创建圆弧,其语法形式为:

Create Arc

  [Into{Window window_id|Variable var_name}]

  (x1,y1)(x2,y2)

  start_angle end_angle

  [Pen…]

其中,x1、y1、x2、y2指定新建圆弧的最小外包矩形的对角坐标;start_angle和end_angle规定圆弧的开始角度和终止角度。

(5)创建椭圆或圆。Create Ellipse语句用于创建一个椭圆或圆,其语法形式为:

Create Ellipse

  [Into{Window window_id|Variable var_name}]

  (x1,y1)(x2,y2)

  [Pen…]

  [Brush…]

其中,Brush子句定义填充样式,x1、y1、x2、y2指定新建椭圆或圆对象的最小外包矩形的对角坐标。如果目标的最小外包矩阵定义X方向半径等于Y方向半径时,该语句创建一个圆对象,否则为椭圆对象。

(6)创建矩形。Create Rect语句用于创建一椭圆或圆,其语法形式为: Create Rect

[Into{Window window_id|Variable var_name}]

  (x1,y1)(x2,y2)

  [Pen…]

  [Brush…]

其中,(x1、y1)指定新建矩形的起始角坐标,(x2、y2)指定矩形起始角的对角坐标。

(7)创建圆角矩形。Create RoundRect语句用于创建一圆角矩形对象,其语法形式为:

Create RoundRect

 [Into{Window window_id|Variable var_name}]

 (x1,y1)(x2,y2)

 rounding

 [Pen…]

 [Brush…]

其中,rounding为一浮点型数值,用于指定圆角矩形的弧角的直径。

(8)创建区域对象。Create Region语句用于创建一区域对象,其语法形式为:

Create Region

 [Into{Window window_id|Variable var_name}]

 num_polygons

 [num_points1(x1,y1)(x2,y2)[…]]

 [num_points2(x1,y1)(x2,y2)[…]…]

 [Pen….]

 [Brush…]

 [Center(center_x,center_y)]

其中,num_polygons指定组成区域对象的多边形数,若该参数为0,则创建一空的区域。num_ points1指定第一个多边形的节点数,num_points2指定第二个多边形的节点数,依此类推。每一个坐标对(x、y)对应多边形的节点坐标。center_x、center_y指定对象中心的坐标。

(9)通过图形操作创建区域对象。Create Object语句可以基于已存在的图形对象,通过合并、相交、缓冲、联合等图形操作创建一个或多个区域对象。该语句的语法形式为:

Create Object As{Buffer|Union|Intersect|Merge}

From fromtable

[Into{Table intotable|Variable varname}]

[Width bufferwidth[Units unitname]]

[Resolution smoothness]

[Data column=expression[,column=expression…]]

[Group By{column|RowID}]

其中,fromtable为打开的表名,包括一个或多个图形对象;intotable为打开的用于保存新的对象的表名;Varname为保存新对象的变量名;bufferwidth指出在缓冲区操作的位移;Unitname为距离单位,如"km";Smoothness为一个2~100的整数,表示在缓冲区操作中每个圆角的平滑分段数;Column为表中的字段名称。

如果Creat Object语句完成Buffer操作,则产生缓冲区区域。语句中应包括Width和Resolution子句,Width定义缓冲区宽度。

如果Creat Object语句完成Union操作,则执行删除重叠区域的联合操作。如果对两个重叠区域执行联合操作,结果对象为一包含一个多边形的区域。

如果Creat Object语句完成Intersect操作,则创建其他对象相交区域的对象。

如果Creat Object语句完成Merge操作,则创建由源对象的区域组合而成的区域对象。合并操作的结果对象包含了源对象的所有多边形,如果源对象重叠,合并操作并不删除重叠区域。

如果语句中包含Data子句,则执行数据合并操作。语句可包括Group by子句完成数据分组。以下例程通过对当前选择对象做0.25英里的缓冲创建一个区域对象,该对象存放到对象变量corridor中。可以通过后续的Update或Insert语句将这个对象复制到MapInfo表中。

Dim corridor As Object

Create Object As Buffer

From Selection

Into Variable corridor

Width 0.25 Units"mi"

Resolution 60

4.创建对象函数

(1)创建点对象。CreatePoint()函数可以创建一点对象,其语法形式为: CreatePoint(x,y)

其中,(x,y)为创建点的位置。以下例句使用Insert语句向表sites中插入一行新记录。Insert语句中的CreatePoint()用于创建点对象并附着于新记录上。

Open Table"sites"

Insert Into sites(obj)

Values(CreatePoint(-72.5,42.4))

(2)创建线对象。Create Line()用于创建一线对象,其语法形式为:

CreateLine(x1,y1,x2,y2)

其中,(x1,y1,x2,y2)为线的起点坐标和终点坐标。

(3)创建圆对象。CreateCircle()用于创建一圆对象,其语法形式为:

CreateCircle(x,y,radius)

其中,x、y指定圆中心坐标,radius为圆半径。

(4)创建文本对象。创建文本对象的函数为CreateText(),其语法形式为:

CreateText(window_id,x,y,text,angle,anchor,offset)

其中,window_id指定在哪个地图窗口创建文本对象,x、y指定文本对象锚点安放的位置,text为文本对象包含的字符串,angle指定旋转角度,anchor为一0~8的整数,指定文本对象和锚点的相对位置,offset为0~50的整数,指定了文本对象与锚点偏移的距离。

当使用创建对象语句和函数创建了地图对象并把它存放到对象变量中以后,可以通过Insert语句或Update语句将这些对象保存到表中。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈