GIS 门牌号地址匹配的简单实现
2008-10-09 16:51
337 查看
最近一直在考虑如何实现门牌号的地址匹配问题。由于,一开始对于现实中的门牌号的设定规则不甚了解,所以,一直感觉没有头绪,最近,看了经理给的一份门牌号地址表,再经过最近查看的一些星稀的文档,有了一个初步的实现想法,但感觉还是可以进一步优化,先看一下我是如何实现的。
1、在道路线这个图层上,我们取一条路线,标识这条路的起点和终点,然后,根据精确度的要求,划分区域,用点作为界限隔开,所以取得点越多越精确。然后,获得这些点的空间坐标,作为一个地址匹配库保存起来。
2、由于门牌号的表示中,开始的几个字符都具有路名,这样,可以对我们稍后用到的数据做一个初步筛选,譬如,我们想匹配的一个门牌号是:柳泉路110号三单元,对于这样的数据,我们在地图中,做一个门牌号层,将柳泉路标识的数据过滤出来,形成一个哈希表,这样便于我们对初步数据的整理。
3、将过滤出来的数据放到哈希表中后,对于需要匹配的门牌号进行排序查询,记录两个数据,主要是用来比较我们要查看的门牌号与那个更近一些。
4、通过比较后,获得距要匹配的地址最近的点,然后,将其定位显示出来。
【上面的地址匹配精确度与你在地图上取得点的多少有关。】
查询代码如下:
protected void Button2_Click(object sender, EventArgs e)
{
Hashtable ht=toGetAll_oneRoadNumber();//这个方法获取过滤的数据
ArrayList akeys = new ArrayList(ht.Keys);
akeys.Sort();//对数据排序
int searchNum = Convert.ToInt32(getRoadNum());
int preNum = 0,lastNum=0;
string preName = string.Empty, lastName = string.Empty;
foreach (string skey in akeys)
{
lastNum = Convert.ToInt32(ht[skey]);
lastName = skey;
if (searchNum > lastNum)
{
preNum = lastNum;
preName = skey;
}
if (preNum != lastNum)
{
break;
}
}
int out1 = lastNum,out2=preNum;
int prepare1 = searchNum - preNum,
prepare2 = lastNum - searchNum;
string outstr = lastName.ToString();
if (prepare1 < prepare2)
{
outstr = preName.ToString();
}
MapInfo_Data_getInfo(outstr);//在地图上定位显示出来
}
1、在道路线这个图层上,我们取一条路线,标识这条路的起点和终点,然后,根据精确度的要求,划分区域,用点作为界限隔开,所以取得点越多越精确。然后,获得这些点的空间坐标,作为一个地址匹配库保存起来。
2、由于门牌号的表示中,开始的几个字符都具有路名,这样,可以对我们稍后用到的数据做一个初步筛选,譬如,我们想匹配的一个门牌号是:柳泉路110号三单元,对于这样的数据,我们在地图中,做一个门牌号层,将柳泉路标识的数据过滤出来,形成一个哈希表,这样便于我们对初步数据的整理。
3、将过滤出来的数据放到哈希表中后,对于需要匹配的门牌号进行排序查询,记录两个数据,主要是用来比较我们要查看的门牌号与那个更近一些。
4、通过比较后,获得距要匹配的地址最近的点,然后,将其定位显示出来。
【上面的地址匹配精确度与你在地图上取得点的多少有关。】
查询代码如下:
protected void Button2_Click(object sender, EventArgs e)
{
Hashtable ht=toGetAll_oneRoadNumber();//这个方法获取过滤的数据
ArrayList akeys = new ArrayList(ht.Keys);
akeys.Sort();//对数据排序
int searchNum = Convert.ToInt32(getRoadNum());
int preNum = 0,lastNum=0;
string preName = string.Empty, lastName = string.Empty;
foreach (string skey in akeys)
{
lastNum = Convert.ToInt32(ht[skey]);
lastName = skey;
if (searchNum > lastNum)
{
preNum = lastNum;
preName = skey;
}
if (preNum != lastNum)
{
break;
}
}
int out1 = lastNum,out2=preNum;
int prepare1 = searchNum - preNum,
prepare2 = lastNum - searchNum;
string outstr = lastName.ToString();
if (prepare1 < prepare2)
{
outstr = preName.ToString();
}
MapInfo_Data_getInfo(outstr);//在地图上定位显示出来
}
相关文章推荐
- Linux安全管理 之二 简单配置-地址转换-状态匹配
- 8,关于串行化的介绍及简单实现(原帖地址:http://www.vckbase.com/document/viewdoc/?id=918)
- PHP简单实现正则匹配省市区的方法
- 简单算法——使用栈实现括号匹配检验
- java 后台获取设备来源实现同一地址多套前端的自动匹配实现
- 较简单的正则匹配引擎实现
- 使用jquery简单实现腾讯地图的地址搜索定位功能
- ASP.NET实现下载地址隐藏和简单防盗链
- [zhuan]Mapxteme 2005 实现GIS 简单的几个功能示例
- C语言实现字符串的简单匹配
- 【客户下单】基于CRM完全匹配地址库实现自动分单
- GIS.arcgis for javascript简单接口调用实现地图展现
- C语言实现字符串的简单匹配
- 天梯匹配系统 - 简单实现
- 简单实现仿某宝地址选择三级联动样式
- 使用正向最大匹配算法实现中文分词简单模型-用trie树实现
- 正则表达式匹配也可以简单快速(下:实现部分)
- 简单的逆向最大匹配算法实现中文分词(Python)
- 使用listview实现简单的三级地址联动选择器
- iptables路由转发与地址伪装的简单实现