PDF 文档的屏幕上的几何测量工具

PDF 文档的屏幕上的几何测量工具

不确定是否存在满足这种特定需求的东西,但我还是会尝试。我有一些 PDF 地图,我想知道是否有任何 PDF 查看器或类似的软件可以让我测量距离并使用指南针确定方向。

我唯一能想到的办法就是将地图导入图像编辑软件,然后使用与比例相匹配的线来测量距离,但这非常不切实际,而且可能会耗费时间,而且我仍然无法测量航向。

编辑:不幸的是screenruler它们kruler太基础了,因为它们缺少量角器,以及进行精确旋转的能力。

那有没有可以让我叠加、移动和旋转我选择的透明图像的东西呢?这样我就可以创建或找到自己的测量工具图像。

EDIT2:在平板电脑上运行 Ubuntu 18.10

答案1

获取屏幕上的几何信息

虽然下面的解决方案应该可以快速为您提供您所要求的所有信息,但不确定信息呈现的方式是否能完全满足您的描述。

这是这个答案,现在扩展了一些额外的计算,现在包括与假想水平线的角度,以及绘制的线的长度(以 px 为单位):

在此处输入图片描述

剧本

#!/usr/bin/env python3
import subprocess
import os
import math

home = os.environ["HOME"]
area = home+"/"+".measure_area.txt"

def get_pos():
    pos_data = subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8")
    return [m[2:] for m in pos_data.split()[:2]]

def confirm():
    get = subprocess.check_output(["xrandr", "--verbose"]).decode("utf-8").split()
    for s in [get[i-1] for i in range(len(get)) if get[i] == "connected"]:
        br_data = float(get[get.index("Brightness:")+1])
        brightness = lambda br: ["xrandr", "--output", s, "--brightness", br]
        flash = ["sleep", "0.1"]
        for cmd in [brightness(str(br_data-0.1)), flash, brightness(str(br_data))]:
            subprocess.call(cmd)

if not os.path.exists(area):
    with open(area, "wt") as measure:
        measure.write(str(get_pos()))
    confirm()
else:
    second = get_pos()
    with open(area) as first_m:
        try:
            first = eval(first_m.read())
            w = int(math.fabs(int(second[0]) - int(first[0])))
            h = int(math.fabs(int(second[1]) - int(first[1])))
            l = str(round(math.sqrt(pow(w, 2) + pow(h, 2))))
            arc = math.degrees(math.atan(w/h))
            angle = str(round(90-arc))
            command = [
                'zenity', '--info', '--title', 'Area Size', '--width', '200',
                '--text', "rectangle: " + str(w) + 'px x ' + str(h) + "px"
                "\nline length: " + l + "px\nangle: " + str(angle) + "°",
            ]
            #---
            confirm()
        except SyntaxError:
            text = "Please try again, there was an error in the data"
            command = ['zenity', '--info', '--title', 'Please try again', '--text', text]
        subprocess.Popen(command)
    os.remove(area)

怎么运行的

该脚本计算鼠标指针两个位置之间的假想水平线的角度、长度和面积大小。

其工作原理如下:

  1. 将鼠标指针放在第一个位置(不单击)
  2. 按下您选择的组合键(见下文)
  3. 将鼠标放在第二个位置(同样不单击)
  4. 再次按下组合键。Zenity 窗口将显示如上图所示的结果。

如何设置

  1. 该脚本使用xdotool

    sudo apt-get install xdotool
    
  2. 将下面的脚本复制到一个空文件中,并将其保存为~/bin(您可能需要创建目录)measure_area(无扩展名)并使其可执行

  3. 添加您选择的组合键来运行脚本:选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。单击“+”并添加命令:

    measure_area
    

笔记

  • 您必须先注销/登录
  • 你把谁当第一/第二并不重要;剧本衡量绝对值。

答案2

假设您拥有的 PDF 地图是地理空间 PDF,您可以使用 Adob​​e Acrobat 和内置分析工具,也可以使用手机或平板电脑上的 Avenza Maps 移动应用程序。

相关内容