79 lines
2.4 KiB
Python
79 lines
2.4 KiB
Python
|
import sqlite3
|
||
|
import gpxpy
|
||
|
import gpxpy.gpx
|
||
|
import sys
|
||
|
|
||
|
# Source: https://github.com/libracore/erpnextswiss/blob/master/erpnextswiss/erpnextswiss/swisstopo.py
|
||
|
def LV95ToWGSLatitude(east, north):
|
||
|
# Convert the projection coordinates E (easting) and N (northing) in MN95
|
||
|
# into the civilian system (Bern = 0 / 0) and express in the unit 1000 km.
|
||
|
y_aux = (east - 2600000) / 1000000
|
||
|
x_aux = (north - 1200000) / 1000000
|
||
|
|
||
|
# Process latitude calculation.
|
||
|
lat = (
|
||
|
(16.9023892 + (3.238272 * x_aux))
|
||
|
+ -(0.270978 * pow(y_aux, 2))
|
||
|
+ -(0.002528 * pow(x_aux, 2))
|
||
|
+ -(0.0447 * pow(y_aux, 2) * x_aux)
|
||
|
+ -(0.0140 * pow(x_aux, 3))
|
||
|
)
|
||
|
|
||
|
# Unit 10000" to 1" and converts seconds to degrees notation.
|
||
|
lat = lat * 100 / 36
|
||
|
return lat
|
||
|
|
||
|
|
||
|
# Source: https://github.com/libracore/erpnextswiss/blob/master/erpnextswiss/erpnextswiss/swisstopo.py
|
||
|
def LV95ToWGSLongitude(east, north):
|
||
|
# Convert the projection coordinates E (easting) and N (northing) in MN95
|
||
|
# into the civilian system (Bern = 0 / 0) and express in the unit 1000 km.
|
||
|
y_aux = (east - 2600000) / 1000000
|
||
|
x_aux = (north - 1200000) / 1000000
|
||
|
|
||
|
# Process longitude calculation.
|
||
|
lng = (
|
||
|
(2.6779094 + (4.728982 * y_aux))
|
||
|
+ +(0.791484 * y_aux * x_aux)
|
||
|
+ +(0.1306 * y_aux * pow(x_aux, 2))
|
||
|
+ -(0.0436 * pow(y_aux, 3))
|
||
|
)
|
||
|
|
||
|
# Unit 10000" to 1" and converts seconds to degrees notation.
|
||
|
lng = lng * 100 / 36
|
||
|
return lng
|
||
|
|
||
|
|
||
|
db = sqlite3.connect("hydrants_live.sqlite")
|
||
|
|
||
|
gpx = gpxpy.gpx.GPX()
|
||
|
gpx.name = "Hydranten"
|
||
|
gpx.description = "Hydranten in Urdorf"
|
||
|
|
||
|
cur = db.cursor()
|
||
|
cur.execute(
|
||
|
f"SELECT easting, northing, abgaenge, installationsjahr, strasse, hydrantennummer FROM hydrants WHERE plz = {sys.argv[1]} AND hydrantennummer != 659"
|
||
|
)
|
||
|
rows = cur.fetchall()
|
||
|
for row in rows:
|
||
|
easting = row[0]
|
||
|
northing = row[1]
|
||
|
abgaenge = row[2]
|
||
|
installationsjahr = row[3]
|
||
|
strasse = row[4]
|
||
|
hydrantennummer = row[5]
|
||
|
gpx_wps = gpxpy.gpx.GPXWaypoint()
|
||
|
gpx_wps.longitude = LV95ToWGSLongitude(row[0], row[1])
|
||
|
gpx_wps.latitude = LV95ToWGSLatitude(row[0], row[1])
|
||
|
gpx_wps.name = f"Hydrant #: {hydrantennummer}"
|
||
|
gpx_wps.comment = f"""
|
||
|
Abgänge: {abgaenge}\n
|
||
|
Installationsjahr: {installationsjahr}\n
|
||
|
Strasse: {strasse}
|
||
|
"""
|
||
|
gpx_wps.symbol = "Hydrant"
|
||
|
gpx.waypoints.append(gpx_wps)
|
||
|
abgaenge
|
||
|
|
||
|
print(gpx.to_xml())
|