过滤给定范围内的坐标

2024-06-29

我有数百个带有地理位置的 .out 文件,我将把它们批量导入到 SQLite 数据库中。但是,为了节省时间,我只会导入地理坐标在某些间隔内的线。

文件是这样的:

value;value;longitude;latitude;value;value
value;value;longitude;latitude;value;value

所以所有不在里面的东西several应从文件中删除纬度和经度间隔。

for f in *.out
do
for each line in $f:
    if not longitude >= longitude1 and longitude <= longitude2 
    or longitude >= longitude3 and longitude <= longitude4 or
    longitude>=longitude5 and longitude<=4:
         delete line

我已经包含了一个伪代码来展示一些工作,但是我如何在 Bash、awk、python 或任何最快的方法中做到这一点。

经度和纬度是这里的第三个和第四个值。我有 21 个纬度区间,f.ex 69.41 到 70.95(纬度)。

输入示例

63;543534;34,12;59,43;22,80;654,324;139543;
63;25725;5,11;59,43;22,80;36,00;1391212800;
61;5382189;3,66;60,93;68,00;158,00;1391212800;
43;25977000;10,72;67,51;170,70;168,00;1391212800;
61;2000;4,54;60,00;352,50;352,00;1391212800;
53;2504210;6,96;62,89;289,40;511,00;1391212800;
27;2594800;22,35;70,24;14,50;98,00;1391212800;
61;257900;5,13;60,13;321,10;195,00;1391212800;
31;2598;18,76;69,56;230,20;235,00;1391212800;
63;44000;5,84;59,01;226,90;227,00;1391212800;
61;0;4,96;60,57;125,50;129,00;1391212800;
57;2575000;4,88;61,77;113,00;276,00;1391212800;
34;258500;16,58;69,70;18,20;201,00;1391212800;
243;217000;7,18;65,25;283,00;145,00;1391212800;
243;21900;7,20;64,97;44,80;109,00;1391212800;
243;2190516;2,44;58,20;270,50;121,00;1391212800;
243;22000;1,94;58,39;305,20;130,00;1391212800;
243;231067000;1,87;58,09;12,00;122,00;1391212800;
243;311000150;3,54;61,13;166,30;332,00;1391212800;
243;257282000;7,21;64,97;267,10;112,00;1391212800;
243;232758000;1,77;61,43;333,30;337,00;1391212800;
27;231711000;22,42;70,27;99,20;99,00;1391212800;
68;231770000;10,06;58,74;5,40;10,00;1391212800;

纬度区间为 69.41 到 70.95 的所需输出:

27;2594800;22,35;70,24;14,50;98,00;1391212800;
31;2598;18,76;69,56;230,20;235,00;1391212800;
34;258500;16,58;69,70;18,20;201,00;1391212800;
27;231711000;22,42;70,27;99,20;99,00;1391212800;

请注意,最好将其写入新文件或覆盖现有文件。


如果您只有一个间隔要检查,请传递它们并进行比较:

awk -v lat=5 -v min_lat=69.41 -v max_lat=70.95 '
        BEGIN {FS=OFS=";"} 
        {sub(",",".",$lat)} 
        $lat>=min_lat && $lat<=max_lat' file

With lat我指出了纬度列,因为它在您的编辑中发生了变化。另请注意,这些字段有一个逗号来分隔小数,因此我用点替换它们。

Test

$ awk -v lat=5 -v min_lat=69.41 -v max_lat=70.95 'BEGIN {FS=OFS=";"} {sub(",",".",$lat)} $lat>=min_lat && $lat<=max_lat' file
27;1;2594800;22,35;70.24;14,50;98,00;1391212800;
31;3;2598;18,76;69.56;230,20;235,00;1391212800;
34;3;258500;16,58;69.70;18,20;201,00;1391212800;
27;1;231711000;22,42;70.27;99,20;99,00;1391212800;

如果您碰巧有许多最小值和最大值,请将它们作为字符串传递并对它们进行切片,以便您可以检查它们是否在数组中:

awk -v lat=4 -v min="69.41 70.39" -v max="70.95 70.86" '
       BEGIN {FS=OFS=";"; n=split(min,minlat," "); m=split(max,maxlat," ")} 
       {sub(",",".",$lat); 
        for (i=1;i<=n;i++)  {
             if ($lat>=minlat[i] && $lat<=maxlat[i])
               {print; next}
        }
       }' file

这会将间隔读取到数组中minlat[] and maxlat[]然后将纬度与所有对进行比较(minlat[1], maxlat[1]), (minlat[2], maxlat[2]), ...。如果匹配,它将打印该记录并跳到下一条,以防止打印多次。

Test

$ awk -v lat=4 -v min="69.41 70.39" -v max="70.95 70.86" 'BEGIN {FS=OFS=";"; n=split(min,minlat," "); m=split(max,maxlat," ")} {sub(",",".",$lat); for (i=1;i<=n;i++) {if ($lat>=minlat[i] && $lat<=maxlat[i]) {print; next}}}' file
27;2594800;22,35;70.24;14,50;98,00;1391212800;
31;2598;18,76;69.56;230,20;235,00;1391212800;
34;258500;16,58;69.70;18,20;201,00;1391212800;
27;231711000;22,42;70.27;99,20;99,00;1391212800;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

过滤给定范围内的坐标 的相关文章

