IMAGE中的折线/图块的识别

rdsdh 2003-11-14 11:18:15
我从数据库中提取地图信息,在Image控件上绘制地块与道路。
但,接下来是如何识别交叉点,道路及地块。
点的识别较简单,可以在数据库搜索距取当前坐标的最近点。
但如何仅由一点识别出道路或地块?
难啊,请高手指点迷津。
...全文
157 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
weibz0525 2003-12-19
  • 打赏
  • 举报
回复
2.道路口点的坐标是已知的了,你可以直接利用他们,而不用再去p1,p2了
按照你的思路是计算三角形的坐标,事实上就是计算未知点到直线的最短距离。
未知点假设是p0,那么其他的p1,p2你可以取数据库中相临的2个路口点,然后计算p0到p1p2直线的最短距离<一个阀值的话,则p0在p1,p2路口之间。
cgrg 2003-12-18
  • 打赏
  • 举报
回复
又歇了一个礼拜!
今儿来上班啦,
不知问题解决得如何?
我尽力...
goneaway1981 2003-12-18
  • 打赏
  • 举报
回复
mark
rdsdh 2003-12-03
  • 打赏
  • 举报
回复
我的地图中有三种元素:
路口(POINT),道路(LINE),地块(BLOCK)
1.路口识别诚如你所讲,很简单,为了能近距取点(不严格的取中哪个象素,那样太难操作了),我采用了从数据库选择点距鼠标点小于某个阀值的点,并取其中的最近点.
2.道路的单点判断,我也想出来了.
(1)取当前鼠标点(P0)色,按此色初步刷选出道路.
(2)逐个道路判断:
a.找该线上的最近点(P1);
b.找该线上的最近点的相邻点(P2)(有1至2个);
c.|P0P1| < |P1P2| && |P0P2| < |P1P2|,满足这样条件的基本上已经是要找的线了.但可能有邻近线的干扰.
d.再判断三角形(P0P1P2)的面积,要求小于一个阀值,以便于近似取选取.
e.其它将是线外点
3.地块的判断,我目前仍采用以标志进行判断的方法类同于选取点.还没能做到在块的空白处选取后来确定块.

请继续.....讨论.

constantine 2003-12-03
  • 打赏
  • 举报
回复
关注
weibz0525 2003-11-22
  • 打赏
  • 举报
回复
道路口点你不都是以point存储了吗?查找一下你当前的点在point有没有就行了,疑惑。。。
先抛开这个,你猜想你可能想证明某个点在那2个路口之间吧?
按照你的想法,取点的当前颜色。如果每2个路口之间道路颜色不一致就好了,这里就假设你确定了哪2个路口,然后你应该把2个路口的point取出来,然后把2个x做差,2个y做差,以左上角为0,0点用新画布画一个矩形,画出道路,然后根据判断象素颜色来判定你取那个点在不在道路上。不知道你听明白没有,用新画布重画为了是排除其他背景中象素颜色的干扰。
rdsdh 2003-11-21
  • 打赏
  • 举报
回复
TO:WEIBZ0525
交叉点(路口),已经在数据表POINT中存储.
道路经过众多的道路口点,ROUTE表示.
地块,是一个多边形,由其外围边缘的角点(通常是道路交叉口)序列表示--BOARDER
TO:CGRG
有些头绪,只是乱了点. :)

块的识别我由块标志点坐标(SignX,SignY)实现了.
给道路加一个标志点似乎不太符合现实习惯,因此不采用.
目前,可以由两个路口(点)两识别道路,但这要求操作者作两步分别选择两个点,有点烦些.

我的目标是由线上的一点来识别这点应不是道路口(已知点),而是道路口间的末知点.
初步想法是:
由鼠标拾取一个点,根据该点的当前颜色,缩小范围在相关线的路口点上.
然后,从这些点中搜索出一对最近的点,要求这点分布在拾取点的两侧,且与拾取点的连线的两个斜率以及该对点本身连线斜率相近.还也另一种方法三点构成的面积相当小.
因为线(道路)的宽度,这里只能取近似判断.

最后的功能有点类似于AUTOCAD中的选线方式.






cgrg 2003-11-20
  • 打赏
  • 举报
回复
不知老兄有无头绪?
是否该初始化Image中的块的所有点的集合(画好的图中的块和点的位置应该是已知条件),然后再通过已知点的坐标在数据库中已知点的集合中找到该点,再确定该点在对应的哪块中?!
weibz0525 2003-11-18
  • 打赏
  • 举报
回复
不知道你的地图存在数据库中是怎样的结构?
画出来的道路和地块是单个象素组成的吗?如果不是还要,细线化
weibz0525 2003-11-18
  • 打赏
  • 举报
回复
识别交叉点时候,你说取距当前坐标点最近的点是什么意思?实在想不通
rdsdh 2003-11-18
  • 打赏
  • 举报
回复
POINT(PID,X,Y)
LINE(LID,LName,LColor,Width)
BLOCK(BID,BName,SignChar,SignX,SignY,BoradColor,FillColor,FillStyle)//Sign是块标记
ROUTE(LID,PID,PSerialNo) //有序点集描述线路由
Board(BID,PID,PSerialNo) //有序点集描述块边缘

现在我采用的方法是通过最近点来选择:
由两个点来选择线,
由块标记(SignX,SignY)来选择块.

各位高手,能不能提供再方便一些方法.
pzoon 2003-11-14
  • 打赏
  • 举报
回复
没有这么作过,帮你UP
cgrg 2003-11-14
  • 打赏
  • 举报
回复
是否有关于块的函数?参数为各点的坐标。
再根据坐标的变化判断是哪块?应该要指定一基块。
通过三点应该可以确认该块吧。
至于程序,我就免了吧(:-)
我再研究研究。
这问题蛮复杂,小弟我全力以赴。
rdsdh 2003-11-14
  • 打赏
  • 举报
回复
交叉点,可以从数据库中搜索出最近的点.

道路(由多点连成的线段系列.)

地块(由外围点序列描述.)

怎么在图中由一指定来识别.

13,825

社区成员

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

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