代码之家  ›  专栏  ›  技术社区  ›  GrafixMastaMD

Proj4JS-转换2.3.3 vs 2.4.3

  •  0
  • GrafixMastaMD  · 技术社区  · 6 年前

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

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

    我还包括了两个例子,你可以在这个问题上正确使用。

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

    编辑-多做一些研究。我发现这个问题实际上出现在版本2.3.16中。达到2.3.15即可。

    commit comment=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示例

    项目4。定义(“EPSG:26910”,“+项目=utm+区域=10+ellps=GRS80+基准=NAD83+单位=m+无定义”);
    var source=新项目4。项目(“EPSG:26910”);
    var dest=新项目4。项目(“EPSG:4326”);
    $(“#lat”)。val(4970142.88145653);
    $(“#lng”)。val(500532.52879695);
    $(“#转换”)。打开(“单击”,函数(){
    var p=新项目4。点($(“#lng”)。val(),$(“#lat”)。val());
    项目4。转换(源、目标、p);
    安慰日志(“X:”+p.X+“\nY:”+p.y);
    警报(“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 回复  |  直到 6 年前
        1
  •  1
  •   ValarDohaeris    6 年前

    问题似乎是您正在使用输入参数 p 而不是返回的值 proj4.transform 此外,作为旁注 documentation 对于当前版本的proj4js(截至本文撰写之时为2.4.3),可以调用 proj4 直接代替 项目4。使改变

    以下说明了区别:

    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相关的内容,我稍微简化了示例。)

    推荐文章