首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Proj4js --你能在没有区域的情况下将Lat/Long转换成UTM吗?

Proj4js --你能在没有区域的情况下将Lat/Long转换成UTM吗?
EN

Stack Overflow用户
提问于 2015-04-15 16:04:14
回答 2查看 7.1K关注 0票数 2

我试图使用Proj4js来执行一些坐标转换,但是关于如何使用它的信息非常少。

我想要做的是把纬度和经度转换成UTM坐标,但我不知道区域是什么。这应该很简单,因为经度决定了区域,如果您知道区域是默认的话。

我试过在Proj4js中这样做,但我说错了

“未定义的TypeError:未定义的函数”

我的代码是这样的:

代码语言:javascript
复制
 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),我也将对此表示感谢。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-16 11:47:34

我认为您必须指定用于proj4投影的区域信息,以便使用该库。如果没有区域,则它不是有效的proj4投影。

下面是关于如何从lon/lat中识别区域的问题

下面是两个例子:[1][2]

您可以自己查看js代码。

票数 2
EN

Stack Overflow用户

发布于 2021-05-08 16:00:23

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

代码语言:javascript
复制
  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);
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.6.2/proj4.js"></script>

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29655256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档