随机推荐

  • 如何仅使用 rustc 而不使用 Cargo 链接动态 Rust 库?

    My main rs好像 link name lib extern C fn hello fn main unsafe hello And lib rs no mangle pub fn hello println Hello World
  • 我可以编写一个使用自动装配 Spring bean 的 Kotlin 扩展函数吗?

    我正在尝试创建一个扩展函数 其实现使用 Spring bean 通过在包的顶层定义扩展函数似乎不可能做到这一点 我试过这个 Component class Converter companion object Autowired latei
  • 识别包含本机方法实现的库文件/源

    如何识别包含本机方法实现的库文件 Ex public native String intern 我在哪里可以找到实施 source code of String intern 方法 找到了答案String intern 与快速谷歌搜索 ht
  • 测试从 ComboBox 派生的自定义控件

    我创建了一个从 ComboBox 派生的控件 并希望对其行为进行单元测试 但是 它在我的单元测试中的行为似乎与实际应用程序中的行为不同 在实际应用程序中 Combobox DataSource 属性和 Items 同步 换句话说 当我更改
  • Gradle 警告:不推荐使用variant.getOutputFile() 和variant.setOutputFile()

    我在 Android 应用程序项目中使用以下简化配置 android compileSdkVersion 20 buildToolsVersion 20 0 0 defaultConfig minSdkVersion 8 targetSdk
  • 为什么CasperJS表单提交不重定向到下一页?

    这是我的第一次 casper 测试 所以我仍在基础知识上挣扎 我想在登录表单上填写用户名和密码 然后提交 然后确认是否在页面上呈现 注销 链接next页面 确认用户已登录 但据我所知 当then被调用 url还是一样 看起来没有发生任何帖子
  • 防病毒程序如何检测病毒? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 防病毒程序如何检测某物是否是病毒或木马 我来自土耳其 请尽可能保持简单的英语 谢谢 查找病毒有三种基本方法 您可以扫描文件以查看其中是否包
  • JSF 多个视图限制

    我创建了一个 Web 应用程序 可以在主页上的 iFrame 内打开页面 每个 iFrame 都可以通过页面上的选项卡查看 并使用 JSF2 2 和 Mojarra 视图状态 bean 来填充页面 当我打开 10 个选项卡以下的内容时 效果
  • 识别文本中的多个类别和相关情感

    如果您有一个文本语料库 如何识别所有类别 来自预定义类别列表 以及与之相关的情绪 正面 负面写作 我将在 Python 中执行此操作 但现阶段我不一定要寻找特定于语言的解决方案 让我们用一个例子来看看这个问题 试图澄清我的问题 如果我有一整
  • Linux C++ 调试器

    我正在寻找完美的 Linux C 调试器 我不期望成功 但搜索应该提供丰富的信息 我是一个非常有能力的 gdb 用户 但 STL 和 Boost 很容易压垮我的调试技能 并不是说我无法深入了解数据结构的内部结构 而是它需要很长时间 我通常会
  • bash shell 嵌套 for 循环

    我想编写一个必须在 bash shell 提示符下工作的嵌套 for 循环 在单行命令中嵌套 for 循环 例如 for i in a b do echo i done a b 在上面的例子中 for循环是在单行命令中执行的 像这样 我在
  • 将 gtk.DrawingArea 保存到文件

    我想使用 PIL 将 gtk DrawingArea 对象内容保存到 jpeg 文件 我特别想添加这个脚本 http pygstdocs berlios de pygst tutorial webcam viewer html制作照片的可能
  • 如何在Java中验证字符串是否是有效的URL(包括深层链接)[重复]

    这个问题在这里已经有答案了 如何在 Java 中验证字符串是否是有效的 URL 包括深层链接 对于以下测试用例 该方法应返回 true http www example com gizmos https www example com gi
  • Google Place API 使用限制和计费

    我开发了一款应用程序 其中使用了 Google Place API 这就是地方医生所说的关于限制的内容 Google Places API 具有以下查询限制 拥有 API 密钥的用户每 24 小时允许 1 000 个请求 通过 API 控制
  • 有没有办法在 VS Code 中自定义 JS 中导入的颜色?

    我想在之后改变这个词的颜色import在 JS 中 在 VS Code 中 我附上了我的意思的屏幕截图 截屏 我指的是红色下划线的内容 我在中没有找到有效的条目文本配合规则 https macromates com manual en la
  • ASP.NET 中的 thread.sleep

    我正在为我的网站模拟彗星实时馈送协议 因此在我的控制器中我添加 while nothing new before timeout Thread Sleep 1000 但我注意到添加此功能后整个网站变慢了 调试后我得出结论 当我打电话时Thr
  • 错误1316。指定的帐户已存在。 Visual Studio 2017:无法安装包。返回代码 1603

    需要安装 Visual Studio for school 但遇到此错误和另一个错误 Visual Studio fails to install Microsoft Net CoreUWP version 1 1 32 and Win10
  • VBA 6:正则表达式无法识别复杂的字符串

    我有这个字符串 1X214X942 0SX 其中每个 X 代表一个 不间断空格 准确地说是空白 ASCII 代码为 160 S 代表一个空格字符 我试图用这个正则表达式来识别它 d 1 3 s d 3 s d 3 d 1 3 d 1 3 d
  • 持续运行的 C# 代码 - 服务还是单独的线程?

    我有一个 NET 4 Web 应用程序 它有 3 个关联的独立项目 DAL BAL 和 UI 我正在使用实体框架进行数据库交互 我有代码循环遍历一堆数据库数据 根据找到的内容调用方法 然后更新数据库 我希望这段代码一直运行 同时 我希望用户
  • 过滤给定范围内的坐标

    我有数百个带有地理位置的 out 文件 我将把它们批量导入到 SQLite 数据库中 但是 为了节省时间 我只会导入地理坐标在某些间隔内的线 文件是这样的 value value longitude latitude value value