Proj4JS - 转换 2.3.3 与 2.4.3
Proj4JS - Transformation 2.3.3 vs 2.4.3
为什么在 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 "adds better tmerc projection"
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 相关内容简化了示例。)
为什么在 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 "adds better tmerc projection"
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 相关内容简化了示例。)