不过只是注释里面的问题的话,和程序逻辑的实现没有关系。
关键在于,scanf("%d",&choice)这样用%c以外的方式读标准输入流,会把回车丢弃,而回车进入gets中体现为一个空行。
解决方法是:
1.改成scanf("%d\n",&choice),如果确定用回车/换行符结束的话;
2.在这里的scanf函数调用语句之后紧接一个getchar(),读入并忽略之后的任一字符;
3.如果gets原本输入的数据中保证没有空格、制表符之类的空白符,那么可以用scanf("%s",str1),代替gets(str1)。
====
[原创回答团]
刘吉军1 周华
(南京东图土地规划咨询有限公司,南京,210002)
摘要:土地利用总体规划的调整和修改需要对涉及的地块位置和各类用地面积进行较为准确的定位,以保证调整方案顺利实施,保障国民经济的用地需求。本文以MapInfo和AutoCAD在A镇土地利用总体规划调整和修改工作中的使用为例,分析了地理信息系统和图形辅助设计相结合的土地利用总体规划修改方法。
关键词:土地利用总体规划;MapInfo;AutoCAD;仿射变换
我国目前执行的土地利用总体规划于1997年制定,规划目标年为2010年。规划中对耕地特别是基本农田空间布局进行了详细的划定,明确了土地利用结构变化趋势,对于规范土地合理利用,各类用地合理布局起到了积极作用。但是,由于规划制定之初未充分预见到未来国民经济快速发展态势,很多地方预留建设用地不足,满足不了经济发展对土地的需求,导致经济发展对建设用地的需求与土地利用总体规划之间的矛盾日益突出。为此,在规划执行过程中,根据国民经济发展以及关系国计民生的重大项目对土地需要,要对现行规划进行调整和修改。
土地利用总体规划修改涉及内容较广。从数据上来讲,不仅需要空间特征数据(也可称为图形数据),还需要描述各种地物空间属性的数据(如人口、地类、商业、环境)以及动态的信息处理。同时,涉及规划调整和修改各种重大工程的实施细则对制图和信息都提出了较高的要求[1]。如何在规划中做到空间特征数据和属性特征数据的统一,对规划者有着较高的要求。GIS (地理信息系统)软件能够很好地实现空间拓扑数据与属性数据间的连接,并提供比较全面的信息处理功能;而CAD (计算机辅助设计)软件能够很好地完成各种重大工程对于精确制图的要求。因此在土地利用总体规划中结合 GIS 和CAD进行准确的规划调整和修改势在必行。
GIS和CAD软件在各自领域有很多出色产品,使用原理上大同小异。笔者选用目前使用比较广泛的GIS软件MapInfo和CAD软件AutoCAD来探讨GIS与CAD相结合进行土地利用总体规划修改的方法。
1 数据对接与转换
土地利用总体规划的调整和修改工作往往涉及多个部门,尤其是一些重大项目的工程设计如道路、桥梁、工矿用地等由专业设计单位设计。国土部门根据这些项目设计,通过GIS处理功能对土地利用总体规划进行调整和修改,并反映到土地利用现状图中。这就涉及到两种不同软件的数据对接和数据转换问题。重点是下面几个关键问题。
1.1 坐标系确定
MapInfo和AutoCAD有着不同的坐标系统。AutoCAD作为专业制图软件,建立的是以单纯直角坐标为体系的坐标系统。而MapInfo作为GIS软件,坐标系统要复杂得多。地球是一个椭球体,为了能在平面上反映椭球体,就需要将椭圆的球面进行投影。土地利用总体规划调整或修改多为局部调整,在1∶10000大比例尺地图上进行。我国大比例尺使用高斯-克吕格投影,并使用两类坐标系:地理坐标系(经纬网)和直角坐标系(方里网)。
在把AutoCAD数据转换成MapInfo数据时,首先要明确在MapInfo 下使用何种坐标系,以确定转换方法。
1.2 直角坐标系转换
MapInfo中如果以直角坐标进行空间定位,转换方法比较简单。由于工程设计单位对于地理坐标的误解,常常会把地图上的分度带号作为坐标来对施工项目进行定位,为此先在MapInfo中选择参照点并获取坐标,然后在AutoCAD中根据参照坐标进行坐标平移,再利用AUTODESK公司提供的dxf图形文件交换格式,通过MapInfo的转入指令或者通用转换器进行格式转换即可。
1.3 地理坐标系转换
由于投影方式改变,从直角坐标转换成地理坐标,常会出现图形变形,从而影响到整个规划调整和修改的结果。AutoCAD使用直角坐标系,所以与按地理坐标进行制图的MapInfo文件进行数据对接时,要相应地进行地理坐标转换。最常用的方法就是在AutoCAD绘图的过程中在整个图幅中确定两个基点,一个位于最左下角,一个位于最右上角,这两个点在地图应能找到较为准确的地理坐标。然后利用 MapInfo提供的功能,通过基点在不同坐标系下的对照,对整幅图进行坐标转换。但由于MapInfo在定义转换的基点时只能选用2个基点,因此在转换后,可以很好地控制x、y轴上的变形误差,而对于图形旋转、扭曲所产生的误差则无法消除。因此要对转换后的矢量图进行误差校正。
1.4 误差校正
对于坐标转换所产生的误差,可以通过仿射变换和相似变换等模型来进行数据处理。仿射变换和相似变换都为线性函数变换模型,可实现对原图形的平移、旋转和缩放,相比较而言,相似变换不能进行x轴、y轴不均匀缩放的变换,而仿射变换能保证更高的数据精度[3],因此对转入后数据使用仿射变换更加合适。
仿射变换的基本数学形式为:
X=Ax+By+C
Y=Dx+Ey+F
X和Y为转换后坐标,x和y为转换前坐标,A、B、C、D、E、F为方程参数,各参数在坐标系空间上的几何意义:A和E分别确定点(x,y)在输出坐标中x方向和y方向上的缩放尺度,B 和D 确定旋转角度,C 和F 分别确定在 x 方向和 y 方向上的水平移动距离。
各参数可以通过控制点(已知实际坐标)坐标利用最小二乘法来求得。控制点个数越多,其精度越大[4]。
MapInfo除了提供各种GIS处理功能外,还提供了MapBasic二次开发程序,用户可以根据需要自己编写基于MapInfo数据的处理程序,并在MapInfo主程序中直接调用,省却了利用其他软件提供的模块进行转换的麻烦[5~6]。
在MapBasic中所定义对象有10种,但是从AutoCAD转换过来的文件一般只涉及点对象(OBJ_TYPE_POINT)、直线对象(OBJ_TYPE_LINE)、折线对象(OBJ_TYPE_PLINE)和区域对象(OBJ_TYPE_REGION),因此坐标转换程序主要是针对这四类对象开发。点对象和直线对象的坐标转换较容易,通过ObjectGeography函数获得坐标,然后利用Alter Object语句将原有坐标转换成新坐标即可。折线对象和区域对象处理相对复杂,需要先利用ObjectInfo ()函数依次返回各节点的编号,然后利用ObjectNodeX ()和Object-NodeY ()函数获得各节点的x,y坐标,再利用Alter Object语句对节点坐标进行转换。对于区域对象,需要改变坐标的点的个数为区域的边的个数减1;对于折线对象需要改变坐标的点的个数为构成折线的直线段的个数[7]。实现这一功能程序编写较为烦琐,这里不再赘述。
2 实证研究——以江苏省 A 镇土地利用总体规划修改为例
A镇位于江苏省盐城市。由于B省道建设,需要对现有土地利用总体规划进行修改。江苏省B省道是省政府发展建设的省道干线公路,地处江苏省北部盐城市境内,是盐城市干线公路网中重要的横向干线,也是江苏公路网络体系建设的重要工程项目,对于促进苏北经济发展有着非常重要的战略意义。B 省道项目涉及 A 镇等八个乡镇。由于项目具有不可预见性,故在A镇等八个乡镇土地利用总体规划(1997~2010年)中无法准确预测该工程的用地规模和布局,因此在原规划中没有为该工程预留建设用地区。根据相关法律、法规和政策的要求,必须对土地利用总体规划进行修改。道路工程利用AutoCAD进行设计;土地利用总体规划修改工作利用MapInfo对土地利用结构及基本农田布局进行调整。因此工作中涉及到AutoCAD与MapInfo进行数据交换问题。本文以该项目A镇段为例,探讨如何利用AutoCAD与MapInfo来完成土地利用总体规划修改工作。
B省道项目区途经A镇境内,范围120°8′35.06″E~120°17′16.29″E,34°12′58.70″N~34°17′4.74″N (见图1),东西走向,路线长度13270m,路基宽60m,共占地79.62hm2。该项目为省重点项目,不占用A镇规划建设所占用的耕地指标,因此仅需要对项目占用的基本农田进行补划。
AutoCAD中进行道路工程设计使用直角坐标系,而MapInfo中使用地理坐标系。由于土地利用总体规划修改需要准确定位道路所经过的位置,从而确定所占用的基本农田和需要进行调整的规划建设用地的位置和面积,因此需要将道路工程的设计在MapInfo中精确反映出来。利用MapInfo提供的转换程序所得到结果与理论有一定出入,转入后的道路中心线出现偏差,见图2。
图2选取1∶5000比例尺下道路终点附近范围,理论道路中心线是利用局部范围内各节点的直角坐标换算成经纬度后生成。从图上可以看出,直接将AutoCAD所绘制道路转入MapInfo后,除了转换基点(省道在A镇的起始点)附近误差较小外,其余地区均出现不同程度的误差,且理论与实际道路所经过的地块差距较大,部分地区位置偏移明显,最大偏移可达80 m。因此需要对AutoCAD所转换的图形进行误差校正。
图1 项目区范围
图2 仿射变换前道路中心线与理论道路中心线位置比较 (局部放大)
2.1 求取仿射变换模型
分别在B省道A镇段的起止点、1/4处、1/2处和3/4处选择基点,从MapInfo中获得仿射变换前坐标(x,y),在AutoCAD中获得相应直角坐标系下坐标,并计算得到理论坐标(X,Y)。各基点的变换前坐标和理论坐标见表1。
表1 各基点仿射变换前及其理论坐标
利用最小二乘法进行平差,得到仿射变换公式
X=0.986 x+0.026 y+0.7923
Y=-0.026 x+1.048 y+1.1418
2.2 建立误差校正程序
在MapBasic中建立基于仿射变换模型的误差校正程序。B省道只涉及到折线对象的变换,程序较为简单,关键代码如下:
Fetch First From road
Do While Not EOT(road)
node_num=ObjectInfo(road.obj,OBJ_INFO_NPNTS)
section_num=ObjectInfo(road.obj,OBJ_INFO_NPOLYGONS)
for(i=1;i<=node_num;i+ +)
{
x=ObjectNodeX(road.obj,section_num,i)
y=ObjectNodeY(road.obj,section_num,i)
tran_x=0.988∗x+0.026∗y+0.7923
tran_y=-0.026∗x+1.048∗y+1.1418
Alter Object road.obj
Node Set Position section_num,i (tran_x,tran_y)
}
Fetch Next From road
Loop
2.3 变换图像比较
利用MapBasic所建立的误差校正程序,得到变换后B省道的位置。对比校正前后道路中心线位置与理论位置的关系,可以发现,经过变换后的道路位置与理论更加接近;缓冲区分析发现,变换前道路占地中遗漏了部分建设用地,错误占用了部分农田和水域,而通过仿射变换,这些错误已经得到校正。
2.4 结果
从误差范围来看,未仿射变换前,经度上误差在[0,26]m 范围,纬度上误差在[0,49]m范围;通过仿射变换后,经度上误差在[0,12]m范围,纬度误差在[0,18 ]m范围。在1∶10000地图上最大误差距离分别由2.6 mm和4.9 mm变换成1.2 mm和1.8 mm。经过仿射变换,AutoCAD转入的图像得到了较好的处理。
对变换后道路进行缓冲区分析,B省道A镇段占用农用地8 块,总面积50.70hm2,其中占用耕地43.01hm2;项目取土占用农用地2块,均为耕地,总面积20.67hm2。在占用地块中,基本农田60.87hm2,为保证基本农田数量与质量不变,将6 块质量相当的一般农地补划为基本农田,总面积60.87hm2。
3 结论与建议
利用MapBasic编制仿射变换程序,可以很好的解决MapInfo中矢量图形因为文件格式及坐标转换所带来的图像变形问题,使AutoCAD绘制的工程图能够与土地利用总体规划很好地进行衔接。这对于精确划定国家重大项目用地,保证项目得以顺利实施,落实基本农田保护政策,保障国家和个人的利益不受侵害具有十分重大的意义。
图3 校正前后道路中心线及道路占地情况比较 (局部放大)
这一方法的利用前景十分广阔,但就现阶段而言,这一方法还有不完善之处,需要进一步改进。仿射变换的应用数学模型由基点的空间位置、个数、误差大小等情况决定,不同位置,不同个数的基点,所推导出的模型可能是不一样的;就公式本身而言,建立的是一个空间线性模型,对于每一个节点的缩放、旋转和位移量是一样的。但实际上每个节点变形情况一致是不现实的,因此,用这一模型来满足所有节点变换要求是不完善的。同时,仿射变换属于误差校正方法,这一方法虽然比较直观,但是校正后的面积有一定误差[6]。这些问题的解决有待数学模型的进一步补充和改进,在实际 *** 作过程中为了提高转换精度,可以采用分块校正方法,将整个区域化分成多个小块,对不同区域,采用能够反映局部特征的变换模型来进行校正[7]。
参考文献
曹大贵.MapInfo和AutoCAD相互在转换在城镇规划中的应用[J].城市规划.2001,25 (8):28~30
张超,王秀茹,高楠.MapInfo和AutoCAD支持下的土地整理规划设计方法[J].水土保持研究.2006,13 (1):189~203
徐建刚.城市规划信息技术开发及应用[M].南京:南京大学出版社,2000
陈清明,徐建刚.GIS数据采集中的坐标变换模型应用[J].测绘通报.1999 (9)
许婧婧.基于MapGIS和 MapInfo 的矢量化方法——以土地整理制图为例[J].测绘工程.2006,15 (1):62~63
李剑琳.土地堪测定界中SCS for GIS、MapGIS、MapInfo之间数据的转换及处理[J].地矿测绘.2005,21 (1):16~18
赵泉华,蔡影,鲍勇.MapInfo下矢量图形纠正方法的研究与实现[J].矿山测量.2006 (1):31~32
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)