前端学习-使用JS库Leaflet.js生成世界地图并获取标注地址经纬度。

介绍:Leaflet是一个开源的JavaScript库,对移动端友好且对地图有很好的交互性。 大小仅仅只有 33 KB, 同时具有大多数地图所需要的特点。

Leaflet设计的非常简单易懂, 同时具有很好的性能和易用性。 它在桌面端和移动端都工作的相当高效,并有大量的插件用于扩张Leaflet的功能。
微信公众号:673399718嘻嘻
demo图如下:

使用leaflet.js生成世界地图非常方便,配置参数记录下,有兴趣的可以看看本例中引入jquery操作dom。
首先:在页面的头部引入css文件cdn地址:
<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet/v1.0.0-rc.1/leaflet.css" />
在body前引入js文件cdn地址:
<script src="http://cdn.leafletjs.com/leaflet/v1.0.0-rc.1/leaflet.js"></script>
将id为mapid的div标签放到地图显示的地方:

<div id="mapid"></div>
确保地图容器有定义好的高度,例如在css文件中添加如下代码:
#mapid{ height: 180px; }
创建一个中心点在伦敦,使用Mapbox街道瓦片的地图。首先初始化地图,并且设置地图在视窗的中心点和缩放级别:

var mymap = L.map(‘mapid‘).setView([51.505, -0.09], 13);
下一步在地图上增加一个瓦片图层(渲染的地图图片碎片),在这个例子中我使用Mapbox街道瓦片图层。创建一个瓦片图层通常涉及到设置URL template来使用瓦片图(获得你的瓦片图在Mapbox),设置的属性还包括属性文本和图层的最大比例尺。
var mymap = L.map(‘mapid‘);
mymap.locate({setView: true, maxZoom: 16});
var position = [];
L.tileLayer(‘https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpandmbXliNDBjZWd2M2x6bDk3c2ZtOTkifQ._QA7i5Mpkd_m30IGElHziw‘, {
maxZoom: 18,
id: ‘mapbox.streets‘
}).addTo(mymap);
Leaflet有一个非常巧妙的方法来处理地图的缩放级别和探测用户地理位置--带有setView选项的locate方法。使用常用的setView方法在这行代码中:

locate({setView: true, maxZoom: 16})
这里我设置最大的缩放级别为16,并设置地图根据位置自动调整窗口。当用户同意浏览器分享用户位置后,地图将自动调整视窗中心为该位置。

leaflet.js中有两个接口locationerror是获取本地地址失败后调用的回调函数,而locationfound是获取获取本地地址成功后的回调。
确保所有的代码都在创建div标签和引用leaflet.js之前。这样应该没有什么问题了,你现在应用有一个可以使用的Leaflet地图了。

参数介绍:
marker可拖动要设置{draggable:true}参数
获取mark的经纬度信息:marker.getLatLng();
代码里我用了一个数组来存放拖动图标返回的地址经纬度,获取时只需要最后一个确定的位置,即数组最后一个元素:position[position.length-1].lat
弹出框的使用:给地图绑定点击事件,事件发生时,bindPopup方法会把HTML内容和弹出框绑定到一起。当你点击这个对象之后,bindPopup将马上打开一个弹出框。
function onMapClick(e) {
var popup = L.popup();
popup
.setLatLng(e.latlng)
.setContent("你点击的位置在 " + e.latlng.toString())
.openOn(mymap);
}

