【问题标题】:Python adding decimals to longitude valuesPython将小数添加到经度值
【发布时间】:2017-04-01 12:47:39
【问题描述】:

我有数千个 NAD83 纬度经度值,其中经度值以负数开头,例如 -747559718

这个特殊的坐标需要小数点在 4 之后才能在我正在使用的映射应用程序中正确使用。它应该是-74.7559718

有时经度值会是 -123092886,而小数点应该在 3 之后。它应该是 -123.092886

我正在通过 JSON 文件读取这些坐标,出于某种原因,它们没有小数点。我正在寻找一个纯 python 解决方案来在正确的位置插入小数。

数字为 9 或 10 位数字

我知道我可以做一些事情,一旦我在一个变量中得到我的经度值

 s = longitude
 s[:3] + '.' + s[3:]

【问题讨论】:

  • 如果不是 9 位的情况,你可以乘以 0.00001
  • 为什么-123.092886 有六位小数,而-74.02373 只有五位?
  • 如何区分 -3.000000 和 -30.00000?
  • @taylorswift 这就是在文件中给出坐标的方式。有时它有 5 或 6 位小数
  • 数字总是有 9 位,这很奇怪。我的意思是,低于 100 的坐标比 >= 100 的坐标具有更高的精度。你确定吗?此外,无法判断-123092886-123.092886 还是-12.3092886

标签: python decimal latitude-longitude


【解决方案1】:

我已经发现了我的问题:我所有的经纬度坐标都在同时代的美国,作为地理空间分析师,我知道 NAD83 投影中的任何经度值都在同时代的美国并以 1 位数字开头,它将在第 3 位之后有一个小数位。美国的其他经度值要么以 7,8 或 9 开头,而且这些值总是在第二个数字之后有一个小数。我不确定这个解决方案是否适用于世界其他地方,但它可以在这里完成

这是我的解决方案,其中 z 是包含经度值的变量:

if str(z)[1:2] == '1':
    longitude = str(z)[0:4]+'.'+str(z)[4::]
else:
    longitude = str(z)[0:3]+'.'+str(z)[3::]

更新

更好的答案:

longitude = z * 0.0000001

这也适用于纬度值

【讨论】:

  • 它看起来非常错误,我几乎可以保证这不是这些值的构建方式。
  • 为什么看起来不对?有效。 "latitudeE7" : 402212350, "longitudeE7" : -747559718 直接来自 json 文件
  • 看起来不对,因为没有开发人员会通过像这样的字符串函数运行它们来构建数字。因此,我确信您的第一个解决方案所采用的数字格式必然会破坏某些值。 您更新后的解决方案看起来更好,如“开发人员可以实际编写的东西”。它也更简单,开发人员倾向于使用满足要求的最简单方法,因此如果您的解决方案比您正在解决的问题复杂得多,那么您通常做错了。比较两个解决方案的复杂性和可读性;)
猜你喜欢
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-15
  • 1970-01-01
相关资源
最近更新 更多