DEM格网化及其C++程序源代码.docx_第1页
DEM格网化及其C++程序源代码.docx_第2页
DEM格网化及其C++程序源代码.docx_第3页
DEM格网化及其C++程序源代码.docx_第4页
DEM格网化及其C++程序源代码.docx_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

提供DEM格网化(反距离加权平均法)的C+程序源代码:仅供参考和学习:一、原始数据:点名 X Y H11000.000 1000.000 1138.000 21066.510 978.184 1126.163 31096.171 1002.457 1128.254 41057.280 978.303 1125.953 51048.053 986.784 1125.657 61023.505 958.667 1125.763 71015.637 955.082 1125.966 81005.820 955.389 1126.193 9991.953 960.687 1126.386 10976.368 964.691 1126.535 11963.204 967.411 1126.732 12950.646 971.585 1126.786 13944.511 976.168 1126.508 14942.948 983.006 1128.617 15945.551 982.816 1128.497 16947.587 980.969 1128.578 17950.319 975.390 1128.053 18959.238 971.293 1128.416 19963.339 970.088 1128.415 20967.871 969.467 1127.536 21970.205 969.075 1127.032 22975.773 967.404 1127.821 23981.082 966.670 1127.782 24986.667 966.203 1127.187 25992.081 963.799 1127.523 26996.640 962.510 1127.457 271000.486 962.307 1127.325 281005.863 959.093 1127.641 291013.846 957.720 1127.764 301018.869 960.097 1127.136 311021.913 962.312 1126.313 321023.990 963.787 1126.315 331035.618 966.522 1127.696 341043.207 972.649 1128.097 351044.537 981.108 1128.191 361040.570 992.872 1127.960 371037.628 1000.500 1127.999 381035.093 1003.294 1128.364 391035.245 1007.948 1128.186 401027.492 1010.902 1130.536 411028.973 1001.151 1130.895 421031.690 989.854 1130.844 431030.377 981.971 1130.763 441024.349 974.772 1130.063 451018.020 971.390 1129.688 461012.490 967.527 1129.529 471001.192 969.493 1129.725 48993.241 969.818 1129.347 49981.216 974.293 1130.304 50984.703 971.754 1129.202 51975.652 975.907 1130.046 52969.617 978.510 1129.447 53963.588 980.007 1130.624 54957.030 984.734 1131.883 55952.833 987.742 1132.160 56947.931 991.019 1131.923 57941.380 995.278 1133.690 58935.805 993.451 1133.451 59934.921 984.262 1130.336 60936.093 978.231 1128.627 61932.270 974.553 1128.543 62929.181 987.507 1131.943 63928.937 998.973 1135.433 64931.402 1008.155 1136.816 65934.405 1014.781 1136.219 66946.333 1008.223 1135.906 67956.697 997.345 1134.716 68965.995 1004.132 1136.135 69981.470 1000.441 1137.330 70985.247 990.871 1135.722 71956.806 976.320 1129.443 72986.022 983.072 1133.233 731003.146 985.378 1134.415 741015.959 987.119 1133.859 751024.129 990.213 1132.919 761024.938 997.933 1132.978 771021.162 1014.273 1132.639 781015.369 1023.415 1132.984 791007.198 1030.287 1133.517 801000.828 1029.975 1134.315 81995.121 1034.524 1133.520 82988.801 1029.826 1133.469 83986.898 1016.770 1135.586 84991.409 1009.589 1137.963 851000.412 1015.774 1137.393 861007.258 1010.183 1137.441 871008.240 1002.166 1137.359 881002.538 994.448 1137.076 891003.129 999.684 1137.639 901014.433 964.440 1128.632 91982.500 1000.511 1137.378 92976.057 1007.028 1136.830 93959.844 1004.128 1135.766 94956.623 1009.264 1135.516 95945.068 1011.971 1135.767 96929.798 1018.449 1136.124 97932.595 1025.872 1132.876 98938.320 1023.706 1132.292 99947.482 1020.798 1132.318 100953.119 1016.226 1133.277 101960.309 1015.909 1133.587 102968.718 1017.318 1133.342 103976.231 1009.845 1136.325 1041001.582 1012.311 1137.886 105999.932 1014.858 1137.547 106985.244 1031.776 1131.692 107981.200 1027.426 1130.722 108972.153 1023.771 1129.937 109955.725 1023.454 1129.687 110940.977 1029.818 1129.108 111930.372 1034.872 1128.916 112931.716 1042.482 1125.616 113942.202 1035.913 1126.861 114953.929 1031.760 1127.398 115959.944 1032.699 1126.824 116966.588 1033.001 1126.361 117971.496 1038.998 1126.335 118973.582 1046.436 1127.125 119973.903 1055.554 1127.788 120979.581 1061.775 1130.259 121984.819 1064.897 1130.876 122986.137 1052.169 1130.229 123993.276 1053.425 1130.553 124998.329 1060.396 1129.125 1251004.600 1063.953 1126.520 1261007.661 1055.849 1127.487 1271008.057 1050.113 1128.279 128996.454 1047.252 1131.113 1291007.647 1040.970 1130.725 1301017.307 1037.545 1129.422 1311013.989 1026.845 1132.392 1321033.571 1016.155 1127.826 1331029.216 1027.669 1128.286 1341026.800 1031.103 1128.363 1351026.932 1035.874 1126.946 1361022.524 1045.707 1126.358 1371016.127 1056.316 1125.069 1381015.186 1059.786 1124.213 1391012.426 1067.182 1123.610 1401017.609 1067.330 1121.875 1411026.600 1048.938 1123.184 1421032.476 1033.300 1123.996 1431038.490 1017.752 1124.596 1441042.681 1002.082 1125.191 二、程序代码:#includeiostream.h#includemath.h#includefstream.hclass pointpublic:double x;double y;double H;int num;/序号bool flag;double s;/距离,用来存储距离double P;/由距离反算的 权值void compute_s(double x1,double y1);/函数计算距离,x,y为格网点距离point:point();point:point()x=y=H=-1;flag=false;s=0;void point:compute_s(double x1,double y1) double sum;sum=(point:x-x1)*(point:x-x1)+(point:y-y1)*(point:y-y1);point:s=sqrt(sum);/*class compute_sxpublic: bool do_compute(char name1,char name2);/数据格网化,name1原始数据 name2输出数据 compute_sx(); void read(char name);/读数据 void design_dem();/设计格网点坐标,dxdy void compute_dem_h();/计算格网点的高程值point *data;/原数据point *dem_data;/格网点数据int num_data;/原始数据个数 int num_dem_data;/dem 的数据个数int num_dem_x;/dem 在x方向上的个数int num_dem_y;/dem 在y方向上的个数double r;/搜索半径double dx,dy;double xmin;double xmax;double ymin;double ymax;int dem_xmin;int dem_xmax;int dem_ymin;int dem_ymax;private: void set_bool();/point 所有点bool为false double serch(double x,double y);/给定的xy坐标搜索在R内的值并将其flag= true;double compute_sx:serch(double x,double y) double memory_r=r;double s_sum=0;double P_sum=0;double height=0;int num_i=0;/搜读点数,如果num_i5 扩大搜所半径for(;r45;)/如果搜索半径扩大为70,跳出 num_i=0;for(int i=0;inum_data;i+) pute_s(x,y); if( datai.s r) s_sum=s_sum+datai.s; datai.flag=true; num_i+; /计算符合要求的点if(num_i=5) break;if(num_i=0) return -1;r=memory_r;/以下即为加权,求待定格网点的高程值for(int j=0;jnum_data;j+)if(dataj.flag=true)/height= height+ ( dataj.H*dataj.s/s_sum );dataj.P=s_sum/(dataj.s+0.001);/反距离设置权,防止分母为0P_sum=P_sum+dataj.P;for(j=0;jnum_data;j+)if(dataj.flag=true)height=height+dataj.H*dataj.P/P_sum;set_bool();return height;void compute_sx:set_bool()for(int i=0;inum_data;i+)datai.flag=false;return ;void compute_sx:compute_dem_h()for(int i=0;inum_dem_data;i+)/i为格网点的循环,计数 dem_datai.H=serch(dem_datai.x,dem_datai.y);/半径圆搜索 return ;compute_sx:compute_sx()ymax=xmax=-10000;xmin=ymin=10000;r=20;/默认搜索半径dx=dy=5;void compute_sx:read(char name) point abc10000; int i=0; ifstream in; in.open(name); if(!in) coutcan not open file!endl; return ; for(int ijk=0;ijkabci.num; inabci.x; inabci.y; inabci.H; i+; else break; i-;/点数-1; data =new pointi; compute_sx:num_data=i; for(int j=0;jcompute_sx:xmax) compute_sx:xmax=dataj.x; if(dataj.ycompute_sx:ymax) compute_sx:ymax=dataj.y; if(dataj.xcompute_sx:xmin) compute_sx:xmin=dataj.x; if(dataj.ycompute_sx:ymin) compute_sx:ymin=dataj.y; coutdataj.num dataj.x dataj.y dataj.Hendl; return ;void compute_sx:design_dem()compute_sx:dem_xmin=int ( compute_sx:xmin );compute_sx:dem_ymin=int ( compute_sx:ymin );compute_sx:dem_ymax=int ( compute_sx:ymax)+1;compute_sx:dem_xmax=int ( compute_sx:xmax)+1;compute_sx:num_dem_x= (dem_xmax-dem_xmin)/dx + 1;compute_sx:num_dem_y= (dem_ymax-dem_ymin)/dy + 1;compute_sx:num_dem_data=compute_sx:num_dem_x * compute_sx:num_dem_y;compute_sx:dem_data=new pointcompute_sx:num_dem_data;int ijk=0;/ijk计数for(int i=0;inum_dem_x;i+)for(int j=0;jnum_dem_y;j+)dem_dataijk.num=ijk;dem_dataijk.x=i*dx+dem_xmin;dem_dataijk.y=j*dy+dem_ymin;ijk+;bool compute_sx:do_compute(char name1,char name2)read(name1);design_dem();coutnum_data=num_dataendl;coutmin= xmin xmax=xmax ymin=ymin ymax=ymaxendl;coutdem_min= dem_xmin dem_xmax=dem_xmax dem_ymin=dem_ymin dem_ymax=dem_ymaxendl;coutnum_dem_x=num_dem_x num_dem_y=num_dem_y num_dem_data=num_dem_dataendl; compute_dem_h();int ijk=0;for(int i=0;inum_dem_x;i+)for(int j=0;jnum_dem_y;j+)cout(dem_dataijk.x,dem_dataijk.y)=dem_dataijk.H;ijk+;coutendl;ofstream ou;ou.open(name2,ios:out);ijk=0;for( i=0;inum_dem_x;i+)for(int j=0;jnum_dem_y;j+)/ou (a.dem_dataijk.x,a.dem_dataijk.y)=a.dem_dataijk.H ;oudem_dataijk.x,dem_dataijk.y,dem_dataijk.Hendl;ijk+;/ouendl;return true;/* main()compute_sx a;a.do_compute(D:数字地面模型DEM.txt,D:数字地面模型result.txt);备注:D:数字地面模型DEM.txt 原始数据路径 D:数字地面模型result.txt 输出结果及其路径三、解算结果:928,955,1128.59928,960,1128.6928,965,1128.66928,970,1128.97928,975,1129928,980,1129.97928,985,1130.85928,990,1131.89928,995,1133.21928,1000,1134.92928,1005,1135.45928,1010,1135.48928,1015,1135.17928,1020,1134.42928,1025,1132.33928,1030,1130.94928,1035,1129.49928,1040,1128.26928,1045,1127.57928,1050,1127.88928,1055,1128.08928,1060,1128.2928,1065,1128.28933,955,1128.2933,960,1128.12933,965,1128.19933,970,1128.6933,975,1128.76933,980,1129.72933,985,1130.46933,990,1131.5933,995,1133.02933,1000,1134.25933,1005,1135.35933,1010,1135.51933,1015,1135.33933,1020,1133.83933,1025,1132.57933,1030,1131.03933,1035,1129.42933,1040,1127.85933,1045,1127.18933,1050,1127.8933,1055,1128.05933,1060,1128.18933,1065,1128.14938,955,1127.69938,960,1127.7938,965,1128.18938,970,1128.49938,975,1128.99938,980,1129.42938,985,1130.15938,990,1131.25938,995,1132.59938,1000,1133.62938,1005,1134.73938,1010,1135.03938,1015,1134.53938,1020,1132.93938,1025,1132.03938,1030,1130.56938,1035,1129.3938,1040,1128.3938,1045,1127.83938,1050,1127.89938,1055,1128938,1060,1128.09938,1065,1127.96943,955,1127.63943,960,1127.73943,965,1128.05943,970,1128.12943,975,1128.51943,980,1129.13943,985,1129.8943,990,1130.95943,995,1132.72943,1000,1133.52943,1005,1134.75943,1010,1134.59943,1015,1134.19943,1020,1132.79943,1025,1131.61943,1030,1130.16943,1035,1128.08943,1040,1128.43943,1045,1127.38943,1050,1127.3943,1055,1127.31943,1060,1127.36943,1065,1127.21948,955,1127.69948,960,1127.69948,965,1127.94948,970,1128.27948,975,1128.44948,980,1129.07948,985,1129.89948,990,1131.28948,995,1132.3948,1000,1133.64948,1005,1134.81948,1010,1134.78948,1015,1133.82948,1020,1132.44948,1025,1131.74948,1030,1129.91948,1035,1128.84948,1040,1128.21948,1045,1127.14948,1050,1127.34948,1055,1127.19948,1060,1126.9948,1065,1127.55953,955,1127.64953,960,1127.65953,965,1127.92953,970,1128.25953,975,1128.59953,980,1129.4953,985,1130.36953,990,1131.52953,995,1132.72953,1000,1133.66953,1005,1134.37953,1010,1134.45953,1015,1133.3953,1020,1131.95953,1025,1130.76953,1030,1129.08953,1035,1128.38953,1040,1127.84953,1045,1127.13953,1050,1127.03953,1055,1126.88953,1060,1127.3953,1065,1127.6958,955,1127.48958,960,1127.66958,965,1128.07958,970,1128.4958,975,1128.89958,980,1129.45958,985,1130.72958,990,1131.34958,995,1133.15958,1000,1134.66958,1005,1134.82958,1010,1134.7958,1015,1133.28958,1020,1131.99958,1025,1130.26958,1030,1128.75958,1035,1128.16958,1040,1127.28958,1045,1126.93958,1050,1126.98958,1055,1127.38958,1060,1128.01958,1065,1128.5963,955,1127.47963,960,1127.71963,965,1127.82963,970,1128.29963,975,1128.7963,980,1129.95963,985,1130.27963,990,1131.33963,995,1133.88963,1000,1135.05963,1005,1135.31963,1010,1134.5963,1015,1133.26963,1020,1132.34963,1025,1130.17963,1030,1128.78963,1035,1127.97963,1040,1127.3963,1045,1126.92963,1050,1126.95963,1055,1128.03963,1060,1128.64963,1065,1128.79968,955,1127.47968,960,1127.93968,965,1127.97968,970,1127.88968,975,1128.84968,980,1129.24968,985,1130.45968,990,1133.36968,995,1134.73968,1000,1135.47968,1005,1135.53968,1010,1134.85968,1015,1133.41968,1020,1132.22968,1025,1130.72968,1030,1128.59968,1035,1127.76968,1040,1127.46968,1045,1127.17968,1050,1127.66968,1055,1128.42968,1060,1128.96968,1065,1129.2973,955,1127.25973,960,1127.8973,965,1127.89973,970,1128.27973,975,1128.94973,980,1129.39973,985,1130.81973,990,1133.73973,995,1134.74973,1000,1136.19973,1005,1135.89973,1010,1135.53973,1015,1134.2973,1020,1132.1973,1025,1130.81973,1030,1129.71973,1035,1128.52973,1040,1127.72973,1045,1127.67973,1050,1127.96973,1055,1128.14973,1060,1129.01973,1065,1129.39978,955,1127.54978,960,1127.75978,965,1127.8978,970,1128.4978,975,1129.17978,980,1129.55978,985,1131.35978,990,1133.88978,995,1135.66978,1000,1136.52978,1005,1136.31978,1010,1135.83978,1015,1134.81978,1020,1133.43978,1025,1131.58978,1030,1130.47978,1035,1129.75978,1040,1129.16978,1045,1128.93978,1050,1129978,1055,1128.92978,1060,1129.67978,1065,1129.83983,955,1127.68983,960,1127.79983,965,1128.07983,970,1128.5983,975,1129.33983,980,1130.01983,985,1132.07983,990,1134.56983,995,1136.57983,1000,1137.12983,1005,1136.86983,1010,1136.13983,1015,1135.35983,1020,1134.55983,1025,1132.75983,1030,1131.39983,1035,1131.05983,1040,1130.05983,1045,1130.08983,1050,1129.77983,1055,1129.56983,1060,1129.91983,1065,1130.35988,955,1127.54988,960,1127.61988,965,1127.95988,970,1128.45988,975,1129.31988,980,1130.3988,985,1132.96988,990,1135.12988,995,1136.5988,1000,1136.93988,1005,1137.21988,1010,1136.81988,1015,1135.73988,1020,1134.85988,1025,1134.04988,1030,1133.04988,1035,1131.83988,1040,1131.19988,1045,1130.56988,1050,1130.07988,1055,1129.68988,1060,1129.73988,1065,1130.01993,955,1127.49993,960,1127.31993,965,1127.92993,970,1129.08993,975,1129.37993,980,1130.54993,985,1133.5993,990,1135.98993,995,1136.75993,1000,1136.97993,1005,1137.32993,1010,1137.5993,1015,1136.38993,1020,1135.43993,1025,1134.61993,1030,1133.67993,1035,1132.79993,1040,1131.92993,1045,1130.84993,1050,1130.05993,1055,1129.89993,1060,1129.45993,1065,1129.13998,955,1127.53998,960,1127.63998,965,1127.95998,970,1128.79998,975,1129.51998,980,1131.16998,985,1134.1998,990,1136.2998,995,1136.85998,1000,1137.46998,1005,1137.44998,1010,1137.51998,1015,1136.8998,1020,1135.54998,1025,1134.62998,1030,1133.83998,1035,1132.64998,1040,1131.58998,1045,1131.07998,1050,1129.62998,1055,1128.81998,1060,1128.84998,1065,1128.021003,955,1127.351003,960,1127.611003,965,1127.911003,970,1128.681003,975,1129.711003,980,1131.661003,985,1134.421003,990,1136.041003,995,1137.021003,1000,1137.511003,1005,1137.41003,1010,1137.221003,1015,1136.791003,1020,1135.781003,1025,1134.51003,1030,1133.711003,1035,1132.591003,1040,1131.421003,1045,1129.681003,1050,1128.581003,1055,1127.741003,1060,1127.551003,1065,1126.881008,955,1127.171008,960,1127.551008,965,1127.91008,970,1128.511008,975,1129.11008,980,1131.551008,985,1133.991008,990,1135.651008,995,1136.341008,1000,1136.741008,1005,1136.841008,1010,1136.951008,1015,1136.031008,1020,1135.091008,1025,1133.761008,1030,1133.331008,1035,1131.441008,1040,1130.551008,1045,1129.251008,1050,1128.191008,1055,1127.211008,1060,1126.681008,1065,1125.831013,955,1127.21013,960,1127.61013,965,1128.151013,970,1128.691013,975,1129.411013,980,1131.111013,985,1133.361013,990,1133.941013,995,1135.121013,1000,1135.511013,1005,1135.591013,1010,1135.491013,1015,1135.251013,1020,1133.631013,1025,1132.771013,1030,1131.41013,1035,1130.051013,1040,1129.441013,1045,1128.531013,1050,1126.851013,1055,1126.391013,1060,1125.321013,1065,1124.641018,955,1126.951018,960,1127.291018,965,1127.721018,970,1128.681018,975,1129.461018,980,1130.551018,985,1132.741018,990,1133.281018,995,1133.681018,1000,1133.311018,1005,1133.571018,1010,1133.391018,1015,1132.871018,1020,1132.121018,1025,1131.441018,1030,1130.31018,1035,1129.281018,1040,1128.561018,1045,1127.411018,1050,1126.091018,1055,1125.531018,1060,1124.921018,1065,1123.951023,955,1127.061023,960,1126.791023,965,1127.211023,970,1128.391023,975,1129.51023,980,1130.31023,985,1131.721023,990,1132.121023

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论