javascript - Proj4JS - 转换 2.3.3 与 2.4.3

标签 javascript gis proj4js proj

到底为什么在 Proj4JS 中,相同代码的 2.4.3 转换的坐标完全不同?看看这个 fiddle 。

如果你调换了左边proj4js资源的顺序。您将看到 2.3.3 转换准确,而 2.4.3 转换完全错误。

我还提供了 2 个示例,您可以在这个问题中使用它们。

http://jsfiddle.net/8ztfhes0/17/

编辑 - 所以做更多的研究。我发现这个问题实际上是在2.3.16版本中出现的。直到 2.3.15 都可以。

2.3.16 的提交评论 =“添加更好的 tmerc 投影”

2.4.3 示例

proj4.defs("EPSG:26910","+proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
    var source = new proj4.Proj('EPSG:26910');  
    var dest = new proj4.Proj('EPSG:4326');      
    $("#lat").val(4970142.88145653);
    $("#lng").val(500532.52879695);
    $("#convert").on("click", function(){
        var p = new proj4.Point($("#lng").val(), $("#lat").val() );
        proj4.transform(source, dest, p);
        console.log("X : " +p.x + " \nY : " + p.y);
        alert("X : " +p.x + " \nY : " + p.y);
    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.3/proj4.js"></script>
    
    Lng : <input type="number" id="lng" />
    Lat : <input type="number" id="lat" />
    <button id="convert">Convert</button>
    

2.3.3 示例

proj4.defs("EPSG:26910","+proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
    var source = new proj4.Proj('EPSG:26910');  
    var dest = new proj4.Proj('EPSG:4326');      
    $("#lat").val(4970142.88145653);
    $("#lng").val(500532.52879695);
    $("#convert").on("click", function(){
        var p = new proj4.Point($("#lng").val(), $("#lat").val() );
        proj4.transform(source, dest, p);
        console.log("X : " +p.x + " \nY : " + p.y);
        alert("X : " +p.x + " \nY : " + p.y);
    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.3.3/proj4.js"></script>
    
    Lng : <input type="number" id="lng" />
    Lat : <input type="number" id="lat" />
    <button id="convert">Convert</button>
    

最佳答案

看起来问题在于您使用的是输入参数p,而不是proj4.transform返回的值。另外,作为旁注,当前版本的 proj4js(撰写本文时为 2.4.3)的 documentation 显示您可以直接调用 proj4 而不是 proj4.transform .

以下说明了差异:

proj4.defs("EPSG:26910","+proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
var source = new proj4.Proj('EPSG:26910');  
var dest = new proj4.Proj('EPSG:4326');      
var p = {x: 500532.52879695, y: 4970142.88145653};
var result = proj4(source, dest, p);
console.log('Correct:', result);
console.log('Wrong:', p);
<script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.3/proj4.js"></script>

(我通过删除所有 HTML/jQuery 相关内容稍微简化了示例。)

关于javascript - Proj4JS - 转换 2.3.3 与 2.4.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49774309/

相关文章:

javascript proj4js问题

map - OpenLayers 投影

javascript - 在自定义 'alert' 或 'confirm' 框中,剩余代码在按“确定”之前执行

javascript - 单击时显示和隐藏

gis - 获取 Cesium Map 的中心

javascript - 谷歌街景中一个像素离地面的高度/海拔

javascript - 如何在 OpenLayers 中设置默认 View 而不限制边界?

javascript - 原型(prototype)继承: Can you chain Object.创建?

javascript - Sharepoint 自定义 Web 部件启动脚本

gis - 开源 map