GVZ Hydranten Finder App to GPX File Converter
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

79 lines
2.4 KiB

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.description = f"""
name=Hydrant #: {hydrantennummer}
description=Abgänge: {abgaenge}
Installationsjahr: {installationsjahr}
Strasse: {strasse}
"""
gpx_wps.symbol = "Hydrant"
gpx.waypoints.append(gpx_wps)
abgaenge
print(gpx.to_xml())