<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>公交线路</title>
<style type="text/css">
html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
b,
u,
i,
center,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
margin: 0;
padding: 0;
border: 0;
font-size: 14px;
font: inherit;
vertical-align: baseline;
outline: none;
}
html {
height: 100%;
}
body {
height: 100%;
font-family: Microsoft YaHei, Helvitica, Verdana, Tohoma, Arial, san-serif;
-webkit-text-size-adjust: none;
font-size: 14px;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
display: block;
}
ol,
ul {
list-style: none;
}
blockquote,
q {
quotes: none;
}
blockquote:before,
blockquote:after,
q:before,
q:after {
content: '';
content: none;
}
strong {
font-weight: bold;
}
a,
button,
input {
-webkit-tap-highlight-color: rgba(255, 0, 0, 0);
}
input,
textarea,
select,
button {
-webkit-border-radius: 0;
-webkit-appearance: none;
outline: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
img {
border: 0;
max-width: 100%;
}
a {
text-decoration: none;
color: #333;
}
a:hover {
text-decoration: none;
}
.clearfix:before,
.container:after {
content: "";
display: table;
}
.clearfix:after {
clear: both;
}
/**/
.qzdian {
text-align: center;
font-size: 14px;
line-height: 14px;
padding: 10px;
border-bottom: 1px solid #d8d8d8;
}
.qzdian p {
padding: 3px 0;
}
.search {
position: relative;
padding: 8px;
border-top: 1px solid #d8d8d8;
border-bottom: 1px solid #d8d8d8;
background-color: #F7F7F7;
}
.select_search {
display: block;
margin: 0;
border: 1px solid #d8d8d8;
border-radius: 3px;
padding: 9px 18px 9px 8px;
font-size: 14px;
z-index: 2;
width: 100%;
}
.jtjt {
position: absolute;
display: block;
right: 18px;
top: 50%;
margin-top: -6px;
border: 1px solid #7E7E7E;
-webkit-transform: rotate(135deg);
width: 8px;
height: 8px;
border-left: none;
border-bottom: none;
z-index: 3;
}
.fabt {
padding: 2px 8px;
border-top: 1px solid #EEEEEE;
border-bottom: 1px solid #EEEEEE;
background-color: #FCFCFC;
overflow: hidden;
display: block;
font-size: 14px;
height: 26px;
line-height: 26px;
}
.fanr {
padding: 8px 8px 12px 10px;
display: block;
overflow: hidden;
}
.fanr p {
padding: 3px 0;
}
.segmented {
padding: 10px 8px;
background-color: #F7F7F7;
border-bottom: 1px solid #C5C5C5;
}
.segmented-control {
position: relative;
display: table;
overflow: hidden;
font-size: 12px;
font-weight: 400;
background-color: #fff;
border-radius: 3px;
border: 1px solid #0076F7;
}
.segmented-control .control-item {
display: table-cell;
width: 1%;
padding: 5px 0;
overflow: hidden;
line-height: 1;
color: #0076F7;
text-align: center;
text-overflow: ellipsis;
white-space: nowrap;
border-left: 1px solid #fff;
font-size: 16px;
}
.segmented-control .control-item.active {
background-color: #0076F7;
color: #FFF;
}
.segmented-control .control-item:first-child {
border-left-width: 0;
}
</style>
<script charset="utf-8" src="http://map.qq.com/api/js?v=2.exp"></script>
<script>
var map,
transfer_plans,
start_marker,
end_marker,
station_markers = [],
transfer_lines = [],
walk_lines = [];
var transferService = new qq.maps.TransferService({
location: "北京",
complete: function(result) {
result = result.detail;
var start = result.start,
end = result.end;
var anchor = new qq.maps.Point(6, 6),
size = new qq.maps.Size(24, 36),
start_icon = new qq.maps.MarkerImage(
'http://lbs.qq.com/javascript_v2/img/busmarker.png',
size
),
end_icon = new qq.maps.MarkerImage(
'http://lbs.qq.com/javascript_v2/img/busmarker.png',
size,
new qq.maps.Point(24, 0),
anchor
);
start_marker && start_marker.setMap(null);
end_marker && end_marker.setMap(null);
start_marker = new qq.maps.Marker({
icon: start_icon,
position: start.latLng,
map: map,
zIndex: 1
});
end_marker = new qq.maps.Marker({
icon: end_icon,
position: end.latLng,
map: map,
zIndex: 1
});
transfer_plans = result.plans;
var plans_desc = [];
for (var i = 0; i < transfer_plans.length; i++) {
//plan desc.
var p_attributes = [
'onclick="renderPlan(' + i + ')"',
'onmouseover=this.style.background="#FCFCFC"',
'onmouseout=this.style.background="#fff"',
'style="margin-top:-4px;cursor:pointer"'
].join(' ');
plans_desc.push('<section ' + p_attributes +
'><b class="fabt">方案' + (i + 1) + '.</b><div class="fanr">');
var actions = transfer_plans[i].actions;
for (var j = 0; j < actions.length; j++) {
var action = actions[j],
img_position;
action.type == qq.maps.TransferActionType.BUS && (
img_position = '-38px 0px'
);
action.type == qq.maps.TransferActionType.SUBWAY && (
img_position = '-57px 0px'
);
action.type == qq.maps.TransferActionType.WALK && (
img_position = '-76px 0px'
);
var action_img = '<p><span style="margin-bottom: -4px;' +
'display:inline-block;background:url(http://lbs.qq.com/javascript_v2/img/busicon.png) ' +
'no-repeat ' + img_position +
';width:19px;height:19px"></span> ';
plans_desc.push(action_img + action.instructions + '</p>');
}
plans_desc.push('</section></div>');
}
//方案文本描述
document.getElementById('plans').innerHTML = plans_desc.join('');
//渲染到地图上
renderPlan(0);
}
});
function init() {
getLocation();
map = new qq.maps.Map(document.getElementById("container"), {
// 地图的中心地理坐标。
center: new qq.maps.LatLng(24.437734, 118.093221)
// center: new qq.maps.LatLng(39.916527, 116.397128)
});
calcPlan();
}
function calcPlan() {
var start_name = document.getElementById("start").value.split(",");
var end_name = document.getElementById("end").value.split(",");
var policy = document.getElementById("policy").value;
transferService.search(new qq.maps.LatLng(start_name[1], start_name[0]), new qq.maps.LatLng(end_name[1], end_name[0]));
switch (policy) {
case "较快捷":
transferService.setPolicy(qq.maps.TransferActionType.LEAST_TIME);
break;
case "少换乘":
transferService.setPolicy(qq.maps.TransferActionType.LEAST_TRANSFER);
break;
case "少步行":
transferService.setPolicy(qq.maps.TransferActionType.LEAST_WALKING);
console.log(1);
break;
case "不坐地铁":
transferService.setPolicy(qq.maps.TransferActionType.NO_SUBWAY);
break;
}
}
//清除地图上的marker
function clearOverlay(overlays) {
var overlay;
while (overlay = overlays.pop()) {
overlay.setMap(null);
}
}
function renderPlan(index) {
var plan = transfer_plans[index],
lines = plan.lines,
walks = plan.walks,
stations = plan.stations;
map.fitBounds(plan.bounds);
//clear overlays;
clearOverlay(station_markers);
clearOverlay(transfer_lines);
clearOverlay(walk_lines);
var anchor = new qq.maps.Point(6, 6),
size = new qq.maps.Size(24, 36),
bus_icon = new qq.maps.MarkerImage(
'http://lbs.qq.com/javascript_v2/img/busmarker.png',
size,
new qq.maps.Point(48, 0),
anchor
),
subway_icon = new qq.maps.MarkerImage(
'http://lbs.qq.com/javascript_v2/img/busmarker.png',
size,
new qq.maps.Point(72, 0),
anchor
);
//draw station marker
for (var j = 0; j < stations.length; j++) {
var station = stations[j];
if (station.type == qq.maps.PoiType.SUBWAY_STATION) {
var station_icon = subway_icon;
} else {
var station_icon = bus_icon;
}
var station_marker = new qq.maps.Marker({
icon: station_icon,
position: station.latLng,
map: map,
zIndex: 0
});
station_markers.push(station_marker);
}
//draw bus line
for (var j = 0; j < lines.length; j++) {
var line = lines[j];
var polyline = new qq.maps.Polyline({
path: line.path,
strokeColor: '#3893F9',
strokeWeight: 6,
map: map
});
transfer_lines.push(polyline);
}
//draw walk line
for (var j = 0; j < walks.length; j++) {
var walk = walks[j];
var polyline = new qq.maps.Polyline({
path: walk.path,
strokeColor: '#3FD2A3',
strokeWeight: 6,
map: map
});
walk_lines.push(polyline);
}
}
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
x.innerHTML = "浏览器不支持定位.";
}
}
function showPosition(position) {
var lat = position.coords.latitude;
var lng = position.coords.longitude;
document.getElementById("start").value = lng + "," + lat;
init();
}
</script>
</head>
<body onload="getLocation();">
<div style="display:none"> <b>起点: </b>
<input id="start" value="">
<b>终点: </b>
<input id="end" value="118.73210, 32.0233">
</div>
<div class="segmented">
<p class="segmented-control">
<a class="platform-switch control-item active" href="">公交路线</a>
<a class="platform-switch control-item" href="">自驾导航</a>
</p>
</div>
<div style="width:100%;height:300px" id="container"></div>
<div class="search">
<select id="policy" onchange="calcPlan();" class="select_search ">
<option value="">请选择换乘策略</option>
<option value="LEAST_TIME">较快捷</option>
<option value="LEAST_TRANSFER">少换乘</option>
<option value="LEAST_WALKING">少步行</option>
<option value="NO_SUBWAY">不坐地铁</option>
</select>
<span class="jtjt"></span> </div>
<div class="qzdian">
<p>点选以下方案后,查看地图变化。</p>
</div>
<div id="plans"></div>
</body>
</html>
转载于:https://my.oschina.net/zhaoxiaobao/blog/486336