代码:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title>    <link href="//cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">    <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet/v1.0.0-rc.1/leaflet.css" />    <style>        #mapid {            float: left;            height: 500px;            width: 800px;            margin-left: 60px;        }        #right{            height: 500px;            width: 500px;            float: right;            background: rgb(92, 184, 92);        }    </style></head><body><div class="panel panel-default">    <div class="panel-heading">        <h3 class="panel-title">新建仓库</h3>    </div>    <div class="panel-body">        <div class="container">            <div class="form-group">                <label  class="col-sm-1 control-label">仓库名称</label>                <div class="col-sm-11">                    <input type="text" class="form-control" id=name" placeholder="输入您的仓库名">                </div>            </div>            <div class="form-group">                <label  class="col-sm-1 control-label">仓库地址</label>                <div class="col-sm-11">                    <input type="text" class="form-control" id="addr">                </div>            </div>            <div class="form-group">                <label  class="col-sm-1 control-label">地址经度</label>                <div class="col-sm-11">                    <input type="text" class="form-control" id="lat" >                </div>            </div>            <div class="form-group">                <label  class="col-sm-1 control-label">地址纬度</label>                <div class="col-sm-11">                    <input type="text" class="form-control" id="lon" >                </div>            </div>            <div class="col-md-6" style="margin-top: 20px">                <button id="referred" class="btn btn-success">确定</button>                <a id="back" class="btn btn-success">返回</a>                <span>请在地图中选择您仓库的地理位置,以便存储仓库信息。</span>            </div>

</div>        <div id="mapid"></div>        <div id="right"></div>    </div></div><script src="http://cdn.leafletjs.com/leaflet/v1.0.0-rc.1/leaflet.js"></script><script src="//cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script><script>

var mymap = L.map(‘mapid‘);    mymap.locate({setView: true, maxZoom: 16});    var position = [];    L.tileLayer(‘https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpandmbXliNDBjZWd2M2x6bDk3c2ZtOTkifQ._QA7i5Mpkd_m30IGElHziw‘, {        maxZoom: 18,        id: ‘mapbox.streets‘    }).addTo(mymap);

function onLocationFound(e) {        L.marker(e.latlng,{draggable: true})                .addTo(mymap)                .bindPopup("请选择仓库位置!").openPopup()                .on(‘dragend‘, function (event) {                    var marker = event.target;                    var latlng = marker.getLatLng();                    position.push(latlng);                });

}

function onLocationError() {        L.marker([51.5, -0.09],{draggable: true})                .addTo(mymap)                .bindPopup("<b>请选择仓库位置!</b>").openPopup()                .on(‘dragend‘, function (event) {                    var marker = event.target;                    var latlng = marker.getLatLng();                    position.push(latlng);                });    }

mymap.on(‘locationerror‘, onLocationError);    mymap.on(‘locationfound‘, onLocationFound);

function onMapClick(e) {        var popup = L.popup();                popup                .setLatLng(e.latlng)                .setContent("你点击的位置在 " + e.latlng.toString())                .openOn(mymap);    }

mymap.on(‘click‘, onMapClick);

$(‘#referred‘).click(function () {        var name = $(‘#name‘).val();        var address = $(‘#addr‘).val();        if(name==‘‘||address==‘‘||position[position.length-1]==undefined){            $(‘#referred‘).prop(‘disabled‘,false);            $.toast({                position: ‘top-right‘,                text:‘请补全仓库信息!‘,                icon:‘error‘            })        }        else {            var lat =  position[position.length-1].lat;            var lng =  position[position.length-1].lng;            $(‘#lat‘).val(lat);            $(‘#lon‘).val(lng);            $(‘#right‘).text(position)        }

});    //返回仓库    $(‘#back‘).click(function () {        $(this).attr(‘href‘,‘warehouse.html‘);    })</script></body></html>
时间: 2024-10-25 18:48:55

前端学习-使用JS库Leaflet.js生成世界地图并获取标注地址经纬度。的相关文章

好程序员web前端学习路线分享web测试之Js中的函数

