Как правильно добавить квадратную сетку внутри многоугольника, используя turfjs? - PullRequest
1 голос
/ 02 мая 2019

Так что я сейчас играю с 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);

и, глядя на консоль, он показывает значения Infinity для bbox, как прокомментировал код.

Я добавил ссылку для кода https://codepen.io/chan-dev/pen/yrdRoM

1 Ответ

0 голосов
/ 02 мая 2019

geoJSON не является допустимым объектом GeoJSON для 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);

Изменено CodePen

...