Proj4JS - 转换2.3.3与2.4.3

时间:2018-04-11 11:46:27

标签: javascript gis proj4js proj4

为什么在Proj4JS中,使用相同代码的2.4.3变换坐标完全不同?看到这个小提琴。

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

我还提供了两个你可以在这个问题中使用的例子。

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

编辑 - 所以做了一些研究。我发现问题实际上出现在2.3.16版本中。最高可达2.3.15。很好。

提交评论= for 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>
    

1 个答案:

答案 0 :(得分:0)

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

以下说明了不同之处:

&#13;
&#13;
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);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.3/proj4.js"></script>
&#13;
&#13;
&#13;

(我通过删除所有与HTML / jQuery相关的东西简化了示例。)