好程序员web前端学习路线分享web测试之Js中的函数,在JS中,一般使用函数其实就是为了封装某些操作,或者把编写的程序进行模块化的操作. 一.函数的声明方式 1.普通的函数声明 function box(num1, num2) { return num1+ num2; } 2.使用变量初始化函数 var box= function(num1, num2) { return num1 + num2; }; 3.使用Function构造函数 var box= new Function('num1'

移动端的内容滑块js库 swipe.js

swipe.js 是一个轻量级的移动端内容滑块,类似于pc端的slide.js,用于实现轮播广告或其他内容滑动模块 ,支持移动端屏幕滑动手势操作.此库不依赖于任何其他的js库,可独立使用 使用swipe.js时只需将下载好的文件引用到页面,然后在页面中写好对应的结构 <div id="slider" class="swipe"> <div class="swipe-wrap"> <div></div>

移动开发js库Zepto.js使用中的一些注意点

来自http://chaoskeh.com/blog/some-experience-of-using-zepto.html的参考. 前段时间完成了公司一个产品的 HTML5 触屏版,开发中使用了 Zepto 这个著名的 DOM 操作库. 为什么不是 jQuery 呢?因为 jQuery 的目标是兼容所有主流浏览器,这就意味着它的大量代码对移动端的浏览器是无用或者低效的. 而 Zepto 只针对移动端浏览器编写,因此体积更小.效率更高,更重要的是,它的 API 完全仿照 jQuery ,所以学习

html5轻量级操纵和制作SVG动画的js库-svg.js

svg.js是一个轻量级的操纵和制作SVG动画的js插件库.svg.js可以生成SVG图形.图像.文字和路径等等.svg.js还可以用于制作svg动画和互动拖拽等效果. svg.js不依赖与jQuery等外部插件库,它遵循麻省理工学院的许可( MIT License)下许可证的条款. 在线演示:http://www.htmleaf.com/Demo/201501301302.html 下载地址:http://www.htmleaf.com/html5/SVG/201501301301.html

移动开发js库Zepto.js应用详解

从哪里下载 Zepto 地址:http://zeptojs.com/ 中文版地址:http://www.css88.com/doc/zeptojs_api/ 这个问题看起来很蠢,从官网下载不就行了嘛!可是你有没有发现下载链接上面有行小字呢? 在这个 README 里面你会惊奇地发现,Zepto 源码中有 14 个模块,而官网提供的标准版里面只有 7 个模块!而且居然不包含对移动端开发非常重要的 touch 模块(提供对触摸事件的支持)! 所以我的建议是,不要从官网下载,而是从 Github 下载

SPA学习之 - 路由插件(crossroads.js)

Crossroads.js是一个受Rails, Pyramid, Django, CakePHP等基于路由/分发(Route/Dispatch)方式处理路由的后端MVC框架启发的一套js专业路由库.它能够直接解析传入的字符串并根据相应的规则来过滤和验证路由,然后再执行下一步的操作. A duck can walk, fly and swim, but he can’t do any of these things well… crossroads.js是一个独立的库功能十分强大和灵活,而且职责单

创建自己的共用js库

直至昨晚为止,学习了一个多月的MVC与jQuery,从所做的练习中,发觉jQuery的代码也有跟C#语言一样可以重构,多页面有相同使用的方法函数,均可以放置于一个单独立的js文件或是自定义的js库中. 在使用时,引用此库文件即可.举个简单的例子,如前面介绍的两个下拉列表联动的功能,不管是在MVC添加,还是编辑时,均需要写上几个相同的函数来实现.为了js代码没有冗余.我们就可以重构它们了. 在MVC应用程序下的Scripts目录下,创建一个insus.common.utility.js库. js类

前端学习(五):body标签(三)

进击のpython 前端学习--body标签 接下来的内容就比较多了,各位看官且听我慢慢道来... ... 使用a标签,链接到另一个页面 网页中<a>标签,全称:anchor.锚点的意思 它在html中称为超链接标签,可以说在网页中无处不在,只要有链接的地方,就有会这个标签 <a href='目标地址' title='鼠标滑过显示的文本'>链接显示的文本</a> 覆盖本身 我们做一个例子,点击百度一下就能跳转到百度: <body> <a href=&q

如何全新学习一个JS库的使用?

在实际的项目开发过程中,对于前端开发人员,一般都是遵照项目架构中的实现技术来做相关业务的开发,但是对于一些新功能的实现就需要新的解决方案来实现,在此就缺少不了对于新技术的学习,怎样从小白到熟练掌握一个全新的JS库的使用流程,在此做个小总结: 1,在官网网站中或者Github中下载库文件,参照实例或者文档介绍实例化简单的雏形 2,阅读文档更进一步结合业务需求找到实现方法,了解插件中包含的属性和方法,当然在寻找是否具有某些属性和方法之前,可以先思考业务流程中可能需要的属性和方法 3,在JS宿主环境中