一、地图的设置
1.坐标系设置
在应用MapBasic程序进行地理地图建立、改变或查询对象之前,必须事先确定坐标系。设置MapBasic采用的坐标系可以调用Set CoordSys语句,其语法形式为:
Set CoordSys…
其中,CoordSys…为定义坐标系的参数。
用Set CoordSys命令设定MapBasic采用的坐标系,缺省状态下,MapBasic用经纬度坐标系,这意味着当地理函数(如CentroidX()和ObjectNodeX())返回x或y坐标值时,该值为经度、纬度。MapBasic应用程序应用Set CoordSys语句定义不同的坐标系,此后,通过地理函数返回的坐标值对应新的坐标系。
注意,在非地理地图中建立、改变或查询对象时,必须确定MapBasic当前坐标系是非地球坐标系,可以通过Set CoordSys Nonearth语句实现;在布局窗口建立、改变或查询对象时,MapBasic必须工作在布局坐标系下,可以通过Set CoordSys Layout语句实现。
2.度量单位设置
在MapBasic应用程序中,涉及距离单位、面积单位和纸面单位,其默认的单位分别是英里,平方英里和英寸,如需改变度量单位,可以调用相应Set...Units语句实现。
设置距离单位语句的语法形式为:Set Distance Units unit_name,其中unit_name为距离单位名称(如"ch"、"cm"、"ft"、"in"、"km"、"li"、"m"、"mi"、"mm"、"nmi"、"rd"、"survey ft"和"yd")。如下例设置距离单位为千米。
Set Distance Units"km"
设置面积单位语句的语法形式为:Set Area Units area_name,其中area_name为面积单位名称(如"acre"、"hectare"、"perch"、"rood"、"sq ch"、"sq cm"、"sq ft"、"sq in"、"sq km"、"sq li"、"sq m"、"sq mi"、"sq mm"、"sq rd"、"sq survey ft"和"sq yd")。如下例设置面积单位为英亩。
Set Area Units"acre"
设置纸面单位语句的语法形式为:Set Paper Units unit,其中unit为纸面单位名称(如"cm"、"in"、"mm"、"pt"和"pica")。纸面单位代表非地理距离,如应用Set Window语句设置地图窗口的位置、宽度或高度,其窗口大小用的就是纸面单位。如下例设置纸面单位为厘米。
Set Paper Units"cm"
3.图层的控制
MapInfo是按图层组织地图数据的,而图层来自含有图形对象的MapInfo表,图形数据和属性数据通过.id文件连接。在MapBasic中,处理地图图层的语句和函数很多,如增加图层的Add Map语句、删除图层的Remove Map语句和改变地图设置的Set Map语句等。
(1)打开地图窗口。打开一个新的地图窗口,可以使用Map From语句。其语法形式为:
Map From table[,table…]
[Position(x,y)[Units paperunits]]
[Width window_width[Units paperunits]]
[Height window_height[Units paperunits]]
[{Min|Max}]
Map From语句的作用为,打开一个地图窗口,并在窗口中显示指定表的地图内容。Position子句用于指定地图窗口在MapInfo窗口中的位置,Width子句和Height子句指定地图窗口的宽度和高度,关键字Min和Max指地图窗口是否最小化和最大化。
(2)添加图层。利用Add Map语句,可以在地图窗口中添加图层。Add Map语句的语法形式为:
Add Map
[Window window_id]
[Auto]
Layer table[,table…]
[Animate]
在Window子句中,通过参数window_id指定添加图层的地图窗口。可以通过调用FrontWindow()和WindowID()函数获取窗口的ID值,如果缺省Window子句,则将图层添加到当前活动地图窗口。
语句中包含Auto关键字时,则MapInfo自动将该图层定位在一系列图层间的适当位置,缺省时,新添加图层位于地图的顶部。
Layer子句中,通过参数table将一个或多个可地图化的表加入到地图窗口。
语句中的Animate关键字,用于指定将新添加图层作为一个活动图层。如果用Add Map语句指定了多个图层,而且包含了Animate关键字,则MapInfo将第一个图层作为活动图层,其他作为普通图层添加到地图窗口中。下例打开表sample,并把它作为活动图层添加到地图窗口中。
Open Table"sample"Interactive
Add Map Layer sample Animate
(3)删除图层。利用Remove Map语句,可以删除地图中的图层。该语句的语法形式为:
Remove Map[Window window_id]
Layer map_layer[,map_layer…][Interactive]
在Window子句中,通过参数window_id指定删除图层的地图窗口。如果缺省Window子句,则将从当前活动地图窗口中删除图层。
语句中包含Auto关键字,则MapInfo自动将该图层定位在一系列图层间的适当位置,缺省时,新添加图层位于地图的顶部。
Layer子句中,通过参数map_layer指定要删除的图层。map_layer可以是整数值,也可以为字符串。整数值表示图层在地图中的索引,字符串表示图层的名称。以下两行语句分别表示删除地图窗口中最顶层的两个图层和删除地图窗口中的sample图层。
Remove Map Layer 1,2
Remove Map Layer"sample"
要删除某图层的专题图层,则需在图层名称后指定专题图层的索引号。以下语句删除建立在sample图层上的第一个专题图层。
Remove Map Layer"sample(1)"
如果语句中包含Interactive关键字,则MapInfo会弹出一对话框,提示用户进行保存、放弃或取消操作。缺省Interactive关键字,MapInfo直接删除指定图层。
如果要删除地图中的活动图层,不需要指定图层,加上Animate关键字即可:
Remove Map Layer Animate
(4)地图窗口和图层的设置。利用Set Map语句可以控制地图窗口的所有属性以及对图层进行设置。该语句的语法形式为:
Set Map
[Window window_id]
[Center(longitude,latitude)[Smart Redraw]]
[Clipping{Object clipper|Off|On}]
[Zoom{zoom_distance[Units dist_unit]|Entire[Layer layer_id]}]
[Preserve{Scale|Zoom}]
[Display{Scale|Position|Zoom}]
[Order layer_id,layer_id[,layer_id…]]
[Pan pan_distance[Units dist_unit]{North|South|East|West}[Smart Redraw]][CoordSys…]
[Area Units area_unit]
[Distance Units dist_unit]
[XY Units xy_unit]
[Scale screen_dist[Units dist_unit]For map_dist[Units dist_unit]]
[Redraw{On|Off}]
[Inflect num_inflections at color.expr[,color.expr,?]]
[Contrast contrast_value]
[Brightness brightness_value]
[GrayScale{On|Off}]
LAYERCLAUSE
LYERCLAUSE…
其中,window_id为地图窗口标识号,longitude和latitude用于指定地图窗口中心点坐标,clipper为一对象表达式,用于限制显示在该对象中的地图部分,zoom_distance为指定地图窗显示范围的数值表示式,layer_id为指定图层的整数或字符串,pan_distance指定漫游距离,area_unit指定面积单位的字符串,dist_unit为指定距离单位的字符串,xy_unit为指定x、y坐标单位的字符串,screen_dist和map_dist定义地图比例,contrast_value和brightness_value定义对比度和亮度。
Window子句通过参数window_id指定设置的地图窗口。
Center子句控制地图窗口的中心位置。例如,纽约的大概位置在西经74度,北纬41度,Set Map Center(-74.0,41.0)语句将地图中心设置在纽约附近。注意,Center子句使用小数表示坐标,而不是度/分/秒。Center子句将会引起地图窗口重画,除非使用了Smart Redraw子句。
Clipping子句用于设置地图窗口的裁剪对象,对应于MapInfo菜单的[Map]>[Set Clip Region]命令。一旦设定了裁剪区域,就可以通过设定Clipping On或Clipping Off来使用或不使用裁剪功能。如,Set Map Clipping Object obj_variable_name。
Zoom子句指定在地图窗口中显示的范围。下面的语句调整地图缩放比例,在地图窗口中显示100公里的范围。
Set Map Zoom 100 Units"km"
如果Zoom子句中包含Entire关键字,MapInfo将缩放地图,以显示地图图层中的所有目标。如下例,第一行语句显示第二个图层中的所有对象,第二行语句显示整个地图。
Set Map Zoom Entire Layer 2
Set Map Zoom Entire
Preserve子句确定在用户重新缩放窗口时,保持地图窗口的显示。如果子句为Preserve Scale,则MapInfo仅仅重画需要重画的部分窗口内容,用增大地图窗口来达到显示更大区域的目的。如果子句为Preserve Zoom,无论用户何时调整窗口大小,MapInfo将重画整个地图窗口。
Display子句在地图窗口激活时,确定状态条显示什么类型的信息。Display Scale显示当前的比例尺,Display Position显示光标的位置,Display Zoom显示当前的缩放(显示区域的宽度)。
Order子句用来指定图层的顺序。注意装饰层的特殊性,它的索引为0,永远显示在地图的最顶层,不能在Order子句中出现。例如,假定给定地图窗口中有的4个图层(不包括装饰层),下面的Set Map语句将交换最上面2层的顺序。
Set Map Order 2,1,3,4
Pan子句用于移动地图窗中的视图。通常,Pan子句会引起地图窗口重画,如果子句中包含Smart Redraw关键字,则只重画需要刷新的部分。下面的语句将地图的视图向北移动100km。
Set Map Pan 100 Units"km"North
CoordSys…子句用于给地图窗口指定一个不同的坐标系和投影。当Set Map语句包含一个CoordSys…子句时,MapBasic应用的坐标系自动匹配地图的坐标系。
Area Units子句用于确定显示区域面积计算操作的度量单位。
Distance Units子句用于确定显示距离计算操作的度量单位。
XY Units子句用于确定显示x、y坐标的单位。如Set Map XY Units"m"。
Scale子句用于设置地图的比例尺。例如,下面的Set Map命令调整地图缩放水平,以达到屏幕上的一英寸显示实际10英里的区域。
Set Map Scale 1 Units"in"For 10 Units"mi"
Redraw子句用于确定地图窗口是否重画。如果Redraw设置为Off,尽管一些后续操作(如Set Map、Add Map Layer、Remove Map Layer等)改变了地图,而MapInfo并不重画地图窗口。注意,有些操作如漫游、缩放等,即使设置Redraw为Off,也能引起MapInfo重画地图窗口。如果用户发现Redraw Off不能阻止窗口重画,可以使用Set Event Processing Off语句。
LAYERCLAUSE不是Set Map语句的关键字,它是用于图层设置的一个简单符号,其语法形式为:
[Layer layer_id
[Editable{On|Off}]
[Selectable{On|Off}]
[Zoom(min_zoom,max_zoom)[Units dist_unit][{On|Off}]]
[Arrows{On|Off}]
[Centroids{On|Off}]
[Default Zoom]
[Nodes{On|Off}]
[Inflect num_inflections at color.expr[,color.expr,?]]
[Contrast contrast_value]
[Brightness brightness_value]
[GrayScale{On|Off}]
LABELCLAUSE
[Display{Off|Graphic|Global}]
[Global Line…]
[Global Pen…]
[Global Brush…]
[Global Symbol…]
[Global Font…]
]
其中,min_zoom为图层最小显示范围的数值表达式,max_zoom为图层最大显示范围的数值表达式。
Layer子句用于进行图层的设置。由于地图窗口可添加多个图层,因此Set Map语句可包括多个Layer子句。
●Layer子句的Editable子句用于设置图层是否可编辑。在任何时候,只能有一个图层被设置为可编辑状态。
●Layer子句的Selectable子句设置在给定图层在某种操作(如半径按索)下的可选择属性。注意,打开层的可编辑属性时自动打开该层的可选择属性。下列Set Map语句打开第一层的可选择属性,将第二、三层的可选择属性关闭。
Set Map
Layer 1 Selectable On
Layer 2 Selectable Off
Layer 3 Selectable Off
●Layer子句的Zoom子句用于设置指定图层为缩放图层,并可设置指定图层的缩放范围。
例如,下列语句设置第二个图层的视野范围为0~100km。
Set Map
Layer 2 Zoom(0,100)Units"km"On
●Layer子句的Arrows子句、Centroids子句和Nodes子句分别设置是否显示线段的方向、对象的质心和节点。下列语句设置第一个图层显示线段的方向、对象的质心和节点。
Set Map
Layer 1 Arrows On Centroids On Nodes On
●Layer子句的Display子句控制图层在地图窗口的显示。当设置Display Off,指定图层不在地图窗口内显示,设置Display Graph,以保存在表中的默认样式显示图形对象,设置Display Global,以Global子句指定的样式显示图形对象。
Global Line子句用于指定显示线的样式,Global Pen子句用于指定显示填充边界的样式,Global Brush子句指定填充样式,Global Symbol子句指定显示点对象标号样式,Global Font子句指定显示文本样式。下面的语句用绿色的线和填充模式显示第一个图层的图形对象。
Set Map
Layer 1 Display Global
Global Line(1,2,GREEN)
Global Pen(1,2,GREEN)
Global Brush(2,GREEN,WHITE)
Default Zoom子句是针对表修改,而不是地图窗口的一类特殊子句,用于重设表的默认显示范围和地图窗口的中心位置,调用该子句后,无需再进行保存操作。
LABELCLAUSE不是Layer子句的关键字,它是用于图层标注设置的一个简单符号,其语法形式为:
[Label[Line{Simple|Arrow|None}]
[Position[Center][Above|Below][Left|Right]]
[Font…][Pen…]
[With label_expr]
[Parallel{On|Off}]
[Visibility{On|Off|Zoom(min_vis,max_vis)[Units dist_unit]}]
[Auto[{On|Off}]]
[Overlap[{On|Off}]]
[PartialSegments{On|Off}]
[Duplicates[{On|Off}]]
[Max[number_of_labels]]
[Offset offset_amount]
[Default]
[ObjectID
[Table alias]
[Visibility{On|Off}]
[Anchor(anchor_x,anchor_y)]
Text text_string
[Position[Center][Above|Below][Left|Right]]
[Font…][Pen…]
[Line{Simple|Arrow|None}]
[Angle text_angle]
[Offset offset_amount]
[Callout(callout_x,callout_y)]}
[Object…]
]
Line子句设置标注引注线的类型。当标注拖离原来位置后,将显示一条从标注到原来位
置的线段;Position子句控制标注的位置与被标注对象中心位置的关系;Font子句指定标注的字体;Pen子句指定标注引注线的样式;With子句指定用于建立标注文本的表达式;Parallel子句控制是否沿线标注;Visibility子句控制是否显示图层标注;Auto子句控制是否显示自动标注;Overlap子句控制是否允许标注重叠;PartialSegments子句控制是否允许标注部分线段; Duplicates子句控制是否允许重复标注图形对象;Max子句用于设置指定图层中显示的最大标注数目;Offset子句设置标注与对象中心的距离;Default子句指定以默认方式重新设置标注; Object子句允许用户编辑标注。Set Map语句中为每个可编辑的标注包含了一个Object子句。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。