四参数转换,为原点平移量,x和y的旋转角度和比例因子,webgis基本旋转都为90,180等极易计算的角度
为webgis基础投影,正轴等角圆柱投影的一种,假定地球长短半轴相等,都为6378137米,经度和纬度转换成米后范围则都为
[-20037508.3427892, 20037508.3427892],当纬度趋向90度则无穷大,所以在85度处截止,使整个投影成正方形方便计算。
wgs84与墨卡托,两个坐标系方向相同,也无旋转角度,所以只需要尺度变换即可
wgs84坐标系:
90°
∧
│
-180° ───────┼─────────> 180°(单位:度)
│
-90°
mercator坐标系:
20037508.34 m
∧
│
-20037508.34 m ───────┼─────────> 20037508.34 m(单位:米)
│
V
-20037508.34 m
wgs84坐标系转换公式为
X = lon /180*20037508.34
Y = ln(tan(( lat +90°)/2*PI/180))/PI*20037508.34
(lon为经度,lat为纬度)
接下来要显示到浏览器中,则米单位还要转换为像素,此时要引入分辨率,单位为米/像素,屏幕坐标以左上角为(0,0),y轴与墨卡托相反:
-100 pixels
│
-100 pixels ─────┼─────────> 1280 pixels
│
v
1024 pixels
所以其公式为
pixX = (X -bound.left)/resolution + offset.left
pixY = (bound.top- Y )/resolution + offset.top
(bound为当前视野范围墨卡托坐标,bound.left为左上角x,bound.top为y,resolution为分辨率,通过级别预先设定,offset则为当前地图dom对象所在偏移)
为了webgis显示效率,地图厂商将世界地图切割成各个小图,浏览器访问时,只需要加载这个范围那部分图,加快访问速度。
市面上流行的webgis厂商有谷歌、百度等,切图算法大致相同,只是原点有所不同
以下以谷歌为例,谷歌切图原点为左上角,级别1时为一张图,级别2为2张图,级别n为2^(n-1)张图,我们称瓦片。
任一点所在瓦片其编号为
numX = (X+20037508.34)/2^(n-1)
numY = (20037508.34-Y)/2^(n-1)
而百度的原点是经纬度原点附近,具体偏移量各处不同,当numY为负时,转为M(-numY-1)
目前市面上webgis经纬坐标系主要有三种,
wgs84——利用卫星定位的坐标,gps设备上报一般为这个格式,
gcj02——国测局坐标系,国家要求所有地图厂商进入市场的地图都加入国测局加偏算法,所以又被戏称火星坐标系
bd09ll——百度坐标系,在国测局基础上再加了层加偏
国测局加偏算法,并不是由规律的,而是每个地区不同程度的加偏,所以没有线性公式可以计算,国家又明令禁止不允许暴露算法,
所以虽有民间算法可以反推,但并不准确。也就是说gps只能正向转化为其他坐标系而不能反转。但是一个地区的加偏基本固定,也可以通过统计积累反推,但需要存储大量数据。
利用百度鹰眼平台,http://lbsyun.baidu.com/index.php?title=yingyan/api/v3/all ,实现绑路
将点位上传到该平台,再获取绑路后的数据即可
折线的每个线段,与目标点形成三角形,在起点或终点为钝角,该点则为投影点,与目标点距离则为最近距离;
为锐角,则为垂线交点,垂直距离为最近距离。
点往左边放出射线,相交点数为奇数则为形内,否则为外
转为墨卡托投影,计算距离