百度地图-省市县联动加载地图 分类: Demo JavaScript 2015-04-26 13:08 530人阅读 评论(0) 收藏
在平常项目中,我们会遇到这样的业务场景:
客户希望把自己的门店绘制在百度地图上,通过省、市、区的选择,然后加载不同区域下的店铺位置。
先看看效果图吧:
实现思路:
第一步:整理行政区域表:
要实现通过地区筛选来动态加载地图,首先要有一套中国行政区域表。哪里来呢?如果你做过淘宝API接入,应该会想到淘宝物流接口提供了一个官方的行政区域代码,这个比较靠谱。
第二步:收集行政区域的经纬度:
这个就有点麻烦了,虽然可以在百度坐标拾取系统一个一个的收集整理,但是3000多条记录,是个不小的体力活。于是经过多方面的查找,找到了一份已经由前辈整理过的经纬度表;再结合第一步里的区域,最终得到了一份数据相对齐全的行政区域表。(建表SQL语句见文末下载地址)
第三步:制作地区筛选页面:
地区筛选,三级联动,为了方便演示,以及区域表更新的几率不大,将区域表内容输入成一个json串,保存为area.js文件,大概内容像这样:
var areas = [
{"code":"110000","parentCode":"0","level":"1","name":"北京市","latitude":"39.929986","longitude":"116.395645"},
{"code":"110100","parentCode":"110000","level":"2","name":"市辖区","latitude":"","longitude":""},
{"code":"110101","parentCode":"110100","level":"3","name":"东城区","latitude":"39.938574","longitude":"116.421885"},
...
];
有了数据源,再来做页面就方便多了。
HTML部分:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>区域地图</title>
<!--css-->
<link href="style/demo.css" rel="stylesheet" type="text/css" />
<!--javascript-->
<script src="scripts/area.js" type="text/javascript"></script>
<script src="scripts/jquery-1.9.1.js" type="text/javascript"></script>
<script src="scripts/demo.js" type="text/javascript"></script>
</head>
<body>
<div class="demo_main">
<fieldset class="demo_title">
在线区域地图<span class="author">资源提供者: 清山博客 [2015年4月26日11:38:45]</span>
</fieldset>
<fieldset class="demo_content">
<div>
省份:
<select name="province">
</select>
城市:<select name="city">
</select>
县区:<select name="county">
</select>
<span class="tips" style="color: green">请选择地区</span>
</div>
<div style="min-height: 450px; margin-top: 5px; width: 100%;" id="map">
</div>
</fieldset>
<script type="text/javascript">
//异步调用百度js
function map_load() {
var load = document.createElement("script");
load.src = "http://api.map.baidu.com/api?v=1.4&callback=map_init";
document.body.appendChild(load);
}
window.onload = map_load; //根据经纬度显示地区
function loadPlace(longitude, latitude, level) {
if (parseFloat(longitude) > 0 || parseFloat(latitude) > 0) {
level = level || 13;
//绘制地图
var map = new BMap.Map("map"); // 创建Map实例
var point = new BMap.Point(longitude, latitude); //地图中心点
map.centerAndZoom(point, level); // 初始化地图,设置中心点坐标和地图级别。
map.enableScrollWheelZoom(true); //启用滚轮放大缩小
//向地图中添加缩放控件
var ctrlNav = new window.BMap.NavigationControl({
anchor: BMAP_ANCHOR_TOP_LEFT,
type: BMAP_NAVIGATION_CONTROL_LARGE
});
map.addControl(ctrlNav); //向地图中添加缩略图控件
var ctrlOve = new window.BMap.OverviewMapControl({
anchor: BMAP_ANCHOR_BOTTOM_RIGHT,
isOpen: 1
});
map.addControl(ctrlOve); //向地图中添加比例尺控件
var ctrlSca = new window.BMap.ScaleControl({
anchor: BMAP_ANCHOR_BOTTOM_LEFT
});
map.addControl(ctrlSca); }
}
</script>
</div>
</body>
</html>
</span>
JS部分(demo.js):
<span style="font-size:12px;">$(function() {
//设置默认值
var option = $("<option>").val("0").text("==请选择省份==");
$("[name='province']").append(option); option = $("<option>").val("0").text("==请选择城市==");
$("[name='city']").append(option); option = $("<option>").val("0").text("==请选择县区==");
$("[name='county']").append(option); //绑定省份
for (var i = 0; i < areas.length; i++) {
if (parseInt(areas[i].level) == 1) {
option = $("<option>").val(areas[i].code).text(areas[i].name);
$("[name='province']").append(option);
}
} //城市联动
$("[name='province']").bind("change", function() {
var code = parseInt($(this).val()); //加载城市
if (code > 0) {
$("[name='city'] option:gt(0)").remove();
for (var i = 0; i < areas.length; i++) {
if (parseInt(areas[i].parentCode) == code) {
option = $("<option>").val(areas[i].code).text(areas[i].name);
$("[name='city']").append(option);
}
}
}
//绘制地图
if (code > 0) {
for (var i = 0; i < areas.length; i++) {
if (parseInt(areas[i].code) == code) { var longitude = areas[i].longitude;
var latitude = areas[i].latitude; loadPlace(longitude, latitude, 10); break;
}
}
}
}); //城市联动
$("[name='city']").bind("change", function() {
var code = parseInt($(this).val()); //加载县区
if (code > 0) {
$("[name='county'] option:gt(0)").remove();
for (var i = 0; i < areas.length; i++) {
if (parseInt(areas[i].parentCode) == code) {
option = $("<option>").val(areas[i].code).text(areas[i].name);
$("[name='county']").append(option);
}
}
} //绘制地图
if (code > 0) {
for (var i = 0; i < areas.length; i++) {
if (parseInt(areas[i].code) == code) { var longitude = areas[i].longitude;
var latitude = areas[i].latitude; loadPlace(longitude, latitude, 12); break;
}
}
} }); //县区联动
$("[name='county']").bind("change", function() {
var code = parseInt($(this).val()); //绘制地图
if (code > 0) {
for (var i = 0; i < areas.length; i++) {
if (parseInt(areas[i].code) == code) { var longitude = areas[i].longitude;
var latitude = areas[i].latitude; loadPlace(longitude, latitude); break;
}
}
}
}); });</span>
说明都在代码注释里了,应该很容易理解,这里就不重复了。
版权声明:本文为博主原创文章,未经博主允许不得转载。
百度地图-省市县联动加载地图 分类: Demo JavaScript 2015-04-26 13:08 530人阅读 评论(0) 收藏的更多相关文章
- Javascript图片预加载详解 分类: JavaScript HTML+CSS 2015-05-29 11:01 768人阅读 评论(0) 收藏
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...
- Web App 向上滑动动态加载数据 2015-06-11 09:36 20人阅读 评论(0) 收藏
好久没有写博客了 - - ,个人原因 个人原因.. 宣传一下...自己的.NET群:252713569 欢迎各位大神加入 嗯..最近在公司开发微信平台的东西..需要做一个WebAPP(PS:其实就是 ...
- JAVA 对象数组,加载图片实例 分类: Java Game 2014-08-14 16:57 80人阅读 评论(0) 收藏
主函数: package com.mywork; import java.awt.Color; import java.awt.Image; import javax.swing.ImageIcon; ...
- winform 解决界面闪动、提升加载速度 分类: WinForm 2015-02-03 16:34 161人阅读 评论(0) 收藏
说明: 从一个技术交流群里获得,经验证效果不错. //作用 加快界面加载 protected override CreateParams CreateParams { ...
- ZEDBOARD启动自启配置(加载镜像) 分类: OpenCV ubuntu shell ZedBoard Eye_Detection 2014-11-08 18:53 167人阅读 评论(0) 收藏
参考:陆书14.2.8 1)备份ramdisk8M.image.gz 2)加载rootfs镜像文件: 3)在镜像目录下建立自己所需文件夹(挂载目录): 我需要的挂载目录有两个: root/qt/ins ...
- 菊花加载第三方--MBprogressHUD 分类: ios技术 2015-02-05 19:21 120人阅读 评论(0) 收藏
上次说到了网络请求AFN,那么我们在网络请求的时候,等待期间,为了让用户不认为是卡死或程序出错,一般都会放一个菊花加载,系统有一个菊花加载类叫UIProgressHUD.但是我今天要说的是一个替代它的 ...
- hadoop配置文件的加载机制 分类: A1_HADOOP 2015-01-21 11:29 839人阅读 评论(0) 收藏
hadoop通过Configuration类来保存配置信息 1.通过Configuration.addResource()来加载配置文件 2.通过Configuration.get***()来获取配置 ...
- 百度编辑器ueditor插入表格没有边框,没有颜色的解决方法 2015-01-06 09:24 98人阅读 评论(0) 收藏
百度富文本编辑器..很强大.. - - ,不过有些BUG..真的很无解.. 最近用这个,发现上传的表格全部没有表框.. 解决办法如下: 转载的.. 百度编辑器ueditor插入一个表格后,在编辑过程中 ...
- 百度编辑器UEditor ASP.NET示例Demo 分类: ASP.NET 2015-01-12 11:18 346人阅读 评论(0) 收藏
在百度编辑器示例代码基础上进行了修改,封装成类库,只需简单配置即可使用. 完整demo下载 版权声明:本文为博主原创文章,未经博主允许不得转载.
随机推荐
- SpringBoot源码解析:AOP思想以及相应的应用
spring中拦截器和过滤器都是基于AOP思想实现的,过滤器只作用于servlet,表现在请求的前后过程中:拦截器属于spring的一个组件,由spring管理, 可以作用于spring任何资源,对象 ...
- 了解了下 Google 最新的 Fuchsia OS
就是看到篇报道,有点好奇,就去FQ挖了点东西回来. 我似乎已开始就抓到了重点,没错,就是 LK . LK 是 Travis Geiselbrecht 写的一个针对 ARM 的嵌入式操作系统,开源的.点 ...
- BZOJ4650: [Noi2016]优秀的拆分
考场上没秒的话多拿5分并不划算的样子. 思想其实很简单嘛. 要统计答案,求以每个位置开始和结束的AA串数量就好了.那么枚举AA中A的长度L,每L个字符设一个关键点,这样AA一定经过相邻的两个关键点.计 ...
- 【原】理解javascript中的this
最近的文章基本都是总结javascript基础内容的,因为我觉得这些东西很重要.而且很多时候你觉得你理解了,其实并没有你自认为的那么理解.十月份没怎么写文章,因为国庆出去玩的比较久,心变野了,现在是时 ...
- 深入C#内存管理来分析值类型&引用类型,装箱&拆箱,堆栈几个概念组合之间的区别
C#初学者经常被问的几道辨析题,值类型与引用类型,装箱与拆箱,堆栈,这几个概念组合之间区别,看完此篇应该可以解惑. 俗话说,用思想编程的是文艺程序猿,用经验编程的是普通程序猿,用复制粘贴编程的是2B程 ...
- 戴尔OMSA 使用指南
戴尔的OMSA我们已经安装完成,但是没有web页面.因此我们目前想要看到服务器的相关硬件信息就需要使用命令行的方式获取了.那么,这里就介绍如何使用命令获取服务器硬件信息. 下面是我监控一些硬件信息的命 ...
- 英文写作——冠词的使用(Use 0f Articles)
1.使用'a','an','the'和不使用冠词的基本规则: <1>泛指,不可数名词不能有任何冠词 <2>泛指,可数,复数名词前不能有冠词 <3>泛指,可数,单数名 ...
- CSS大杂烩(1)
box-sizing 有4种方式 border-box 用来减去padding内边框和边框 前提是设置好固定宽高 content-box 在宽和高之外内边距和边框 其实基本上和原来一样 inherit ...
- Android-修改TabWidget字体大小颜色及对齐
在Android中,我们可以定义TabWidget来分页.在上一篇文章中有说到使用TabWidget定义Tab分页布局,但大部分用户可能会觉得默认的字体有点小,但Tab选项卡默认又不能设定字体大小,如 ...
- Excel 自动更正
当有复杂的字段需要重复填写怎么办呢,比如××银行卡号,××电话号码,××公司地址等.可以使用excel的"自动更正"功能解决. 1. Excel 2010的自动更正选项在哪里呢 2 ...