1. 程式人生 > 其它 >地圖地區生成隨機點

地圖地區生成隨機點

自己簡單封裝了一下(這個網址直接用)

https://static-d9bc5ad6-69a7-454e-a8e4-80069e587f92.bspapp.com/map.html

如果網址炸了請手動:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>百度地圖隨機生成某個行政區域的隨機座標</title>
    <script
      type="text/javascript"
      src="https://api.map.baidu.com/api?v=2.0&ak=kx3YUGkPTCwLcX8FMEAcLgxNzf7b8Hug"
    ></script>
    <script
      type="text/javascript"
      src="https://api.map.baidu.com/library/GeoUtils/1.2/src/GeoUtils_min.js"
    ></script>
  </head>
  <body>
    <div>注意需要關閉廣告攔截外掛!攔截外掛會把百度地圖生成元件遮蔽導致無法生成座標</div>
    <div>
      地區名:
      <input
        id="name"
        type="text"
        placeholder="地區名:太倉市"
        value="太倉市"
      />
      隨機生成數:
      <input
        id="num"
        type="text"
        name="num"
        placeholder="隨機生成數"
        value="500"
      />
    </div>
    <div>
      最小經度:
      <input
        id="lng"
        type="text"
        name="lng"
        placeholder="最小經度"
        value="121.00"
      />
      最小緯度:
      <input
        id="lat"
        type="text"
        name="lat"
        placeholder="最小緯度"
        value="31.22"
      />
    </div>
    <div>
      經度範圍:
      <input
        id="lng_range"
        type="text"
        name="num"
        placeholder="經度範圍:經度最大+0.8就填0.8"
        value="0.5"
      />
      緯度範圍:
      <input
        id="lat_range"
        type="text"
        name="num"
        placeholder="緯度範圍:緯度最大+0.8就填0.8"
        value="0.5"
      />
      <button onclick="generatePos()">生成</button>
    </div>
    <div id="allmap" style="width: 1000px; height: 500px"></div>
  </body>
</html>
<script type="text/javascript">
  var map = {}; //初始化全域性map
  window.onload = function () {
    map = new BMap.Map("allmap");
    //中心點座標
    map.centerAndZoom(new BMap.Point(113.665336, 34.753203), 5);
    map.enableScrollWheelZoom();
  };

  // 生成座標點
  function generatePos() {
    var areaName = document.getElementById("name").value;
    var lng = document.getElementById("lng").value;
    var lat = document.getElementById("lat").value;
    var num = document.getElementById("num").value;
    var lat_range = document.getElementById("lat_range").value;
    var lng_range = document.getElementById("lng_range").value;
    var bdary = new BMap.Boundary();
    //要顯示的行政區域 可以是為 市 縣 區
    bdary.get(areaName, function (rs) {
      //獲取行政區域
      map.clearOverlays(); //清除地圖覆蓋物
      var count = rs.boundaries.length; //行政區域的點有多少個
      if (count === 0) {
        alert("未能獲取當前輸入行政區域");
        return;
      }
      var pointArray = [];
      for (var i = 0; i < count; i++) {
        var ply = new BMap.Polygon(rs.boundaries[i]); //建立多邊形覆蓋物
        map.addOverlay(ply); //新增覆蓋物
        pointArray = pointArray.concat(ply.getPath());
        map.setViewport(pointArray);
        //控制座標範圍
        var res = "";
        var minX = Math.floor(lng * 100) / 100; //這裡控制生成座標的範圍
        var minY = Math.floor(lat * 100) / 100; //這裡控制生成座標的範圍
        console.log(minX, minY);

        var x = 0;
        var y = 0;
        var pt = null;
        var arr = [];
        for (var i = 0; i < num; i++) {
          x = minX + Math.random() * lng_range;
          y = minY + Math.random() * lat_range;
          pt = new BMap.Point(x, y);
          if (BMapLib.GeoUtils.isPointInPolygon(pt, ply)) {
            //console.log(x,y);
            arr.push({
              lat: y,
              lng: x,
            });
            var marker = (marker = new BMap.Marker(new BMap.Point(x, y)));
            map.addOverlay(marker);
            // res += 'marker = new BMap.Marker(new BMap.Point(' + x + ' ,' + y + '));<br/>map.addOverlay(marker);<br/>  ';
          }
        }
        console.log(arr);
        console.log(JSON.stringify(arr));
      }
      alert("生成成功!數量:" + arr.length + ",請檢視console.log");
    });
  }
</script>