作业帮 > 综合 > 作业

MapInfo表的问题

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/06/12 14:49:33
MapInfo表的问题
我在MapInfo中画的路网地图的结点图层和线路图层
定义路线表结构为ID  StartPoint  EndPoint  Length
结点表结构为 ID
我想要把路线表的StartPoint  EndPoint 与结点表的ID联系起来,即线路的起点和终点都是相应的结点ID,下图是我画的结点图层和线路图层,望大神指教,
   


更新StartPoint EndPoint列为对应DataID线路的起点和终点ID,如线路的起点结点ID是1,终点结点ID是2,则相应的StartPoint 列为1,EndPoint列为2
1.首先下面的代码不一定能解决你的问题,但是可以作为一个参考,你后续如果问题解决了,也请告诉我到底该怎么做.
2.我这里假设你的startpoint和endpoint都是字符型的空值,如果程序运行多次,请确保每次运行前先将startpoint和endpoint赋值为空
3.代码给startpoint的赋值结果,不能保证是图形矢量化方向的起点,而可能是矢量化方向的终点.endpoint也是一样.如果必须一致,那么下面的代码是行不通的.
4.不知道你的Node图层和Line的端点是否完全重合,如果不能保证,建议先对Node做个缓冲图层buffer,程序中也相应将Node修改为buffer.否则可能有些线段端点不能赋值成功.
include "mapbasic.def"
open window message
Dim sAppPath as String
Dim myobj as object
Dim ID as String'''''''''''查看一下你表中的ID是什么字段,再决定类型
Dim rwid as Integer
sAppPath = ApplicationDirectory$()
open table sAppPath+"Line.tab" as tabLine
open table sAppPath+"Node.tab" as tabNode
fetch first from tabNode
do while not eot(tabNode)
myobj=tabNode.obj
ID=tabNode.ID'''''''''''''''
select * from tabLine where obj intersects myobj into temp
\x05fetch first from temp
\x05do while not eot(temp)
\x05rwid=temp.rowid
\x05if(temp.startpoint="")then'''''''这里前提是原数据startpoint和endpoint都为空
\x05\x05update temp set startPoint=ID where rowid=rwid
\x05\x05goto aaa
end if
\x05if(temp.endpoint="")then
\x05\x05update temp set endPoint=ID where rowid=rwid
\x05\x05goto aaa
\x05end if
aaa:\x05\x05
\x05fetch next from temp
\x05loop
fetch next from tabNode
loop
commit table tabLine
close all
print "OK-------"
再问: 大神我想请问一下如果用Node图层和Line图层做最短路径,是不是需要将这两个表联系起来?怎么联系呢?
再答: 那个,我接触的数据中,线的端点startpoint和endpoint和Node表的ID是关联好的
你能把你的算法给我看看吗?或者思路。
再问: 问题解决了,不是关联的问题,我忽略了一个小问题,谢谢你