Hoppa till innehållet

Wikipedia:Projekt Fredrika/kommun.py

Från Wikipedia
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import codecs
import csv
import sys
from math import sqrt, sin, cos, asin, radians

def distance(lat1, lon1, lat2, lon2):
    """in km using haversine formula"""
    # convert decimal degrees to radians
    lat1, lon1, lat2, lon2 = map(radians, [lat1, lon1, lat2, lon2])

    # haversine formula
    d_lat = lat2 - lat1
    d_lon = lon2 - lon1
    a = sin(d_lat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(d_lon / 2) ** 2
    c = 2 * asin(sqrt(a))

    # 6367 km is the radius of the Earth
    km = 6367 * c
    return km


article_file = "Oar_i_Pargas.csv"
reference_file = "stodpunkter.csv"
output_file = "svar_kommuner.csv"

with codecs.open(article_file, 'r') as f:
    articles = csv.reader(f)
    article_list = list(articles)

with codecs.open(reference_file, 'r') as f:
    references = csv.reader(f)
    reference_list = list(references)

output_list = []
for row in article_list:
    article, a_lat, a_lon, a_name, a_area, a_length, a_direction, a_kommun, a_district = row
    a_lat = float(a_lat)
    a_lon = float(a_lon)
    closest_dist = 99999
    closest_kommun = ""
    closest_n1 = ""
    for ref in reference_list:
        n1, n2, r_lat, r_lon, kommun = ref
        r_lat = float(r_lat)
        r_lon = float(r_lon)
        dist = distance(a_lat, a_lon, r_lat, r_lon)
        if dist < closest_dist:
            closest_dist = dist
            closest_kommun = kommun
            closest_n1 = n1
    no_parenthesis = article.split("(")[0].strip()
    dist_fmt = "%0.1f" % closest_dist
    new_name = ""
    new_name2 = ""
    if article != no_parenthesis:
        new_name = no_parenthesis + ", " + closest_kommun
        new_name2 = no_parenthesis + " (ö nära " + closest_n1 + " i " + closest_kommun + ")"
    output_list.append([article, a_lat, a_lon, closest_kommun, a_area, a_length, a_name, closest_n1, dist_fmt, new_name, new_name2])

with codecs.open(output_file, 'w') as rf:
    wr = csv.writer(rf, dialect='excel')
    wr.writerows(output_list)

print("Wrote %s rows into %s" % (len(output_list), output_file))