我正在尝试通过草皮执行多边形分析中的点,但是它始终返回环未定义错误

问题描述 投票:0回答:1

因此,我正在构建一个 React 项目作为代码练习的一部分。我有一张 geojson 数据,其中定义了各种多边形。我的任务是获取一对用户坐标并检查该组坐标是否位于任何指定的多边形内。但是,一旦我提交坐标,它就会抛出以下错误:

Uncaught TypeError: ring is undefined
    inRing index.js:82
    booleanPointInPolygon index.js:54
    CheckCoordinate CheckCoordinate.jsx:24
    CheckCoordinate CheckCoordinate.jsx:23
    React 8
        commitHookEffectListMount
        commitPassiveMountOnFiber
        commitPassiveMountEffects_complete
        commitPassiveMountEffects_begin
        commitPassiveMountEffects
        flushPassiveEffectsImpl
        flushPassiveEffects
        commitRootImpl
    workLoop scheduler.development.js:266
    flushWork scheduler.development.js:239
    performWorkUntilDeadline scheduler.development.js:533

我只是想知道造成这种情况的原因。我最初认为这是由于动态获取 geojson 文件所致,我将其删除并用直接导入替换,如下面的代码块中所示。然而,这并没有改变行为。

import React, { useState, useEffect } from 'react';
import * as turf from '@turf/turf';
import yardZoneMap from './yard-zone-map.json'; // Adjust the path as necessary

function CheckCoordinate(props) {
  const unparsedString = props.inputCoord || '';
  const parsedValues = unparsedString.split(',').map(item => parseFloat(item));

  const [pointLocation, setPointLocation] = useState(null);
  const [isInside, setIsInside] = useState(false);

  useEffect(() => {
    if (parsedValues.length === 2) {
      setPointLocation(parsedValues);
    }
  }, [unparsedString]);

  useEffect(() => {
    if (pointLocation) {
      const point = turf.point(pointLocation); // Correctly define the point here
      let insideAnyPolygon = false;

      yardZoneMap.features.forEach(feature => {
        if (turf.booleanPointInPolygon(point, feature)) {
          insideAnyPolygon = true;
        }
      });

      setIsInside(insideAnyPolygon);
    }
  }, [pointLocation]);

  return (
    <div>
      <p>Point is inside polygon: {isInside ? 'Yes' : 'No'}</p>
    </div>
  );
}

export default CheckCoordinate;

我已经使用在线验证工具来验证我的geojson数据是否良好并且显示没有问题,所以我相当确定这不是数据格式问题,而是与我的处理方式有关它。

如有任何建议,我们将不胜感激!

reactjs geojson turfjs point-in-polygon
1个回答
0
投票

问题是由于 JSON 数据包含点要素而不仅仅是多边形。一旦我编辑程序以忽略这些功能,事情就开始顺利运行。

© www.soinside.com 2019 - 2024. All rights reserved.