当前位置: 首页 > 知识库问答 >
问题:

谷歌地图v3,使用公里和度创建多边形

茹轩昂
2023-03-14

在互联网上我可以找到许多创建谷歌地图的例子。

这样地:https://developers.google.com/maps/documentation/javascript/examples/polygon-arrays

但是我需要创建多边形不是从拉特和Lng,而是公里。

示例:

1 point: LatLng(25.774252, -80.190262);
2 point: 20km and 90 deg.
3 point:  15km and 45 deg.

有可能吗?

共有1个答案

昝枫
2023-03-14

使用几何图形库computeOffset方法。

ComputeOffset(from: LatLng,距离:数字,航向:数字,半径?:数字)|LatLng|返回从指定航向中的原点移动距离(以从北顺时针方向的度数表示)产生的LatLng。

var initialPoint = new google.maps.LatLng(25.774252, -80.190262);
var triangleCoords = [
      initialPoint,
      google.maps.geometry.spherical.computeOffset(initialPoint,20000,90),
      google.maps.geometry.spherical.computeOffset(initialPoint,15000,45)
  ];
  // Construct the polygon.
  bermudaTriangle = new google.maps.Polygon({
    paths: triangleCoords,
    strokeColor: '#FF0000',
    strokeOpacity: 0.8,
    strokeWeight: 3,
    fillColor: '#FF0000',
    fillOpacity: 0.35
  });

  bermudaTriangle.setMap(map);

工作实例

代码段:

// This example creates a simple polygon representing the Bermuda Triangle.
// When the user clicks on the polygon an info window opens, showing
// information about the polygon's coordinates.

var map;
var infoWindow;

function initialize() {
  var mapOptions = {
    zoom: 5,
    center: new google.maps.LatLng(24.886436490787712, -70.2685546875),
    mapTypeId: google.maps.MapTypeId.TERRAIN
  };

  var bermudaTriangle;

  map = new google.maps.Map(document.getElementById('map-canvas'),
    mapOptions);

  var initialPoint = new google.maps.LatLng(25.774252, -80.190262);
  var triangleCoords = [
    initialPoint,
    google.maps.geometry.spherical.computeOffset(initialPoint, 20000, 90),
    google.maps.geometry.spherical.computeOffset(initialPoint, 15000, 45)
  ];
  // Construct the polygon.
  bermudaTriangle = new google.maps.Polygon({
    paths: triangleCoords,
    strokeColor: '#FF0000',
    strokeOpacity: 0.8,
    strokeWeight: 3,
    fillColor: '#FF0000',
    fillOpacity: 0.35
  });

  bermudaTriangle.setMap(map);

  var bounds = new google.maps.LatLngBounds();
  for (var i = 0; i < bermudaTriangle.getPath().getLength(); i++) {
    bounds.extend(bermudaTriangle.getPath().getAt(i));
  }

  var initialPoint2 = new google.maps.LatLng(25.77, -80.190262);
  var triangleCoords2 = [
    initialPoint2,
    google.maps.geometry.spherical.computeOffset(initialPoint2, 20000, 90),
    google.maps.geometry.spherical.computeOffset(initialPoint2, 15000, 135)
  ];
  // Construct the polygon.
  bermudaTriangle2 = new google.maps.Polygon({
    paths: triangleCoords2,
    strokeColor: '#0000FF',
    strokeOpacity: 0.8,
    strokeWeight: 3,
    fillColor: '#0000FF',
    fillOpacity: 0.35
  });

  bermudaTriangle2.setMap(map);

  for (var i = 0; i < bermudaTriangle2.getPath().getLength(); i++) {
    bounds.extend(bermudaTriangle2.getPath().getAt(i));
  }


  map.fitBounds(bounds);

  // Add a listener for the click event.
  google.maps.event.addListener(bermudaTriangle, 'click', showArrays);
  google.maps.event.addListener(bermudaTriangle2, 'click', showArrays);

  infoWindow = new google.maps.InfoWindow();
}

/** @this {google.maps.Polygon} */
function showArrays(event) {

  // Since this polygon has only one path, we can call getPath()
  // to return the MVCArray of LatLngs.
  var vertices = this.getPath();

  var contentString = '<b>Bermuda Triangle polygon</b><br>' +
    'Clicked location: <br>' + event.latLng.lat() + ',' + event.latLng.lng() +
    '<br>';

  // Iterate over the vertices.
  for (var i = 0; i < vertices.getLength(); i++) {
    var xy = vertices.getAt(i);
    contentString += '<br>' + 'Coordinate ' + i + ':<br>' + xy.lat() + ',' +
      xy.lng();
  }

  // Replace the info window's content and position.
  infoWindow.setContent(contentString);
  infoWindow.setPosition(event.latLng);

  infoWindow.open(map);
}

google.maps.event.addDomListener(window, 'load', initialize);
html,
body,
#map-canvas {
  height: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?v=3&libraries=geometry"></script>
<div id="map-canvas"></div>
 类似资料:
  • 是否可以使用Google API为网站创建一个与此完全相同的地图: https://www.google.pl/maps/place/Googleplex/@37.422,-122.0840835,19z/data=!4m2!3m1!1s0x808fba02425dad8f: 0x6c296c66619367e0 所以我想要的是将地点ID传递给API,以获得一个像Googleplex这样的地方,我

  • 我想用多边形类和一组lat/lng坐标在谷歌地图上画一个城区区域。 OpenStreetMap为我提供了所需的所有数据——如果我键入一些地区名称,我可以获得OSM XML格式的有用数据,例如拉脱维亚里加“Vecmilgravis”地区的OSM绘制多边形,以及OSM XML格式的数据。 问题是所有这些节点都是按某种奇怪的顺序排序的,因此如果我只提取所有和对,并为Google Maps多边形类创建一个

  • 我正在寻找一个javascript库,支持通过邮政编码或城市作为参数的能力,并获得一个列表的x, y坐标绘制一个多边形使用谷歌地图? 这是否存在?谷歌地图API支持这样的查询吗?我正在寻找一个类似于谷歌用来在谷歌查询中绘制地图的坐标数组:

  • 我正在做一个项目,选择世界各地的随机地点,需要从谷歌街景的一些功能。我正在使用谷歌地图的API v3。我的问题是getPanoramaByLocation方法。根据谷歌文档,getPanoramaByLocation是: 谢谢大家,希望这对未来的任何人都有帮助。

  • 我有这段代码来渲染地图。 即使两个点距离为25 km,我也会得到以下结果: 而我想渲染更高级别的缩放。 这样地 我使用fitBounds()方法 谢谢你的支持

  • 我想实现喜欢用户可以从我们的应用程序在谷歌地图绘制一个区域。然后当他回来的时候,然后应该加载他/她以前画的数据。 我用了两种方法。一是,, > 使用javascript在googlemap中绘制多边形 https://developers.google.com/maps/documentation/javascript/drawinglayer 使用谷歌地图api数据层<代码>http://jsf