0

我正在通过“h3.geoToH3(lng, lat, res)”生成一组十六进制 ID。之后,我通过“let polygons = geojson2h3.h3SetToFeatureCollection(hexIds)”创建一个 FeatureCollection 当我点击地图上的一个六边形时,我只想要启动的六边形内的相关六边形的 ID。我怎样才能以高效的方式做到这一点?

getHexIds = (res) => {
        let hexIds = this.props.stations.features.map(element => {
            const [lng, lat] = element.geometry.coordinates;
            const hexId = h3.geoToH3(lng, lat, res);
            return hexId;
        })

        let polygons = geojson2h3.h3SetToFeatureCollection(hexIds);

        this.setState({
            polygons: polygons
        }, () => {
            this.geoJsonLayer.current.leafletElement.clearLayers().addData(this.state.polygons);
        })

        // console.info(this.state.polygons, res);
    }
onEachFeature = (feature, layer) => {
        layer.on('click', (e) => {
          // show the relevant hexids
        }) 
    }
4

1 回答 1

0

如果我正确理解了这个问题,这可能与您的地图库(可能是传单)有关,而不是 H3,但这里有一些通用方法:

  • 如果您想在用户单击的位置获取 H3 索引,请找到纬度/经度(可能是您的地图库在单击事件中提供的内容),然后h3.geoToH3(lat, long)再次运行它。这非常快,并且重新计算它比存储和查找要容易得多。

  • 如果要获取与点击点关联的一H3 索引(即您有多个特征,每个特征由多个 H3 索引组成),那么您通常需要构建一个反向索引,如{[h3Index]: h3Set}. 然后你可以使用h3.geoToH3在点击点找到索引,并在你的反向索引中查找以找到集合。

  • 如果您的地图在点击时没有提供纬度/经度,您可以使用viewport-mercator-project之类的库从点击的 x/y 屏幕坐标中找到纬度/经度(可在 DOM 事件中使用)。

于 2019-08-20T15:29:59.693 回答