<!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>
<meta
http-equiv="Content-Type" content="text/html; charset=utf-8"
/>
<title>获取地区轮廓线</title>
<script type="text/javascript"
src="http://api.map.baidu.com/api?v=1.3">
</script>
<style
type="text/css">
body{font-size:13px;margin:10px}
#container{width:800px;height:500px;border:1px
solid gray}
</style>
</head>
<body>
<div
id="container"></div>
</body>
</html>
<script
type="text/javascript">
var map = new BMap.Map("container");
var cityName = "太原市";
//function initMap(map, cityName)
{
var point = new BMap.Point(112.987402,
28.201509); // 创建点坐标 112.987402,
28.201509
map.centerAndZoom(point,
8);
// 初始化地图,设置中心点坐标和地图级别。
map.addControl(new
BMap.ScaleControl());
// 添加比例尺控件
map.addControl(new
BMap.OverviewMapControl());
//添加缩略地图控件
map.setCenter(cityName); // 设置地图显示的城市
此项是必须设置的
map.enableScrollWheelZoom();
map.addControl(new
BMap.NavigationControl({ type: BMAP_NAVIGATION_CONTROL_LARGE ,anchor:
BMAP_ANCHOR_TOP_LEFT, offset: new BMap.Size(40, 250)}));
var bdary = new BMap.Boundary();
bdary.get(cityName,
function (rs) {
//获取行政区域
map.clearOverlays(); //清除地图覆盖物
//添加遮罩层
//思路:利用行政区划点的集合与外围自定义东南西北形成一个环形遮罩层
//1.获取选中行政区划边框点的集合
rs.boundaries[0]
var strs = new
Array();
strs =
rs.boundaries[0].split(";");
var
EN = "";
//行政区划东北段点的集合
var NW = "";
//行政区划西北段点的集合
var WS = "";
//行政区划西南段点的集合
var SE = "";
//行政区划东南段点的集合
var pt_e = strs[0];
//行政区划最东边点的经纬度
var pt_n = strs[0];
//行政区划最北边点的经纬度
var pt_w = strs[0];
//行政区划最西边点的经纬度
var pt_s = strs[0];
//行政区划最南边点的经纬度
var n1 = "";
//行政区划最东边点在点集合中的索引位置
var n2 = "";
//行政区划最北边点在点集合中的索引位置
var n3 = "";
//行政区划最西边点在点集合中的索引位置
var n4 = "";
//行政区划最南边点在点集合中的索引位置
//2.循环行政区划边框点集合找出最东南西北四个点的经纬度以及索引位置
for (var n = 0; n < strs.length; n++)
{
var
pt_e_f =
parseFloat(pt_e.split(",")[0]);
var pt_n_f =
parseFloat(pt_n.split(",")[1]);
var pt_w_f =
parseFloat(pt_w.split(",")[0]);
var pt_s_f = parseFloat(pt_s.split(",")[1]);
var sPt =
new
Array();
try
{
sPt =
strs[n].split(",");
var spt_j =
parseFloat(sPt[0]);
var spt_w =
parseFloat(sPt[1]);
if (pt_e_f < spt_j) {
//东
pt_e =
strs[n];
pt_e_f =
spt_j;
n1 =
n;
}
if (pt_n_f < spt_w) {
//北
pt_n_f =
spt_w;
pt_n =
strs[n];
n2 =
n;
}
if (pt_w_f > spt_j) {
//西
pt_w_f =
spt_j;
pt_w =
strs[n];
n3 =
n;
}
if (pt_s_f > spt_w) {
//南
pt_s_f =
spt_w;
pt_s =
strs[n];
n4 =
n;
}
}
catch
(err)
{
alert(err);
}
}
//3.得出东北、西北、西南、东南四段行政区划的边框点的集合
if
(n1 < n2) { //第一种情况
最东边点在索引前面
for (var o = n1; o <= n2; o++)
{
EN += strs[o] +
";"
}
for (var
o = n2; o <= n3; o++)
{
NW += strs[o] +
";"
}
for (var
o = n3; o <= n4; o++)
{
WS += strs[o] +
";"
}
for (var
o = n4; o < strs.length; o++)
{
SE += strs[o] +
";"
}
for (var
o = 0; o <= n1; o++)
{
SE += strs[o] +
";"
}
}
else { //第二种情况
最东边点在索引后面
for (var o = n1; o < strs.length; o++)
{
EN += strs[o] +
";"
}
for (var
o = 0; o <= n2; o++)
{
EN += strs[o] +
";"
}
for (var
o = n2; o <= n3; o++)
{
NW += strs[o] +
";"
}
for (var
o = n3; o <= n4; o++)
{
WS += strs[o] +
";"
}
for (var
o = n4; o <= n1; o++)
{
SE += strs[o] +
";"
}
}
//4.自定义外围边框点的集合
var E_JW =
"170.672126,
39.623555;";
//东
var EN_JW = "170.672126,
81.291804;";
//东北角
var N_JW = "105.913641,
81.291804;";
//北
var NW_JW =
"-169.604276, 81.291804;";
//西北角
var W_JW = "-169.604276,
38.244136;";
//西
var WS_JW = "-169.604276,
-68.045308;";
//西南角
var S_JW = "114.15563,
-68.045308;";
//南
var SE_JW = "170.672126,
-68.045308 ;";
//东南角
//4.添加环形遮罩层
var ply1 = new
BMap.Polygon(EN + NW + WS + SE + E_JW + SE_JW + S_JW + WS_JW + W_JW + NW_JW +
EN_JW + E_JW, { strokeColor: "none", fillColor: "rgb(246,246,246)",
strokeOpacity: 0 }); //建立多边形覆盖物
map.addOverlay(ply1);
//遮罩物是半透明的,如果需要纯色可以多添加几层
var ply1 = new BMap.Polygon(EN +
NW + WS + SE + E_JW + SE_JW + S_JW + WS_JW + W_JW + NW_JW + EN_JW + E_JW, {
strokeColor: "none", fillColor: "rgb(246,246,246)", strokeOpacity: 0 });
//建立多边形覆盖物
map.addOverlay(ply1);
//遮罩物是半透明的,如果需要纯色可以多添加几层
var ply1 = new BMap.Polygon(EN +
NW + WS + SE + E_JW + SE_JW + S_JW + WS_JW + W_JW + NW_JW + EN_JW + E_JW, {
strokeColor: "none", fillColor: "rgb(246,246,246)", strokeOpacity: 0 });
//建立多边形覆盖物
map.addOverlay(ply1);
//遮罩物是半透明的,如果需要纯色可以多添加几层
//5.
给目标行政区划添加边框,其实就是给目标行政区划添加一个没有填充物的遮罩层
var ply = new BMap.Polygon(rs.boundaries[0], { strokeWeight: 2, strokeColor:
"#ff0000",fillColor: "" });
map.addOverlay(ply);
map.setViewport(ply.getPath());
//调整视野
loadCityMapInfo(map);
});
// return map;
//}
</script>
原文:http://www.cnblogs.com/tomcattd/p/3626216.html