google-maps - 如何使用 turfjs 在多边形内正确添加方形网格?

标签 google-maps google-maps-api-3 turfjs

所以我目前正在玩 turfjs。我正在尝试在多边形内添加一个正方形网格。

所以这是代码

var triangleCoords = [
  { lat: 25.774, lng: -80.19 },
  { lat: 18.466, lng: -66.118 },
  { lat: 32.321, lng: -64.757 },
  { lat: 25.774, lng: -80.19 }
];

// Construct the polygon.
var bermudaTriangle = new google.maps.Polygon({
  paths: triangleCoords,
  strokeColor: "#FF0000",
  strokeOpacity: 0.8,
  strokeWeight: 2,
  fillColor: "#FF0000",
  fillOpacity: 0.35
});
bermudaTriangle.setMap(map);

const geoJSON = {
  type: 'Polygon',
  coordinates: []
};

// convert to bermudaTriangle path to geojson
for (let point of bermudaTriangle.getPath().getArray()) {
  geoJSON.coordinates.push([point.lat(), point.lng()]);
}

const feature = turf.feature(geoJSON);

const bbox = turf.bbox(feature);

// ERROR: this one's showing Infinity values
console.table(bbox);
const grid = turf.squareGrid(bbox, 50, {
  units: "miles",
  mask: feature
});

map.data.addGeoJson(grid);

查看控制台,它显示了 bbox 的无穷大值,如代码中注释的那样。

我添加了代码链接 https://codepen.io/chan-dev/pen/yrdRoM

最佳答案

geoJSON 不是有效的 GeoJSON object for Polygon在提供的示例中,这就是 turf.bbox 返回无效结果的原因。多边形的 GeoJSON 可以通过 turf.polygon 构建,如下所示:

var triangleCoords = [
  { lat: 25.774, lng: -80.19 },
  { lat: 18.466, lng: -66.118 },
  { lat: 32.321, lng: -64.757 },
  { lat: 25.774, lng: -80.19 }
];

var data = triangleCoords.map(coord => {
  return [coord.lng, coord.lat];
});
var geojson = turf.polygon([data]);    

边界框计算如下:

const bbox = turf.bbox(geojson);

Modified CodePen

关于google-maps - 如何使用 turfjs 在多边形内正确添加方形网格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55942688/

相关文章:

polyline - 有没有办法从折线上的一点使用 Turf.js Below() ?

ios - Google Maps iOS SDK,获取用户的当前位置

google-maps - 在 Google map 向导中加载样式

javascript - 带有 D3.geo.path 的谷歌地图

android - 使用 Google Maps API 手动调整路线

javascript - Google InfoWindow 未在 for 循环内加载

javascript - 检查两个 GeoJSON 是否重叠

php - "XML Parsing Error: junk after document element"

javascript - 将多个标记添加到 Angular-google-maps

leaflet - 如何将十六进制应用到整个世界