微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在多个线程中过滤 PBFOsmStreamSource

如何解决在多个线程中过滤 PBFOsmStreamSource

为了读取 OpenStreetMap 数据,我使用了一个名为“OsmSharp”的库,没有太多的文档,但足以让我四处走动。

目前我被卡住了,想知道是否可以让两个线程从 PBFOsmStreamSource 读取数据,然后同时对其进行过滤。

这是一种不好的做法吗?它甚至有什么作用吗?

using OsmSharp;
using OsmSharp.Streams;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

namespace ConsoleApp
{
    public class SomeClass
    {
        public async Task GetSomeData()
        {
            using var fileStream = File.OpenRead("some-data.osm.pbf");
            var source = new PBFOsmStreamSource(fileStream);

            var filterFirst = Task.Run(() => FilterFirst(source));
            var filterSecond = Task.Run(() => FilterSecond(source));

            // Do some other stuff

            var resultFirst = await filterFirst;
            var resultSecond = await filterFirst;

            // Do stuff with filtered data
        }

        private IEnumerable<OsmGeo> FilterSecond(PBFOsmStreamSource source)
        {
            var filtered = from osmGeo in source
                           where osmGeo.Type == OsmGeoType.Way
                           && osmGeo.Tags != null
                           // Some more filtering
                           select osmGeo;

            return filtered;
        }

        private IEnumerable<OsmGeo> FilterFirst(PBFOsmStreamSource source)
        {
            var filtered = from osmGeo in source
                           where osmGeo.Type == OsmGeoType.Node
                               && osmGeo.Tags != null
                               // Some more filtering
                           select osmGeo;

            return filtered;
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。