lealfet谷歌地图偏移补丁怎么解决

君,已阅读到文档的结尾了呢~~
VFL Xmas A4 Folded Lealfet Oct2013 - Age Action …
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
VFL Xmas A4 Folded Lealfet Oct2013 - Age Action …
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口君,已阅读到文档的结尾了呢~~
1.3.3.2 English lealfet - sfda.gov.sa
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
1.3.3.2 English lealfet - sfda.gov.sa
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口Leaflet的好处就不多说了,简单的几点:轻量、支持HTML5、插件多,在与图形组件(如HT组件)结合后,可以开发出丰富的GIS应用,可以说几乎所有的GIS场景都能支持。
在使用GIS的时候,想必有个问题一直困扰开发者,就是我们的底图基本上都是有偏移的,如果使用GPS采集的资源(真实经纬度)叠加到底图上,与底图有很大的偏移,叠加不上。从测试上来说,高德的底图,偏差可达到20公里。
处理偏移问题,一般有两个思路:
第一个是将真实的经纬度按照偏移算法(一般底图供应商会提供)偏移到加密的地图上,从而达到叠加效果。这样的问题是相当于将错就错,如果从地图上去采集经纬度就是偏移的,最后还得纠偏回去。而纠偏又是一个大问题,几乎所有的底图供应商都不提供纠偏算法,单单这个问题,都可以再写一篇文章。
第二个是改造地图组件,将底图进行反向偏移,这样GPS采集的经纬度可以无缝的叠加上,在地图上采集的经纬度都是无需纠偏的。进行底图偏移的前提是,需要知道偏移量offset,如果是线性偏移,这个offset就是个常量,如果不是线性偏移,则这个offset是依赖于视窗中心点的变量。
笔者查看Leaflet的源码,其中并没有对偏移的处理方法,在阅读源码并经过反复测试后,获得了以下的思路:
1.在获取切片的时候,计算切片X,Y值的时候增加上偏移量;
var map = this._map,
bounds = map.getPixelBounds(),
sw = map.unproject(bounds.getBottomLeft()),&span style=&font-family: Arial, Helvetica, sans-&&//获取左下角经纬度&/span&
ne = map.unproject(bounds.getTopRight()),&span style=&font-family: Arial, Helvetica, sans-&&//获取右上角经纬度&/span&&span style=&font-family: Arial, Helvetica, sans-&& &/span&&span style=&font-family: Arial, Helvetica, sans-&&&span style=&white-space:pre&&
&/span&zoom = map.getZoom(),&/span&
tileSize = this._getTileSize();
if (zoom & this.options.maxZoom || zoom & this.options.minZoom) {
var offsetX = this._offsetX;//经度偏移量
var offsetY = this._offsetY;//纬度偏移量
if(offsetX != null
&& offsetY != null)
sw = new L.LatLng(sw.lat - parseFloat(offsetY),sw.lng - parseFloat(offsetX));//增加偏移量
ne = new L.LatLng(ne.lat - parseFloat(offsetY),ne.lng - parseFloat(offsetX));
var swPoint = map.project(sw);//将经纬度进行投影
&span style=&white-space:pre&& &/span&var nePoint = map.project(ne);
bounds = L.bounds(swPoint,nePoint);
2.在显示图片的时候,图片位置减去偏移量;
&span style=&white-space:pre&&
&/span&var offsetX = this._offsetX;
var offsetY = this._offsetY;
if(offsetX != null
&& offsetY != null)
var latLng = this._map.layerPointToLatLng(tilePos);
tilePos = this._map.latLngToLayerPoint(new L.LatLng(latLng.lat + parseFloat(offsetY),latLng.lng + parseFloat(offsetX)));
本文已收录于以下专栏:
相关文章推荐
API各种类中的核心部分,用来在页面中创建地图并操纵地图。
Constructor(构造器)
通过div元素和带有地图选项的描述的文字对象来实例化一个地图对象,其中文...
转自:http://blog.csdn.net/u/article/details/
前段时间发布了Leaflet加载百度地图的示例,但是机智的网友发现,从...
Leaflet和Openlayer都是两个主要的开源前端库。开放的程度都很高,但是考虑到移动端和小巧轻便易扩展,我大部分情况还是选择leaflet。兼容移动端似乎是必不可少的事情,放大缩小平移,都是一...
leaflet自定义了4种投影,分别是
Leaflet的官方网站/
最近把很久之前做的统计图又拿出来重新做了一遍,感觉很多时候不复习,不记录就真的忘了,时间是最好的稀释剂,真是这样。
   恰好有些网友又向我问起,于是稍作记录,以便自己今后复习和参考。
八、栅格数据
栅格数据是当前GIS领域里面最庞大的一类数据(天上N颗卫星24小时无死角的对地球君进行直播……每天生成遥感数据都以PB为单位),leaflet作为地图可视化模块,自然也提供了加载栅格...
leaflet官网上的部分例子
试一试就能明白
无标题文档
#map { height: 500 }
//获取切片数据的URL,x,y是切片的坐标,z是缩放级别
只需要在生成图层的时候拼上参数就行
//重点就是tileLayer的第一个参数设置
var layer = L.tileLayer('/vt/ly...
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
标签:至少1个,最多5个
上一篇我们进行了地图校准,这里详细说说怎样发布地图服务及使用leafletJs调用地图服务。
发布地图服务
执行菜单命令"文件"--"共享为"--"服务",打开"共享为服务"对话框,如下图。如果有使用ArcBruTile的添加参考图层做的配准,这是还需要把添加的参图层先删除,否则最后发布服务的时候会报错。
选择"发布服务",点击"下一步"。
这里如果已经创建过车接,直接选择连接即可。我这里当前还未创建连接,点击创建连接按钮,效果如下图。
选中"发布 GIS 服务",点击"下一步"。
这里我们需要填写相关信息。
首先是"服务器URL"。如果小伙伴不知道自己的服务器URL是什么,可以在"开始"菜单--"所有程序"--"ArcGIS"--"ArcGIS 10.2 for Server"--"Manager"打开管理页面。复制浏览器地址栏manager前面一段即可。
然后填写"ArcGIS Server"管理的用户名和密码,就是安装过程中设置的用户名各密码。如果有小伙伴真不知道是什么了,可以点击这个试试。
点击"完成",如下图:
这里默认会选中刚刚创建的连接,设置一下要发布的服务名称,点击"下一步"。
点击"继续"。
在"缓存"选项中下图所示做相关设置,这里也可以设置切片的等级范围。我这是设置的10-19;
在"高级设置"选项中可以设置切片格式为png32(不压缩)
在"项目描述"栏中填写"摘要"和"标签",否则发布服务时会报错。设置完成后点击右上角的"发布"按钮,发布服务。
点击"确定",让机器跑一会,会有发布成功的提示,点击"确定"关闭提示框。到这里服务发布就算完成了。下面说说lealfet怎么使用。
leafletJs调用地图服务
leaflet 可以使用TileLayer方法来加载瓦片到地图(这里用的是1.1.0版的leafletJS)。所以我们需要知道服务调用的地址。
在ArcMap 10.2的"窗口"菜单中,点击"目录",打开"目录"窗口。如下图:
右击我们刚刚新建的服务连接,在快捷菜单点击"ArcGIS Server管理器",打开服务管理页面。
或者通过"开始"菜单--"所有程序"--"ArcGIS"--"ArcGIS 10.2 for Server"--"Manager"打开服务管理页面。
打开管理页面登陆之后,就可以看到刚刚发布的服务了。如下图:
点击服务的名称,进入服务参数页面,如下图:
在功能栏中,看到有一个REST URL的地址,可以就使用这个地址也请求瓦片。如下图:
我这里没有使用localhost,而是使用了本机的ip,这里是一个意思。
到这里,整个地图服务发布到调用也就算完成了。如果顺的话,那么就可以正常显示瓦片了。如果中途有报错之类了,欢迎童鞋么留言,大家一起讨论解决呀。。。。
0 收藏&&|&&0
你可能感兴趣的文章
1 收藏,175
1 收藏,672
1 收藏,5.5k
本作品采用署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可
分享到微博?
我要该,理由是:3535人阅读
工作日常(7)
Markdown(1)
leaflet加载百度地图(矫正篇)
前段时间发布了的示例,但是机智的网友发现,从百度地图上提取的坐标在Leaflet加载的百度地图上并不能很好的叠加在一起,于是决定一探究竟。
从中国的东南西被各个地方取点观察偏移,如下图:
结论:普遍是向上偏移
于是构想通过坐标系的:
False_Easting: 0.0
False_Northing: 0.0
以天安门的地址为初参照做调整,因为北京的地理位置相对居中
调整后的代码:
var crs = new L.Proj.CRS('EPSG:3395',
'+proj=merc +lon_0=0 +k=1 +x_0=140 +y_0=-250 +datum=WGS84 +units=m +no_defs',
resolutions: function () {
level = 19
var res = [];
res[0] = Math.pow(2, 18);
for (var i = 1; i & i++) {
res[i] = Math.pow(2, (18 - i))
origin: [0, 0],
bounds: L.bounds([789244, 0], [0, 789244])
map = L.map('map', {
new L.TileLayer('http://online{s}./tile/?qt=tile&x={x}&y={y}&z={z}&styles=pl&udt=', {
maxZoom: 18,
minZoom: 3,
subdomains: [0,1,2],
attribution: '(c) 2012 Daum',
}).addTo(map);
new L.marker([39.915052,116.403954]).addTo(map);
new L.marker([31.228753,121.479802]).addTo(map);
new L.marker([31.221515,121.481428]).addTo(map);
new L.marker([23.071932,113.219245]).addTo(map);
new L.marker([43.918961,87.597538]).addTo(map);
new L.marker([47.385302,123.932747]).addTo(map);
new L.marker([29.622349,91.050216]).addTo(map);
map.setView([39.91349,116.407945], 15);
这两个参数做偏移调整,结果如下:
矫正前的天安门:
矫正后的天安门:
矫正后:北
矫正后:南
矫正后:西
矫正后:东
通过假北和假东的调整后有重大发现,那就是:
北面的向北偏移,南面的向南偏移,西面的向东偏移,东面的向西偏移。
如果投影用的是墨卡托投影,那么从这个现象上看像是投影的时候改变地球的长半轴和短半轴,不过一切只是猜想,还有可能是投影的方式采用了什么其他的投影方式,或者是。。。先试一下再说。
同样是以北京天安门为原点开始校准,最后代码如下:
var crs = new L.Proj.CRS('EPSG:900913',
'+proj=merc +a=6378206 +b=245179 +lat_ts=0.0 +lon_0=0.0 +x_0=0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext
+no_defs',
resolutions: function () {
level = 19
var res = [];
res[0] = Math.pow(2, 18);
for (var i = 1; i & i++) {
res[i] = Math.pow(2, (18 - i))
origin: [0,0],
bounds: L.bounds([789244, 0], [0, 789244])
map = L.map('map', {
new L.TileLayer('http://online{s}./tile/?qt=tile&x={x}&y={y}&z={z}&styles=pl&udt=', {
maxZoom: 18,
minZoom: 3,
subdomains: [0,1,2],
attribution: '(c) 2012 Daum',
}).addTo(map);
new L.marker([39.915052,116.403954]).addTo(map);
new L.marker([31.228753,121.479802]).addTo(map);
new L.marker([31.221515,121.481428]).addTo(map);
new L.marker([23.071932,113.219245]).addTo(map);
new L.marker([43.918961,87.597538]).addTo(map);
new L.marker([47.385302,123.932747]).addTo(map);
new L.marker([29.622349,91.050216]).addTo(map);
map.setView([39.915052,116.403954], 15);
出奇的发现
突然就准了,真就这么简单么?我不确定,但是也不知道再该如何去测了,先这样,发布一下吧,如果后续有进展会继续跟进。
QQ备注“Jack”
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:15573次
排名:千里之外
(1)(2)(1)(2)(1)(1)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 百度地图坐标偏移 的文章

 

随机推荐