Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.98 KB | None | 0 0
  1. import re
  2. class Geohash36:
  3. def __init__(self, code: str, alfabet="23456789bBCdDFgGhHjJKlLMnNPqQrRtTVWX"):
  4. self.alfabet = alfabet
  5. # alfabet controle
  6. if not re.match("^[A-Za-z0-9]*$", self.alfabet):
  7. raise AssertionError("ongeldig alfabet")
  8. if not isinstance(alfabet, str) or len(alfabet) != 36 or len(alfabet) != len(set(alfabet)):
  9. raise AssertionError("ongeldig alfabet")
  10. #code controle
  11. if code[-2] == "-":
  12. self.code = code[:-2]
  13. self.controle_getal = code[-1]
  14. else:
  15. self.code = code
  16. self.controle_getal = "abcdefghijklmnopqrstuvwxyz"[self.get_calculate_controlegetal()]
  17. for letter in self.code:
  18. if not alfabet.__contains__(letter):
  19. raise AssertionError("ongeldige code")
  20. if self.controle_getal != None:
  21. letter_van_alfabet = "abcdefghijklmnopqrstuvwxyz".find(self.controle_getal)
  22. if self.get_calculate_controlegetal() != letter_van_alfabet:
  23. raise AssertionError("ongeldige code")
  24.  
  25. def get_calculate_controlegetal(self):
  26. totale_som = 0
  27. for i, letter in enumerate(self.code):
  28. index_alfa = self.alfabet.find(letter)
  29. totale_som += index_alfa * (len(self.code) - i)
  30. return totale_som % 26
  31.  
  32. def __repr__(self):
  33. if self.alfabet == "23456789bBCdDFgGhHjJKlLMnNPqQrRtTVWX":
  34. return f"Geohash36('{self.code}-{self.controle_getal}')"
  35. return f"Geohash36('{self.code}-{self.controle_getal}', alfabet='{self.alfabet}')"
  36.  
  37. def __str__(self):
  38. return f"{self.code}-{self.controle_getal}"
  39.  
  40. def checksum(self):
  41. return self.controle_getal
  42.  
  43. def positie(self, t: str):
  44. if self.alfabet.__contains__(t):
  45. t_id = self.alfabet.find(t)
  46. rij = 6-(t_id//6)-1
  47. kolom = t_id % 6
  48. return (rij,kolom)
  49. else:
  50. raise AssertionError("ongeldig teken")
  51.  
  52. def lengtegraad(self):
  53. l = -180
  54. u = 180
  55. for letter in self.code:
  56. k = self.positie(letter).__getitem__(1)
  57. new_l = l + k * ((u - l)/6)
  58. new_u = l + (k + 1) * ((u - l)/6)
  59. l = new_l
  60. u = new_u
  61. return (l,u)
  62.  
  63.  
  64. def breedtegraad(self):
  65. l = -90
  66. u = 90
  67. for letter in self.code:
  68. r = self.positie(letter).__getitem__(0)
  69. new_l = l + r * ((u - l)/6)
  70. new_u = l + (r + 1) * ((u - l)/6)
  71. l = new_l
  72. u = new_u
  73. return (l,u)
  74.  
  75. def coordinaat(self):
  76. lengtegraad = self.lengtegraad()
  77. lengte = (lengtegraad.__getitem__(1) - lengtegraad.__getitem__(0))/2+lengtegraad.__getitem__(0)
  78. breedtegraad = self.breedtegraad()
  79. breedte = (breedtegraad.__getitem__(1) - breedtegraad.__getitem__(0))/2+breedtegraad.__getitem__(0)
  80. return (lengte,breedte)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement