Converted DMS (degrees, minutes, seconds) to DD (decimal degrees)

This commit is contained in:
TheDevKiller 2018-11-11 00:32:33 +01:00
parent 5d867ac85e
commit 6d215e2305

View File

@ -10,6 +10,10 @@ import requests
import re
# Variables
api = "https://master.apis.dev.openstreetmap.org/" # Testing, it should be replaced by https://api.openstreetmap.org/ when the program is finished
def runfetch(url):
session=requests.Session()
req1=session.get(url) # Get the source code
@ -23,30 +27,52 @@ def runfetch(url):
#dicformat:{id,commune,site,departement,zone,ministere,aerozone}
return diclist
def dms2dd(dms):
coordslst = re.search("(\d{1,3})° (\d{2})' (\d{2},?\d{0,2})(?:\"|”|\'\')", dms).groups()
dd = float(coordslst[0].replace(",", ".")) + float(coordslst[1].replace(",", "."))/60 + float(coordslst[2].replace(",", "."))/3600
return dd
if __name__ == '__main__':
diclist=runfetch('https://www.legifrance.gouv.fr/eli/arrete/2018/10/12/PRMD1824595A/jo/texte') # Fetch all the data from a french article
url='https://www.legifrance.gouv.fr/eli/arrete/2018/10/12/PRMD1824595A/jo/texte'
diclist = runfetch('https://www.legifrance.gouv.fr/eli/arrete/2018/10/12/PRMD1824595A/jo/texte') # Fetch all the data from a french article
url = 'https://www.legifrance.gouv.fr/eli/arrete/2018/10/12/PRMD1824595A/jo/texte'
for index, zone in enumerate(diclist):
for element in zone:
diclist[index][element] = re.sub("<br.{0,2}>", "\n", diclist[index][element]) # Replace <br>, <br /> and <br/> by \n
# Make a the area
for area in diclist:
# Case insensitive
area["zone"] = area["zone"].lower()
# Multiple polygons
if "polygones" in area["zone"]:
lst = []
tmp = re.compile("zone . : .*").split(area["zone"]) # List of polygons
tmp = re.compile(".*zone.*").split(area["zone"]) # List of polygons
del tmp[0]
for polygon in tmp:
lst.append(re.findall(".{0,35} ?:? ?.? ?: ?(\d{1,3}° \d{2}' \d{2},?\d{0,2}(?:\"|”) .) ?\/ ?(\d{1,3}° \d{2}' \d{2},?\d{0,2}(?:\"|”) .)", area["zone"]))
area["zone"] = lst
lst.append(re.findall(".{0,35} ?:? ?.? ?: ?(\d{1,3}° \d{2}' \d{2},?\d{0,2}(?:\"|”) .) ?\/ ?(\d{1,3}° \d{2}' \d{2},?\d{0,2}(?:\"|”) .)", polygon))
area["zone"] = []
for index, polygon in enumerate(lst):
area["zone"].append([])
for index2, coords in enumerate(polygon):
area["zone"][index].append([])
for index3, point in enumerate(coords):
area["zone"][index][index2].append(dms2dd(point))
# area["zone"][index][index2][index3] = dms2dd(point)
del lst
del tmp
# Polygons
elif "polygone" in area["zone"]:
lst = []
lst.append(re.findall(".{0,35} ?:? ?.? ?: ?(\d{1,3}° \d{2}' \d{2},?\d{0,2}(?:\"|”|\'\') ?.) ?\/ ?(\d{1,3}° \d{2}' \d{2},?\d{0,2}(?:\"|”|\'\') ?.)", area["zone"]))
area["zone"] = lst
area["zone"] = []
for index, polygon in enumerate(lst):
area["zone"].append([])
for index2, coords in enumerate(polygon):
area["zone"][index].append([])
for index3, point in enumerate(coords):
area["zone"][index][index2].append([])
area["zone"][index][index2][index3] = dms2dd(point)
del lst
# Circles
elif "cercle" in area["zone"]:
@ -56,7 +82,9 @@ if __name__ == '__main__':
del lst
# Atolls
elif area["zone"].strip() == "atolls et eaux territoriales incluses":
area["zone"] = [("cercle", "35KM", "138° 54' 8,01\"", "21° 49' 44,64\""), ("cercle", "27KM", "138° 44' 33.01\"", "22° 14' 7.38\"")]
area["zone"] = [("cercle", "35KM", "138.9022", "21.82917"), ("cercle", "27KM", "138.7425", "22.23528A")]
# Print the dict (keep this code in the end of the file)
print("===== Dict =====")