如何使用来自4位邮政编码的坐标来计算2位邮政编码的质心

时间:2019-04-17 09:29:03

标签: python

我在txt文件中有以下数据:

BE  1060    Bruxelles Saint-Gilles  Bruxelles-Capitale  BRU Bruxelles   BRU         50.8167 4.3333  4
BE  1060    Bruxelles   Bruxelles-Capitale  BRU Bruxelles   BRU         50.8466 4.3528  4
BE  1070    Bruxelles Anderlecht    Bruxelles-Capitale  BRU Bruxelles   BRU         50.8333 4.3 4
BE  1070    Bruxelles   Bruxelles-Capitale  BRU Bruxelles   BRU         50.8466 4.3528  4
BE  1080    Bruxelles Molenbeek-Saint-Jean  Bruxelles-Capitale  BRU Bruxelles   BRU         50.85   4.3167  4
BE  1080    Bruxelles   Bruxelles-Capitale  BRU Bruxelles   BRU         50.8466 4.3528  4
BE  1081    Bruxelles Koekelberg    Bruxelles-Capitale  BRU Bruxelles   BRU         50.8667 4.3333  4
BE  1082    Bruxelles Berchem-Sainte-Agathe Bruxelles-Capitale  BRU Bruxelles   BRU         50.8667 4.2833  4
BE  1083    Bruxelles Ganshoren Bruxelles-Capitale  BRU Bruxelles   BRU         50.8667 4.3 4
BE  1090    Bruxelles   Bruxelles-Capitale  BRU Bruxelles   BRU         50.8466 4.3528  4
BE  1090    Bruxelles Jette Bruxelles-Capitale  BRU Bruxelles   BRU         50.8667 4.3333  4
BE  1110    OTAN - NATO Bruxelles-Capitale  BRU Bruxelles   BRU         50.8765 4.422   1
BE  1120    Bruxelles   Bruxelles-Capitale  BRU Bruxelles   BRU         50.8466 4.3528  4
BE  1120    Bruxelles Neder-over-Heembeek   Bruxelles-Capitale  BRU Bruxelles   BRU         50.8466 4.3528  3
BE  1130    Bruxelles   Bruxelles-Capitale  BRU Bruxelles   BRU         50.8466 4.3528  4
BE  1140    Bruxelles Evere Bruxelles-Capitale  BRU Bruxelles   BRU         50.8667 4.4 4
BE  1140    Bruxelles   Bruxelles-Capitale  BRU Bruxelles   BRU         50.8466 4.3528  4
BE  1150    Bruxelles Woluwe-Saint-Pierre   Bruxelles-Capitale  BRU Bruxelles   BRU         50.8333 4.4167  4
BE  1150    Bruxelles   Bruxelles-Capitale  BRU Bruxelles   BRU         50.8466 4.3528  4
BE  1160    Bruxelles Auderghem Bruxelles-Capitale  BRU Bruxelles   BRU         50.8167 4.4333  4
BE  1160    Bruxelles   Bruxelles-Capitale  BRU Bruxelles   BRU         50.8466 4.3528  4
BE  1170    Bruxelles Watermael-Boitsfort   Bruxelles-Capitale  BRU Bruxelles   BRU         50.8    4.4 4
BE  1170    Bruxelles   Bruxelles-Capitale  BRU Bruxelles   BRU         50.8466 4.3528  4
BE  1180    Bruxelles   Bruxelles-Capitale  BRU Bruxelles   BRU         50.8466 4.3528  4
BE  1180    Bruxelles Uccle Bruxelles-Capitale  BRU Bruxelles   BRU         50.8    4.3167  4

我想计算每个2位邮政编码(10和11)的质心。如何获得所有10xx和所有11xx邮政编码的坐标作为质心公式的输入值?

结果应该是这样的: 是10 50.856 4.423 BE 11 50.8478 4.312 是12等。

1 个答案:

答案 0 :(得分:0)

这是一个肮脏的脚本。您可能需要稍微调整一下。

import csv

codes = {}

with open("data.csv", "r") as file:
    reader = csv.reader(file, delimiter = "\t")
    for line in reader:
        short_code = line[1][:2]
        lat = float(line[9])
        lon = float(line[10])

        if not short_code in codes:
            codes[short_code] = []

        codes[short_code].append((lat, lon))

for short_code in codes:
    lat_sum = 0
    lon_sum = 0

    for point in codes[short_code]:
        lat_sum += point[0]
        lon_sum += point[1]

    lat_avg = lat_sum / len(codes[short_code])
    lon_avg = lon_sum / len(codes[short_code])

    print("BE %s %.4f %.4f" % (short_code, lat_avg, lon_avg))