javascript - Proj4js - 你能在没有区域的情况下将纬度/经度转换为 UTM 吗?

标签 javascript proj4js

我正在尝试使用 Proj4js 执行一些坐标转换,但关于如何使用它的信息很少。

我想做的是将纬度和经度转换为 UTM 坐标,但我不知道区域是什么。这应该很容易,因为经度决定了区域,并且如果您知道该区域默认出现。

我尝试在 Proj4js 中执行此操作,但出现错误提示

"Uncaught TypeError: undefined is not a function"

我的代码是这样的:

 proj4Arr = [-105.2098, 39.7458];
 var source = ('+proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees +no_defs');
 var dest = ("+proj=utm +ellps=GRS80 +datum=nad83 +units=m +no_defs");

 console.log(proj4(source, dest, proj4Arr));

我只是不知道是否可以在不包含区域的情况下执行此操作。我可以先计算区域,然后在需要时将其放入字符串中,但我尽量保持简单。

如果有人知道关于示例的任何好的纯 js 资源(不一定使用 OpenLayers 3),我也将不胜感激。

谢谢!

最佳答案

今年是 2021 年,可以发布一个可运行的代码,不仅可以回答问题,还可以演示导致坐标转换结果的所有步骤。

  function utmzone_from_lon(lon_deg) {
    //get utm-zone from longitude degrees
    return parseInt(((lon_deg+180)/6)%60)+1;
  }
  
  function proj4_setdef(lon_deg) {
    //get UTM projection definition from longitude
    const utm_zone = utmzone_from_lon(lon_deg);
    const zdef = `+proj=utm +zone=${utm_zone} +datum=WGS84 +units=m +no_defs`;
    return zdef;
  }
  
  // computation test
  let lon_input = 95.99;
  let lat_input = 15.15;
  console.log("Input (long,lat):", lon_input, lat_input);
  const azone = utmzone_from_lon(lon_input);
  console.log(`UTM zone from longitude: ${azone}`);
  console.log("AUTO projection definition:", proj4_setdef(lon_input));
  
  // define proj4_defs for easy uses
  // "EPSG:4326" for long/lat degrees, no projection
  // "EPSG:AUTO" for UTM 'auto zone' projection
  proj4.defs([
  [
    "EPSG:4326",
    "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"
  ],
  ["EPSG:AUTO", proj4_setdef(lon_input)]]);
 
  // usage:
  // conversion from (long/lat) to UTM (E/N)
  const en_m = proj4("EPSG:4326", "EPSG:AUTO", [lon_input, lat_input]);
  const e4digits = en_m[0].toFixed(4); //easting
  const n4digits = en_m[1].toFixed(4); //northing
  console.log(`Zone ${azone}, (E,N) m: ${e4digits}, ${n4digits}`);
  
  // inversion from (E,N) to (long,lat)
  const lonlat_chk = proj4("EPSG:AUTO", "EPSG:4326", en_m);
  console.log("Inverse check:", lonlat_chk);
<script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.6.2/proj4.js"></script>

关于javascript - Proj4js - 你能在没有区域的情况下将纬度/经度转换为 UTM 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29655256/

相关文章:

javascript - Chrome 应用 : accessing sandboxed iframe from parent window

javascript - 使用 Javascript 计算边界框

Javascript 告诉我一个节点有 23 个子节点,但它只有 11 个,firebug 同意我的观点

javascript - typescript : Is there a way to get all the keys in a Javascript object with nested properties?

javascript - 在 OpenLayers map 中更改投影

transform - 如何将距离从度转换为米?

openlayers - 如何在Openlayers中将矢量层坐标转换为 map 纬度和经度

javascript - 为什么 $scope 在 Angular 1.6.1 中不起作用?

javascript - 错误 :/ng-app/node_modules/bcrypt/lib/binding/bcrypt_lib. Node :无效的 ELF header