百度地圖框選標註座標點功能
在百度地圖上面畫矩形,不規則多邊形,圓形,線等,並獲取框選的標註座標點功能;js判斷座標點是否在某個範圍內
MapSelect.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MapSelect.aspx.cs" Inherits="BaiduMapSelect.MapSelect" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style type="text/css">
body, html, #allmap {
font-family: "微軟雅黑";
height: 95%;
margin: 0;
overflow: hidden;
width: 100%;
}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=OGTkT2pvBcNb*******Skzxmm9mek"></script>
<!--載入滑鼠繪製工具-->
<script type="text/javascript" src="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"></script>
<link rel="stylesheet" href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css" />
<!--載入檢索資訊視窗-->
<%--<script type="text/javascript" src="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.js"></script>
<link rel="stylesheet" href="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.css" />--%>
<%--<script type="text/javascript" src="http://api.map.baidu.com/library/GeoUtils/1.2/src/GeoUtils_min.js"></script>--%>
<script type="text/javascript" src="http://api.map.baidu.com/library/TextIconOverlay/1.2/src/TextIconOverlay_min.js"></script>
<script type="text/javascript" src="http://api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_min.js"></script>
</head>
<body>
<div id="allmap" style="overflow: hidden; position: relative; zoom: 1;">
<div id="map" style="-webkit-transition: all 0.5s ease-in-out; height: 95%; transition: all 0.5s ease-in-out;"></div>
</div>
<input type="button" value="清除所有覆蓋物" onclick="clearAll()" />
<input type="button" value="獲取區域選擇的標註點集合" onclick="getOverlayPath()" />
<script type="text/javascript">
// 百度地圖API功能
var map = new BMap.Map("map");
var point = new BMap.Point(113.323685, 23.130522);
map.centerAndZoom(point, 15);
//map.centerAndZoom(point, 8);
map.enableScrollWheelZoom(true); //開啟滑鼠滾輪縮放
// 編寫自定義函式,建立標註
function addMarker(point, id) {
var marker = new BMap.Marker(point);
map.addOverlay(marker);
addClickHandler("id為:" + id, marker);
}
var opts = {
width: 100, // 資訊視窗寬度
height: 80, // 資訊視窗高度
title: "資訊視窗", // 資訊視窗標題
enableMessage: false //設定允許資訊窗傳送短息
};
function addClickHandler(content, marker) {
marker.addEventListener("click", function (e) {
openInfo(content, e);
}
);
}
function openInfo(content, e) {
var p = e.target;
var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat);
var infoWindow = new BMap.InfoWindow(content, opts); // 建立資訊視窗物件
map.openInfoWindow(infoWindow, point); //開啟資訊視窗
}
// 隨機向地圖新增25個標註
var bounds = map.getBounds();
var sw = bounds.getSouthWest();
var ne = bounds.getNorthEast();
var lngSpan = Math.abs(sw.lng - ne.lng);
var latSpan = Math.abs(ne.lat - sw.lat);
var allPointArray = [];
var markers = [];
for (var i = 0; i < 20; i++) {
var point = new BMap.Point(sw.lng + lngSpan * (Math.random() * 0.7), ne.lat - latSpan * (Math.random() * 0.7));
allPointArray.push({ Point: point, Id: i });
addMarker(point, i);
//markers.push(point);
}
//最簡單的用法,生成一個marker陣列,然後呼叫markerClusterer類即可。
//var markerClusterer = new BMapLib.MarkerClusterer(map, { markers: markers });
var overlays = [];
var overlaycomplete = function (e) {
clearAll();
overlays.push(e.overlay);
e.overlay.enableEditing();
e.overlay.addEventListener("lineupdate", function (e) {
showLatLon(e.currentTarget);
});
var pointArray = e.overlay.getPath();
map.setViewport(pointArray); //調整視野
};
var styleOptions = {
strokeColor: "red", //邊線顏色。
fillColor: "red", //填充顏色。當引數為空時,圓形將沒有填充效果。
strokeWeight: 2, //邊線的寬度,以畫素為單位。
strokeOpacity: 0.5, //邊線透明度,取值範圍0 - 1。
fillOpacity: 0.3, //填充的透明度,取值範圍0 - 1。
strokeStyle: 'solid' //邊線的樣式,solid或dashed。
};
//例項化滑鼠繪製工具
var drawingManager = new BMapLib.DrawingManager(map, {
isOpen: false, //是否開啟繪製模式
enableDrawingTool: true, //是否顯示工具欄
drawingToolOptions: {
anchor: BMAP_ANCHOR_TOP_RIGHT, //位置
offset: new BMap.Size(5, 5), //偏離值
},
circleOptions: styleOptions, //圓的樣式
polylineOptions: styleOptions, //線的樣式
polygonOptions: styleOptions, //多邊形的樣式
rectangleOptions: styleOptions //矩形的樣式
});
//新增滑鼠繪製工具監聽事件,用於獲取繪製結果
drawingManager.addEventListener('overlaycomplete', overlaycomplete);
function clearAll() {
for (var i = 0; i < overlays.length; i++) {
map.removeOverlay(overlays[i]);
}
overlays.length = 0;
}
function getOverlayPath() {
var box = overlays[overlays.length - 1];
var pointArray = box.getPath();
map.setViewport(pointArray); //調整視野
var bound = map.getBounds(); //地圖可視區域
var s = "圈選的ID有:";
for (var i = 0; i < allPointArray.length; i++) {
if (bound.containsPoint(allPointArray[i].Point) == true) {
if (isInsidePolygon(allPointArray[i].Point, pointArray))
s += allPointArray[i].Id + ",";
}
}
alert(s);
}
var overlaysCache = [];
function showLatLon(a) {
var len = a.length;
var arr = [];
for (var i = 0; i < len - 1; i++) {
arr.push([a[i].lng, a[i].lat]);
}
this.overlaysCache = arr;
}
//判斷一個標註點是否在多邊形裡
//pt標註點,poly多邊形陣列
function isInsidePolygon(pt, poly) {
for (var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i)
((poly[i].lat <= pt.lat && pt.lat < poly[j].lat) || (poly[j].lat <= pt.lat && pt.lat < poly[i].lat)) &&
(pt.lng < (poly[j].lng - poly[i].lng) * (pt.lat - poly[i].lat) / (poly[j].lat - poly[i].lat) + poly[i].lng) &&
(c = !c);
return c;
}
</script>
</body>
</html>
執行結果如圖:
相關文章
- 百度地圖:根據位置獲取座標地圖
- AUTOCAD——座標標註
- 百度地圖API : 自定義標註圖示地圖API
- 使用opencv畫框,標出座標OpenCV
- 騰訊地圖定位及座標解析地圖
- 高德座標打點(點為正常的WGS84地球座標系,常見於 GPS 裝置,Google 地圖等國際標準的座標體系)偏移,調整偏移量Go地圖
- 百度地圖API開發的快速使用和新增大量座標點的幾種方法地圖API
- GPS座標互轉:WGS-84(GPS)、GCJ-02(Google地圖)、BD-09(百度地圖)GCGo地圖
- ArcGIS API for JavaScript根據兩個點座標在地圖上畫線APIJavaScript地圖
- 百度地圖BMap實現在行政區域內做標註地圖
- ArcGIS地圖投影與座標系轉換的方法地圖
- openlayers根據座標在地圖上劃區域地圖
- 百度地圖拾取座標工具-toolfk程式設計師線上工具地圖程式設計師
- canvas 座標系原點Canvas
- canvas座標系原點Canvas
- [外掛擴充套件]EasyGo,簡單GO!文字輸入框增強器(取色,時間選擇,地圖座標獲取)套件Go地圖
- HTML網頁根據座標模擬滑鼠點選HTML網頁
- Excel轉百度座標系(AngularJS)ExcelAngularJS
- dcat欄位擴充套件:地圖拖拽設定xy座標套件地圖
- Qt/C++地址轉座標/座標轉地址/逆地址解析/支援百度高德騰訊和天地圖QTC++地圖
- js中根據x,y 座標模擬點選事件JS事件
- 高德地圖聚合點,增加所有點選標記,點選後展示該聚合點下所有資訊地圖
- 地圖免費標註公司位置,怎麼做業務分佈地圖地圖
- 高德地圖api標記點和線段重合點選響應問題地圖API
- 未經投影的地理座標系如何顯示為平面地圖地圖
- 座標系
- app直播原始碼,選取矩形框並進行文字標註APP原始碼
- vue 實現高德座標轉GPS座標Vue
- 百度地圖開發-繪製點線提示框 07地圖
- python畫圖 去除橫縱座標值;設定橫縱座標名稱;設定座標軸刻度大小Python
- 『與善仁』Appium基礎 — 27、模擬手勢點選座標APP
- 流體力學守恆形式Euler方程(笛卡爾座標、柱座標、球座標)
- 張正友標定Opencv實現、標定流程以及影像座標轉為世界座標OpenCV
- 利用齊次座標進行二維座標轉換
- python matplotlib畫圖改變圖示題和座標軸標題的字型大小Python
- canvas帶有座標的柱狀圖效果Canvas
- Matlab三維空間座標圖繪製Matlab
- 海康相機 畫素座標(px,py)到sdk ptz 座標轉換最後到onvif ptz座標