| 3595 | } |
| 3596 | |
| 3597 | short GeoProjectionConverter::get_ProjectedCSTypeGeoKey(bool source) const { |
| 3598 | if (source && num_geo_keys) { |
| 3599 | int i; |
| 3600 | for (i = 0; i < num_geo_keys; i++) { |
| 3601 | if (geo_keys[i].key_id == 3072) { |
| 3602 | return geo_keys[i].value_offset; |
| 3603 | } |
| 3604 | } |
| 3605 | } |
| 3606 | GeoProjectionParameters* projection = get_projection(source); |
| 3607 | if (projection) { |
| 3608 | if (projection->type == GEO_PROJECTION_UTM) { |
| 3609 | if (projection->geokey) { |
| 3610 | return projection->geokey; |
| 3611 | } else { |
| 3612 | GeoProjectionParametersUTM* utm = (GeoProjectionParametersUTM*)projection; |
| 3613 | if (gcs_code == GEO_GCS_NAD83) { |
| 3614 | if (utm->utm_northern_hemisphere) { |
| 3615 | if ((1 <= utm->utm_zone_number) && (utm->utm_zone_number <= 23)) { |
| 3616 | return 26900 + utm->utm_zone_number; |
| 3617 | } else if ((59 <= utm->utm_zone_number) && (utm->utm_zone_number <= 60)) { |
| 3618 | return 3313 + utm->utm_zone_number; |
| 3619 | } |
| 3620 | } |
| 3621 | } else if (gcs_code == GEO_GCS_NAD83_CSRS) { |
| 3622 | if (utm->utm_northern_hemisphere) { |
| 3623 | if ((7 <= utm->utm_zone_number) && (utm->utm_zone_number <= 22)) { |
| 3624 | unsigned short epsg_codes_NAD83_CSRS[] = {3154, 3155, 3156, 3157, 2955, 2956, 2957, 3158, |
| 3625 | 3159, 3160, 2958, 2959, 2960, 2961, 2962, 3761}; |
| 3626 | return epsg_codes_NAD83_CSRS[utm->utm_zone_number - 7]; |
| 3627 | } |
| 3628 | } |
| 3629 | } else if (gcs_code == GEO_GCS_NAD83_2011) { |
| 3630 | if (utm->utm_northern_hemisphere) { |
| 3631 | if ((1 <= utm->utm_zone_number) && (utm->utm_zone_number <= 19)) { |
| 3632 | return 6329 + utm->utm_zone_number; |
| 3633 | } else if ((59 <= utm->utm_zone_number) && (utm->utm_zone_number <= 60)) { |
| 3634 | return 6269 + utm->utm_zone_number; |
| 3635 | } |
| 3636 | } |
| 3637 | } else if (gcs_code == GEO_GCS_NAD83_NSRS2007) { |
| 3638 | if (utm->utm_northern_hemisphere) { |
| 3639 | if ((1 <= utm->utm_zone_number) && (utm->utm_zone_number <= 19)) { |
| 3640 | return 3707 + utm->utm_zone_number; |
| 3641 | } else if ((59 <= utm->utm_zone_number) && (utm->utm_zone_number <= 60)) { |
| 3642 | return 3647 + utm->utm_zone_number; |
| 3643 | } |
| 3644 | } |
| 3645 | } else if (gcs_code == GEO_GCS_NAD83_HARN) { |
| 3646 | if (utm->utm_northern_hemisphere) { |
| 3647 | if ((10 <= utm->utm_zone_number) && (utm->utm_zone_number <= 19)) { |
| 3648 | return 3730 + utm->utm_zone_number; |
| 3649 | } else if ((4 <= utm->utm_zone_number) && (utm->utm_zone_number <= 5)) { |
| 3650 | return 3746 + utm->utm_zone_number; |
| 3651 | } |
| 3652 | } else { |
| 3653 | if (utm->utm_zone_number == 2) { |
| 3654 | return 2195; |
nothing calls this directly
no test coverage detected