一种基于患者空间目标搜索定位算法的描述与实现
【关键词】 医学地理学;计算机;流行病学
【摘要】 目的 在地理信息系统中准确地标识患者所在的地理位置,为流行疾病的控制和预防提供病例的空间分析。 方法 使用数据库二维表结构来分析数据,寻求地名字符串与地理信息系统数据库中数据项字符串的最大匹配。 结果 本算法解决了在地理信息数据库中存在大量冗余记录的情况下,如何有效地实现指定地理目标的搜索定位问题。 结论 准确标识患者的地理位置,为流行疾病的控制和预防提供了有力的决策依据和手段。
【关键词】 医学地理学;计算机;流行病学
the description and realization of arithmetic for object's searching and positioning based on patients zhang heng,qu jing-hui,zhang liang. department of biomedical engineering,forth mili-tary medical university,xi'an 710032,china
【abstract】 objective to accurately mark the patients'position in the geography information system,provide patients'space analysis for the control and prevention of disease.methods using tow-dimen-sion table to analyze the data,to get the maximal matching of place name and data term.results this arithmetic could solve the problem that how to search and position the geography object in the condition that geography information system database having lots of redundancy.conclusions accurately mark-ing geography position of patients could provide foundation of decision-marking and instrument for the controlling and prevention of disease.
【key words】 medical geography;computer;epidemiology
(chin j dis control prev2006,10(6):604-606)
1 引言
在流行性疾病的控制和预防上,病例的空间分析是一项重要的内容。它可以直观地显示目前疾病发生的地理位置、数量等信息,为疾病控制和分析提供了一种有效的辅助手段 [1] 。这就要求我们在大量的地理空间数据中对病例所处的地理位置能进行准确地定位。但是,在我们操作的地理空间数据库中存在大量的冗余信息,这些数据的存在极大地影响了搜索定位的准确性。为了解决这一问题,本文提出一种算法,实现了地理目标定位的准确性。
2 材料与方法
2.1 病例信息数据库表结构 在病例信息数据库 中使用病例基本信息表,在该数据库表中有两个主要的字段是用来查询病例所处的地理位置。笔者使用其中“家庭住址”字段的内容到地图数据库表中查询符合条件的记录,实现病例在地理空间上的定位。该数据库表的数据结构描述见表1。
2.2 地理信息系统(geographic information sys-tem,gis)数据库表结构 在本系统中,基础地图采用的是1∶5000的西安市矢量化数字地图。gis实现空间目标查询定位的图层主要是“街区名称”图层,该图层的数据集是一个基于点的数据集,相当于一个数据库表。在这个数据库表中详细记录了各个街区和单位的名称等地理空间数据 [2,3] 。其数据结构描述见表2。
在此需要着重指出的是,在该数据集的数据表中,存在着大量重复的记录,而且部分记录提供的标注格式不一致。如图1所示,smid从52到54应该是一条记录:“长安县良种综合繁殖农场”,但在这个数据表中却是3条记录,另外还存在空记录和无意义的记录。这些记录对空间数据的搜索定位影响很大,给搜索定位增加了难度。 表1 数据库表的数据结构表2 图层数据集数据结构从图1可以看到,如果用简单的匹配算法(即从表1中取出第1条记录得到“家庭住址(address)”字段的数据,将该数据赋给一个变量str;接着循环从“街区名称”数据集中取出一条记录得到“name”字段的数据,将该数据赋给另一个变量std,然后判断str中的字符串是否包含std中的字符串,如果包含则退出循环,将找到的空间数据标注在地图上;如果不包含则跳到下一条记录,直到最后一条记录为止。然后从表1中取出第2条记录,进行同样的操作,直到表1中所有的记录都搜索完毕 [4] 。最后在地图上显示搜索的结果是不会得 到正确地定位的。所以,需要对这种简单的匹配算法进行改进。 表3 二维表数据结构
2.3 算法描述 在查询地理空间数据的过程中,从病例信息表(表1)中取出第1条记录得到“家庭住址(address)”字段的数据,将该数据赋给一个变量str;接着循环从“街区名称”数据表(表2)中取出一条记录得到“name”字段的数据,将该数据赋给另一个变量std,然后判断str中的字符串是否包含std中的字符串。如果当搜索到一条符合条件的记录时就跳出,那么就会丢失大量的信息,又因为待查询的地理空间数据表中有大量格式不一致的数据,很容易导致定位失败。所以,为了减少信息的丢失,笔者使用一个二维表(表3)来存储所有符合条件的空间数据,如果str字符串的内容包含std字符串的内容,就将std的内容存放到这个二维表中,直到病例信息表中所有的记录都被搜索完毕。然后对二维表中存储的数据按照“name”字段的数据长度进行排序,得到“name”字符串长度最大的那条记录,该记录就是需要定位的空间数据。然后将该空间数据在地图上进行标注。
但是,对于类似于“×××路”这样的数据,系统中的数据是由多条记录标识的。针对这样的记录,查询得到的所有记录的“name”字段数据的长度都 图3 病例搜索定位的结果是相同的。可以定义其大小为1,即name - length=1,同时也发现这样的数据中大部分数据的“smid”字段值是连续排列的,于是对于二维表中“name”字段数据的长度都是1的数据,计算它的“smid”字段连续出现的个数,并对计算的结果排序,并记录相应的“smid”字段的值。从而找到个数最多的对应的“smid”字段的值,然后在地图上进行定位显示。
3 结论
图3所示为2003年陕西省严重急性呼吸系统综合征(severe acute respiratory syndrome,sars)确诊病人所在的区域方位。该算法相对于简单字符串匹配算法,在定位准确率上有了很大提高,取得了满意的效果。
本文所述的基于患者地理位置的gis空间数据搜索定位的算法,相对于简单字符串匹配算法,在定位的准确率上有了很大的提高,很好地实现了地理空间数据的查询定位显示,为流行性疾病的控制和预防提供了有力的决策依据和手段。
【参考文献】
[1] 姜建辉,屈景辉,张治英,等.基于gis的陕西省sars监测与 控制决策信息系统[j]. 疾病控制杂志 ,2005,9(2):128-130.
[2] supermap objects开发教程 [m].北京:北京超图地理信息技术有限公司,2003.
[3] supermap objects程序员参考手册 [m].北京:北京超图地理信息技术有限公司,2003.
[4] 肖庆航,陆定淑. delphi7数据库开发教程 [m].北京:清华大学出版社,2004.