将 X、Y 像素转换为经度和纬度

And*_*ves 7 javascript math maps wgs84 coordinates

我有一张来自地图一部分的真实比例的 8640x11520 像素的图像。我需要将我的 x, y 点转换为坐标,有人想知道吗?

在此处输入图片说明

var mapWidth = 8640;
var mapHeight = 11520;

var mapLatitudeStart = 28.349768989955244;
var mapLongitudeStart = -81.55803680419922;

var maxLatitude = 28.349806758250104;
var maxLongitude = -81.541128;

var pointNeedConversion = {'x': 4813.10 'y': 2674.84};
var pointLatitude = ??
Run Code Online (Sandbox Code Playgroud)

Mos*_*ini 6

当您映射到纬度/经度时,请注意,您不能使用线性比例来执行此操作,而是必须检查应用于地图的投影类型,然后相应地转换坐标。

通常地图是WGS84 投影,因此您必须应用墨卡托投影的逆公式。

任务并不简单,所以我的建议是依赖像Proj4js这样的

该库的用法很简单,您提供一个参考系统来处理,然后您可以在另一个投影上变换坐标。

    // include the library
    <script src="lib/proj4js-combined.js"></script>  //adjust the path for your server
                                                     //or else use the compressed version
    // creating source and destination Proj4js objects
    // once initialized, these may be re-used as often as needed
    var source = new Proj4js.Proj('EPSG:4326');    //source coordinates will be in Longitude/Latitude, WGS84
    var dest = new Proj4js.Proj('EPSG:3785');     //destination coordinates in meters, global spherical mercators projection, see http://spatialreference.org/ref/epsg/3785/


    // transforming point coordinates
    var p = new Proj4js.Point(-76.0,45.0);   //any object will do as long as it has 'x' and 'y' properties
    Proj4js.transform(source, dest, p);      //do the transformation.  x and y are modified in place

    //p.x and p.y are now EPSG:3785 in meters
Run Code Online (Sandbox Code Playgroud)

代码片段的功劳:在给定图片上将长/纬度转换为像素 x/y

工作示例:

    // include the library
    <script src="lib/proj4js-combined.js"></script>  //adjust the path for your server
                                                     //or else use the compressed version
    // creating source and destination Proj4js objects
    // once initialized, these may be re-used as often as needed
    var source = new Proj4js.Proj('EPSG:4326');    //source coordinates will be in Longitude/Latitude, WGS84
    var dest = new Proj4js.Proj('EPSG:3785');     //destination coordinates in meters, global spherical mercators projection, see http://spatialreference.org/ref/epsg/3785/


    // transforming point coordinates
    var p = new Proj4js.Point(-76.0,45.0);   //any object will do as long as it has 'x' and 'y' properties
    Proj4js.transform(source, dest, p);      //do the transformation.  x and y are modified in place

    //p.x and p.y are now EPSG:3785 in meters
Run Code Online (Sandbox Code Playgroud)
var dest = new proj4.Proj('EPSG:4326'); //destination coordinates coordinates will be in Longitude/Latitude, WGS84 , global spherical mercators projection, see http://spatialreference.org/ref/epsg/3785/     
var source = new proj4.Proj('EPSG:3785'); //source coordinates in meters

$("#convert").on("click", function(){
    var p = new proj4.Point($("#x").val(), $("#y").val() );
    proj4.transform(source, dest, p);
    alert("lng : " +p.x + " \nlat : " + p.y);
});
Run Code Online (Sandbox Code Playgroud)

注意:如果您打算使用地图来绘制 GPS 信号,则必须知道地图角落的纬度/经度是多少。

这是一个图表示例,直观地解释了为什么线性比例不合适:

在此处输入图片说明

仔细观察(例如)格陵兰岛的大小,在墨卡托投影空间坐标上它看起来比北美大。当然不是!