要编程解决的问题是:
1,从Mapinfo读取节点或数据坐标信息。 2,基于这些信息,进行算法计算。 3,将算法计算结果在Mapinfo地图上显示出来。
如何从地图中读取坐标信息。可是查了图层文件,除了有些表示X,Y坐标外,没有类似线段长度,端点坐标的信息。
Object的概念。
Line Object简单,终点起点。polyline 和 Region复杂一些.其中polyline非常有用,因为它主要定义的是道路信息。
一般的polyline定义的信息有一个polyline Object有line segments和line
sections组成。属性有节点数,长度,节点坐标,segment数和section数。这些可以在MapInfo中用鼠标双击图中的Object查到。
和Object相关的Table表信息的查询,可选择mainInfo按钮,用鼠标单击图中的Object查到和这个Object有关的table信息。查询Table表中的
所有信息用菜单WindowsNew Brower Window.
图形Object的这些信息和table表无关,只和物理图形有关,有图形不一定有table表,但一定有Object。table 是独立于图形以外的,用户可
以添加,删除等操作,不影响图。
1,从Mapinfo读取节点或数据坐标信息。可采用3种办法:
.mif/mid文件中读取。在mapinfo中选export file,把地图中的数据信息输出到mif/mid文件中。在程序中打开mif文件读取。可以得到如线段起始和终点坐标等等.
主要是C语言对文件操作。
从地图table表直接读取,读取表中的数据一般用FetcH。具体操作如下:
1. Use a Fetch statement to specify which row in the table you want to query. This action sets which row is current. 2. Use a table-reference expression (e.g. tablename.columnname) to access a specific column in the current row. For example, the following program reads the contents of the Country column from the first row of the World table: Dim s_name As String Open Table ”world” Interactive Fetch First From world s_name = world.Country
MapBasic例子程序:读表中FROMLEFT一项的数据
Include MAPBASIC.DEF
Dim s_name As Integer
Open Table D:aastreetonhalts1 Map From onhalts1
Dim i,counter As Integer Fetch First From onhalts1 Do While Not EOT(onhalts1) s_name = onhalts1.FROMLEFT Print The name: + s_name i = i + 1 Fetch Next From onhalts1 Loop
Print Number of undeleted records: + i
读Object信息。 MapBasic程序:读出Object的节点坐标,长度,segment数。 Include MAPBASIC.DEF Dim table_OBJ As String table_OBJ = JPN1RAIL.obj
Dim geogr_length As Float, x1,y1,x2,y2 As Float Open Table D:aajapanJPN1RAIL Map From JPN1RAIL Dim i,counter As Integer i = 0 Fetch First From JPN1RAIL Do While Not EOT(JPN1RAIL)
'counter = ObjectInfo(JPN1RAIL.obj, OBJ_INFO_NPNTS) counter = ObjectInfo(JPN1RAIL.obj, OBJ_INFO_NPOLYGONS)
x1 = ObjectNodeX(JPN1RAIL.obj, 1, 1) ' read longitude x2 = ObjectNodeX(JPN1RAIL.obj, 1, ObjectInfo(JPN1RAIL.obj, 20)) ' read longitude y1 = ObjectNodeY(JPN1RAIL.obj, 1, 1) ' read latitude y2 = ObjectNodeY(JPN1RAIL.obj, 1, ObjectInfo(JPN1RAIL.obj, 20)) ' read latitude
geogr_length = ObjectLen(JPN1RAIL.obj, km) Print The length: + geogr_length+x1:+ x1+y1:+y1 'Print The length: + geogr_length+Counter:+ counter
i = i + 1 Fetch Next From JPN1RAIL
Loop Print Number of undeleted records: + i
(责任编辑:admin) |