精华内容
下载资源
问答
  • package util { public class Coordinate { static var M_PI:... //经纬度墨卡托 // 经度(lon),纬度(lat) public static function lon2Mercator(lon:Number):Number { var x:Number =
    package util
    {
    	public class Coordinate
    	{
    		static var M_PI:Number=Math.PI;
    		//经纬度转墨卡托
    		// 经度(lon),纬度(lat)		
    		public static function lon2Mercator(lon:Number):Number
    		{
    			var x:Number = lon *20037508.342789/180;
    			
    			return x;
    		}
    		
    		public static function lat2Mercator(lat:Number):Number
    		{
    			var y:Number = Math.log(Math.tan((90+lat)*M_PI/360))/(M_PI/180);
    			y = y *20037508.34789/180;
    			
    			return y;
    		}
    		
    		//墨卡托转经纬度
    		
    		public static function Mercator2Lon(mercatorX:Number):Number
    		{
    			var x:Number = mercatorX/20037508.34*180;
    
    			return x;
    		}
    		
    		public static function Mercator2Lat(mercatorY:Number):Number
    		{
    			var y:Number = mercatorY/20037508.34*180;
    			y= 180/M_PI*(2*Math.atan(Math.exp(y*M_PI/180))-M_PI/2);
    
    			return y;
    		}
    	}
    }
    展开全文
  • 1.创建百度地图的数据源(以下是添加百度图层的部分代码) ...3.百度经纬度坐标系、墨卡托坐标系、国际坐标系、火星坐标系之间的相互转换 https://blog.csdn.net/doulejian/article/details/70155080 4.根据以上J...

    1.创建百度地图的数据源(以下是添加百度图层的部分代码)

    在这里插入图片描述

    2.百度地图官网坐标拾取系统地址

    http://api.map.baidu.com/lbsapi/getpoint/index.html

    3.百度经纬度坐标系、墨卡托坐标系、国际坐标系、火星坐标系之间的相互转换

    https://blog.csdn.net/doulejian/article/details/70155080

    4.根据以上Java版本改造的JS版本(仅包含百度经纬度坐标系、墨卡托坐标系之间的转换)

    /**
     *  百度经纬度坐标 、 百度墨卡托坐标(ESPG:3857)
     */
    	
     var EARTHRADIUS = 6370996.81;
     var MCBAND = [12890594.86, 8362377.87, 5591021, 3481989.83, 1678043.12, 0];
     var LLBAND = [75, 60, 45, 30, 15, 0];
     var MC2LL = [[1.410526172116255e-8, 0.00000898305509648872, -1.9939833816331, 200.9824383106796, -187.2403703815547, 91.6087516669843, -23.38765649603339, 2.57121317296198, -0.03801003308653, 17337981.2], [-7.435856389565537e-9, 0.000008983055097726239, -0.78625201886289, 96.32687599759846, -1.85204757529826, -59.36935905485877, 47.40033549296737, -16.50741931063887, 2.28786674699375, 10260144.86], [-3.030883460898826e-8, 0.00000898305509983578, 0.30071316287616, 59.74293618442277, 7.357984074871, -25.38371002664745, 13.45380521110908, -3.29883767235584, 0.32710905363475, 6856817.37], [-1.981981304930552e-8, 0.000008983055099779535, 0.03278182852591, 40.31678527705744, 0.65659298677277, -4.44255534477492, 0.85341911805263, 0.12923347998204, -0.04625736007561, 4482777.06], [3.09191371068437e-9, 0.000008983055096812155, 0.00006995724062, 23.10934304144901, -0.00023663490511, -0.6321817810242, -0.00663494467273, 0.03430082397953, -0.00466043876332, 2555164.4], [2.890871144776878e-9, 0.000008983055095805407, -3.068298e-8, 7.47137025468032, -0.00000353937994, -0.02145144861037, -0.00001234426596, 0.00010322952773, -0.00000323890364, 826088.5]];
     var LL2MC = [[-0.0015702102444, 111320.7020616939, 1704480524535203, -10338987376042340, 26112667856603880, -35149669176653700, 26595700718403920, -10725012454188240, 1800819912950474, 82.5], [0.0008277824516172526, 111320.7020463578, 647795574.6671607, -4082003173.641316, 10774905663.51142, -15171875531.51559, 12053065338.62167, -5124939663.577472, 913311935.9512032, 67.5], [0.00337398766765, 111320.7020202162, 4481351.045890365, -23393751.19931662, 79682215.47186455, -115964993.2797253, 97236711.15602145, -43661946.33752821, 8477230.501135234, 52.5], [0.00220636496208, 111320.7020209128, 51751.86112841131, 3796837.749470245, 992013.7397791013, -1221952.21711287, 1340652.697009075, -620943.6990984312, 144416.9293806241, 37.5], [-0.0003441963504368392, 111320.7020576856, 278.2353980772752, 2485758.690035394, 6070.750963243378, 54821.18345352118, 9540.606633304236, -2710.55326746645, 1405.483844121726, 22.5], [-0.0003218135878613132, 111320.7020701615, 0.00369383431289, 823725.6402795718, 0.46104986909093, 2351.343141331292, 1.58060784298199, 8.77738589078284, 0.37238884252424, 7.45]];
    
    function main(args) {
    	//经纬度坐标
    	var lng = 116.403891, 
    		lat = 39.914552; 
    	
        //百度经纬度坐标转百度墨卡托坐标
    	var location = convertLL2MC(lng, lat);
        console.info("bd_mc: " + location[1] + "," + location[0]);
        //百度墨卡托坐标转百度经纬度坐标
        location = convertMC2LL(location[1],location[0]);
        console.info("bd: " + location[1] + "," + location[0]);
    }
    
    main();
    	    
    /**
     * 百度墨卡托坐标  转  百度经纬度坐标
     * @param x
     * @param y
     * @return
     */
    function convertMC2LL(lng,lat) {
        var cF = null;
        lng = Math.abs(lng);
        lat = Math.abs(lat);
    
        for (var cE = 0; cE < MCBAND.length; cE++) {
            if (lat >= MCBAND[cE]) {
                cF = MC2LL[cE];
                break;
            }
        }
        return converter(lng, lat, cF);
    }
    
    /**
     * 百度经纬度坐标 转  转百度墨卡托坐标
     * @param lng
     * @param lat
     * @return
     */
    function convertLL2MC(lng,lat) {
        var cE = null;
        lng = getLoop(lng, -180, 180);
        lat = getRange(lat, -74, 74);
        for (var i = 0; i < LLBAND.length; i++) {
            if (lat >= LLBAND[i]) {
                cE = LL2MC[i];
                break;
            }
        }
        if (cE!=null) {
            for (var i = LLBAND.length - 1; i >= 0; i--) {
                if (lat <= -LLBAND[i]) {
                    cE = LL2MC[i];
                    break;
                }
            }
        }
        return converter(lng,lat, cE);
    }
    
    
    function converter(lng, lat, cE) {
        var lngTemp = cE[0] + cE[1] * Math.abs(lng);
        var cC = Math.abs(lat) / cE[9];
        var latTemp = cE[2] + cE[3] * cC + cE[4] * cC * cC + cE[5] * cC * cC * cC + cE[6] * cC * cC * cC * cC + cE[7] * cC * cC * cC * cC * cC + cE[8] * cC * cC * cC * cC * cC * cC;
        lngTemp *= (lng < 0 ? -1 : 1);
        latTemp *= (lat < 0 ? -1 : 1);
        return [latTemp,lngTemp];
    }
    
    function getLoop(lng, min, max) {
        while (lng > max) {
            lng -= max - min;
        }
        while (lng < min) {
            lng += max - min;
        }
        return lng;
    }
    
    function getRange(lat, min, max) {
        if (min != null) {
            lat = Math.max(lat, min);
        }
        if (max != null) {
            lat = Math.min(lat, max);
        }
        return lat;
    }
    
    展开全文
  • 经纬度墨卡托坐标转换

    千次阅读 2019-09-16 16:14:02
    经纬度墨卡托坐标转换1.经纬度墨卡托1.1Java:1.2Scala:2.墨卡托转经纬度3.proj4方式 1.经纬度墨卡托 1.1Java: public static double[] lngLat2Mercator(double lng, double lat) { double[] xy = new ...

    1.经纬度转墨卡托

    1.1Java:

        public static double[] lngLat2Mercator(double lng, double lat) {
            double[] xy = new double[2];
            double x = lng * 20037508.342789 / 180;
            double y = Math.log(Math.tan((90 + lat) * M_PI / 360)) / (M_PI / 180);
            y = y * 20037508.34789 / 180;
            xy[0] = x;
            xy[1] = y;
            return xy;
        }
    

    1.2Scala:

    /**
      * 坐标转换
      */
    object CoorTransfom {
      private val M_PI = Math.PI
    
      //经纬度转墨卡托
      def lngLat2Mercator(lng: Double, lat: Double): Array[Double] = {
        val xy = new Array[Double](2)
        val x = lng * 20037508.342789 / 180
        var y = Math.log(Math.tan((90 + lat) * M_PI / 360)) / (M_PI / 180)
        y = y * 20037508.34789 / 180
        xy(0) = x
        xy(1) = y
        xy
      }
    
    }
    

    2.墨卡托转经纬度

        public static double[] mercator2LngLat(double mercatorX, double mercatorY) {
            double[] xy = new double[2];
            double x = mercatorX / 20037508.34 * 180;
            double y = mercatorY / 20037508.34 * 180;
            y = 180 / M_PI * (2 * Math.atan(Math.exp(y * M_PI / 180)) - M_PI / 2);
            xy[0] = x;
            xy[1] = y;
            return xy;
        }
    

    3.proj4方式

    原文地址:坐标系转换成墨卡托 java 实现,最好使用成熟proj4或proj470

    Maven:

    <dependency>
    			<groupId>org.osgeo</groupId>
    			<artifactId>proj4j</artifactId>
    			<version>0.1.0</version>
    		</dependency>
    

    源码:

    import org.osgeo.proj4j.CRSFactory;
    import org.osgeo.proj4j.CoordinateReferenceSystem;
    import org.osgeo.proj4j.CoordinateTransform;
    import org.osgeo.proj4j.CoordinateTransformFactory;
    import org.osgeo.proj4j.ProjCoordinate;
    
    public class Test {
    
    	static final String WGS84_PARAM = "+title=long/lat:WGS84 +proj=longlat +datum=WGS84 +units=degrees";
    	CoordinateReferenceSystem WGS84 = crsFactory.createFromParameters("WGS84",
    			WGS84_PARAM);
    
    	private static final CoordinateTransformFactory ctFactory = new CoordinateTransformFactory();
    	private static final CRSFactory crsFactory = new CRSFactory();
    
    	private static CoordinateReferenceSystem createCRS(String crsSpec) {
    		CoordinateReferenceSystem crs = null;
    		// test if name is a PROJ4 spec
    		if (crsSpec.indexOf("+") >= 0 || crsSpec.indexOf("=") >= 0) {
    			crs = crsFactory.createFromParameters("Anon", crsSpec);
    		} else {
    			crs = crsFactory.createFromName(crsSpec);
    		}
    		// crs = crsFactory.createFromParameters("Anon", crsSpec);
    
    		return crs;
    	}
    
    	public static void main(String[] args) {
    		// new CoordinateTransformTester(true).checkTransform("EPSG:4269",
    		// 117.19625, 31.83879,
    		// "+proj=tmerc +lat_0=0 +lon_0=117 +y_0=0 +x_0=500000 +k=0.9996 +pm=0
    		// +zone=50 +to_meter=1 +a=6378137 +rf=298.257223563 +nodefs",
    		// 1640416.667, 916074.825, 0.1);
    
    
    //		lonlat2m();
    		m2lonlat();
    	}
    
    	private static void lonlat2m() {
    		System.out.println("....");
    		
    		// 117.19625 31.83879 518568.9 3522583.9
    		double x1 = 117.19625d;
    		double y1 = 31.83879d;
    		// double x2 = 518568.9d;
    		// double y2 = 3522583.9d;
    
    		// String srcCRS = "EPSG:4269";
    		String WGS84_PARAM = "+title=long/lat:WGS84 +proj=longlat +datum=WGS84 +units=degrees";
    		String tgtCRS = "+proj=tmerc +lat_0=0 +lon_0=117 +y_0=0 +x_0=500000 +k=0.9996 +zone=50 +to_meter=1 +a=6378137 +ellps=WGS84 +units=m +no_defs";
    
    		CoordinateTransform trans = ctFactory
    				.createTransform(createCRS(WGS84_PARAM), createCRS(tgtCRS));
    		ProjCoordinate pout = new ProjCoordinate();
    
    		ProjCoordinate p = new ProjCoordinate(x1, y1);
    
    		trans.transform(p, pout);
    
    		System.out.println(p.x);
    		System.out.println(p.y);
    		System.out.println(pout.x);
    		System.out.println(pout.y);
    
    		System.out.println("-------		// 117.19625 31.83879 518568.9 3522583.9 ");
    		p = new ProjCoordinate(y1, x1);
    		trans.transform(p, pout);
    
    //		System.out.println(p.x);
    //		System.out.println(p.y);
    //		System.out.println(pout.x);
    //		System.out.println(pout.y);
    	}
    	
    	
    	
    	private static void m2lonlat() {
    		System.out.println("....");
    		
    		// 117.19625 31.83879 518568.9 3522583.9
    //		double x2 = 117.19625d;
    //		double y2 = 31.83879d;
    		 double x1 = 518568.9d;
    		 double y1 = 3522583.9d;
    		
    		// String srcCRS = "EPSG:4269";
    		String WGS84_PARAM = "+title=long/lat:WGS84 +proj=longlat +datum=WGS84 +units=degrees";
    		String tgtCRS = "+proj=tmerc +lat_0=0 +lon_0=117 +y_0=0 +x_0=500000 +k=0.9996 +zone=50 +to_meter=1 +a=6378137 +ellps=WGS84 +units=m +no_defs";
    		
    		CoordinateTransform trans = ctFactory
    				.createTransform( createCRS(tgtCRS),createCRS(WGS84_PARAM));
    		ProjCoordinate pout = new ProjCoordinate();
    		
    		ProjCoordinate p = new ProjCoordinate(x1, y1);
    		
    		trans.transform(p, pout);
    		
    		System.out.println(p.x);
    		System.out.println(p.y);
    		System.out.println(pout.x);
    		System.out.println(pout.y);
    		
    		System.out.println("-------		// 117.19625 31.83879 518568.9 3522583.9 ");
    		p = new ProjCoordinate(y1, x1);
    		trans.transform(p, pout);
    		
    //		System.out.println(p.x);
    //		System.out.println(p.y);
    //		System.out.println(pout.x);
    //		System.out.println(pout.y);
    	}
    }
    
    展开全文
  • 地球经纬度转换为平面坐标,想必是数学建模里面经常会遇到的问题。 由于地球是一个近似椭圆,因此用经纬度确定的坐标,无法直接使用平面几何的计算公式计算距离等数据。使用墨卡托投影法将经纬度坐标投影平面坐标...

    地球经纬度转换为平面坐标,想必是数学建模里面经常会遇到的问题。
    由于地球是一个近似椭圆,因此用经纬度确定的坐标,无法直接使用平面几何的计算公式计算距离等数据。使用墨卡托投影法将经纬度坐标投影为平面坐标。

    墨卡托投影

    墨卡托投影,又称正轴等角圆柱投影,圆柱投影的一种,由荷兰地图学家墨卡托 (G.Mercator) 于 1569 年提出, 为地图投影方法中影响最大的投影。假设地球被围在一中空的圆柱里,其基准纬线(赤道)与圆柱相切,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱面上,再把圆柱面展开,这就是一幅选定基准纬线上的“墨卡托投影”绘制出的地图,示意图如下:
    在这里插入图片描述
    其中,按等角条件将经纬网投影到圆柱面上,将圆柱面展为平面后,得平面经纬线网。因其等角特性,广泛应用与航空、航海中。
    中华人民共和国国家标准” 海底地形图编绘规范”(GB/T 17834-1999) 中 5.1.3.1 款规定 1:25 万及更小比例尺图采用墨卡托投影,基本比例尺图 (即 1:5 万,1:25 万,1:100 万)采用统一基准纬线 30°,非基本比例尺图以制图区域中纬为基准纬线 。基准纬线取至整度或整分。墨卡托投影算法使得赤道附近的纬线较密,极地附近的纬线较稀。极点被投影到无穷远,所以这种投影不适合在高纬度地区使用。本题所研究的南海地区范围不大,比例尺较小,处于低纬度地区,接近赤道,因此适用于墨卡托投影法绘制平面地图。

    投影公式

    从上述对墨卡托投影的分析可知,墨卡托投影把纬度为 ϕ ( − 9 0 ∘ < ϕ < 9 0 ∘ ) \phi(-90^\circ<\phi<90^\circ) ϕ(90<ϕ<90) 的点投影到: y = sign ( ϕ ) ∗ ln ( tan ( 4 5 ∘ + ∣ ϕ / 2 ∣ ) y = \text{sign}(\phi)*\text{ln}(\text{tan}(45^\circ + |\phi/2|) y=sign(ϕ)ln(tan(45+ϕ/2),而对经度没有做处理。假设一个地理位置的经度为 L n L_\text{n} Ln、纬度为 L a L_\text{a} La,那么对应的投影公式为:

    x = L n ∗ π 180 ∗ R E x = \frac{L_\text{n} * \pi}{180} * R_\text{E} x=180LnπRE

    y = R E 2 ∗ log ( 1.0 + sin ( a ) 1.0 − sin ( a ) ) y = \frac{R_\text{E}}{2} * \text{log}\left(\frac{1.0 + \text{sin}(a)}{1.0 - \text{sin}(a)}\right) y=2RElog(1.0sin(a)1.0+sin(a))

    其中, R E R_\text{E} RE表示地球半径,取 R E = 6378.137 R_\text{E}=6378.137 RE=6378.137 a a a表示弧度 a = L a ∗ π 180 a = \frac{L_\text{a} * \pi}{180} a=180Laπ

    matlab代码

    function [x,y]=ll_xy(lng, lat)
    	earthRad = 6378137.0;
    	x = ((lng .* pi) ./ 180) .* earthRad;
    	a = (lat .* pi) ./ 180;
    	y = (earthRad ./ 2) .* log((1.0 + sin(a)) ./ (1.0 - sin(a)));
    end
    

    注意这里经纬度参数以度为单位传入,输出x,y单位为米。

    展开全文
  • 百度地图坐标转换为墨卡托坐标

    千次阅读 2019-03-18 20:46:39
    百度坐标系 (BD-09)首先转换为火星坐标系 (GCJ-02) ,根据gci坐标的经纬度再转成墨卡托坐标; 功能代码 /** * * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 * * 将 BD-09 坐标转换成GCJ-02 坐标 * * @...
  • 经纬度墨卡托坐标互相转换

    千次阅读 2018-08-21 10:48:38
    #经纬度墨卡托坐标 def ls(lat,lng): # list=ll_wl.split(',') lat=float(lat) lng=float(lng) x = lng* 20037508.34 / 180 y = math.log(math.tan((90 + lat) * math.pi / 360)) / (mat...
  • gis地图是墨卡托投影,卫星影像是等经纬度投影,不能直接叠加。 于是整出了这个等经纬度影像 转 墨卡托影像的程序。 上代码: import java.awt.image.BufferedImage; import java.io.File; import java.io....
  • 本文介绍经纬度墨卡托坐标系下的两两转换。 import math #经纬度墨卡托坐标 def ls(lng,lat): # list=ll_wl.split(',') lat=float(lat) lng=float(lng) x = lng* 20037508.34 / 180 y = math.log(math....
  • //经纬度墨卡托 public void loc_to_mercator(double lon, double lat,ref double miX,ref double minY) { double x = lon; double y = Math.Log(Math.Tan((lat / 180 * Math...
  • //经纬度墨卡托public Vector2D lonLat2Mercator(Vector2D lonLat){Vector2D mercator = new Vector2D();double x = lonLat.X * 20037508.34 / 180;double y = Math.Log(Math.Tan((90 + lonLat.Y) * Math.PI / 360...
  • 经纬度转Wev墨卡托版本1dvec3 CMathEngine::lonLat2WebMercator(dvec3 lonLat){dvec3 mercator;double x = lonLat.x *20037508.34/180;double y = log(tan((90+lonLat.y)*PI/360))/(PI/180);y = y *20037508.34/180;...
  • 详细论述了大地经纬度坐标系与Web墨卡托坐标系的转换的原理与实现。
  • 本文用JavaScript实现了经纬度与Web Mercator投影坐标之间的转换...
  • 使用墨卡托投影法将经纬度坐标投影平面坐标。 matlab代码 function [x,y]=ll_xy(lng, lat) earthRad = 6378137.0; x = ((lng .* pi) ./ 180) .* earthRad; a = (lat .* pi) ./ 180; y = (earthRad ./ 2) .* ...
  • 墨卡托坐标经纬度转换

    千次阅读 2018-12-20 16:55:19
    zoom地图层级,最小zoom=0,此时瓦片总数量1 X轴或Y轴的瓦片数量=2^zoom 瓦片总数量=2^zoom*2^zoom 每个瓦片像素256*256   如:当zoom=2时,X轴Y轴的瓦片数量都2^zoom=4,瓦片总数量=2^zoom*2^zoom=16...
  • 本文整理了一些地理坐标系之间的转换(Java代码) pom依赖 <dependency> <groupId>com.vividsolutions</groupId> <artifactId>jts</artifactId> <version>1.13</version...
  • 之前写了等经纬度影像 转 墨卡托影像的代码,后来有朋友问墨卡托影像 转 等经纬度影像要怎么做,于是今天花了点时间子饿了这个转换代码。 package main; import java.awt.image.BufferedImage; import java.io....
  • js 经纬度墨卡托 墨卡托转经纬度

    万次阅读 2018-08-23 19:12:13
    //经纬度墨卡托 function _getMercator(poi) {//[114.32894, 30.585748] var mercator = {}; var earthRad = 6378137.0; // console.log("mercator-poi",poi); mercator.x = poi.lng * Math.PI / 1....
  • 经纬度与web墨卡托相互转换

    千次阅读 2018-12-10 14:04:17
    public static double[] Mercator2LonLat(double X, double Y) { double[] d = new double[2]; double x = X / 20037508.34 * 180; double y = Y / 20037508...
  • 原因:由于Unity中自带的Vector2是float类型,而我们需要用一个结构体来储存精度需求比较高的经纬度数据,故创建Vector2d 及double类型的来储存经纬度数据 namespace Mapbox.Utils { using Mapbox.Json; //此处用到...
  • 百度经纬度转换百度墨卡托通常需要使用百度api进行转换,比较麻烦。经过一番搜集资料查看js代码终于实现百度经纬度与百度墨卡托离线互转,使用python代码实现
  • constmapCommon={} ...*@description:经纬度墨卡托投影坐标 */ mapCommon.lonlatTomercator=(lonlat,wkid)=>{ constmercator={ type:'point', spatialReference:{ wkid:wkid }, x:0, y:0 } co...
  • 1、经纬度转换 BD09 &amp;lt;=&amp;gt; GCJ02 &amp;lt;=&amp;gt; WGS84(CGCS200) BD09 &amp;lt;=&amp;gt; GCJ02 GCJ02 &amp;lt;=&amp;gt; WGS84(CGCS200) 2、经纬度与...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,844
精华内容 737
关键字:

经纬度转换为墨卡托坐标