Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Proj4js-你能在没有区域的情况下将Lat/Long转换为UTM吗?_Javascript_Proj4js - Fatal编程技术网

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

Javascript Proj4js-你能在没有区域的情况下将Lat/Long转换为UTM吗?,javascript,proj4js,Javascript,Proj4js,我试图使用Proj4js来执行一些坐标转换,但是关于如何使用它的信息很少 我想做的是将纬度和经度转换为UTM坐标,但我不知道分区是什么。这应该很容易,因为经度决定了分区,如果您知道默认情况下分区会出现 我曾尝试在Proj4js中这样做,但我得到一个错误,即 “未捕获类型错误:未定义不是函数” 我的代码如下所示: proj4Arr = [-105.2098, 39.7458]; var source = ('+proj=longlat +ellps=WGS84 +datum=WGS84 +un

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

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

我曾尝试在Proj4js中这样做,但我得到一个错误,即

“未捕获类型错误:未定义不是函数”

我的代码如下所示:

 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),我也会非常感激


谢谢

我认为您必须为proj4投影指定投影区域信息才能使用库。没有区域,它不是有效的proj4投影

下面是关于如何从lon/lat识别区域的说明

这里有两个例子:


您可以自己查看js代码。

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

功能utmzone_from_lon(lon_deg){
//从经度获取utm区域
返回parseInt(((lon_deg+180)/6)%60)+1;
}
功能项目4_设置定义(长度){
//从经度获取UTM投影定义
const utm_zone=从_lon(lon_deg)开始的utmzone_;
const zdef=`+proj=utm+zone=${utm_zone}+datum=WGS84+units=m+no_defs`;
返回zdef;
}
//计算测试
设lon_输入=95.99;
设lat_输入=15.15;
日志(“输入(长,横向):”,长输入,横向输入);
const azone=utmzone_from_lon(lon_输入);
log(`UTM zone from longitude:${azone}`);
log(“自动投影定义:”,proj4_setdef(lon_输入));
//定义proj4_def以便于使用
//“EPSG:4326”表示长/纬度,无投影
//UTM“自动区域”投影的“EPSG:AUTO”
proj4.defs([
[
“EPSG:4326”,
“+标题=WGS 84(长/纬度)+项目=长纬度+ellps=WGS84+基准=WGS84+单位=度”
],
[“EPSG:AUTO”,proj4_设置定义(lon_输入)];
//用法:
//从(长/宽)转换为UTM(E/N)
const en_m=proj4(“EPSG:4326”,“EPSG:AUTO”,[lon_输入,lat_输入]);
常数e4digits=en_m[0].toFixed(4)//东距
常数n4digits=en_m[1].toFixed(4)//北行
log(`Zone${azone},(E,N)m:${e4digits},${n4digits}`);
//从(E,N)到(长,纬度)的反转
const lonlat_chk=proj4(“EPSG:AUTO”,“EPSG:4326”,en_m);
控制台日志(“反向检查:”,lonlat_chk)

我意识到这其实就是问题所在,但我认为你的答案是正确的。我使用此代码首先获得区域:
var zone=1+Math.floor((lngd+180)/6)