Python добавляет десятичные знаки к значениям долготы

У меня есть тысячи значений широты и долготы NAD83, где значения долготы начинаются с отрицательного значения, например -747559718.

эта конкретная координата десятичной дроби должна быть после 4, чтобы ее можно было правильно использовать в картографическом приложении, которое я использую. должно быть -74.7559718

Бывают случаи, когда значение долготы будет -123092886, где десятичное число должно быть после 3. оно должно быть -123,092886.

Я читаю эти координаты через файл JSON, по какой-то причине они идут без десятичных знаков. Я ищу чистое решение для Python, чтобы вставить десятичную дробь в нужное место.

Числа будут состоять из 9 или 10 цифр.

Я знаю, что могу сделать что-то вроде того, как у меня есть значение долготы в переменной

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

person ziggy    schedule 17.11.2016    source источник
comment
если бы не 9-значный регистр, вы могли бы просто умножить на 0,00001   -  person taylor swift    schedule 17.11.2016
comment
и почему -123.092886 имеет шесть знаков после запятой, а -74.02373 только пять?   -  person taylor swift    schedule 17.11.2016
comment
Как отличить -3.000000 от -30.00000?   -  person spectras    schedule 17.11.2016
comment
@taylorswift так координаты указаны в файле. иногда он имеет 5 или 6 знаков после запятой   -  person ziggy    schedule 17.11.2016
comment
гарантируется, что координаты никогда не будут содержать 8 цифр, всегда 7 или 9?   -  person taylor swift    schedule 17.11.2016
comment
@taylorswift позвольте мне еще раз проверить длину   -  person ziggy    schedule 17.11.2016
comment
@taylorswift число всегда будет 9-значным. я обновляю вопрос, первая координата, которую я ввел, я пропустил последние 2 цифры, я не думал, что это будет иметь значение   -  person ziggy    schedule 17.11.2016
comment
Очень странно, что числа всегда будут состоять из 9 цифр. Я имею в виду, что координаты ниже 100 имеют большую точность, чем координаты ›= 100. Вы уверены в этом? Кроме того, невозможно определить, является ли -123092886 -123.092886 или -12.3092886.   -  person lucasnadalutti    schedule 17.11.2016
comment
их тысячи, большинство из них 9, но когда я просматриваю, я вижу несколько с 10 цифрами.   -  person ziggy    schedule 17.11.2016
comment
@ziggy Может быть, те, у кого 10 цифр, - это те, которые ›= 100, что означает, что все значения имеют 7 знаков после запятой? Если все эти значения не имеют фиксированного числа знаков после запятой, я не думаю, что это вообще детерминированная проблема...   -  person lucasnadalutti    schedule 17.11.2016
comment
@lucasnadalutti, возможно, я понял это, я отправлю ответ, если мое решение сработает   -  person ziggy    schedule 17.11.2016
comment
Если у кого-то 9, а у кого-то 10, то может сработать int(s) / 1e7 или, возможно, s[:-7] + '.' + s[-7:]   -  person Robᵩ    schedule 17.11.2016


Ответы (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

это также работает для значений широты

person ziggy    schedule 17.11.2016
comment
Это выглядит настолько неправильно, что я почти гарантирую, что эти значения были построены не так. - person spectras; 18.11.2016
comment
почему это выглядит неправильно? это сработало. latitudeE7: 402212350, longitudeE7: -747559718 прямо из файла json - person ziggy; 18.11.2016
comment
Это выглядело неправильно, потому что ни один разработчик не станет строить числа, прогоняя их через такие строковые функции. Таким образом, я уверен, что числовой формат, принятый в вашем первом решении, должен был нарушить некоторые значения. Ваше обновленное решение выглядит лучше, как в то, что действительно мог бы написать разработчик. Это также намного проще, и разработчики стремятся к простейшему подходу, который соответствует требованиям, поэтому, если ваше решение значительно сложнее, чем проблема, которую вы решаете, вы обычно делаете это неправильно. Сравните сложность и читабельность ваших двух решений;) - person spectras; 18.11.2016