地图投影
编辑时间:2017-06-03

投影

山西福彩快乐十分 www.x78jx.cn 地球是一个三维球体(近似说法),而地图则是一个二维平面。您在 Google Maps API 中看到的地图与其他的

地球平面地图一样,都是地球在平面上的投影。简单来说,投影可定义为纬度/经度值在投影地图的坐标上的映

射。

Google Maps API 中的投影必须实现 Projection 接口。Projection 实现必须能提供坐标系之间的单向映射

和双向映射。也就是说,您必须定义地球坐标 (LatLng) 和 Projection 的世界坐标系之间双向转换的方法。

Google Maps 使用墨卡托投影法来根据地理数据创建地图,并将地图上的事件转换为地理坐标。您可以通过

 Map(或任何标准的基本 MapType)上调用 getProjection() 以获取该投影。对于大部分用途来说,该标

 Projection 已经足够,不过您也可以定义和使用您自己的自定义投影。


实现投影

在实现自定义投影时,您需要定义以下内容:

  • 用于实现纬度和经度坐标与笛卡尔平面之间双向映射的公式。(Projection 接口仅支持向直线坐标的转换)。


  • 基本图块大小。所有图块必须为矩形。


  • 缩放级别为 0 且使用基本图块集的地图的“世界大小”。请注意:对于缩放级别为 0 且仅由一个图块构

    成的地图,其世界大小和基本图块大小是相同的。

投影中的坐标转换

每个投影都提供了两种方法,让您可以在地理坐标和世界坐标这两个坐标系之间进行转换:

  • Projection.fromLatLngToPoint() 方法将 LatLng 值转换为世界坐标。此方法用于在地图上定位叠层(同


  • 时定位地图本身)。


  • Projection.fromPointToLatLng() 方法将世界坐标转换为 LatLng 值。此方法用于将地图上发生的事(如



    点击)转换为地理坐标。


Google Maps 假设投影是直线的。


    通常,您可以在两种情况下使用投影:创建世界地图或创建局部区域地图。在前一种情况下,您应确保

投影在所有经度上都为直线且与经度垂直。某些投影(尤其是圆锥投影)可能为“局部垂直”(即指向北方),

例如,当该地图定位相对于某些参考经度较远时就会偏离正北。您可以在局部区域使用此类投影,但请注意,该

投影肯定是不精确的,且越偏离参考经度,转换误差就会越明显。

投影中的地图图块选择

    投影不仅可用于确定位置或叠层的位置,还可用于定位地图图块本身。Maps API 使用 MapType 接口

来呈现基本地图,该接口必须同时声明 projection 属性(用于识别地图的投影)和 getTile() 方法(用于

根据图块坐标值检索地图图块)。图块坐标以您的基本图块大?。ū匦胛匦危┖偷赝嫉摹笆澜绱笮 保ㄋ醴偶?/p>

别为 0 时的地图世界的像素大?。┪?。(对于缩放级别为 0 且仅由一个图块构成的地图,其图块大小和世

界大小是相等的)。

您可以在 MapType  tileSize 属性内定义基本图块大小。在投影的 fromLatLngToPoint() 

fromPointToLatLng() 方法中隐式定义世界大小。

由于需要根据这些传递的值选择图像,因此,为图像命名可方便系统基于给定的传递值以编程方式选择图像,如

map_zoom_tileX_tileY.png。

常见投影 墨卡托  经纬直投,由于谷歌地图API本身就是墨卡托投影,所以此处给出加载 经纬直投 方式

的加载瓦片算法(加载天地图的经纬直投瓦片)


function BigeMap() {

}
BigeMap.prototype.tileSize = new google.maps.Size(256, 256);
BigeMap.prototype.maxZoom = 19;
BigeMap.prototype.minZoom = 1;
BigeMap.prototype.name = "本地地图";
BigeMap.prototype.getTile = function (coord, zoom, ownerDocument) {
   
var img = ownerDocument.createElement("img"),url='',server = Math.floor(Math.random() * 8);
   
img.style.width = 256 + "px";
   
img.style.height = 256 + "px";
   
url='//t' + server + '.tianditu.cn/cva_c/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cva&tileMatrixSet=c&TileMatrix=' + zoom + '&TileRow=' + coord.y + '&TileCol=' +coord.x + '&style=default&format=tiles';
   
img.src=url;
   
var bg='//t' + server + '.tianditu.cn/vec_c/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=c&TileMatrix=' + zoom + '&TileRow=' + coord.y + '&TileCol=' + coord.x + '&style=default&format=tiles';
   
img.style.backgroundImage='url('+bg+')';
   
return img;
};

BigeMap.prototype.projection ={
   
fromLatLngToPoint: function(latLng) {
     
return new google.maps.Point(
          256
* (0.5 + latLng.lng() / 360),
          128
*(90 - latLng.lat()) / 180
          );
   
},
   
fromPointToLatLng: function(point, noWrap) {
     
return new google.maps.LatLng(
        90
- point.y / 128  * 180 ,
       
-180 + point.x / 256 * 360,
        noWrap);
   
}
}
;



获取正版授权

方式一:自动授权

关注官方微信号
BIGEMAP微信公众号
操作步骤:
①关注官方微信号
②点击【自助授权】
③按提示完成操作!
注:此功能暂未完成

方式二:点击加入

免费授权QQ群

QQ在线咨询在线客服

免费咨询电话

400-028-7262

山西福彩快乐十分

淘宝店铺

bigemap.taobao.com

联系我们
  • 比肩郭艾伦之人欲联手新疆冲冠?国产助攻王成X因素 2019-06-07
  • 光明日报:救命药岂能一降价就断货 2019-05-29
  • 2017网上群众工作优秀案例 2019-05-24
  • 只要等一等就能多“等”出8600万美元! 2019-05-24
  • 回复@大雨582:任何人的自由发展都是跟他的能力意愿行动及生成的结果平滑对接的。 2019-05-07
  • 印度军用运输机从高原机场起飞 吹起一场沙尘暴 2019-05-07
  • 中小企业板成立14年 累计实现净利润1.25万亿元 2019-05-06
  • 老火靓汤一天中何时喝最好? 2019-04-17
  • 陈晓卿推出全新美食纪录片 "风味"能否再续辉煌? 2019-04-17
  • 詹皇通知骑士队 准备与其续约 2019-04-11
  • 张瑜的专栏作者中国国家地理网 2019-04-10
  • 尧都农商银行全力推进服务“三农”工作 2019-04-09
  • [大笑]那依然是按劳(劳动价值或劳动能力)分配也! 2019-04-09
  • 台花莲发生6.5级地震已致2人遇难 2019-03-28
  • 谋求共同发展的强大动力(钟声) 2019-03-17
  • 575| 122| 586| 314| 222| 490| 532| 390| 874| 295|