功能:公交、驾车和地点搜索框查询,右键菜单在地图上随意选择起终点,选择最短距离或最少时间查询驾车路线,并带有路书功能,还有距离测量功能。搜索框没有进行模糊匹配,不细讲了,见代码吧。(Flex AIR项目)
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="1100" minHeight="600">
<fx:Script>
<![CDATA[
import flash.external.ExternalInterface;
protected function initli():void{
var url:String = "html文件绝对路径";
web.location=url;
}
]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<mx:HTML id="web" width="100%" height="100%"/>
<mx:Button id="button" x="8" y="10" label="打开地图" click="initli()"/>
</s:WindowedApplication>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>地图服务</title>
<style type="text/css">
html {
height: 100%;
}
body {
height: 100%;
margin: 0px;
padding: 0px
}
#container {
height: 93.8%;
width: 80%
}
</style>
<!-- 加载新浪检测用户位置IP API -->
<script
src="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js"
type="text/javascript"></script>
<!--加载百度地图API JS库-->
<script type="text/javascript"
src="http://api.map.baidu.com/api?v=1.5&ak=你的key值=true"></script>
<!-- 加载本地百度地图API路书库,已更改其源代码,使其上方overlay失效 -->
<script type="text/javascript" src="LuShu.js"></script>
<!-- 加载百度地图鼠标绘图工具类库-->
<script type="text/javascript"
src="http://api.map.baidu.com/library/DistanceTool/1.2/src/DistanceTool_min.js"></script>
<script type="text/javascript">
var e1;
var e2;
var flag = false;//标记可以进行最短路径和最少时间切换
var souFlag = false;//标记是否进行了搜索栏的驾车查询
var icon;
var mkr;
var icon02;
var mkr02;
var drive;
var startPoint;
var endPoint;
//自定义起点标注
function start(e) {
icon = new BMap.Icon('startPoint.jpg', new BMap.Size(29, 30));
mkr = new BMap.Marker(e, {
icon : icon,
offset : new BMap.Size(0, -18)
//设置偏移量
});
}
//自定义终点标注
function end(e) {
icon02 = new BMap.Icon('endPoint.jpg', new BMap.Size(29, 30));
mkr02 = new BMap.Marker(e, {
icon : icon02,
offset : new BMap.Size(0, -18)
//设置偏移量
});
}
/*初始化地图*/
function initialize() {
map = new BMap.Map("container");
map.setCenter(remote_ip_info["city"]);
map.centerAndZoom(map.getCenter(), 12);//必须初始化才能进行其他操作
//var traffic = new BMap.TrafficLayer();
//map.addTileLayer(traffic); //添加交通图层
mapSetting(map);
var menu = new BMap.ContextMenu();
var txtMenuItem = [ {
text : '以此为起点',
callback : function(e) {
start(e);//调用自定义起点标注方法
if (startPoint)
map.removeOverlay(startPoint); // 清除原来的起点,如果有的话
map.addOverlay(startPoint = mkr); // 加上新的起点
e1 = mkr.getPosition();
}
}, {
text : '以此为终点',
callback : function(e) {
end(e);//调用自定义终点标注方法
if (endPoint)
map.removeOverlay(endPoint); // 清除原来的终点,如果有的话
map.addOverlay(endPoint = mkr02); // 加上新的终点
e2 = mkr02.getPosition();
}
}, {
text : '距离的测量',
callback : function() {
var myDis = new BMapLib.DistanceTool(map);
myDis.open();//开启鼠标测距
}
} ];
for ( var i = 0; i < txtMenuItem.length; i++) {
menu.addItem(new BMap.MenuItem(txtMenuItem[i].text,
txtMenuItem[i].callback, 100));
if (i == 1) {
menu.addSeparator();
}
}
map.addContextMenu(menu);
}
/*自定义驾车最短距离控件*/
function ZoomControlDistance() {
// 默认停靠位置和偏移量
this.defaultAnchor = BMAP_ANCHOR_TOP_RIGHT;
this.defaultOffset = new BMap.Size(67, 40);
}
ZoomControlDistance.prototype = new BMap.Control();// 通过JavaScript的prototype属性继承于BMap.Control
//自定义控件必须实现自己的initialize方法,并且将控件的DOM元素返回
//在本方法中创建个div元素作为控件的容器,并将其添加到地图容器中
ZoomControlDistance.prototype.initialize = function(map) {
var div = document.createElement("div");// 创建一个DOM元素
div.appendChild(document.createTextNode("最短距离"));// 添加文字说明
// 设置样式
div.style.cursor = "pointer";
div.style.border = "1px solid gray";
div.style.background = "#E5E5E5";
div.onclick = function(e) {
//清除公交和驾车框信息
document.getElementById("start").value = "";
document.getElementById("end").value = "";
document.getElementById("text").value = "";
var myIcon = new BMap.Icon('che.jpg', new BMap.Size(60, 30));
if (souFlag == true) {//清除搜索栏公交或驾车查询结果
map.clearOverlays();
}
if (startPoint && endPoint || flag == true) {
drive = new BMap.DrivingRoute(
map,
{
onSearchComplete : function(results) {
if (drive.getStatus() == BMAP_STATUS_SUCCESS) {
var path = results.getPlan(0).getRoute(0)
.getPath();//获取第一条方案的驾车线路
var luShu = new BMapLib.LuShu(map, path, {
speed:30.44,
icon : myIcon
});
luShu.start();
}
if (drive.getStatus() == BMAP_STATUS_UNKNOWN_LOCATION) {
alert("没有查询信息!");
}
},
renderOptions : {
map : map,
panel : 'panel',
autoViewport : true,
},
policy : BMAP_DRIVING_POLICY_LEAST_DISTANCE
//选择最短距离作为驾车方案
});
map.clearOverlays(); // 清楚起止点标记
document.getElementById("panel").style.display = "block";//显示
drive.search(e1, e2); // 画线路
startPoint = endPoint = null; // 清除起止点记录变量
flag = true;
} else if (!startPoint && !endPoint)
alert("请右键设置起点和终点");
else if (!startPoint)
alert("请选择起点");
else if (!endPoint)
alert("请选择终点");
}
map.getContainer().appendChild(div);// 添加DOM元素到地图中
return div;// 将DOM元素返回
}
/*自定义驾车最少时间控件*/
function ZoomControlTime() {
this.defaultAnchor = BMAP_ANCHOR_TOP_RIGHT;
this.defaultOffset = new BMap.Size(1, 40);
}
ZoomControlTime.prototype = new BMap.Control();
ZoomControlTime.prototype.initialize = function(map) {
var div = document.createElement("div");
div.appendChild(document.createTextNode("最少时间"));
div.style.cursor = "pointer";
div.style.border = "1px solid gray";
div.style.background = "#E3E3E3";
div.onclick = function(e) {
//清除公交和驾车框信息
document.getElementById("start").value = "";
document.getElementById("end").value = "";
document.getElementById("text").value = "";
var myIcon = new BMap.Icon('che.jpg', new BMap.Size(60, 30));
if (souFlag == true) {
map.clearOverlays();
}
if (startPoint && endPoint || flag == true) {
drive = new BMap.DrivingRoute(
map,
{
onSearchComplete : function(results) {
if (drive.getStatus() == BMAP_STATUS_SUCCESS) {
var path = results.getPlan(0).getRoute(0)
.getPath();//获取第一条方案的驾车线路
var luShu = new BMapLib.LuShu(map, path, {
speed : 30.44,
icon : myIcon
});
luShu.start();
}
if (drive.getStatus() == BMAP_STATUS_UNKNOWN_LOCATION) {
alert("没有查询信息!");
}
},
renderOptions : {
map : map,
panel : 'panel',
autoViewport : true,
},
policy : BMAP_DRIVING_POLICY_LEAST_TIME
//选择最少时间作为驾车方案
});
map.clearOverlays(); // 清楚起止点标记
document.getElementById("panel").style.display = "block";//显示
drive.search(e1, e2); // 画线路
startPoint = endPoint = null; // 清除起止点记录变量
flag = true;
} else if (!startPoint && !endPoint)
alert("请右键设置起点和终点");
else if (!startPoint)
alert("请选择起点");
else if (!endPoint)
alert("请选择终点");
}
map.getContainer().appendChild(div);
return div;
}
/*进行地图的一些显示设置和操作*/
function mapSetting(map) {
var opts = {
type : BMAP_NAVIGATION_CONTROL_LARGE,
offset : new BMap.Size(0, 25)
//改变控件偏移量
}
map.addControl(new BMap.NavigationControl(opts));//显示完整的平移缩放控件
map.addControl(new BMap.ScaleControl());//添加比例尺
map.addControl(new BMap.MapTypeControl());//添加地图类型控件
map.addControl(new BMap.OverviewMapControl());//添加缩略图
map.setDraggingCursor("pointer");//设置拖拽地图时的鼠标指针样式
map.enableInertialDragging(true);//启用地图惯性拖拽
map.enableScrollWheelZoom(true);//启用滚轮放大缩小
var myZoomCtrl = new ZoomControlDistance();// 创建控件实例
map.addControl(myZoomCtrl);// 添加到地图当中
var myZoomCtrlTime = new ZoomControlTime();
map.addControl(myZoomCtrlTime);
}
/*搜索位置*/
function souSuo() {
map.clearOverlays();
document.getElementById("panel").style.display = "none";//隐藏
document.getElementById("start").value = "";
document.getElementById("end").value = "";
var local = new BMap.LocalSearch(map, {//设置显示搜索结果选项
renderOptions : {
map : map,
autoViewport : true,
selectFirstResult : false
},
pageCapacity : 8
});
local.search(document.getElementById("text").value);//显示用户搜索的位置
mapSetting(map);
map.setCurrentCity(document.getElementById("text").value); //设置该城市的3D图(该城市必须支持3D图)
startPoint = endPoint = null; //切换到新城市后,清除上次起止点记录变量
flag = false;
}
//查询公交路线
function gongJiao() {
map.clearOverlays();//清除地图上的覆盖物(上次查询结果)
document.getElementById("panel").style.display = "block";//显示
document.getElementById("text").value = "";
//清除右键菜单起终点查询结果
flag = false;
var transit = new BMap.TransitRoute(map, {
renderOptions : {
map : map,
panel : 'panel',
autoViewport : true,
}
});
transit.search(document.getElementById("start").value, document
.getElementById("end").value);
souFlag = true;//标记已进行公交查询,来进行右键查询时清除其结果
}
//查询驾车路线,目前API仅提供一条驾车方案
function jiaChe() {
map.clearOverlays();
document.getElementById("panel").style.display = "block";//显示
document.getElementById("text").value = "";
flag = false;
var driving = new BMap.DrivingRoute(map, {
renderOptions : {
map : map,
panel : 'panel',
autoViewport : true,
enableDragging : true
}
});
driving.search(document.getElementById("start").value, document
.getElementById("end").value);
souFlag = true;//标记已进行驾车查询,来进行右键查询时清除其结果
}
/*捕捉回车事件*/
document.onkeydown = function(event) {
e = event ? event : (window.event ? window.event : null);
if (e.keyCode == 13) {
souSuo();
}
}
</script>
</head>
<body οnlοad="initialize()">
<input type="text" name="text" id="text"
style="margin-left: 80px; height: 24px;" />
<input type="image" name="image" src="sousuo.jpg" οnclick="souSuo();"
style="margin-left: 0px; margin-top: 6px; height: 22px; width: 47px" />
<input type="text" name="startPoint" id="start"
style="margin-left: 220px;" /> 到
<input type="text" name="endPoint" id="end" style="margin-left: 0px;" />
<input type="image" name="gongjiao" src="gongjiao.jpg"
οnclick="gongJiao();"
style="margin-left: 0px; margin-top: 6px; height: 22px; width: 47px" />
<input type="image" name="jiache" src="jiache.jpg" οnclick="jiacChe();"
style="margin-left: 0px; margin-top: 6px; height: 22px; width: 47px" />
<div id="container"></div>
<div id="panel"
style="position: absolute; height: 93.8%; width: 20%; right: 0px; top: 40px; overflow-y: scroll;"></div>
</body>
</html>