新旧图号(图幅号)转换/计算/检查,经纬度转换计算,C#代码
图号(图幅号):地图图号是指为便于使用和管理,按照一定方法将各分幅地图进行的编号。
经常用到图号,但是在网上一直没有找到一个完整的图号转换程序,因此自己写了一个图号处理的库,分享出来。如有错误请指正。
新图号标准:GB/T 13989-2012.国家基本比例尺地形图分幅和编号
旧图号标准:无。历史遗留问题。从最初的苏联坐标系开始,旧图号分别采用了俄文编号/中文编号/数字编号/英文编号等等各个版本,使用起来很不方便。此次将旧图号统一了一下,全部采用“-”分割,百万图号标准同步新图号标准,子比例尺分幅时,共有4幅的用大写ABCD表示,如50万比例尺:H-45-A。大于4幅时使用数字,不足位补零,如10万比例尺:H-45-001。特殊情况,2.5万比例尺,最后一位用1234,倒数第二位用大写ABCD,如:H45-090-C-2。
编程语言:C#。库类包含的方法:新/旧图号互转,新/旧图号检查,新/旧图号非标准格式转标准格式,新/旧图号转图幅东南西北坐标,坐标点所在图幅 等。鉴于篇幅,完整代码可以到我的GitHub上下载。地址:https://github.com/tanghaojie/Mapnumber
1 using System; 2 using System. Linq; 3 4 namespace Mapnumber { 5 6 /// <summary> 7 /// Mapnumber = Sheet designation 8 /// 图幅号,图幅编号 9 /// 10 /// C# 11 /// 12 /// By JackieTang 13 /// 2016 14 /// 15 /// Reference & Standard: New mapnumber standard GB/T 13989-2012.国家基本比例尺地形图分幅和编号 -China 16 /// Old mapnumber standard Not found. Same as national geomatics center of China 17 /// 18 /// </summary> 19 public class Mapnumber { 20 21 #region Defins about mapnumber 图号定义 22 23 #region 1 million mapnumber defines,same in newmapnumber and oldmapnumber 百万图号定义,新旧图号相同 24 25 /// <summary> 26 /// 1 million standard row nums 27 /// 100万标准行号 28 /// </summary> 29 public static readonly string[] _100W_RowNum = { "A" , "B" , "C" , "D" , "E" , "F" , "G" , "H" , "I" , "J" , "K" , "L" , "M" , "N" , "O" , "P" , "Q" , "R" , "S" , "T" , "U" , "V" }; 30 /// <summary> 31 /// 1 million standard column nums 32 /// 100万标准列号 33 /// </summary> 34 public static readonly string[] _100W_ColumnNum = { "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20" 35 , "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40" 36 , "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60"}; 37 38 /// <summary> 39 /// Check 1 million mapnumber row num is valid 40 /// 检查100万图号行号是否有效 41 /// </summary> 42 /// <returns>true:valid;false:invalid</returns> 43 public bool Check100W_RowNum( string _100W_RowNum ) { 44 if ( _100W_RowNum. Contains( _100W_RowNum ) ) { 45 return true; 46 } 47 return false; 48 } 49 50 /// <summary> 51 /// Check 1 million mapnumber column num is valid 52 /// 检查100万图号列号是否有效 53 /// </summary> 54 /// <returns>true:valid;false:invalid</returns> 55 public bool Check100W_ColumnNum( string _100W_ColumnNum ) { 56 if ( _100W_ColumnNum. Contains( _100W_ColumnNum ) ) { 57 return true; 58 } 59 return false; 60 } 61 62 /// <summary> 63 /// Change 1 million mapnumber row digital to string 64 /// </summary> 65 /// <returns>1 million mapnumber row string number</returns> 66 public string Change100W_RowDigitalToString( int _100W_RowDigital ) { 67 switch ( _100W_RowDigital ) { 68 case 1: 69 return "A"; 70 case 2: 71 return "B"; 72 case 3: 73 return "C"; 74 case 4: 75 return "D"; 76 case 5: 77 return "E"; 78 case 6: 79 return "F"; 80 case 7: 81 return "G"; 82 case 8: 83 return "H"; 84 case 9: 85 return "I"; 86 case 10: 87 return "J"; 88 case 11: 89 return "K"; 90 case 12: 91 return "L"; 92 case 13: 93 return "M"; 94 case 14: 95 return "N"; 96 case 15: 97 return "O"; 98 case 16: 99 return "P"; 100 case 17: 101 return "Q"; 102 case 18: 103 return "R"; 104 case 19: 105 return "S"; 106 case 20: 107 return "T"; 108 case 21: 109 return "U"; 110 case 22: 111 return "V"; 112 default: 113 return ""; 114 } 115 } 116 117 /// <summary> 118 /// Change 1 million mapnumber row string number to digital 119 /// </summary> 120 /// <returns>1 million mapnumber row digital number.This is not standard</returns> 121 public int Change100W_RowStringToDigital( string _100W_RowString ) { 122 switch ( _100W_RowString ) { 123 case "A": 124 return 1; 125 case "B": 126 return 2; 127 case "C": 128 return 3; 129 case "D": 130 return 4; 131 case "E": 132 return 5; 133 case "F": 134 return 6; 135 case "G": 136 return 7; 137 case "H": 138 return 8; 139 case "I": 140 return 9; 141 case "J": 142 return 10; 143 case "K": 144 return 11; 145 case "L": 146 return 12; 147 case "M": 148 return 13; 149 case "N": 150 return 14; 151 case "O": 152 return 15; 153 case "P": 154 return 16; 155 case "Q": 156 return 17; 157 case "R": 158 return 18; 159 case "S": 160 return 19; 161 case "T": 162 return 20; 163 case "U": 164 return 21; 165 case "V": 166 return 22; 167 default: 168 return -1; 169 } 170 } 171 172 #endregion 173 174 #region Longitude Difference/Latitude Difference 经差、纬差 175 176 /// <summary> 177 /// 1,000,000 178 /// 1 million longitude difference 179 /// </summary> 180 public const decimal _100W_LongitudeDifference = 6M; 181 /// <summary> 182 /// 1,000,000 183 /// 1 million latitude difference 184 /// </summary> 185 public const decimal _100W_LatitudeDifference = 4M; 186 187 /// <summary> 188 /// 500,000 189 /// 500 thousand longitude difference 190 /// </summary> 191 public const decimal _50W_LongitudeDifference = 3M; 192 /// <summary> 193 /// 500,000 194 /// 500 thousand latitude difference 195 /// </summary> 196 public const decimal _50W_LatitudeDifference = 2M; 197 198 /// <summary> 199 /// 250,000 200 /// 250 thousand longitude difference 201 /// </summary> 202 public const decimal _25W_LongitudeDifference = 3 / 2M; 203 /// <summary> 204 /// 250,000 205 /// 250 thousand latitude difference 206 /// </summary> 207 public const decimal _25W_LatitudeDifference = 1M; 208 209 /// <summary> 210 /// 200,000 only oldmapnumber 211 /// 200 thousand longitude difference 212 /// </summary> 213 public const decimal _20W_LongitudeDifference = 1M; 214 /// <summary> 215 /// 200,000 only oldmapnumber 216 /// 200 thousand latitude difference 217 /// </summary> 218 public const decimal _20W_LatitudeDifference = 2 / 3M; 219 220 /// <summary> 221 /// 100,000 222 /// 100 thousand longitude difference 223 /// </summary> 224 public const decimal _10W_LongitudeDifference = 1 / 2M; 225 /// <summary> 226 /// 100,000 227 /// 100 thousand latitude difference 228 /// </summary> 229 public const decimal _10W_LatitudeDifference = 1 / 3M; 230 231 /// <summary> 232 /// 50,000 233 /// 50 thousand longitude difference 234 /// </summary> 235 public const decimal _5W_LongitudeDifference = 1 / 4M; 236 /// <summary> 237 /// 50,000 238 /// 50 thousand latitude difference 239 /// </summary> 240 public const decimal _5W_LatitudeDifference = 1 / 6M; 241 242 /// <summary> 243 /// 25,000 244 /// 25 thousand longitude difference 245 /// </summary> 246 public const decimal _2_5W_LongitudeDifference = 1 / 8M; 247 /// <summary> 248 /// 25,000 249 /// 25 thousand latitude difference 250 /// </summary> 251 public const decimal _2_5W_LatitudeDifference = 1 / 12M; 252 253 /// <summary> 254 /// 10,000 255 /// 10 thousand longitude difference 256 /// </summary> 257 public const decimal _1W_LongitudeDifference = 1 / 16M; 258 /// <summary> 259 /// 10,000 260 /// 10 thousand latitude difference 261 /// </summary> 262 public const decimal _1W_LatitudeDifference = 1 / 24M; 263 264 /// <summary> 265 /// 5,000 266 /// 5 thousand longitude difference 267 /// </summary> 268 public const decimal _0_5W_LongitudeDifference = 1 / 32M; 269 /// <summary> 270 /// 5,000 271 /// 5 thousand latitude difference 272 /// </summary> 273 public const decimal _0_5W_LatitudeDifference = 1 / 48M; 274 275 /// <summary> 276 /// 2,000 277 /// 2 thousand longitude difference 278 /// </summary> 279 public const decimal _0_2W_LongitudeDifference = 1 / 96M; 280 /// <summary> 281 /// 2,000 282 /// 2 thousand latitude difference 283 /// </summary> 284 public const decimal _0_2W_LatitudeDifference = 1 / 144M; 285 286 /// <summary> 287 /// 1,000 288 /// 1 thousand longitude difference 289 /// </summary> 290 public const decimal _0_1W_LongitudeDifference = 1 / 192M; 291 /// <summary> 292 /// 1,000 293 /// 1 thousand latitude difference 294 /// </summary> 295 public const decimal _0_1W_LatitudeDifference = 1 / 288M; 296 297 /// <summary> 298 /// 500 299 /// 500 longitude difference 300 /// </summary> 301 public const decimal _500_LongitudeDifference = 1 / 384M; 302 /// <summary> 303 /// 500 304 /// 500 latitude difference 305 /// </summary> 306 public const decimal _500_LatitudeDifference = 1 / 576M; 307 308 #endregion 309 310 #region New mapnumber defines 新图幅号定义 311 312 /// <summary> 313 /// Newmapnumber all scale strings 314 /// 新图号比例尺字符 315 /// </summary> 316 public static readonly string[] newMapnumber_ScaleString = { "B" , "C" , "D" , "E" , "F" , "G" , "H" , "I" , "J" , "K" }; 317 318 #region New mapnumber max row and column number 319 320 /// <summary> 321 /// 500,000 322 /// Newmapnumber max row and column number 323 /// 新图号最大行列号 324 /// </summary> 325 private const int newMapnumber_50W_MaxNum = 2; 326 327 /// <summary> 328 /// 250,000 329 /// Newmapnumber max row and column number 330 /// </summary> 331 private const int newMapnumber_25W_MaxNum = 4; 332 333 /// <summary> 334 /// 100,000 335 /// Newmapnumber max row and column number 336 /// </summary> 337 private const int newMapnumber_10W_MaxNum = 12; 338 339 /// <summary> 340 /// 50,000 341 /// Newmapnumber max row and column number 342 /// </summary> 343 private const int newMapnumber_5W_MaxNum = 24; 344 345 /// <summary> 346 /// 25,000 347 /// Newmapnumber max row and column number 348 /// </summary> 349 private const int newMapnumber_2_5W_MaxNum = 48; 350 351 /// <summary> 352 /// 10,000 353 /// Newmapnumber max row and column number 354 /// </summary> 355 private const int newMapnumber_1W_MaxNum = 96; 356 357 /// <summary> 358 /// 5,000 359 /// Newmapnumber max row and column number 360 /// </summary> 361 private const int newMapnumber_0_5W_MaxNum = 192; 362 363 /// <summary> 364 /// 2,000 365 /// Newmapnumber max row and column number 366 /// </summary> 367 private const int newMapnumber_0_2W_MaxNum = 576; 368 369 /// <summary> 370 /// 1,000 371 /// Newmapnumber max row and column number 372 /// </summary> 373 private const int newMapnumber_0_1W_MaxNum = 1152; 374 375 /// <summary> 376 /// 500 377 /// Newmapnumber max row and column number 378 /// </summary> 379 private const int newMapnumber_500_MaxNum = 2304; 380 381 #endregion 382 383 /// <summary> 384 /// Newmapnumber all row column num strings 385 /// </summary> 386 private string[] NewMapnumber_GetAllRCNumStrsByMaxNum( int maxNum ) { 387 string[] numStr = new string[maxNum]; 388 if ( maxNum < 999 ) { 389 for ( int q = 1 ; q <= maxNum ; q++ ) { 390 numStr[q - 1] = q. ToString( "000" ); 391 } 392 } else { 393 for ( int q = 1 ; q <= maxNum ; q++ ) { 394 numStr[q - 1] = q. ToString( "0000" ); 395 } 396 } 397 return numStr; 398 } 399 400 /// <summary> 401 /// Newmapnumber all row column num strings 402 /// </summary> 403 private string[] NewMapnumber_GetAllRCNumStrsByScaleStr( string scaleStr ) { 404 switch ( scaleStr ) { 405 case "B": 406 return NewMapnumber_GetAllRCNumStrsByMaxNum( newMapnumber_50W_MaxNum ); 407 case "C": 408 return NewMapnumber_GetAllRCNumStrsByMaxNum( newMapnumber_25W_MaxNum ); 409 case "D": 410 return NewMapnumber_GetAllRCNumStrsByMaxNum( newMapnumber_10W_MaxNum ); 411 case "E": 412 return NewMapnumber_GetAllRCNumStrsByMaxNum( newMapnumber_5W_MaxNum ); 413 case "F": 414 return NewMapnumber_GetAllRCNumStrsByMaxNum( newMapnumber_2_5W_MaxNum ); 415 case "G": 416 return NewMapnumber_GetAllRCNumStrsByMaxNum( newMapnumber_1W_MaxNum ); 417 case "H": 418 return NewMapnumber_GetAllRCNumStrsByMaxNum( newMapnumber_0_5W_MaxNum ); 419 case "I": 420 return NewMapnumber_GetAllRCNumStrsByMaxNum( newMapnumber_0_2W_MaxNum ); 421 case "J": 422 return NewMapnumber_GetAllRCNumStrsByMaxNum( newMapnumber_0_1W_MaxNum ); 423 case "K": 424 return NewMapnumber_GetAllRCNumStrsByMaxNum( newMapnumber_500_MaxNum ); 425 default: 426 return null; 427 } 428 } 429 430 /// <summary> 431 /// Newmapnumber check scale str is valid 432 /// </summary> 433 /// <param name="scaleStr"></param> 434 /// <returns>true:valid;false:invalid</returns> 435 private bool NewMapnumber_CheckScaleStr( string scaleStr ) { 436 if ( newMapnumber_ScaleString. Contains( scaleStr ) ) { 437 return true; 438 } 439 return false; 440 } 441 442 /// <summary> 443 /// Newmapnumber check row column num is valid 444 /// </summary> 445 /// <returns>true:valid;false:invalid</returns> 446 private bool NewMapnumber_CheckRCNumIsValid( string scaleStr , string rowNum , string columnNum ) { 447 try { 448 string[] rcNumStr = NewMapnumber_GetAllRCNumStrsByScaleStr( scaleStr ); 449 if ( rcNumStr != null ) { 450 if ( rcNumStr. Contains( rowNum ) && rcNumStr. Contains( columnNum ) ) { 451 return true; 452 } 453 } 454 return false; 455 } catch { 456 throw; 457 } 458 } 459 460 /// <summary> 461 /// Newmapnumber get scale denominator number by scale string 462 /// </summary> 463 /// <param name="scaleStr"></param> 464 /// <returns></returns> 465 private int NewMapnumber_GetScaleDenominatorNumberByScaleStr( string scaleStr ) { 466 switch ( scaleStr ) { 467 case "": 468 return 1000000; 469 case null: 470 return 1000000; 471 case "B": 472 return 500000; 473 case "C": 474 return 250000; 475 case "D": 476 return 100000; 477 case "E": 478 return 50000; 479 case "F": 480 return 25000; 481 case "G": 482 return 10000; 483 case "H": 484 return 5000; 485 case "I": 486 return 2000; 487 case "J": 488 return 1000; 489 case "K": 490 return 500; 491 default: 492 return -1; 493 } 494 } 495 496 #endregion 497 498 #region Old mapnumber defines 旧图幅号定义 499 500 #region Old mapnumber max row and column number 501 502 private const int oldMapnumber_50W_RCNum = 2; 503 private const int oldMapnumber_25W_RCNum = 4; 504 private const int oldMapnumber_20W_RCNum = 6; 505 private const int oldMapnumber_10W_RCNum = 12; 506 private const int oldMapnumber_5W_RCNum = 2; 507 private const int oldMapnumber_2_5W_RCNum = 2; 508 private const int oldMapnumber_1W_RCNum = 8; 509 510 #endregion 511 512 private readonly string[] oldMapnumber_ABCD = { "A" , "B" , "C" , "D" }; 513 private readonly string[] oldMapnumber_abcd = { "a" , "b" , "c" , "d" }; 514 private readonly string[] oldMapnumber_1234 = { "1" , "2" , "3" , "4" }; 515 516 /// <summary> 517 /// Get all string by sum 518 /// </summary> 519 /// <param name="sumNum"></param> 520 /// <returns></returns> 521 private string[] OldMapnumber_GetAllRCNumStrsByMaxNum( int sumNum ) { 522 string[] numStr = new string[sumNum]; 523 if ( sumNum < 99 ) { 524 for ( int q = 1 ; q <= sumNum ; q++ ) { 525 numStr[q - 1] = q. ToString( "00" ); 526 } 527 } else { 528 for ( int q = 1 ; q <= sumNum ; q++ ) { 529 numStr[q - 1] = q. ToString( "000" ); 530 } 531 } 532 return numStr; 533 } 534 535 private int OldMapnumber_GetSumRCNum( int rcNum ) { 536 return rcNum * rcNum; 537 } 538 539 /// <summary> 540 /// Oldmapnumber change 1234 to ABCD 541 /// </summary> 542 private string OldMapnumber_Change1234ToABCD( int num ) { 543 switch ( num ) { 544 case 1: 545 return "A"; 546 case 2: 547 return "B"; 548 case 3: 549 return "C"; 550 case 4: 551 return "D"; 552 default: 553 return null; 554 } 555 } 556 557 /// <summary> 558 /// Oldmapnumber change 1234 to abcd 559 /// </summary> 560 private string OldMapnumber_Change1234Toabcd( int num ) { 561 switch ( num ) { 562 case 1: 563 return "a"; 564 case 2: 565 return "b"; 566 case 3: 567 return "c"; 568 case 4: 569 return "d"; 570 default: 571 return null; 572 } 573 } 574 575 /// <summary> 576 /// Oldmapnumber change ABCD or abcd to 1234 577 /// </summary> 578 private int OldMapnumber_ChangeABCDTo1234( string ABCD_abcd ) { 579 switch ( ABCD_abcd ) { 580 case "A": 581 case "a": 582 return 1; 583 case "B": 584 case "b": 585 return 2; 586 case "C": 587 case "c": 588 return 3; 589 case "D": 590 case "d": 591 return 4; 592 default: 593 return -1; 594 } 595 } 596 597 #endregion 598 599 #endregion 600 601 602 #region Check 检查 603 604 #region Check new mapnumber 检查新图号 605 606 /// <summary> 607 /// Check new mapnumber 608 /// 检查新图幅号 609 /// </summary> 610 public bool NewMapnumber_Check( string newMapnumber ) { 611 try { 612 if ( string. IsNullOrEmpty( newMapnumber ) ) { 613 return false; 614 } 615 int length = newMapnumber. Length; 616 617 #region Check length 长度检查 618 if ( !NewMapnumber_CheckLength( length ) ) { 619 return false; 620 } 621 #endregion 622 623 #region Check 1 million 100万检查 624 string m100W = newMapnumber. Substring( 0 , 3 ); 625 if ( !NewMapnumber_Check100W( m100W ) ) { 626 return false; 627 } 628 if ( length == 3 ) { 629 return true; 630 } 631 #endregion 632 633 #region Check scale string 检查比例尺代码 634 string scaleStr = newMapnumber. Substring( 3 , 1 ); 635 if ( !NewMapnumber_CheckScaleStr( scaleStr ) ) { 636 return false; 637 } 638 #endregion 639 640 #region Check row and column number 检查行列号 641 if ( length == 10 && scaleStr != "J" && scaleStr != "K" ) { 642 string r = newMapnumber. Substring( 4 , 3 ); 643 string c = newMapnumber. Substring( 7 , 3 ); 644 if ( !NewMapnumber_CheckRCNumIsValid( scaleStr , r , c ) ) { 645 return false; 646 } 647 } else { 648 string r = newMapnumber. Substring( 4 , 4 ); 649 string c = newMapnumber. Substring( 8 , 4 ); 650 if ( !NewMapnumber_CheckRCNumIsValid( scaleStr , r , c ) ) { 651 return false; 652 } 653 } 654 #endregion 655 656 return true; 657 } catch { 658 throw; 659 } 660 } 661 662 /// <summary> 663 /// Check newmapnumber length 664 /// </summary> 665 private bool NewMapnumber_CheckLength( int newMapnumberLength ) { 666 if ( newMapnumberLength == 3 || newMapnumberLength == 10 || newMapnumberLength == 12 ) { 667 return true; 668 } 669 return false; 670 } 671 672 /// <summary> 673 /// Check newmapnumber 100W(1,000,000) 674 /// </summary> 675 /// <param name="newMapnumber100W"></param> 676 /// <returns></returns> 677 private bool NewMapnumber_Check100W( string newMapnumber100W ) { 678 if ( newMapnumber100W. Length == 3 ) { 679 string r = newMapnumber100W. Substring( 0 , 1 ); 680 string c = newMapnumber100W. Substring( 1 , 2 ); 681 if ( !Check100W_RowNum( r ) || !Check100W_ColumnNum( c ) ) { 682 return false; 683 } 684 return true; 685 } else { 686 return false; 687 } 688 } 689 690 #endregion 691 692 #region Chekc old mapnumber 检查旧图号 693 694 /// <summary> 695 /// Check old mapnumber 696 /// 检查旧图幅号 697 /// </summary> 698 /// <param name="oldMapnumber"></param> 699 /// <returns></returns> 700 public bool OldMapnumber_Check( string oldMapnumber ) { 701 try { 702 if ( string. IsNullOrEmpty( oldMapnumber ) ) { 703 return false; 704 } 705 if ( !oldMapnumber. Contains( '-' ) ) { 706 return false; 707 } 708 string[] split = oldMapnumber. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 709 int length = split. Length; 710 if ( !OldMapnumber_CheckAfterSplitLength( length ) ) { 711 return false; 712 } 713 if ( length == 2 )//100 714 { 715 return OldMapnumber_Check100W( oldMapnumber ); 716 } else if ( length == 3 )// 50 25 20 10 717 { 718 if ( OldMapnumber_Check50W( oldMapnumber ) || OldMapnumber_Check25W( oldMapnumber ) 719 || OldMapnumber_Check20W( oldMapnumber ) || OldMapnumber_Check10W( oldMapnumber ) ) { 720 return true; 721 } else { 722 return false; 723 } 724 } else if ( length == 4 )// 5 1 725 { 726 if ( OldMapnumber_Check5W( oldMapnumber ) || OldMapnumber_Check1W( oldMapnumber ) ) { 727 return true; 728 } else { 729 return false; 730 } 731 } else if ( length == 5 )//2.5 0.5 732 { 733 if ( OldMapnumber_Check2_5W( oldMapnumber ) || OldMapnumber_Check0_5W( oldMapnumber ) ) { 734 return true; 735 } else { 736 return false; 737 } 738 } else { 739 return false; 740 } 741 } catch { 742 throw; 743 } 744 } 745 746 /// <summary> 747 /// Check old mapnumber 100W(1,000,000) 748 /// 检查100万旧图幅号 749 /// </summary> 750 /// <param name="oldMapnumber100W"></param> 751 /// <returns></returns> 752 public bool OldMapnumber_Check100W( string oldMapnumber100W ) { 753 try { 754 if ( string. IsNullOrEmpty( oldMapnumber100W ) ) { 755 return false; 756 } 757 758 #region Check necessary - 检查必须的- 759 if ( !oldMapnumber100W. Contains( '-' ) ) { 760 return false; 761 } 762 #endregion 763 764 string[] split = oldMapnumber100W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 765 766 #region Check length 检查长度 767 int length = split. Length; 768 if ( length != 2 ) { 769 return false; 770 } 771 #endregion 772 773 #region Check 100W row column num 检查100万行列号 774 string r = split[0]; 775 string c = split[1]; 776 if ( !Check100W_RowNum( r ) || !Check100W_ColumnNum( c ) ) { 777 return false; 778 } 779 #endregion 780 781 return true; 782 } catch { 783 throw; 784 } 785 } 786 787 /// <summary> 788 /// Check old mapnumber 50W(500,000) 789 /// 检查50万旧图幅号 790 /// </summary> 791 /// <param name="oldMapnumber50W"></param> 792 /// <returns></returns> 793 public bool OldMapnumber_Check50W( string oldMapnumber50W ) { 794 try { 795 if ( string. IsNullOrEmpty( oldMapnumber50W ) ) { 796 return false; 797 } 798 799 #region Check necessary - 检查必须的- 800 if ( !oldMapnumber50W. Contains( '-' ) ) { 801 return false; 802 } 803 #endregion 804 805 string[] split = oldMapnumber50W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 806 807 #region Check length 检查长度 808 int length = split. Length; 809 if ( length != 3 ) { 810 return false; 811 } 812 #endregion 813 814 #region Check 100W row column num 检查100万行列号 815 string r = split[0]; 816 string c = split[1]; 817 if ( !Check100W_RowNum( r ) || !Check100W_ColumnNum( c ) ) { 818 return false; 819 } 820 #endregion 821 822 #region Check sub row column num 检查子行列号 823 string k = split[2]; 824 if ( !oldMapnumber_ABCD. Contains( k ) ) { 825 return false; 826 } 827 #endregion 828 829 return true; 830 } catch { 831 throw; 832 } 833 } 834 835 /// <summary> 836 /// Check old mapnumber 25W(250,000) 837 /// 检查25万旧图幅号 838 /// </summary> 839 /// <param name="oldMapnumber25W"></param> 840 /// <returns></returns> 841 public bool OldMapnumber_Check25W( string oldMapnumber25W ) { 842 try { 843 if ( string. IsNullOrEmpty( oldMapnumber25W ) ) { 844 return false; 845 } 846 847 #region Check necessary -[] 检查必须的 - [ ] 848 if ( !oldMapnumber25W. Contains( '-' ) || !oldMapnumber25W. Contains( '[' ) || !oldMapnumber25W. Contains( ']' ) ) { 849 return false; 850 } 851 852 #endregion 853 854 string[] split = oldMapnumber25W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 855 856 #region Check length 检查长度 857 int length = split. Length; 858 if ( length != 3 ) { 859 return false; 860 } 861 #endregion 862 863 #region Check 100W row column num 检查100万行列号 864 string r = split[0]; 865 string c = split[1]; 866 if ( !Check100W_RowNum( r ) || !Check100W_ColumnNum( c ) ) { 867 return false; 868 } 869 #endregion 870 871 #region Check sub row column num 检查子行列号 872 string k = split[2]; 873 string[] subSplit = k. Split( new char[] { '[' , ']' } , StringSplitOptions. RemoveEmptyEntries ); 874 int len = subSplit. Length; 875 if ( len != 1 ) { 876 return false; 877 } 878 string sub = subSplit[0]; 879 int sum = OldMapnumber_GetSumRCNum( oldMapnumber_25W_RCNum ); 880 string[] strs = OldMapnumber_GetAllRCNumStrsByMaxNum( sum ); 881 if ( strs. Contains( sub ) ) { 882 return true; 883 } else { 884 return false; 885 } 886 #endregion 887 888 } catch { 889 throw; 890 } 891 } 892 893 /// <summary> 894 /// Check old mapnumber 20W(200,000) 895 /// 检查20万旧图幅号 896 /// </summary> 897 /// <param name="oldMapnumber20W"></param> 898 /// <returns></returns> 899 public bool OldMapnumber_Check20W( string oldMapnumber20W ) { 900 try { 901 if ( string. IsNullOrEmpty( oldMapnumber20W ) ) { 902 return false; 903 } 904 905 #region Check necessary -() 检查必须的 - ( ) 906 if ( !oldMapnumber20W. Contains( '-' ) || !oldMapnumber20W. Contains( '(' ) || !oldMapnumber20W. Contains( ')' ) ) { 907 return false; 908 } 909 #endregion 910 911 string[] split = oldMapnumber20W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 912 913 #region Check length 检查长度 914 int length = split. Length; 915 if ( length != 3 ) { 916 return false; 917 } 918 #endregion 919 920 #region Check 100W row column num 检查100万行列号 921 string r = split[0]; 922 string c = split[1]; 923 if ( !Check100W_RowNum( r ) || !Check100W_ColumnNum( c ) ) { 924 return false; 925 } 926 #endregion 927 928 #region Check sub row column num 检查子行列号 929 string k = split[2]; 930 string[] subSplit = k. Split( new char[] { '(' , ')' } , StringSplitOptions. RemoveEmptyEntries ); 931 int len = subSplit. Length; 932 if ( len != 1 ) { 933 return false; 934 } 935 string sub = subSplit[0]; 936 int sum = OldMapnumber_GetSumRCNum( oldMapnumber_20W_RCNum ); 937 string[] strs = OldMapnumber_GetAllRCNumStrsByMaxNum( sum ); 938 if ( strs. Contains( sub ) ) { 939 return true; 940 } else { 941 return false; 942 } 943 #endregion 944 945 } catch { 946 throw; 947 } 948 } 949 950 /// <summary> 951 /// Check old mapnumber 10W(100,000) 952 /// 检查10万旧图幅号 953 /// </summary> 954 /// <param name="oldMapnumber10W"></param> 955 /// <returns></returns> 956 public bool OldMapnumber_Check10W( string oldMapnumber10W ) { 957 try { 958 if ( string. IsNullOrEmpty( oldMapnumber10W ) ) { 959 return false; 960 } 961 962 #region Check necessary - 检查必须的 - 963 if ( !oldMapnumber10W. Contains( '-' ) ) { 964 return false; 965 } 966 #endregion 967 968 string[] split = oldMapnumber10W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 969 970 #region Check length 检查长度 971 int length = split. Length; 972 if ( length != 3 ) { 973 return false; 974 } 975 #endregion 976 977 #region Check 100W row column num 检查100万行列号 978 string r = split[0]; 979 string c = split[1]; 980 if ( !Check100W_RowNum( r ) || !Check100W_ColumnNum( c ) ) { 981 return false; 982 } 983 #endregion 984 985 #region Check sub row column num 检查子行列号 986 string sub = split[2]; 987 int sum = OldMapnumber_GetSumRCNum( oldMapnumber_10W_RCNum ); 988 string[] strs = OldMapnumber_GetAllRCNumStrsByMaxNum( sum ); 989 if ( strs. Contains( sub ) ) { 990 return true; 991 } else { 992 return false; 993 } 994 #endregion 995 996 } catch { 997 throw; 998 } 999 } 1000 1001 /// <summary> 1002 /// Check old mapnumber 5W(50,000) 1003 /// 检查5万旧图幅号 1004 /// </summary> 1005 /// <param name="oldMapnumber5W"></param> 1006 /// <returns></returns> 1007 public bool OldMapnumber_Check5W( string oldMapnumber5W ) { 1008 try { 1009 if ( string. IsNullOrEmpty( oldMapnumber5W ) ) { 1010 return false; 1011 } 1012 1013 #region 检查必须的 - 1014 if ( !oldMapnumber5W. Contains( '-' ) ) { 1015 return false; 1016 } 1017 #endregion 1018 1019 string[] split = oldMapnumber5W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 1020 1021 #region 检查长度 1022 int length = split. Length; 1023 if ( length != 4 ) { 1024 return false; 1025 } 1026 #endregion 1027 1028 #region 检查10万图号 1029 string o10W = split[0] + "-" + split[1] + "-" + split[2]; 1030 if ( !OldMapnumber_Check10W( o10W ) ) { 1031 return false; 1032 } 1033 #endregion 1034 1035 #region 检查子行列号 1036 string k = split[3]; 1037 if ( !oldMapnumber_ABCD. Contains( k ) ) { 1038 return false; 1039 } 1040 #endregion 1041 1042 return true; 1043 } catch { 1044 throw; 1045 } 1046 } 1047 1048 /// <summary> 1049 /// Check old mapnumber 2.5W(25,000) 1050 /// 检查2.5万旧图幅号 1051 /// </summary> 1052 /// <param name="oldMapnumber2_5W"></param> 1053 /// <returns></returns> 1054 public bool OldMapnumber_Check2_5W( string oldMapnumber2_5W ) { 1055 try { 1056 if ( string. IsNullOrEmpty( oldMapnumber2_5W ) ) { 1057 return false; 1058 } 1059 1060 #region 检查必须的 - 1061 if ( !oldMapnumber2_5W. Contains( '-' ) ) { 1062 return false; 1063 } 1064 #endregion 1065 string[] split = oldMapnumber2_5W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 1066 1067 #region 检查长度 1068 int length = split. Length; 1069 if ( length != 5 ) { 1070 return false; 1071 } 1072 #endregion 1073 1074 #region 检查5万图号 1075 string o5W = split[0] + "-" + split[1] + "-" + split[2] + "-" + split[3]; 1076 if ( !OldMapnumber_Check5W( o5W ) ) { 1077 return false; 1078 } 1079 #endregion 1080 1081 #region 检查子行列号 1082 string k = split[4]; 1083 if ( !oldMapnumber_1234. Contains( k ) ) { 1084 return false; 1085 } 1086 #endregion 1087 1088 return true; 1089 } catch { 1090 throw; 1091 } 1092 } 1093 1094 /// <summary> 1095 /// Check old mapnumber 1W(10,000) 1096 /// 检查1万旧图幅号 1097 /// </summary> 1098 /// <param name="oldMapnumber1W"></param> 1099 /// <returns></returns> 1100 public bool OldMapnumber_Check1W( string oldMapnumber1W ) { 1101 try { 1102 if ( string. IsNullOrEmpty( oldMapnumber1W ) ) { 1103 return false; 1104 } 1105 1106 #region 检查必须的 - ( ) 1107 if ( !oldMapnumber1W. Contains( '-' ) || !oldMapnumber1W. Contains( '(' ) || !oldMapnumber1W. Contains( ')' ) ) { 1108 return false; 1109 } 1110 #endregion 1111 1112 string[] split = oldMapnumber1W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 1113 1114 #region 检查长度 1115 int length = split. Length; 1116 if ( length != 4 ) { 1117 return false; 1118 } 1119 #endregion 1120 1121 #region 检查10万图号 1122 string o10W = split[0] + "-" + split[1] + "-" + split[2]; 1123 if ( !OldMapnumber_Check10W( o10W ) ) { 1124 return false; 1125 } 1126 #endregion 1127 1128 #region 检查子行列号 1129 string k = split[3]; 1130 string[] subSplit = k. Split( new char[] { '(' , ')' } , StringSplitOptions. RemoveEmptyEntries ); 1131 int len = subSplit. Length; 1132 if ( len != 1 ) { 1133 return false; 1134 } 1135 string sub = subSplit[0]; 1136 int sum = OldMapnumber_GetSumRCNum( oldMapnumber_1W_RCNum ); 1137 string[] strs = OldMapnumber_GetAllRCNumStrsByMaxNum( sum ); 1138 if ( strs. Contains( sub ) ) { 1139 return true; 1140 } else { 1141 return false; 1142 } 1143 #endregion 1144 1145 } catch { 1146 throw; 1147 } 1148 } 1149 1150 /// <summary> 1151 /// Check old mapnumber 5,000 1152 /// 检查0.5万旧图幅号 1153 /// </summary> 1154 /// <param name="oldMapnumber0_5W"></param> 1155 /// <returns></returns> 1156 public bool OldMapnumber_Check0_5W( string oldMapnumber0_5W ) { 1157 try { 1158 if ( string. IsNullOrEmpty( oldMapnumber0_5W ) ) { 1159 return false; 1160 } 1161 1162 #region 检查必须的 - ( ) 1163 if ( !oldMapnumber0_5W. Contains( '-' ) || !oldMapnumber0_5W. Contains( '(' ) || !oldMapnumber0_5W. Contains( ')' ) ) { 1164 return false; 1165 } 1166 #endregion 1167 1168 string[] split = oldMapnumber0_5W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 1169 1170 #region 检查长度 1171 int length = split. Length; 1172 if ( length != 5 ) { 1173 return false; 1174 } 1175 #endregion 1176 1177 #region 检查1万图号 1178 string o1W = split[0] + "-" + split[1] + "-" + split[2] + "-" + split[3]; 1179 if ( !OldMapnumber_Check1W( o1W ) ) { 1180 return false; 1181 } 1182 #endregion 1183 1184 #region 检查子行列号 1185 string k = split[4]; 1186 if ( !oldMapnumber_abcd. Contains( k ) ) { 1187 return false; 1188 } 1189 #endregion 1190 1191 return true; 1192 } catch { 1193 throw; 1194 } 1195 } 1196 1197 /// <summary> 1198 /// Check old mapnumber length after split 1199 /// </summary> 1200 /// <param name="oldMapnumberLength"></param> 1201 /// <returns></returns> 1202 private bool OldMapnumber_CheckAfterSplitLength( int oldMapnumberLength ) { 1203 if ( oldMapnumberLength < 2 || oldMapnumberLength > 5 ) { 1204 return false; 1205 } 1206 return true; 1207 } 1208 1209 #endregion 1210 1211 #endregion 1212 1213 1214 #region Exchange new/old mapnumber 新旧图幅号转换 1215 1216 #region Old mapnumber to new mapnumber 旧图号转新图号 1217 1218 /// <summary> 1219 /// Old mapnumber to new mapnumber 1220 /// 旧图幅号转新图幅号 1221 /// </summary> 1222 /// <param name="oldMapnumber"></param> 1223 /// <returns></returns> 1224 public string OldMapnumberToNewMapnumber( string oldMapnumber ) { 1225 if ( !OldMapnumber_Check( oldMapnumber ) ) { 1226 return ""; 1227 } 1228 string result = ""; 1229 result = OldMapnumberToNewMapnumber_100W( oldMapnumber ); 1230 if ( !string. IsNullOrEmpty( result ) ) { 1231 return result; 1232 } 1233 result = OldMapnumberToNewMapnumber_50W( oldMapnumber ); 1234 if ( !string. IsNullOrEmpty( result ) ) { 1235 return result; 1236 } 1237 result = OldMapnumberToNewMapnumber_25W( oldMapnumber ); 1238 if ( !string. IsNullOrEmpty( result ) ) { 1239 return result; 1240 } 1241 result = OldMapnumberToNewMapnumber_10W( oldMapnumber ); 1242 if ( !string. IsNullOrEmpty( result ) ) { 1243 return result; 1244 } 1245 result = OldMapnumberToNewMapnumber_5W( oldMapnumber ); 1246 if ( !string. IsNullOrEmpty( result ) ) { 1247 return result; 1248 } 1249 result = OldMapnumberToNewMapnumber_2_5W( oldMapnumber ); 1250 if ( !string. IsNullOrEmpty( result ) ) { 1251 return result; 1252 } 1253 result = OldMapnumberToNewMapnumber_1W( oldMapnumber ); 1254 if ( !string. IsNullOrEmpty( result ) ) { 1255 return result; 1256 } 1257 result = OldMapnumberToNewMapnumber_0_5W( oldMapnumber ); 1258 if ( !string. IsNullOrEmpty( result ) ) { 1259 return result; 1260 } 1261 return result; 1262 } 1263 1264 /// <summary> 1265 /// Old mapnumber to new mapnumber 100W 1266 /// 100万旧图幅号转新图幅号 1267 /// </summary> 1268 /// <param name="oldMapnumber100W"></param> 1269 /// <returns></returns> 1270 public string OldMapnumberToNewMapnumber_100W( string oldMapnumber100W ) { 1271 try { 1272 if ( !OldMapnumber_Check100W( oldMapnumber100W ) ) { 1273 return ""; 1274 } 1275 string[] temp = oldMapnumber100W. Split( '-' ); 1276 string new100 = temp[0] + temp[1]. PadLeft( 2 , '0' ); 1277 return new100; 1278 } catch { 1279 throw; 1280 } 1281 } 1282 1283 /// <summary> 1284 /// Old mapnumber to new mapnumber 50W 1285 /// 50万旧图幅号转新图幅号 1286 /// </summary> 1287 /// <param name="oldMapnumber50W"></param> 1288 /// <returns></returns> 1289 public string OldMapnumberToNewMapnumber_50W( string oldMapnumber50W ) { 1290 try { 1291 if ( !OldMapnumber_Check50W( oldMapnumber50W ) ) { 1292 return ""; 1293 } 1294 string[] temp = oldMapnumber50W. Split( '-' ); 1295 string new100 = temp[0] + temp[1]. PadLeft( 2 , '0' ); 1296 int x = OldMapnumber_ChangeABCDTo1234( temp[2] ); 1297 if ( x <= 0 ) { 1298 return ""; 1299 } 1300 int new50R = OldToNew50W_R( x ); 1301 int new50C = OldToNew50W_C( x ); 1302 return new100 + "B" + new50R. ToString(). PadLeft( 3 , '0' ) + new50C. ToString(). PadLeft( 3 , '0' ); 1303 } catch { 1304 throw; 1305 } 1306 } 1307 1308 /// <summary> 1309 /// Old mapnumber to new mapnumber 25W 1310 /// 25万旧图幅号转新图幅号 1311 /// </summary> 1312 /// <param name="oldMapnumber25W"></param> 1313 /// <returns></returns> 1314 public string OldMapnumberToNewMapnumber_25W( string oldMapnumber25W ) { 1315 try { 1316 if ( !OldMapnumber_Check25W( oldMapnumber25W ) ) { 1317 return ""; 1318 } 1319 string[] temp = oldMapnumber25W. Split( '-' ); 1320 string new100 = temp[0] + temp[1]. PadLeft( 2 , '0' ); 1321 string sub25W = temp[2]; 1322 string[] subTemp = sub25W. Split( new char[] { '[' , ']' } , StringSplitOptions. RemoveEmptyEntries ); 1323 int x = int. Parse( subTemp[0] ); 1324 int new25R = OldToNew25W_R( x ); 1325 int new25C = OldToNew25W_C( x ); 1326 return new100 + "C" + new25R. ToString(). PadLeft( 3 , '0' ) + new25C. ToString(). PadLeft( 3 , '0' ); 1327 } catch { 1328 throw; 1329 } 1330 } 1331 1332 /// <summary> 1333 /// Old mapnumber to new mapnumber 10W 1334 /// 10万旧图幅号转新图幅号 1335 /// </summary> 1336 /// <param name="oldMapnumber10W"></param> 1337 /// <returns></returns> 1338 public string OldMapnumberToNewMapnumber_10W( string oldMapnumber10W ) { 1339 try { 1340 if ( !OldMapnumber_Check10W( oldMapnumber10W ) ) { 1341 return ""; 1342 } 1343 string[] temp = oldMapnumber10W. Split( '-' ); 1344 string new100 = temp[0] + temp[1]. PadLeft( 2 , '0' ); 1345 string sub10W = temp[2]; 1346 int x = int. Parse( sub10W ); 1347 int new10R = OldToNew10W_R( x ); 1348 int new10C = OldToNew10W_C( x ); 1349 return new100 + "D" + new10R. ToString(). PadLeft( 3 , '0' ) + new10C. ToString(). PadLeft( 3 , '0' ); 1350 } catch { 1351 throw; 1352 } 1353 } 1354 1355 /// <summary> 1356 /// Old mapnumber to new mapnumber 5W 1357 /// 5万旧图幅号转新图幅号 1358 /// </summary> 1359 /// <param name="oldMapnumber5W"></param> 1360 /// <returns></returns> 1361 public string OldMapnumberToNewMapnumber_5W( string oldMapnumber5W ) { 1362 try { 1363 if ( !OldMapnumber_Check5W( oldMapnumber5W ) ) { 1364 return ""; 1365 } 1366 string[] temp = oldMapnumber5W. Split( '-' ); 1367 string new100 = temp[0] + temp[1]. PadLeft( 2 , '0' ); 1368 string sub10W = temp[2]; 1369 int x = int. Parse( sub10W ); 1370 int new10R = OldToNew10W_R( x ); 1371 int new10C = OldToNew10W_C( x ); 1372 int sub5W = OldMapnumber_ChangeABCDTo1234( temp[3] ); 1373 int new5R = OldToNew5W_R( sub5W , new10R ); 1374 int new5C = OldToNew5W_C( sub5W , new10C ); 1375 return new100 + "E" + new5R. ToString(). PadLeft( 3 , '0' ) + new5C. ToString(). PadLeft( 3 , '0' ); 1376 } catch { 1377 throw; 1378 } 1379 } 1380 1381 /// <summary> 1382 /// Old mapnumber to new mapnumber 2.5W 1383 /// 2.5万旧图幅号转新图幅号 1384 /// </summary> 1385 /// <param name="oldMapnumber2_5W"></param> 1386 /// <returns></returns> 1387 public string OldMapnumberToNewMapnumber_2_5W( string oldMapnumber2_5W ) { 1388 try { 1389 if ( !OldMapnumber_Check2_5W( oldMapnumber2_5W ) ) { 1390 return ""; 1391 } 1392 string[] temp = oldMapnumber2_5W. Split( '-' ); 1393 string new100 = temp[0] + temp[1]. PadLeft( 2 , '0' ); 1394 string sub10W = temp[2]; 1395 int x = int. Parse( sub10W ); 1396 int new10R = OldToNew10W_R( x ); 1397 int new10C = OldToNew10W_C( x ); 1398 int sub5W = OldMapnumber_ChangeABCDTo1234( temp[3] ); 1399 int new5R = OldToNew5W_R( sub5W , new10R ); 1400 int new5C = OldToNew5W_C( sub5W , new10C ); 1401 int sub2_5W = int. Parse( temp[4] ); 1402 int new2_5R = OldToNew2_5W_R( sub2_5W , new5R ); 1403 int new2_5C = OldToNew2_5W_C( sub2_5W , new5C ); 1404 string new2 = new100 + "F" + new2_5R. ToString(). PadLeft( 3 , '0' ) + new2_5C. ToString(). PadLeft( 3 , '0' ); 1405 return new2; 1406 } catch { 1407 throw; 1408 } 1409 } 1410 1411 /// <summary> 1412 /// Old mapnumber to new mapnumber 1W 1413 /// 1万旧图幅号转新图幅号 1414 /// </summary> 1415 /// <param name="oldMapnumber1W"></param> 1416 /// <returns></returns> 1417 public string OldMapnumberToNewMapnumber_1W( string oldMapnumber1W ) { 1418 try { 1419 if ( !OldMapnumber_Check1W( oldMapnumber1W ) ) { 1420 return ""; 1421 } 1422 string[] temp = oldMapnumber1W. Split( '-' ); 1423 string new100 = temp[0] + temp[1]. PadLeft( 2 , '0' ); 1424 string sub10W = temp[2]; 1425 int x = int. Parse( sub10W ); 1426 int new10R = OldToNew10W_R( x ); 1427 int new10C = OldToNew10W_C( x ); 1428 string sub1W = temp[3]; 1429 string[] subTemp = sub1W. Split( new char[] { '(' , ')' } , StringSplitOptions. RemoveEmptyEntries ); 1430 int k = int. Parse( subTemp[0] ); 1431 int new1R = OldToNew1W_R( k , new10R ); 1432 int new1C = OldToNew1W_C( k , new10C ); 1433 return new100 + "G" + new1R. ToString(). PadLeft( 3 , '0' ) + new1C. ToString(). PadLeft( 3 , '0' ); 1434 } catch { 1435 throw; 1436 } 1437 } 1438 1439 /// <summary> 1440 /// Old mapnumber to new mapnumber 0.5W 1441 /// 0.5万旧图幅号转新图幅号 1442 /// </summary> 1443 /// <param name="oldMapnumber0_5W"></param> 1444 /// <returns></returns> 1445 public string OldMapnumberToNewMapnumber_0_5W( string oldMapnumber0_5W ) { 1446 try { 1447 if ( !OldMapnumber_Check0_5W( oldMapnumber0_5W ) ) { 1448 return ""; 1449 } 1450 string[] temp = oldMapnumber0_5W. Split( '-' ); 1451 string new100 = temp[0] + temp[1]. PadLeft( 2 , '0' ); 1452 string sub10W = temp[2]; 1453 int x = int. Parse( sub10W ); 1454 int new10R = OldToNew10W_R( x ); 1455 int new10C = OldToNew10W_C( x ); 1456 string sub1W = temp[3]; 1457 string[] subTemp = sub1W. Split( new char[] { '(' , ')' } , StringSplitOptions. RemoveEmptyEntries ); 1458 int k = int. Parse( subTemp[0] ); 1459 int new1R = OldToNew1W_R( k , new10R ); 1460 int new1C = OldToNew1W_C( k , new10C ); 1461 string sub0_5W = temp[4]; 1462 int l = OldMapnumber_ChangeABCDTo1234( sub0_5W ); 1463 int new0_5R = OldToNew0_5W_R( l , new1R ); 1464 int new0_5C = OldToNew0_5W_C( l , new1C ); 1465 return new100 + "H" + new0_5R. ToString(). PadLeft( 3 , '0' ) + new0_5C. ToString(). PadLeft( 3 , '0' ); 1466 } catch { 1467 throw; 1468 } 1469 } 1470 1471 #region Old mapnumber to new mapnumber calculate row column number 旧转新计算行列号 1472 1473 /// <summary> 1474 /// Old mapnumber to new mapnumber calculate 50W row number 1475 /// </summary> 1476 private int OldToNew50W_R( int oldMapnumberSub50W ) { 1477 return ( oldMapnumberSub50W - 1 ) / 2 + 1; 1478 } 1479 /// <summary> 1480 /// Old mapnumber to new mapnumber calculate 50W column number 1481 /// </summary> 1482 private int OldToNew50W_C( int oldMapnumberSub50W ) { 1483 return ( oldMapnumberSub50W + 1 ) % 2 + 1; 1484 } 1485 1486 /// <summary> 1487 /// Old mapnumber to new mapnumber calculate 25W row number 1488 /// </summary> 1489 private int OldToNew25W_R( int oldMapnumberSub25W ) { 1490 return ( ( oldMapnumberSub25W - 1 ) / 4 ) + 1; 1491 } 1492 /// <summary> 1493 /// Old mapnumber to new mapnumber calculate 25W column number 1494 /// </summary> 1495 private int OldToNew25W_C( int oldMapnumberSub25W ) { 1496 return ( ( oldMapnumberSub25W + 3 ) % 4 ) + 1; 1497 } 1498 1499 /// <summary> 1500 /// Old mapnumber to new mapnumber calculate 10W row number 1501 /// </summary> 1502 private int OldToNew10W_R( int oldMapnumberSub10W ) { 1503 return ( ( oldMapnumberSub10W - 1 ) / 12 ) + 1; 1504 } 1505 /// <summary> 1506 /// Old mapnumber to new mapnumber calculate 10W column number 1507 /// </summary> 1508 private int OldToNew10W_C( int oldMapnumberSub10W ) { 1509 return ( ( oldMapnumberSub10W + 11 ) % 12 ) + 1; 1510 } 1511 1512 /// <summary> 1513 /// Old mapnumber to new mapnumber calculate 5W row number 1514 /// </summary> 1515 private int OldToNew5W_R( int oldMapnumberSub5W , int new10R ) { 1516 return ( 2 * new10R ) + ( ( oldMapnumberSub5W - 1 ) / 2 - 1 ); 1517 } 1518 /// <summary> 1519 /// Old mapnumber to new mapnumber calculate 5W column number 1520 /// </summary> 1521 private int OldToNew5W_C( int oldMapnumberSub5W , int new10C ) { 1522 return ( 2 * new10C ) + ( ( oldMapnumberSub5W + 1 ) % 2 - 1 ); 1523 } 1524 1525 /// <summary> 1526 /// Old mapnumber to new mapnumber calculate 2_5W row number 1527 /// </summary> 1528 private int OldToNew2_5W_R( int oldMapnumberSub2_5W , int new5R ) { 1529 return 2 * new5R + ( oldMapnumberSub2_5W - 1 ) / 2 - 1; 1530 } 1531 /// <summary> 1532 /// Old mapnumber to new mapnumber calculate 2_5W column number 1533 /// </summary> 1534 private int OldToNew2_5W_C( int oldMapnumberSub2_5W , int new5C ) { 1535 return 2 * new5C + ( oldMapnumberSub2_5W + 1 ) % 2 - 1; 1536 } 1537 1538 /// <summary> 1539 /// Old mapnumber to new mapnumber calculate 1W row number 1540 /// </summary> 1541 private int OldToNew1W_R( int oldMapnumberSub1W , int new10R ) { 1542 return 8 * new10R + ( ( oldMapnumberSub1W - 1 ) / 8 ) - 7; 1543 } 1544 /// <summary> 1545 /// Old mapnumber to new mapnumber calculate 1W column number 1546 /// </summary> 1547 private int OldToNew1W_C( int oldMapnumberSub1W , int new10C ) { 1548 return 8 * new10C + ( ( oldMapnumberSub1W + 7 ) % 8 ) - 7; 1549 } 1550 1551 /// <summary> 1552 /// Old mapnumber to new mapnumber calculate 0_5W row number 1553 /// </summary> 1554 private int OldToNew0_5W_R( int oldMapnumberSub0_5W , int new1R ) { 1555 return 2 * new1R + ( oldMapnumberSub0_5W - 1 ) / 2 - 1; 1556 } 1557 /// <summary> 1558 /// Old mapnumber to new mapnumber calculate 0_5W column number 1559 /// </summary> 1560 private int OldToNew0_5W_C( int oldMapnumberSub0_5W , int new1C ) { 1561 return 2 * new1C + ( oldMapnumberSub0_5W + 1 ) % 2 - 1; 1562 } 1563 1564 #endregion 1565 1566 #endregion 1567 1568 #region New mapnumber to old mapnumber 新图号转旧图号 1569 1570 /// <summary> 1571 /// New mapnumber to old mapnumber 1572 /// 新图幅号转旧图幅号 1573 /// </summary> 1574 /// <param name="newMapnumber"></param> 1575 /// <returns></returns> 1576 public string NewMapnumberToOldMapnumber( string newMapnumber ) { 1577 try { 1578 if ( !NewMapnumber_Check( newMapnumber ) ) { 1579 return ""; 1580 } 1581 string[] newMapnumberInfo = GetInfoFromNewMapnumber( newMapnumber ); 1582 if ( newMapnumberInfo == null ) { 1583 return ""; 1584 } 1585 string n100WR = newMapnumberInfo[0]; 1586 string n100WC = newMapnumberInfo[1]; 1587 string nScaleStr = newMapnumberInfo[2]; 1588 string nR = newMapnumberInfo[3]; 1589 string nC = newMapnumberInfo[4]; 1590 int scaleNumber = NewMapnumber_GetScaleDenominatorNumberByScaleStr( nScaleStr ); 1591 if ( scaleNumber == -1 ) { 1592 return null; 1593 } 1594 #region 100万 1595 else if ( scaleNumber == 1000000 ) { 1596 return NewMapnumberToOldMapnumber_100W( n100WR , n100WC ); 1597 } 1598 #endregion 1599 #region 50万 1600 else if ( scaleNumber == 500000 ) { 1601 string o100W = NewMapnumberToOldMapnumber_100W( n100WR , n100WC ); 1602 int o50W = NewToOld50WNum( nR , nC ); 1603 string o50WStr = OldMapnumber_Change1234ToABCD( o50W ); 1604 if ( string. IsNullOrEmpty( o50WStr ) ) { 1605 return ""; 1606 } 1607 return o100W + "-" + o50WStr; 1608 } 1609 #endregion 1610 #region 25万 1611 else if ( scaleNumber == 250000 ) { 1612 string o100W = NewMapnumberToOldMapnumber_100W( n100WR , n100WC ); 1613 int o25W = NewToOld25WNum( nR , nC ); 1614 if ( o25W <= 0 || o25W > 16 ) { 1615 return ""; 1616 } 1617 return o100W + "-[" + o25W. ToString( "00" ) + "]"; 1618 } 1619 #endregion 1620 #region 10万 1621 else if ( scaleNumber == 100000 ) { 1622 string o100W = NewMapnumberToOldMapnumber_100W( n100WR , n100WC ); 1623 int o10W = NewToOld10WNum( nR , nC ); 1624 if ( o10W <= 0 || o10W > 144 ) { 1625 return ""; 1626 } 1627 return o100W + "-" + o10W. ToString( "000" ); 1628 } 1629 #endregion 1630 #region 5万 1631 else if ( scaleNumber == 50000 ) { 1632 string o100W = NewMapnumberToOldMapnumber_100W( n100WR , n100WC ); 1633 int o5W = NewToOld5WNum( nR , nC ); 1634 string o5WStr = OldMapnumber_Change1234ToABCD( o5W ); 1635 if ( string. IsNullOrEmpty( o5WStr ) ) { 1636 return ""; 1637 } 1638 int n10WR = New5WRCToNew10WRC( int. Parse( nR ) ); 1639 int n10WC = New5WRCToNew10WRC( int. Parse( nC ) ); 1640 int o10W = NewToOld10WNum( n10WR. ToString() , n10WC. ToString() ); 1641 if ( o10W <= 0 || o10W > 144 ) { 1642 return ""; 1643 } 1644 return o100W + "-" + o10W. ToString( "000" ) + "-" + o5WStr; 1645 } 1646 #endregion 1647 #region 2.5万 1648 else if ( scaleNumber == 25000 ) { 1649 string o100W = NewMapnumberToOldMapnumber_100W( n100WR , n100WC ); 1650 int o2_5W = NewToOld2_5WNum( nR , nC ); 1651 if ( o2_5W <= 0 || o2_5W > 4 ) { 1652 return ""; 1653 } 1654 int n5WR = New2_5WRCToNew5WRC( int. Parse( nR ) ); 1655 int n5WC = New2_5WRCToNew5WRC( int. Parse( nC ) ); 1656 int o5W = NewToOld5WNum( n5WR. ToString() , n5WC. ToString() ); 1657 string o5WStr = OldMapnumber_Change1234ToABCD( o5W ); 1658 if ( string. IsNullOrEmpty( o5WStr ) ) { 1659 return ""; 1660 } 1661 int n10WR = New5WRCToNew10WRC( n5WR ); 1662 int n10WC = New5WRCToNew10WRC( n5WC ); 1663 int o10W = NewToOld10WNum( n10WR. ToString() , n10WC. ToString() ); 1664 if ( o10W <= 0 || o10W > 144 ) { 1665 return ""; 1666 } 1667 1668 return o100W + "-" + o10W. ToString( "000" ) + "-" + o5WStr + "-" + o2_5W. ToString(); 1669 } 1670 #endregion 1671 #region 1万 1672 else if ( scaleNumber == 10000 ) { 1673 string o100W = NewMapnumberToOldMapnumber_100W( n100WR , n100WC ); 1674 int o1W = NewToOld1WNum( nR , nC ); 1675 if ( o1W <= 0 || o1W > 64 ) { 1676 return ""; 1677 } 1678 int n10WR = New1WRCToNew10WRC( int. Parse( nR ) ); 1679 int n10WC = New1WRCToNew10WRC( int. Parse( nC ) ); 1680 int o10W = NewToOld10WNum( n10WR. ToString() , n10WC. ToString() ); 1681 if ( o10W <= 0 || o10W > 144 ) { 1682 return ""; 1683 } 1684 return o100W + "-" + o10W. ToString( "000" ) + "-(" + o1W. ToString( "00" ) + ")"; 1685 } 1686 #endregion 1687 #region 5000 1688 else if ( scaleNumber == 5000 ) { 1689 string o100W = NewMapnumberToOldMapnumber_100W( n100WR , n100WC ); 1690 int o0_5W = NewToOld0_5WNum( nR , nC ); 1691 string o0_5WStr = OldMapnumber_Change1234Toabcd( o0_5W ); 1692 if ( string. IsNullOrEmpty( o0_5WStr ) ) { 1693 return ""; 1694 } 1695 int n1WR = New0_5WRCToNew1WRC( int. Parse( nR ) ); 1696 int n1WC = New0_5WRCToNew1WRC( int. Parse( nC ) ); 1697 int o1W = NewToOld1WNum( n1WR. ToString() , n1WC. ToString() ); 1698 if ( o1W <= 0 || o1W > 64 ) { 1699 return ""; 1700 } 1701 int n10WR = New1WRCToNew10WRC( n1WR ); 1702 int n10WC = New1WRCToNew10WRC( n1WC ); 1703 int o10W = NewToOld10WNum( n10WR. ToString() , n10WC. ToString() ); 1704 if ( o10W <= 0 || o10W > 144 ) { 1705 return ""; 1706 } 1707 return o100W + "-" + o10W. ToString( "000" ) + "-(" + o1W. ToString( "00" ) + ")-" + o0_5WStr; 1708 } 1709 #endregion 1710 else { 1711 return null; 1712 } 1713 } catch { 1714 throw; 1715 } 1716 } 1717 1718 /// <summary> 1719 /// New mapnumber to old mapnumber 100W 1720 /// </summary> 1721 /// <param name="newMapnumber100WR"></param> 1722 /// <param name="newMapnumber100WC"></param> 1723 /// <returns></returns> 1724 private string NewMapnumberToOldMapnumber_100W( string newMapnumber100WR , string newMapnumber100WC ) { 1725 return newMapnumber100WR + "-" + newMapnumber100WC; 1726 } 1727 1728 #region New mapnumber to old mapnumber calculate row column num 新转旧计算行列号 1729 1730 /// <summary> 1731 /// New mapnumber to old mapnumber calculate num 50W 1732 /// </summary> 1733 private int NewToOld50WNum( string newMapnumber50WR , string newMapnumber50WC ) { 1734 int n50WR = int. Parse( newMapnumber50WR ); 1735 int n50WC = int. Parse( newMapnumber50WC ); 1736 return 2 * ( n50WR - 1 ) + n50WC; 1737 } 1738 1739 /// <summary> 1740 /// New mapnumber to old mapnumber calculate num 25W 1741 /// </summary> 1742 private int NewToOld25WNum( string newMapnumber25WR , string newMapnumber25WC ) { 1743 int n25WR = int. Parse( newMapnumber25WR ); 1744 int n25WC = int. Parse( newMapnumber25WC ); 1745 return 4 * ( n25WR - 1 ) + n25WC; 1746 } 1747 1748 /// <summary> 1749 /// New mapnumber to old mapnumber calculate num 10W 1750 /// </summary> 1751 private int NewToOld10WNum( string newMapnumber10WR , string newMapnumber10WC ) { 1752 int n10WR = int. Parse( newMapnumber10WR ); 1753 int n10WC = int. Parse( newMapnumber10WC ); 1754 return 12 * ( n10WR - 1 ) + n10WC; 1755 } 1756 1757 /// <summary> 1758 /// New mapnumber to old mapnumber calculate num 5W 1759 /// </summary> 1760 private int NewToOld5WNum( string newMapnumber5WR , string newMapnumber5WC ) { 1761 int n5WR = int. Parse( newMapnumber5WR ); 1762 int n5WC = int. Parse( newMapnumber5WC ); 1763 return 2 * n5WR + n5WC - ( 4 * ( (int) ( n5WR - 1 ) / 2 ) ) - ( 2 * ( (int) ( n5WC - 1 ) / 2 ) ) - 2; 1764 } 1765 1766 /// <summary> 1767 /// New mapnumber to old mapnumber calculate num 2.5W 1768 /// </summary> 1769 private int NewToOld2_5WNum( string newMapnumber2_5WR , string newMapnumber2_5WC ) { 1770 int n2_5WR = int. Parse( newMapnumber2_5WR ); 1771 int n2_5WC = int. Parse( newMapnumber2_5WC ); 1772 return 2 * n2_5WR + n2_5WC - ( 4 * ( (int) ( n2_5WR - 1 ) / 2 ) ) - ( 2 * ( (int) ( n2_5WC - 1 ) / 2 ) ) - 2; 1773 } 1774 1775 /// <summary> 1776 /// New mapnumber to old mapnumber calculate num 1W 1777 /// </summary> 1778 private int NewToOld1WNum( string newMapnumber1WR , string newMapnumber1WC ) { 1779 int n1WR = int. Parse( newMapnumber1WR ); 1780 int n1WC = int. Parse( newMapnumber1WC ); 1781 return 8 * n1WR + n1WC - ( 64 * ( (int) ( n1WR - 1 ) / 8 ) ) - ( 8 * ( (int) ( n1WC - 1 ) / 8 ) ) - 8; 1782 } 1783 1784 /// <summary> 1785 /// New mapnumber to old mapnumber calculate num 0.5W 1786 /// </summary> 1787 private int NewToOld0_5WNum( string newMapnumber0_5WR , string newMapnumber0_5WC ) { 1788 int n0_5WR = int. Parse( newMapnumber0_5WR ); 1789 int n0_5WC = int. Parse( newMapnumber0_5WC ); 1790 return 2 * n0_5WR + n0_5WC - ( 4 * ( (int) ( n0_5WR - 1 ) / 2 ) ) - ( 2 * ( (int) ( n0_5WC - 1 ) / 2 ) ) - 2; 1791 } 1792 1793 /// <summary> 1794 /// 5W New mapnumber row column number to 10W new mapnumber row column 1795 /// </summary> 1796 /// <param name="newMapnumber5WRC"></param> 1797 /// <returns></returns> 1798 private int New5WRCToNew10WRC( int newMapnumber5WRC ) { 1799 return (int) ( ( newMapnumber5WRC - 1 ) / 2 ) + 1; 1800 } 1801 1802 private int New2_5WRCToNew5WRC( int newMapnumber2_5WRC ) { 1803 return (int) ( ( newMapnumber2_5WRC - 1 ) / 2 ) + 1; 1804 } 1805 1806 private int New1WRCToNew10WRC( int newMapnumber1WRC ) { 1807 return (int) ( ( newMapnumber1WRC - 1 ) / 8 ) + 1; 1808 } 1809 1810 private int New0_5WRCToNew1WRC( int newMapnumber0_5WRC ) { 1811 return (int) ( ( newMapnumber0_5WRC - 1 ) / 2 ) + 1; 1812 } 1813 1814 #endregion 1815 1816 #endregion 1817 1818 #region New mapnumber to new mapnumber 新图号转新图号 1819 1820 /// <summary> 1821 /// Newmapnumber to newmapnumber 1822 /// 新图号转新图号 1823 /// </summary> 1824 /// <param name="newMapnumber"></param> 1825 /// <returns></returns> 1826 public string NewMapnumberToNewMapnumber( string newMapnumber ) { 1827 if ( NewMapnumber_Check( newMapnumber ) ) { 1828 return newMapnumber; 1829 } 1830 1831 newMapnumber = newMapnumber. ToUpper(); 1832 if ( NewMapnumber_Check( newMapnumber ) ) { 1833 return newMapnumber; 1834 } 1835 1836 return ""; 1837 } 1838 1839 #endregion 1840 1841 #region Old mapnumber to old mapnumber 旧图号转旧图号 1842 1843 /// <summary> 1844 /// Old mapnumber to old mapnumber 1845 /// 旧图号转旧图号 1846 /// </summary> 1847 /// <param name="oldMapnumber"></param> 1848 /// <param name="scaleDenominator"></param> 1849 /// <returns></returns> 1850 public string OldMapnumberToOldMapnumber( string oldMapnumber , int scaleDenominator ) { 1851 if ( scaleDenominator == 1000000 ) { 1852 return OldMapnumberToOldMapnumber100W( oldMapnumber ); 1853 } else if ( scaleDenominator == 500000 ) { 1854 return OldMapnumberToOldMapnumber50W( oldMapnumber ); 1855 } else if ( scaleDenominator == 250000 ) { 1856 return OldMapnumberToOldMapnumber25W( oldMapnumber ); 1857 } else if ( scaleDenominator == 100000 ) { 1858 return OldMapnumberToOldMapnumber10W( oldMapnumber ); 1859 } else if ( scaleDenominator == 50000 ) { 1860 return OldMapnumberToOldMapnumber5W( oldMapnumber ); 1861 } else if ( scaleDenominator == 25000 ) { 1862 return OldMapnumberToOldMapnumber2_5W( oldMapnumber ); 1863 } else if ( scaleDenominator == 10000 ) { 1864 return OldMapnumberToOldMapnumber1W( oldMapnumber ); 1865 } else if ( scaleDenominator == 5000 ) { 1866 return OldMapnumberToOldMapnumber0_5W( oldMapnumber ); 1867 } else { 1868 return ""; 1869 } 1870 } 1871 1872 /// <summary> 1873 /// Change old mapnumber char 1874 /// </summary> 1875 /// <param name="oldMapnumber"></param> 1876 /// <returns></returns> 1877 private string ChangeOldMapnumberChar( string oldMapnumber ) { 1878 oldMapnumber = oldMapnumber. Replace( "(" , "" ); 1879 oldMapnumber = oldMapnumber. Replace( ")" , "" ); 1880 oldMapnumber = oldMapnumber. Replace( "(" , "" ); 1881 oldMapnumber = oldMapnumber. Replace( ")" , "" ); 1882 oldMapnumber = oldMapnumber. Replace( "【" , "" ); 1883 oldMapnumber = oldMapnumber. Replace( "】" , "" ); 1884 oldMapnumber = oldMapnumber. Replace( "甲" , "1" ); 1885 oldMapnumber = oldMapnumber. Replace( "乙" , "2" ); 1886 oldMapnumber = oldMapnumber. Replace( "丙" , "3" ); 1887 oldMapnumber = oldMapnumber. Replace( "丁" , "4" ); 1888 oldMapnumber = oldMapnumber. Replace( "A" , "1" ); 1889 oldMapnumber = oldMapnumber. Replace( "B" , "2" ); 1890 oldMapnumber = oldMapnumber. Replace( "C" , "3" ); 1891 oldMapnumber = oldMapnumber. Replace( "D" , "4" ); 1892 oldMapnumber = oldMapnumber. Replace( "a" , "1" ); 1893 oldMapnumber = oldMapnumber. Replace( "b" , "2" ); 1894 oldMapnumber = oldMapnumber. Replace( "c" , "3" ); 1895 oldMapnumber = oldMapnumber. Replace( "d" , "4" ); 1896 1897 oldMapnumber = oldMapnumber. ToUpper(); 1898 foreach ( string m100WR in _100W_RowNum ) { 1899 oldMapnumber = oldMapnumber. Replace( m100WR , Change100W_RowStringToDigital( m100WR ). ToString() ); 1900 } 1901 return oldMapnumber; 1902 } 1903 1904 /// <summary> 1905 /// Old mapnumber to old mapnumber 100W 1906 /// </summary> 1907 private string OldMapnumberToOldMapnumber100W( string oldMapnumber100W ) { 1908 if ( string. IsNullOrEmpty( oldMapnumber100W ) ) { 1909 return ""; 1910 } 1911 if ( OldMapnumber_Check100W( oldMapnumber100W ) ) { 1912 return oldMapnumber100W; 1913 } 1914 1915 oldMapnumber100W = ChangeOldMapnumberChar( oldMapnumber100W ); 1916 if ( !oldMapnumber100W. Contains( '-' ) ) { 1917 return ""; 1918 } 1919 string[] split = oldMapnumber100W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 1920 int length = split. Length; 1921 if ( length != 2 ) { 1922 return ""; 1923 } 1924 1925 int x100R = -1; 1926 if ( !int. TryParse( split[0] , out x100R ) ) { 1927 return ""; 1928 } 1929 int x100C = -1; 1930 if ( !int. TryParse( split[1] , out x100C ) ) { 1931 return ""; 1932 } 1933 1934 string s100R = Change100W_RowDigitalToString( x100R ); 1935 string s100C = x100C. ToString( "00" ); 1936 oldMapnumber100W = s100R + "-" + s100C; 1937 if ( OldMapnumber_Check100W( oldMapnumber100W ) ) { 1938 return oldMapnumber100W; 1939 } 1940 return ""; 1941 } 1942 1943 /// <summary> 1944 /// Old mapnumber to old mapnumber 50W 1945 /// </summary> 1946 private string OldMapnumberToOldMapnumber50W( string oldMapnumber50W ) { 1947 if ( string. IsNullOrEmpty( oldMapnumber50W ) ) { 1948 return ""; 1949 } 1950 if ( OldMapnumber_Check50W( oldMapnumber50W ) ) { 1951 return oldMapnumber50W; 1952 } 1953 1954 oldMapnumber50W = ChangeOldMapnumberChar( oldMapnumber50W ); 1955 if ( !oldMapnumber50W. Contains( '-' ) ) { 1956 return ""; 1957 } 1958 string[] split = oldMapnumber50W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 1959 int length = split. Length; 1960 if ( length != 3 ) { 1961 return ""; 1962 } 1963 string x100 = split[0] + "-" + split[1]; 1964 string s100 = OldMapnumberToOldMapnumber100W( x100 ); 1965 if ( string. IsNullOrEmpty( s100 ) ) { 1966 return ""; 1967 } 1968 1969 int x50 = -1; 1970 if ( !int. TryParse( split[2] , out x50 ) ) { 1971 return ""; 1972 } 1973 string s50 = OldMapnumber_Change1234ToABCD( x50 ); 1974 oldMapnumber50W = s100 + "-" + s50; 1975 if ( OldMapnumber_Check50W( oldMapnumber50W ) ) { 1976 return oldMapnumber50W; 1977 } 1978 return ""; 1979 } 1980 1981 /// <summary> 1982 /// Old mapnumber to old mapnumber 25W 1983 /// </summary> 1984 private string OldMapnumberToOldMapnumber25W( string oldMapnumber25W ) { 1985 if ( string. IsNullOrEmpty( oldMapnumber25W ) ) { 1986 return ""; 1987 } 1988 if ( OldMapnumber_Check25W( oldMapnumber25W ) ) { 1989 return oldMapnumber25W; 1990 } 1991 1992 oldMapnumber25W = ChangeOldMapnumberChar( oldMapnumber25W ); 1993 if ( !oldMapnumber25W. Contains( '-' ) ) { 1994 return ""; 1995 } 1996 string[] split = oldMapnumber25W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 1997 int length = split. Length; 1998 if ( length != 3 ) { 1999 return ""; 2000 } 2001 string x100 = split[0] + "-" + split[1]; 2002 string s100 = OldMapnumberToOldMapnumber100W( x100 ); 2003 if ( string. IsNullOrEmpty( s100 ) ) { 2004 return ""; 2005 } 2006 2007 int x25 = -1; 2008 if ( !int. TryParse( split[2] , out x25 ) ) { 2009 return ""; 2010 } 2011 string s25 = x25. ToString( "00" ); 2012 oldMapnumber25W = s100 + "-[" + s25 + "]"; 2013 if ( OldMapnumber_Check25W( oldMapnumber25W ) ) { 2014 return oldMapnumber25W; 2015 } 2016 return ""; 2017 } 2018 2019 /// <summary> 2020 /// Old mapnumber to old mapnumber 10W 2021 /// </summary> 2022 private string OldMapnumberToOldMapnumber10W( string oldMapnumber10W ) { 2023 if ( string. IsNullOrEmpty( oldMapnumber10W ) ) { 2024 return ""; 2025 } 2026 if ( OldMapnumber_Check10W( oldMapnumber10W ) ) { 2027 return oldMapnumber10W; 2028 } 2029 2030 oldMapnumber10W = ChangeOldMapnumberChar( oldMapnumber10W ); 2031 if ( !oldMapnumber10W. Contains( '-' ) ) { 2032 return ""; 2033 } 2034 string[] split = oldMapnumber10W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 2035 int length = split. Length; 2036 if ( length != 3 ) { 2037 return ""; 2038 } 2039 string x100 = split[0] + "-" + split[1]; 2040 string s100 = OldMapnumberToOldMapnumber100W( x100 ); 2041 if ( string. IsNullOrEmpty( s100 ) ) { 2042 return ""; 2043 } 2044 2045 int x10 = -1; 2046 if ( !int. TryParse( split[2] , out x10 ) ) { 2047 return ""; 2048 } 2049 string s10 = x10. ToString( "000" ); 2050 oldMapnumber10W = s100 + "-" + s10; 2051 if ( OldMapnumber_Check10W( oldMapnumber10W ) ) { 2052 return oldMapnumber10W; 2053 } 2054 return ""; 2055 } 2056 2057 /// <summary> 2058 /// Old mapnumber to old mapnumber 5W 2059 /// </summary> 2060 private string OldMapnumberToOldMapnumber5W( string oldMapnumber5W ) { 2061 if ( string. IsNullOrEmpty( oldMapnumber5W ) ) { 2062 return ""; 2063 } 2064 if ( OldMapnumber_Check5W( oldMapnumber5W ) ) { 2065 return oldMapnumber5W; 2066 } 2067 2068 oldMapnumber5W = ChangeOldMapnumberChar( oldMapnumber5W ); 2069 if ( !oldMapnumber5W. Contains( '-' ) ) { 2070 return ""; 2071 } 2072 string[] split = oldMapnumber5W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 2073 int length = split. Length; 2074 if ( length != 4 ) { 2075 return ""; 2076 } 2077 string x10 = split[0] + "-" + split[1] + "-" + split[2]; 2078 string s10 = OldMapnumberToOldMapnumber10W( x10 ); 2079 if ( string. IsNullOrEmpty( s10 ) ) { 2080 return ""; 2081 } 2082 2083 int x5 = -1; 2084 if ( !int. TryParse( split[3] , out x5 ) ) { 2085 return ""; 2086 } 2087 string s5 = OldMapnumber_Change1234ToABCD( x5 ); 2088 oldMapnumber5W = s10 + "-" + s5; 2089 if ( OldMapnumber_Check5W( oldMapnumber5W ) ) { 2090 return oldMapnumber5W; 2091 } 2092 return ""; 2093 } 2094 2095 /// <summary> 2096 /// Old mapnumber to old mapnumber 2.5W 2097 /// </summary> 2098 private string OldMapnumberToOldMapnumber2_5W( string oldMapnumber2_5W ) { 2099 if ( string. IsNullOrEmpty( oldMapnumber2_5W ) ) { 2100 return ""; 2101 } 2102 if ( OldMapnumber_Check2_5W( oldMapnumber2_5W ) ) { 2103 return oldMapnumber2_5W; 2104 } 2105 2106 oldMapnumber2_5W = ChangeOldMapnumberChar( oldMapnumber2_5W ); 2107 if ( !oldMapnumber2_5W. Contains( '-' ) ) { 2108 return ""; 2109 } 2110 string[] split = oldMapnumber2_5W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 2111 int length = split. Length; 2112 if ( length != 5 ) { 2113 return ""; 2114 } 2115 string x5 = split[0] + "-" + split[1] + "-" + split[2] + "-" + split[3]; 2116 string s5 = OldMapnumberToOldMapnumber5W( x5 ); 2117 if ( string. IsNullOrEmpty( s5 ) ) { 2118 return ""; 2119 } 2120 2121 int x2_5 = -1; 2122 if ( !int. TryParse( split[4] , out x2_5 ) ) { 2123 return ""; 2124 } 2125 string s2_5 = x2_5. ToString(); 2126 oldMapnumber2_5W = s5 + "-" + s2_5; 2127 if ( OldMapnumber_Check2_5W( oldMapnumber2_5W ) ) { 2128 return oldMapnumber2_5W; 2129 } 2130 return ""; 2131 } 2132 2133 /// <summary> 2134 /// Old mapnumber to old mapnumber 1W 2135 /// </summary> 2136 private string OldMapnumberToOldMapnumber1W( string oldMapnumber1W ) { 2137 if ( string. IsNullOrEmpty( oldMapnumber1W ) ) { 2138 return ""; 2139 } 2140 if ( OldMapnumber_Check1W( oldMapnumber1W ) ) { 2141 return oldMapnumber1W; 2142 } 2143 2144 oldMapnumber1W = ChangeOldMapnumberChar( oldMapnumber1W ); 2145 if ( !oldMapnumber1W. Contains( '-' ) ) { 2146 return ""; 2147 } 2148 string[] split = oldMapnumber1W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 2149 int length = split. Length; 2150 if ( length != 4 ) { 2151 return ""; 2152 } 2153 string x10 = split[0] + "-" + split[1] + "-" + split[2]; 2154 string s10 = OldMapnumberToOldMapnumber10W( x10 ); 2155 if ( string. IsNullOrEmpty( s10 ) ) { 2156 return ""; 2157 } 2158 2159 int x1 = -1; 2160 if ( !int. TryParse( split[3] , out x1 ) ) { 2161 return ""; 2162 } 2163 string s1 = x1. ToString( "00" ); 2164 oldMapnumber1W = s10 + "-(" + s1 + ")"; 2165 if ( OldMapnumber_Check1W( oldMapnumber1W ) ) { 2166 return oldMapnumber1W; 2167 } 2168 return ""; 2169 } 2170 2171 /// <summary> 2172 /// Old mapnumber to old mapnumber 0.5W 2173 /// </summary> 2174 private string OldMapnumberToOldMapnumber0_5W( string oldMapnumber0_5W ) { 2175 if ( string. IsNullOrEmpty( oldMapnumber0_5W ) ) { 2176 return ""; 2177 } 2178 if ( OldMapnumber_Check0_5W( oldMapnumber0_5W ) ) { 2179 return oldMapnumber0_5W; 2180 } 2181 2182 oldMapnumber0_5W = ChangeOldMapnumberChar( oldMapnumber0_5W ); 2183 if ( !oldMapnumber0_5W. Contains( '-' ) ) { 2184 return ""; 2185 } 2186 string[] split = oldMapnumber0_5W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 2187 int length = split. Length; 2188 if ( length != 5 ) { 2189 return ""; 2190 } 2191 string x1 = split[0] + "-" + split[1] + "-" + split[2] + "-(" + split[3] + ")"; 2192 string s1 = OldMapnumberToOldMapnumber1W( x1 ); 2193 if ( string. IsNullOrEmpty( s1 ) ) { 2194 return ""; 2195 } 2196 2197 int x0_5 = -1; 2198 if ( !int. TryParse( split[4] , out x0_5 ) ) { 2199 return ""; 2200 } 2201 string s0_5 = OldMapnumber_Change1234Toabcd( x0_5 ); 2202 oldMapnumber0_5W = s1 + "-" + s0_5; 2203 if ( OldMapnumber_Check0_5W( oldMapnumber0_5W ) ) { 2204 return oldMapnumber0_5W; 2205 } 2206 return ""; 2207 } 2208 2209 #endregion 2210 2211 2212 #endregion 2213 2214 2215 #region Exchange between mapnumber and coordinate 图幅号和坐标的转换 2216 2217 #region Mapnumber to coordinate 图号转坐标 2218 2219 #region New mapnumber to coordinate 新图号转坐标 2220 2221 /// <summary> 2222 /// Calculate West North East South coordinate from new mapnumber 2223 /// 从新图幅号计算图廓“西北东南”坐标([0]W [1]N [2]E [3]S) 2224 /// </summary> 2225 /// <param name="newMapnumber"></param> 2226 /// <returns></returns> 2227 public decimal[] CalculateLongitudeLatitudeFromNewMapnumber( string newMapnumber ) { 2228 try { 2229 decimal[] WNES = new decimal[4]; 2230 string[] newMapnumberInfo = GetInfoFromNewMapnumber( newMapnumber ); 2231 if ( newMapnumberInfo == null ) { 2232 return null; 2233 } 2234 string n100WR = newMapnumberInfo[0]; 2235 string n100WC = newMapnumberInfo[1]; 2236 string nScaleStr = newMapnumberInfo[2]; 2237 string nR = newMapnumberInfo[3]; 2238 string nC = newMapnumberInfo[4]; 2239 int scaleNumber = NewMapnumber_GetScaleDenominatorNumberByScaleStr( nScaleStr ); 2240 if ( scaleNumber == -1 ) { 2241 return null; 2242 } 2243 #region 100万 2244 else if ( scaleNumber == 1000000 ) { 2245 decimal W = CalculateLongitudeLatitudeFromNewMapnumberWest( n100WC , _100W_LatitudeDifference , "0" , 0 ); 2246 decimal S = CalculateLongitudeLatitudeFromNewMapnumberSouth( n100WR , _100W_LongitudeDifference , "0" , 0 ); 2247 decimal N = S + _100W_LongitudeDifference; 2248 decimal E = W + _100W_LatitudeDifference; 2249 WNES[0] = W; 2250 WNES[1] = N; 2251 WNES[2] = E; 2252 WNES[3] = S; 2253 return WNES; 2254 } 2255 #endregion 2256 #region 50万 2257 else if ( scaleNumber == 500000 ) { 2258 decimal W = CalculateLongitudeLatitudeFromNewMapnumberWest( n100WC , _100W_LatitudeDifference , nC , _50W_LongitudeDifference ); 2259 decimal S = CalculateLongitudeLatitudeFromNewMapnumberSouth( n100WR , _100W_LongitudeDifference , nR , _50W_LatitudeDifference ); 2260 decimal N = S + _50W_LatitudeDifference; 2261 decimal E = W + _50W_LongitudeDifference; 2262 WNES[0] = W; 2263 WNES[1] = N; 2264 WNES[2] = E; 2265 WNES[3] = S; 2266 return WNES; 2267 } 2268 #endregion 2269 #region 25万 2270 else if ( scaleNumber == 250000 ) { 2271 decimal W = CalculateLongitudeLatitudeFromNewMapnumberWest( n100WC , _100W_LatitudeDifference , nC , _25W_LongitudeDifference ); 2272 decimal S = CalculateLongitudeLatitudeFromNewMapnumberSouth( n100WR , _100W_LongitudeDifference , nR , _25W_LatitudeDifference ); 2273 decimal N = S + _25W_LatitudeDifference; 2274 decimal E = W + _25W_LongitudeDifference; 2275 WNES[0] = W; 2276 WNES[1] = N; 2277 WNES[2] = E; 2278 WNES[3] = S; 2279 return WNES; 2280 } 2281 #endregion 2282 #region 10万 2283 else if ( scaleNumber == 100000 ) { 2284 decimal W = CalculateLongitudeLatitudeFromNewMapnumberWest( n100WC , _100W_LatitudeDifference , nC , _10W_LongitudeDifference ); 2285 decimal S = CalculateLongitudeLatitudeFromNewMapnumberSouth( n100WR , _100W_LongitudeDifference , nR , _10W_LatitudeDifference ); 2286 decimal N = S + _10W_LatitudeDifference; 2287 decimal E = W + _10W_LongitudeDifference; 2288 WNES[0] = W; 2289 WNES[1] = N; 2290 WNES[2] = E; 2291 WNES[3] = S; 2292 return WNES; 2293 } 2294 #endregion 2295 #region 5万 2296 else if ( scaleNumber == 50000 ) { 2297 decimal W = CalculateLongitudeLatitudeFromNewMapnumberWest( n100WC , _100W_LatitudeDifference , nC , _5W_LongitudeDifference ); 2298 decimal S = CalculateLongitudeLatitudeFromNewMapnumberSouth( n100WR , _100W_LongitudeDifference , nR , _5W_LatitudeDifference ); 2299 decimal N = S + _5W_LatitudeDifference; 2300 decimal E = W + _5W_LongitudeDifference; 2301 WNES[0] = W; 2302 WNES[1] = N; 2303 WNES[2] = E; 2304 WNES[3] = S; 2305 return WNES; 2306 } 2307 #endregion 2308 #region 2.5万 2309 else if ( scaleNumber == 25000 ) { 2310 decimal W = CalculateLongitudeLatitudeFromNewMapnumberWest( n100WC , _100W_LatitudeDifference , nC , _2_5W_LongitudeDifference ); 2311 decimal S = CalculateLongitudeLatitudeFromNewMapnumberSouth( n100WR , _100W_LongitudeDifference , nR , _2_5W_LatitudeDifference ); 2312 decimal N = S + _2_5W_LatitudeDifference; 2313 decimal E = W + _2_5W_LongitudeDifference; 2314 WNES[0] = W; 2315 WNES[1] = N; 2316 WNES[2] = E; 2317 WNES[3] = S; 2318 return WNES; 2319 } 2320 #endregion 2321 #region 1万 2322 else if ( scaleNumber == 10000 ) { 2323 decimal W = CalculateLongitudeLatitudeFromNewMapnumberWest( n100WC , _100W_LatitudeDifference , nC , _1W_LongitudeDifference ); 2324 decimal S = CalculateLongitudeLatitudeFromNewMapnumberSouth( n100WR , _100W_LongitudeDifference , nR , _1W_LatitudeDifference ); 2325 decimal N = S + _1W_LatitudeDifference; 2326 decimal E = W + _1W_LongitudeDifference; 2327 WNES[0] = W; 2328 WNES[1] = N; 2329 WNES[2] = E; 2330 WNES[3] = S; 2331 return WNES; 2332 } 2333 #endregion 2334 #region 5000 2335 else if ( scaleNumber == 5000 ) { 2336 decimal W = CalculateLongitudeLatitudeFromNewMapnumberWest( n100WC , _100W_LatitudeDifference , nC , _0_5W_LongitudeDifference ); 2337 decimal S = CalculateLongitudeLatitudeFromNewMapnumberSouth( n100WR , _100W_LongitudeDifference , nR , _0_5W_LatitudeDifference ); 2338 decimal N = S + _0_5W_LatitudeDifference; 2339 decimal E = W + _0_5W_LongitudeDifference; 2340 WNES[0] = W; 2341 WNES[1] = N; 2342 WNES[2] = E; 2343 WNES[3] = S; 2344 return WNES; 2345 } 2346 #endregion 2347 #region 2000 2348 else if ( scaleNumber == 2000 ) { 2349 decimal W = CalculateLongitudeLatitudeFromNewMapnumberWest( n100WC , _100W_LatitudeDifference , nC , _0_2W_LongitudeDifference ); 2350 decimal S = CalculateLongitudeLatitudeFromNewMapnumberSouth( n100WR , _100W_LongitudeDifference , nR , _0_2W_LatitudeDifference ); 2351 decimal N = S + _0_2W_LatitudeDifference; 2352 decimal E = W + _0_2W_LongitudeDifference; 2353 WNES[0] = W; 2354 WNES[1] = N; 2355 WNES[2] = E; 2356 WNES[3] = S; 2357 return WNES; 2358 } 2359 #endregion 2360 #region 1000 2361 else if ( scaleNumber == 1000 ) { 2362 decimal W = CalculateLongitudeLatitudeFromNewMapnumberWest( n100WC , _100W_LatitudeDifference , nC , _0_1W_LongitudeDifference ); 2363 decimal S = CalculateLongitudeLatitudeFromNewMapnumberSouth( n100WR , _100W_LongitudeDifference , nR , _0_1W_LatitudeDifference ); 2364 decimal N = S + _0_1W_LatitudeDifference; 2365 decimal E = W + _0_1W_LongitudeDifference; 2366 WNES[0] = W; 2367 WNES[1] = N; 2368 WNES[2] = E; 2369 WNES[3] = S; 2370 return WNES; 2371 } 2372 #endregion 2373 #region 500 2374 else if ( scaleNumber == 500 ) { 2375 decimal W = CalculateLongitudeLatitudeFromNewMapnumberWest( n100WC , _100W_LatitudeDifference , nC , _500_LongitudeDifference ); 2376 decimal S = CalculateLongitudeLatitudeFromNewMapnumberSouth( n100WR , _100W_LongitudeDifference , nR , _500_LatitudeDifference ); 2377 decimal N = S + _500_LatitudeDifference; 2378 decimal E = W + _500_LongitudeDifference; 2379 WNES[0] = W; 2380 WNES[1] = N; 2381 WNES[2] = E; 2382 WNES[3] = S; 2383 return WNES; 2384 } 2385 #endregion 2386 else { 2387 return null; 2388 } 2389 } catch { 2390 throw; 2391 } 2392 } 2393 2394 /// <summary> 2395 /// Calculate West coordinate from new mapnumber 2396 /// </summary> 2397 private decimal CalculateLongitudeLatitudeFromNewMapnumberWest( string newMapnumber_100W_Column , decimal newMapnumber_100W_LongitudeDifference , 2398 string subColumn , decimal subLongitudeDifference ) { 2399 try { 2400 if ( string. IsNullOrEmpty( newMapnumber_100W_Column ) ) { 2401 return 0; 2402 } 2403 if ( string. IsNullOrEmpty( subColumn ) ) { 2404 subColumn = "0"; 2405 } 2406 decimal n100WC_d = decimal. Parse( newMapnumber_100W_Column ); 2407 decimal subC_d = decimal. Parse( subColumn ); 2408 decimal x = ( n100WC_d - 31 ) * newMapnumber_100W_LongitudeDifference + ( subC_d - 1 ) * subLongitudeDifference; 2409 return x; 2410 } catch { 2411 throw; 2412 } 2413 } 2414 2415 /// <summary> 2416 /// Calculate South coordinate from new mapnumber 2417 /// </summary> 2418 private decimal CalculateLongitudeLatitudeFromNewMapnumberSouth( string newMapnumber_100W_Row , decimal newMapnumber_100W_LatitudeDifference , 2419 string subRow , decimal subLatitudeDifference ) { 2420 try { 2421 if ( string. IsNullOrEmpty( newMapnumber_100W_Row ) ) { 2422 return 0; 2423 } 2424 if ( string. IsNullOrEmpty( subRow ) ) { 2425 subRow = "0"; 2426 } 2427 int n100WRInt = Change100W_RowStringToDigital( newMapnumber_100W_Row ); 2428 if ( n100WRInt == -1 ) { 2429 return 0; 2430 } 2431 decimal n100WR_d = decimal. Parse( n100WRInt. ToString() ); 2432 decimal subR_d = decimal. Parse( subRow ); 2433 if ( subLatitudeDifference == 0M ) { 2434 decimal x = ( n100WR_d - 1 ) * newMapnumber_100W_LatitudeDifference; 2435 return x; 2436 } else { 2437 decimal x = ( n100WR_d - 1 ) * newMapnumber_100W_LatitudeDifference + ( newMapnumber_100W_LatitudeDifference / subLatitudeDifference - subR_d ) * subLatitudeDifference; 2438 return x; 2439 } 2440 } catch { 2441 throw; 2442 } 2443 } 2444 2445 #endregion 2446 2447 #region Old mapnumber to coordinate 旧图号转坐标 2448 2449 /// <summary> 2450 /// Calculate West North East South coordinate from old mapnumber 2451 /// 从旧图幅号计算图廓“西北东南”坐标([0]W [1]N [2]E [3]S) 2452 /// </summary> 2453 /// <param name="oldMapnumber"></param> 2454 /// <returns></returns> 2455 public decimal[] CalculateLongitudeLatitudeFromOldMapnumber( string oldMapnumber ) { 2456 try { 2457 string newMapnumber = OldMapnumberToNewMapnumber( oldMapnumber ); 2458 if ( string. IsNullOrEmpty( newMapnumber ) ) { 2459 return CalculateLongitudeLatitudeFromNewMapnumber( newMapnumber ); 2460 } else { 2461 return CalculateLongitudeLatitudeFromOldMapnumber20W( oldMapnumber ); 2462 } 2463 } catch { 2464 throw; 2465 } 2466 } 2467 2468 /// <summary> 2469 /// Calculate West North East South coordinate from 20W old mapnumber 2470 /// 从20万旧图幅号计算图廓“西北东南”坐标([0]W [1]N [2]E [3]S) 2471 /// </summary> 2472 /// <param name="oldMapnumber20W"></param> 2473 /// <returns></returns> 2474 public decimal[] CalculateLongitudeLatitudeFromOldMapnumber20W( string oldMapnumber20W ) { 2475 try { 2476 if ( !OldMapnumber_Check20W( oldMapnumber20W ) ) { 2477 return null; 2478 } 2479 decimal[] WNES = new decimal[4]; 2480 string[] split = oldMapnumber20W. Split( new char[] { '-' } , StringSplitOptions. RemoveEmptyEntries ); 2481 string o100WR = split[0]; 2482 string o100WC = split[1]; 2483 string o20W = split[2]; 2484 string[] subSplit = o20W. Split( new char[] { '(' , ')' } , StringSplitOptions. RemoveEmptyEntries ); 2485 string o20WNum = subSplit[0]; 2486 decimal o100WW = CalculateLongitudeLatitudeFromNewMapnumberWest( o100WC , _100W_LatitudeDifference , "0" , 0 ); 2487 decimal o100WS = CalculateLongitudeLatitudeFromNewMapnumberSouth( o100WR , _100W_LongitudeDifference , "0" , 0 ); 2488 int i20WNum = int. Parse( o20WNum ); 2489 int o20WR = Old20WR( i20WNum ); 2490 int o20WC = Old20WC( i20WNum ); 2491 decimal W = o100WW + ( o20WC - 1 ) * _20W_LongitudeDifference; 2492 decimal S = o100WS + ( oldMapnumber_20W_RCNum - o20WR ) * _20W_LatitudeDifference; 2493 decimal N = S + _20W_LatitudeDifference; 2494 decimal E = W + _20W_LongitudeDifference; 2495 WNES[0] = W; 2496 WNES[1] = N; 2497 WNES[2] = E; 2498 WNES[3] = S; 2499 return WNES; 2500 } catch { 2501 throw; 2502 } 2503 } 2504 2505 private int Old20WR( int o20WNum ) { 2506 return ( ( o20WNum - 1 ) / oldMapnumber_20W_RCNum ) + 1; 2507 } 2508 private int Old20WC( int o20WNum ) { 2509 return ( ( o20WNum - 1 ) % oldMapnumber_20W_RCNum ) + 1; 2510 } 2511 2512 #endregion 2513 2514 #endregion 2515 2516 #region Coordinate to mapnumber 坐标转图号 2517 2518 #region Coordinate to new mapnumber 坐标转新图号 2519 2520 /// <summary> 2521 /// Coordinate to new mapnumber 2522 /// 从经纬度计算所在新图幅号 2523 /// </summary> 2524 /// <param name="longitude">longitude/经度</param> 2525 /// <param name="latitude">latitude/纬度</param> 2526 /// <param name="scaleDenominator">scaleDenominator/比例尺分母</param> 2527 /// <returns></returns> 2528 public string CalculateNewMapnumberFromLongitudeLatitude( decimal longitude , decimal latitude , int scaleDenominator ) { 2529 try { 2530 string newMapnumber_100W = CalculateNewMapnumberFromLongitudeLatitude100W( longitude , latitude ); 2531 if ( string. IsNullOrEmpty( newMapnumber_100W ) ) { 2532 return ""; 2533 } 2534 decimal[] longitudeLatitudeDifference = GetLongitudeLatitudeDifference( scaleDenominator ); 2535 decimal longitudeDifference = longitudeLatitudeDifference[0]; 2536 decimal latitudeDifference = longitudeLatitudeDifference[1]; 2537 2538 int[] subRC = CalculateNewMapnumberRowColumnIn100WFromLongitudeLatitude( longitude , latitude , longitudeDifference , latitudeDifference ); 2539 string scaleStr = GetNewMapnumberScaleString( scaleDenominator ); 2540 string r = ""; 2541 string c = ""; 2542 if ( scaleStr == "J" || scaleStr == "K" ) { 2543 r = subRC[0]. ToString( "0000" ); 2544 c = subRC[1]. ToString( "0000" ); 2545 } else { 2546 r = subRC[0]. ToString( "000" ); 2547 c = subRC[1]. ToString( "000" ); 2548 } 2549 if ( string. IsNullOrEmpty( scaleStr ) ) { 2550 scaleStr = ""; 2551 r = ""; 2552 c = ""; 2553 } 2554 string newMapnumber = newMapnumber_100W + scaleStr + r + c; 2555 if ( NewMapnumber_Check( newMapnumber ) ) { 2556 return newMapnumber; 2557 } else { 2558 return ""; 2559 } 2560 } catch { 2561 throw; 2562 } 2563 } 2564 2565 /// <summary> 2566 /// Coordinate to 100W new mapnumber 2567 /// 从经纬度计算所在100万新图幅号 2568 /// </summary> 2569 /// <param name="longitude"></param> 2570 /// <param name="latitude"></param> 2571 /// <returns></returns> 2572 public string CalculateNewMapnumberFromLongitudeLatitude100W( decimal longitude , decimal latitude ) { 2573 try { 2574 int rNum = (int) ( latitude / _100W_LongitudeDifference ) + 1; 2575 int cNum = (int) ( longitude / _100W_LatitudeDifference ) + 31; 2576 string rStr = Change100W_RowDigitalToString( rNum ); 2577 string n100W = rStr + cNum. ToString( "00" ); 2578 if ( NewMapnumber_Check( n100W ) ) { 2579 return n100W; 2580 } else { 2581 return ""; 2582 } 2583 } catch { 2584 throw; 2585 } 2586 } 2587 2588 /// <summary> 2589 /// Coordinate to 50W new mapnumber 2590 /// 从经纬度计算所在50万新图幅号 2591 /// </summary> 2592 /// <param name="longitude"></param> 2593 /// <param name="latitude"></param> 2594 /// <returns></returns> 2595 public string CalculateNewMapnumberFromLongitudeLatitude50W( decimal longitude , decimal latitude ) { 2596 try { 2597 string n100W = CalculateNewMapnumberFromLongitudeLatitude100W( longitude , latitude ); 2598 if ( string. IsNullOrEmpty( n100W ) ) { 2599 return ""; 2600 } 2601 int[] subRC = CalculateNewMapnumberRowColumnIn100WFromLongitudeLatitude( longitude , latitude , _50W_LongitudeDifference , _50W_LatitudeDifference ); 2602 string r = subRC[0]. ToString( "000" ); 2603 string c = subRC[1]. ToString( "000" ); 2604 string n50W = n100W + "B" + r + c; 2605 if ( NewMapnumber_Check( n50W ) ) { 2606 return n50W; 2607 } else { 2608 return ""; 2609 } 2610 } catch { 2611 throw; 2612 } 2613 } 2614 2615 /// <summary> 2616 /// Coordinate to 25W new mapnumber 2617 /// 从经纬度计算所在25万新图幅号 2618 /// </summary> 2619 /// <param name="longitude"></param> 2620 /// <param name="latitude"></param> 2621 /// <returns></returns> 2622 public string CalculateNewMapnumberFromLongitudeLatitude25W( decimal longitude , decimal latitude ) { 2623 try { 2624 string n100W = CalculateNewMapnumberFromLongitudeLatitude100W( longitude , latitude ); 2625 if ( string. IsNullOrEmpty( n100W ) ) { 2626 return ""; 2627 } 2628 int[] subRC = CalculateNewMapnumberRowColumnIn100WFromLongitudeLatitude( longitude , latitude , _25W_LongitudeDifference , _25W_LatitudeDifference ); 2629 string r = subRC[0]. ToString( "000" ); 2630 string c = subRC[1]. ToString( "000" ); 2631 string n25W = n100W + "C" + r + c; 2632 if ( NewMapnumber_Check( n25W ) ) { 2633 return n25W; 2634 } else { 2635 return ""; 2636 } 2637 } catch { 2638 throw; 2639 } 2640 } 2641 2642 /// <summary> 2643 /// Coordinate to 10W new mapnumber 2644 /// 从经纬度计算所在10万新图幅号 2645 /// </summary> 2646 /// <param name="longitude"></param> 2647 /// <param name="latitude"></param> 2648 /// <returns></returns> 2649 public string CalculateNewMapnumberFromLongitudeLatitude10W( decimal longitude , decimal latitude ) { 2650 try { 2651 string n100W = CalculateNewMapnumberFromLongitudeLatitude100W( longitude , latitude ); 2652 if ( string. IsNullOrEmpty( n100W ) ) { 2653 return ""; 2654 } 2655 int[] subRC = CalculateNewMapnumberRowColumnIn100WFromLongitudeLatitude( longitude , latitude , _10W_LongitudeDifference , _10W_LatitudeDifference ); 2656 string r = subRC[0]. ToString( "000" ); 2657 string c = subRC[1]. ToString( "000" ); 2658 string n10W = n100W + "D" + r + c; 2659 if ( NewMapnumber_Check( n10W ) ) { 2660 return n10W; 2661 } else { 2662 return ""; 2663 } 2664 } catch { 2665 throw; 2666 } 2667 } 2668 2669 /// <summary> 2670 /// Coordinate to 5W new mapnumber 2671 /// 从经纬度计算所在5万新图幅号 2672 /// </summary> 2673 /// <param name="longitude"></param> 2674 /// <param name="latitude"></param> 2675 /// <returns></returns> 2676 public string CalculateNewMapnumberFromLongitudeLatitude5W( decimal longitude , decimal latitude ) { 2677 try { 2678 string n100W = CalculateNewMapnumberFromLongitudeLatitude100W( longitude , latitude ); 2679 if ( string. IsNullOrEmpty( n100W ) ) { 2680 return ""; 2681 } 2682 int[] subRC = CalculateNewMapnumberRowColumnIn100WFromLongitudeLatitude( longitude , latitude , _5W_LongitudeDifference , _5W_LatitudeDifference ); 2683 string r = subRC[0]. ToString( "000" ); 2684 string c = subRC[1]. ToString( "000" ); 2685 string n5W = n100W + "E" + r + c; 2686 if ( NewMapnumber_Check( n5W ) ) { 2687 return n5W; 2688 } else { 2689 return ""; 2690 } 2691 } catch { 2692 throw; 2693 } 2694 } 2695 2696 /// <summary> 2697 /// Coordinate to 2.5W new mapnumber 2698 /// 从经纬度计算所在2.5万新图幅号 2699 /// </summary> 2700 /// <param name="longitude"></param> 2701 /// <param name="latitude"></param> 2702 /// <returns></returns> 2703 public string CalculateNewMapnumberFromLongitudeLatitude2_5W( decimal longitude , decimal latitude ) { 2704 try { 2705 string n100W = CalculateNewMapnumberFromLongitudeLatitude100W( longitude , latitude ); 2706 if ( string. IsNullOrEmpty( n100W ) ) { 2707 return ""; 2708 } 2709 int[] subRC = CalculateNewMapnumberRowColumnIn100WFromLongitudeLatitude( longitude , latitude , _2_5W_LongitudeDifference , _2_5W_LatitudeDifference ); 2710 string r = subRC[0]. ToString( "000" ); 2711 string c = subRC[1]. ToString( "000" ); 2712 string n2_5W = n100W + "F" + r + c; 2713 if ( NewMapnumber_Check( n2_5W ) ) { 2714 return n2_5W; 2715 } else { 2716 return ""; 2717 } 2718 } catch { 2719 throw; 2720 } 2721 } 2722 2723 /// <summary> 2724 /// Coordinate to 1W new mapnumber 2725 /// 从经纬度计算所在1万新图幅号 2726 /// </summary> 2727 /// <param name="longitude"></param> 2728 /// <param name="latitude"></param> 2729 /// <returns></returns> 2730 public string CalculateNewMapnumberFromLongitudeLatitude1W( decimal longitude , decimal latitude ) { 2731 try { 2732 string n100W = CalculateNewMapnumberFromLongitudeLatitude100W( longitude , latitude ); 2733 if ( string. IsNullOrEmpty( n100W ) ) { 2734 return ""; 2735 } 2736 int[] subRC = CalculateNewMapnumberRowColumnIn100WFromLongitudeLatitude( longitude , latitude , _1W_LongitudeDifference , _1W_LatitudeDifference ); 2737 string r = subRC[0]. ToString( "000" ); 2738 string c = subRC[1]. ToString( "000" ); 2739 string n1W = n100W + "G" + r + c; 2740 if ( NewMapnumber_Check( n1W ) ) { 2741 return n1W; 2742 } else { 2743 return ""; 2744 } 2745 } catch { 2746 throw; 2747 } 2748 } 2749 2750 /// <summary> 2751 /// Coordinate to 0.5W new mapnumber 2752 /// 从经纬度计算所在0.5万新图幅号 2753 /// </summary> 2754 /// <param name="longitude"></param> 2755 /// <param name="latitude"></param> 2756 /// <returns></returns> 2757 public string CalculateNewMapnumberFromLongitudeLatitude0_5W( decimal longitude , decimal latitude ) { 2758 try { 2759 string n100W = CalculateNewMapnumberFromLongitudeLatitude100W( longitude , latitude ); 2760 if ( string. IsNullOrEmpty( n100W ) ) { 2761 return ""; 2762 } 2763 int[] subRC = CalculateNewMapnumberRowColumnIn100WFromLongitudeLatitude( longitude , latitude , _0_5W_LongitudeDifference , _0_5W_LatitudeDifference ); 2764 string r = subRC[0]. ToString( "000" ); 2765 string c = subRC[1]. ToString( "000" ); 2766 string n0_5W = n100W + "H" + r + c; 2767 if ( NewMapnumber_Check( n0_5W ) ) { 2768 return n0_5W; 2769 } else { 2770 return ""; 2771 } 2772 } catch { 2773 throw; 2774 } 2775 } 2776 2777 /// <summary> 2778 /// Coordinate to 0.2W new mapnumber 2779 /// 从经纬度计算所在0.2万新图幅号 2780 /// </summary> 2781 /// <param name="longitude"></param> 2782 /// <param name="latitude"></param> 2783 /// <returns></returns> 2784 public string CalculateNewMapnumberFromLongitudeLatitude0_2W( decimal longitude , decimal latitude ) { 2785 try { 2786 string n100W = CalculateNewMapnumberFromLongitudeLatitude100W( longitude , latitude ); 2787 if ( string. IsNullOrEmpty( n100W ) ) { 2788 return ""; 2789 } 2790 int[] subRC = CalculateNewMapnumberRowColumnIn100WFromLongitudeLatitude( longitude , latitude , _0_2W_LongitudeDifference , _0_2W_LatitudeDifference ); 2791 string r = subRC[0]. ToString( "000" ); 2792 string c = subRC[1]. ToString( "000" ); 2793 string n0_2W = n100W + "I" + r + c; 2794 if ( NewMapnumber_Check( n0_2W ) ) { 2795 return n0_2W; 2796 } else { 2797 return ""; 2798 } 2799 } catch { 2800 throw; 2801 } 2802 } 2803 2804 /// <summary> 2805 /// Coordinate to 0.1W new mapnumber 2806 /// 从经纬度计算所在0.1万新图幅号 2807 /// </summary> 2808 /// <param name="longitude"></param> 2809 /// <param name="latitude"></param> 2810 /// <returns></returns> 2811 public string CalculateNewMapnumberFromLongitudeLatitude0_1W( decimal longitude , decimal latitude ) { 2812 try { 2813 string n100W = CalculateNewMapnumberFromLongitudeLatitude100W( longitude , latitude ); 2814 if ( string. IsNullOrEmpty( n100W ) ) { 2815 return ""; 2816 } 2817 int[] subRC = CalculateNewMapnumberRowColumnIn100WFromLongitudeLatitude( longitude , latitude , _0_1W_LongitudeDifference , _0_1W_LatitudeDifference ); 2818 string r = subRC[0]. ToString( "0000" ); 2819 string c = subRC[1]. ToString( "0000" ); 2820 string n0_1W = n100W + "J" + r + c; 2821 if ( NewMapnumber_Check( n0_1W ) ) { 2822 return n0_1W; 2823 } else { 2824 return ""; 2825 } 2826 } catch { 2827 throw; 2828 } 2829 } 2830 2831 /// <summary> 2832 /// Coordinate to 500 new mapnumber 2833 /// 从经纬度计算所在500新图幅号 2834 /// </summary> 2835 /// <param name="longitude"></param> 2836 /// <param name="latitude"></param> 2837 /// <returns></returns> 2838 public string CalculateNewMapnumberFromLongitudeLatitude500( decimal longitude , decimal latitude ) { 2839 try { 2840 string n100W = CalculateNewMapnumberFromLongitudeLatitude100W( longitude , latitude ); 2841 if ( string. IsNullOrEmpty( n100W ) ) { 2842 return ""; 2843 } 2844 int[] subRC = CalculateNewMapnumberRowColumnIn100WFromLongitudeLatitude( longitude , latitude , _500_LongitudeDifference , _500_LatitudeDifference ); 2845 string r = subRC[0]. ToString( "0000" ); 2846 string c = subRC[1]. ToString( "0000" ); 2847 string n500 = n100W + "K" + r + c; 2848 if ( NewMapnumber_Check( n500 ) ) { 2849 return n500; 2850 } else { 2851 return ""; 2852 } 2853 } catch { 2854 throw; 2855 } 2856 } 2857 2858 private int[] CalculateNewMapnumberRowColumnIn100WFromLongitudeLatitude( decimal longitude , decimal latitude , decimal JC , decimal WC ) { 2859 int rNum = (int) ( Math. Round( ( _100W_LongitudeDifference / WC ) , MidpointRounding. AwayFromZero ) ) - (int) ( ( latitude % _100W_LongitudeDifference ) / WC ); 2860 int cNum = (int) ( (int) ( ( longitude % _100W_LatitudeDifference ) / JC ) ) + 1; 2861 2862 return new int[] { rNum , cNum }; 2863 } 2864 2865 #endregion 2866 2867 #region Coordinate to old mapnumber 坐标转旧图号 2868 2869 /// <summary> 2870 /// Coordinate to old mapnumber 2871 /// 从经纬度计算所在旧图幅号 2872 /// </summary> 2873 /// <param name="longitude">经度</param> 2874 /// <param name="latitude">纬度</param> 2875 /// <param name="scaleDenominator">比例尺分母</param> 2876 /// <returns></returns> 2877 public string CalculateOldMapnumberFromLongitudeLatitude( decimal longitude , decimal latitude , int scaleDenominator ) { 2878 try { 2879 string n100W = CalculateNewMapnumberFromLongitudeLatitude100W( longitude , latitude ); 2880 if ( string. IsNullOrEmpty( n100W ) ) { 2881 return ""; 2882 } 2883 decimal[] jwc = GetLongitudeLatitudeDifference( scaleDenominator ); 2884 decimal JC = jwc[0]; 2885 decimal WC = jwc[1]; 2886 int[] subRC = CalculateNewMapnumberRowColumnIn100WFromLongitudeLatitude( longitude , latitude , JC , WC ); 2887 string scaleStr = GetNewMapnumberScaleString( scaleDenominator ); 2888 #region 20万 2889 if ( scaleDenominator == 200000 ) { 2890 return CalculateOldMapnumberFromLongitudeLatitude20W( longitude , latitude ); 2891 } 2892 #endregion 2893 #region 2894 else { 2895 string r = ""; 2896 string c = ""; 2897 if ( scaleStr == "J" || scaleStr == "K" ) { 2898 r = subRC[0]. ToString( "0000" ); 2899 c = subRC[1]. ToString( "0000" ); 2900 } else { 2901 r = subRC[0]. ToString( "000" ); 2902 c = subRC[1]. ToString( "000" ); 2903 } 2904 if ( string. IsNullOrEmpty( scaleStr ) ) { 2905 scaleStr = ""; 2906 r = ""; 2907 c = ""; 2908 } 2909 string newMapnumber = n100W + scaleStr + r + c; 2910 if ( NewMapnumber_Check( newMapnumber ) ) { 2911 string oldMapnumber = NewMapnumberToOldMapnumber( newMapnumber ); 2912 if ( OldMapnumber_Check( oldMapnumber ) ) { 2913 return oldMapnumber; 2914 } else { 2915 return ""; 2916 } 2917 } else { 2918 return ""; 2919 } 2920 } 2921 #endregion 2922 } catch { 2923 throw; 2924 } 2925 } 2926 2927 /// <summary> 2928 /// Coordinate to 100W old mapnumber 2929 /// 从经纬度计算所在100万旧图幅号 2930 /// </summary> 2931 /// <param name="longitude"></param> 2932 /// <param name="latitude"></param> 2933 /// <returns></returns> 2934 public string CalculateOldMapnumberFromLongitudeLatitude100W( decimal longitude , decimal latitude ) { 2935 try { 2936 int rNum = (int) ( latitude / _100W_LongitudeDifference ) + 1; 2937 int cNum = (int) ( longitude / _100W_LatitudeDifference ) + 31; 2938 string rStr = Change100W_RowDigitalToString( rNum ); 2939 string o100W = rStr + "-" + cNum. ToString( "00" ); 2940 if ( OldMapnumber_Check100W( o100W ) ) { 2941 return o100W; 2942 } else { 2943 return ""; 2944 } 2945 } catch { 2946 throw; 2947 } 2948 } 2949 2950 /// <summary> 2951 /// Coordinate to 20W old mapnumber 2952 /// 从经纬度计算所在20万旧图幅号 2953 /// </summary> 2954 /// <param name="longitude"></param> 2955 /// <param name="latitude"></param> 2956 /// <returns></returns> 2957 public string CalculateOldMapnumberFromLongitudeLatitude20W( decimal longitude , decimal latitude ) { 2958 try { 2959 string o100W = CalculateOldMapnumberFromLongitudeLatitude100W( longitude , latitude ); 2960 if ( string. IsNullOrEmpty( o100W ) ) { 2961 return ""; 2962 } 2963 int[] subRC = CalculateNewMapnumberRowColumnIn100WFromLongitudeLatitude( longitude , latitude , _20W_LongitudeDifference , _20W_LatitudeDifference ); 2964 int o20WNum = O20WNum( subRC[0] , subRC[1] ); 2965 string o20W = o100W + "-(" + o20WNum. ToString( "00" ) + ")"; 2966 if ( OldMapnumber_Check20W( o20W ) ) { 2967 return o20W; 2968 } else { 2969 return ""; 2970 } 2971 } catch { 2972 throw; 2973 } 2974 } 2975 2976 private int O20WNum( int n20WR , int n20WC ) { 2977 return oldMapnumber_20W_RCNum * ( n20WR - 1 ) + n20WC; 2978 } 2979 2980 #endregion 2981 2982 #endregion 2983 2984 #endregion 2985 2986 2987 #region Other 其他 2988 2989 /// <summary> 2990 /// Get 100W Row/100W Column/ScaleStr/Rownum/Columnnum from new mapnumber 2991 /// 从新图号获得比例尺、行列号信息([0]:百万行;[1]:百万咧;[2]:比例尺代码;[3]:行号;[4]:列号) 2992 /// </summary> 2993 /// <param name="newMapnumber"></param> 2994 /// <returns></returns> 2995 public string[] GetInfoFromNewMapnumber( string newMapnumber ) { 2996 try { 2997 string[] strs = new string[5]; 2998 if ( !NewMapnumber_Check( newMapnumber ) ) { 2999 return null; 3000 } 3001 int length = newMapnumber. Length; 3002 string n100WR = ""; 3003 string n100WC = ""; 3004 string nScaleStr = ""; 3005 string nR = ""; 3006 string nC = ""; 3007 if ( length == 3 ) { 3008 n100WR = newMapnumber. Substring( 0 , 1 ); 3009 n100WC = newMapnumber. Substring( 1 , 2 ); 3010 } else { 3011 n100WR = newMapnumber. Substring( 0 , 1 ); 3012 n100WC = newMapnumber. Substring( 1 , 2 ); 3013 nScaleStr = newMapnumber. Substring( 3 , 1 ); 3014 if ( length == 10 ) { 3015 nR = newMapnumber. Substring( 4 , 3 ); 3016 nC = newMapnumber. Substring( 7 , 3 ); 3017 } else { 3018 nR = newMapnumber. Substring( 4 , 4 ); 3019 nC = newMapnumber. Substring( 8 , 4 ); 3020 } 3021 } 3022 if ( !string. IsNullOrEmpty( n100WR ) && !string. IsNullOrEmpty( n100WC ) ) { 3023 strs[0] = n100WR; 3024 strs[1] = n100WC; 3025 strs[2] = nScaleStr; 3026 strs[3] = nR; 3027 strs[4] = nC; 3028 return strs; 3029 } 3030 return null; 3031 } catch { 3032 throw; 3033 } 3034 } 3035 3036 /// <summary> 3037 /// Get longitude and latitude difference from scale denominator 3038 /// 从比例尺分母获得经差、纬差 [0]:经差;[1]:纬差 3039 /// </summary> 3040 /// <param name="scaleDenominator"></param> 3041 /// <returns></returns> 3042 public decimal[] GetLongitudeLatitudeDifference( int scaleDenominator ) { 3043 switch ( scaleDenominator ) { 3044 case 1000000: 3045 return new decimal[] { _100W_LatitudeDifference , _100W_LongitudeDifference }; 3046 case 500000: 3047 return new decimal[] { _50W_LongitudeDifference , _50W_LatitudeDifference }; 3048 case 250000: 3049 return new decimal[] { _25W_LongitudeDifference , _25W_LatitudeDifference }; 3050 case 200000: 3051 return new decimal[] { _20W_LongitudeDifference , _20W_LatitudeDifference }; 3052 case 100000: 3053 return new decimal[] { _10W_LongitudeDifference , _10W_LatitudeDifference }; 3054 case 50000: 3055 return new decimal[] { _5W_LongitudeDifference , _5W_LatitudeDifference }; 3056 case 25000: 3057 return new decimal[] { _2_5W_LongitudeDifference , _2_5W_LatitudeDifference }; 3058 case 10000: 3059 return new decimal[] { _1W_LongitudeDifference , _1W_LatitudeDifference }; 3060 case 5000: 3061 return new decimal[] { _0_5W_LongitudeDifference , _0_5W_LatitudeDifference }; 3062 case 2000: 3063 return new decimal[] { _0_2W_LongitudeDifference , _0_2W_LatitudeDifference }; 3064 case 1000: 3065 return new decimal[] { _0_1W_LongitudeDifference , _0_1W_LatitudeDifference }; 3066 case 500: 3067 return new decimal[] { _500_LongitudeDifference , _500_LatitudeDifference }; 3068 default: 3069 return null; 3070 } 3071 } 3072 3073 /// <summary> 3074 /// Get scale str from scale denominator 3075 /// 从比例尺分母获得新图号中的比例尺代码 3076 /// </summary> 3077 /// <param name="scaleDenominator"></param> 3078 /// <returns></returns> 3079 public string GetNewMapnumberScaleString( int scaleDenominator ) { 3080 switch ( scaleDenominator ) { 3081 case 1000000: 3082 return ""; 3083 case 500000: 3084 return "B"; 3085 case 250000: 3086 return "C"; 3087 case 100000: 3088 return "D"; 3089 case 50000: 3090 return "E"; 3091 case 25000: 3092 return "F"; 3093 case 10000: 3094 return "G"; 3095 case 5000: 3096 return "H"; 3097 case 2000: 3098 return "I"; 3099 case 1000: 3100 return "J"; 3101 case 500: 3102 return "K"; 3103 default: 3104 return null; 3105 } 3106 } 3107 3108 /// <summary> 3109 /// Get polygon from new mapnumber 3110 /// 根据图号,生成面图形 3111 /// </summary> 3112 /// <param name="newMapnumber"></param> 3113 /// <returns></returns> 3114 //public ESRI.ArcGIS.Geometry.IGeometry GetPolygonGeometryFromNewMapnumber( string newMapnumber ) { 3115 // if ( NewMapnumber_Check( newMapnumber ) ) { 3116 // decimal[] coor = CalculateLongitudeLatitudeFromNewMapnumber( newMapnumber ); 3117 // if ( coor != null ) { 3118 // ESRI.ArcGIS.Geometry.Ring ring = new ESRI.ArcGIS.Geometry.RingClass(); 3119 3120 // ESRI.ArcGIS.Geometry.Point p1 = new ESRI.ArcGIS.Geometry.PointClass(); 3121 // p1. PutCoords( decimal. ToDouble( coor[0] ) , decimal. ToDouble( coor[1] ) ); 3122 // ring. AddPoint( p1 ); 3123 3124 // ESRI. ArcGIS. Geometry. Point p2 = new ESRI. ArcGIS. Geometry. PointClass(); 3125 // p2. PutCoords( decimal. ToDouble( coor[0] ) , decimal. ToDouble( coor[3] ) ); 3126 // ring. AddPoint( p2 ); 3127 3128 // ESRI. ArcGIS. Geometry. Point p3 = new ESRI. ArcGIS. Geometry. PointClass(); 3129 // p3. PutCoords( decimal. ToDouble( coor[2] ) , decimal. ToDouble( coor[3] ) ); 3130 // ring. AddPoint( p3 ); 3131 3132 // ESRI. ArcGIS. Geometry. Point p4 = new ESRI. ArcGIS. Geometry. PointClass(); 3133 // p4. PutCoords( decimal. ToDouble( coor[2] ) , decimal. ToDouble( coor[1] ) ); 3134 // ring. AddPoint( p4 ); 3135 3136 // ring. AddPoint( p1 ); 3137 3138 // ESRI.ArcGIS.Geometry.IGeometryCollection pointPolygon = new ESRI.ArcGIS.Geometry.PolygonClass(); 3139 // pointPolygon. AddGeometry( ring as ESRI.ArcGIS.Geometry.IGeometry ); 3140 // ESRI.ArcGIS.Geometry.IPolygon pPolygon = pointPolygon as ESRI.ArcGIS.Geometry.IPolygon; 3141 // ESRI.ArcGIS.Geometry.IGeometry pGeometry = pPolygon as ESRI.ArcGIS.Geometry.IGeometry; 3142 // return pGeometry; 3143 // } 3144 // } 3145 // return null; 3146 //} 3147 3148 3149 #endregion 3150 3151 } 3152 }
posted on 2016-12-15 18:05 JackieTang 阅读(5952) 评论(1) 编辑 收藏 举报