本文整理汇总了TypeScript中@turf/meta.coordAll函数的典型用法代码示例。如果您正苦于以下问题:TypeScript coordAll函数的具体用法?TypeScript coordAll怎么用?TypeScript coordAll使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了coordAll函数的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1: booleanOverlap
/**
* Compares two geometries of the same dimension and returns true if their intersection set results in a geometry
* different from both but of the same dimension. It applies to Polygon/Polygon, LineString/LineString,
* Multipoint/Multipoint, MultiLineString/MultiLineString and MultiPolygon/MultiPolygon.
*
* @name booleanOverlap
* @param {Geometry|Feature<LineString|MultiLineString|Polygon|MultiPolygon>} feature1 input
* @param {Geometry|Feature<LineString|MultiLineString|Polygon|MultiPolygon>} feature2 input
* @returns {boolean} true/false
* @example
* var poly1 = turf.polygon([[[0,0],[0,5],[5,5],[5,0],[0,0]]]);
* var poly2 = turf.polygon([[[1,1],[1,6],[6,6],[6,1],[1,1]]]);
* var poly3 = turf.polygon([[[10,10],[10,15],[15,15],[15,10],[10,10]]]);
*
* turf.booleanOverlap(poly1, poly2)
* //=true
* turf.booleanOverlap(poly2, poly3)
* //=false
*/
export default function booleanOverlap(
feature1: Feature<any> | Geometry,
feature2: Feature<any> | Geometry,
): boolean {
const geom1 = getGeom(feature1);
const geom2 = getGeom(feature2);
const type1 = geom1.type;
const type2 = geom2.type;
if (type1 !== type2) throw new Error('features must be of the same type');
if (type1 === 'Point') throw new Error('Point geometry not supported');
// features must be not equal
const equality = new GeojsonEquality({precision: 6});
if (equality.compare(feature1, feature2)) return false;
let overlap = 0;
switch (type1) {
case 'MultiPoint':
const coords1 = coordAll(feature1);
const coords2 = coordAll(feature2);
coords1.forEach((coord1) => {
coords2.forEach((coord2) => {
if (coord1[0] === coord2[0] && coord1[1] === coord2[1]) overlap++;
});
});
break;
case 'LineString':
case 'MultiLineString':
segmentEach(feature1, (segment1) => {
segmentEach(feature2, (segment2) => {
if (lineOverlap(segment1, segment2).features.length) overlap++;
});
});
break;
case 'Polygon':
case 'MultiPolygon':
segmentEach(feature1, (segment1) => {
segmentEach(feature2, (segment2) => {
if (lineIntersect(segment1, segment2).features.length) overlap++;
});
});
break;
}
return overlap > 0;
}
示例2: booleanOverlap
/**
* Compares two geometries of the same dimension and returns true if their intersection set results in a geometry
* different from both but of the same dimension. It applies to Polygon/Polygon, LineString/LineString,
* Multipoint/Multipoint, MultiLineString/MultiLineString and MultiPolygon/MultiPolygon.
*
* @name booleanOverlap
* @param {Geometry|Feature<LineString|MultiLineString|Polygon|MultiPolygon>} feature1 input
* @param {Geometry|Feature<LineString|MultiLineString|Polygon|MultiPolygon>} feature2 input
* @returns {boolean} true/false
* @example
* var poly1 = turf.polygon([[[0,0],[0,5],[5,5],[5,0],[0,0]]]);
* var poly2 = turf.polygon([[[1,1],[1,6],[6,6],[6,1],[1,1]]]);
* var poly3 = turf.polygon([[[10,10],[10,15],[15,15],[15,10],[10,10]]]);
*
* turf.booleanOverlap(poly1, poly2)
* //=true
* turf.booleanOverlap(poly2, poly3)
* //=false
*/
function booleanOverlap(feature1: Feature<any> | Geometry, feature2: Feature<any> | Geometry): boolean {
// validation
if (!feature1) throw new Error('feature1 is required');
if (!feature2) throw new Error('feature2 is required');
var type1 = getType(feature1);
var type2 = getType(feature2);
if (type1 !== type2) throw new Error('features must be of the same type');
if (type1 === 'Point') throw new Error('Point geometry not supported');
// features must be not equal
var equality = new GeojsonEquality({precision: 6});
if (equality.compare(feature1, feature2)) return false;
var overlap = 0;
switch (type1) {
case 'MultiPoint':
var coords1 = coordAll(feature1);
var coords2 = coordAll(feature2);
coords1.forEach(function (coord1) {
coords2.forEach(function (coord2) {
if (coord1[0] === coord2[0] && coord1[1] === coord2[1]) overlap++;
});
});
break;
case 'LineString':
case 'MultiLineString':
segmentEach(feature1, function (segment1) {
segmentEach(feature2, function (segment2) {
if (lineOverlap(segment1, segment2).features.length) overlap++;
});
});
break;
case 'Polygon':
case 'MultiPolygon':
segmentEach(feature1, function (segment1) {
segmentEach(feature2, function (segment2) {
if (lineIntersect(segment1, segment2).features.length) overlap++;
});
});
break;
}
return overlap > 0;
}
示例3: clustersDbscan
/**
* Takes a set of {@link Point|points} and partition them into clusters according to {@link DBSCAN's|https://en.wikipedia.org/wiki/DBSCAN} data clustering algorithm.
*
* @name clustersDbscan
* @param {FeatureCollection<Point>} points to be clustered
* @param {number} maxDistance Maximum Distance between any point of the cluster to generate the clusters (kilometers only)
* @param {Object} [options={}] Optional parameters
* @param {string} [options.units="kilometers"] in which `maxDistance` is expressed, can be degrees, radians, miles, or kilometers
* @param {boolean} [options.mutate=false] Allows GeoJSON input to be mutated
* @param {number} [options.minPoints=3] Minimum number of points to generate a single cluster,
* points which do not meet this requirement will be classified as an 'edge' or 'noise'.
* @returns {FeatureCollection<Point>} Clustered Points with an additional two properties associated to each Feature:
* - {number} cluster - the associated clusterId
* - {string} dbscan - type of point it has been classified as ('core'|'edge'|'noise')
* @example
* // create random points with random z-values in their properties
* var points = turf.randomPoint(100, {bbox: [0, 30, 20, 50]});
* var maxDistance = 100;
* var clustered = turf.clustersDbscan(points, maxDistance);
*
* //addToMap
* var addToMap = [clustered];
*/
function clustersDbscan(points: FeatureCollection<Point>, maxDistance: number, options: {
units?: Units,
minPoints?: number,
mutate?: boolean
} = {}): FeatureCollection<Point, DbscanProps> {
// Input validation being handled by Typescript
// collectionOf(points, 'Point', 'points must consist of a FeatureCollection of only Points');
// if (maxDistance === null || maxDistance === undefined) throw new Error('maxDistance is required');
// if (!(Math.sign(maxDistance) > 0)) throw new Error('maxDistance is invalid');
// if (!(minPoints === undefined || minPoints === null || Math.sign(minPoints) > 0)) throw new Error('options.minPoints is invalid');
// Clone points to prevent any mutations
if (options.mutate !== true) points = clone(points);
// Defaults
options.minPoints = options.minPoints || 3;
// create clustered ids
var dbscan = new clustering.DBSCAN();
var clusteredIds = dbscan.run(coordAll(points), convertLength(maxDistance, options.units), options.minPoints, distance);
// Tag points to Clusters ID
var clusterId = -1;
clusteredIds.forEach(function (clusterIds) {
clusterId++;
// assign cluster ids to input points
clusterIds.forEach(function (idx) {
var clusterPoint = points.features[idx];
if (!clusterPoint.properties) clusterPoint.properties = {};
clusterPoint.properties.cluster = clusterId;
clusterPoint.properties.dbscan = 'core';
});
});
// handle noise points, if any
// edges points are tagged by DBSCAN as both 'noise' and 'cluster' as they can "reach" less than 'minPoints' number of points
dbscan.noise.forEach(function (noiseId) {
var noisePoint = points.features[noiseId];
if (!noisePoint.properties) noisePoint.properties = {};
if (noisePoint.properties.cluster) noisePoint.properties.dbscan = 'edge';
else noisePoint.properties.dbscan = 'noise';
});
return points;
}
示例4: clustersKmeans
/**
* Takes a set of {@link Point|points} and partition them into clusters using the k-mean .
* It uses the [k-means algorithm](https://en.wikipedia.org/wiki/K-means_clustering)
*
* @name clustersKmeans
* @param {FeatureCollection<Point>} points to be clustered
* @param {Object} [options={}] Optional parameters
* @param {number} [options.numberOfClusters=Math.sqrt(numberOfPoints/2)] numberOfClusters that will be generated
* @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)
* @returns {FeatureCollection<Point>} Clustered Points with an additional two properties associated to each Feature:
* - {number} cluster - the associated clusterId
* - {[number, number]} centroid - Centroid of the cluster [Longitude, Latitude]
* @example
* // create random points with random z-values in their properties
* var points = turf.randomPoint(100, {bbox: [0, 30, 20, 50]});
* var options = {numberOfClusters: 7};
* var clustered = turf.clustersKmeans(points, options);
*
* //addToMap
* var addToMap = [clustered];
*/
function clustersKmeans(points: FeatureCollection<Point>, options: {
numberOfClusters?: number,
mutate?: boolean
} = {}): FeatureCollection<Point, KmeansProps> {
// Default Params
var count = points.features.length;
options.numberOfClusters = options.numberOfClusters || Math.round(Math.sqrt(count / 2));
// numberOfClusters can't be greater than the number of points
// fallbacks to count
if (options.numberOfClusters > count) options.numberOfClusters = count;
// Clone points to prevent any mutations (enabled by default)
if (options.mutate !== true) points = clone(points);
// collect points coordinates
var data = coordAll(points);
// create seed to avoid skmeans to drift
var initialCentroids = data.slice(0, options.numberOfClusters);
// create skmeans clusters
var skmeansResult = skmeans(data, options.numberOfClusters, initialCentroids);
// store centroids {clusterId: [number, number]}
var centroids = {};
skmeansResult.centroids.forEach(function (coord, idx) {
centroids[idx] = coord;
});
// add associated cluster number
featureEach(points, function (point, index) {
var clusterId = skmeansResult.idxs[index];
point.properties.cluster = clusterId;
point.properties.centroid = centroids[clusterId];
});
return points;
}
示例5: coordReduce
return prev;
}, [], false);
let stringReduce: string = coordReduce(pointFeatureCollection, (prev, curr) => prev + curr.toString(), "", false);
propEach(pointFeatureCollection, prop => console.log(prop));
let propCombine: any = propReduce(pointFeatureCollection, (prev, curr) => {
for (let key in curr) {
prev[key] = curr[key];
}
return prev;
}, {});
featureEach(pointFeatureCollection, feature => console.log(feature));
coordAll(pointFeatureCollection);
turf.midpoint(pointFeature, pointFeature2);
turf.nearest(pointFeature, pointFeatureCollection);
turf.planepoint(pointFeature, triangleFeature);
turf.pointGrid(bbox, 20, "miles");
turf.pointGrid(bbox, 20);
turf.pointOnLine(lineFeature, pointFeature, "nauticalmiles");
turf.pointOnLine(lineFeature, pointFeature);
turf.pointOnSurface(polygonFeature);
turf.pointOnSurface(lineFeature);