Het zwaartepunt berekenen
De begrenzingsdoos (bounding box) kan variëren van één stadsblok tot een hele staat of zelfs een land. Om het eenvoudig te houden, kun je deze gegevens benaderen door de box te vertalen naar een zogenoemd centroid: het middelpunt van de box. De berekening is rechttoe rechtaan: je bepaalt de middelpunten van de lijnen die worden gevormd door de breedte- en lengtegraden.
numpy is al geïmporteerd als np.
Deze oefening maakt deel uit van de cursus
Socialmediagegevens analyseren in Python
Oefeninstructies
- Haal de eerste set coördinaten op uit de place-JSON.
- Bereken de centrale lengtegraad door de lijst met lengtegraden op te tellen en door twee te delen.
- Doe hetzelfde voor de breedtegraden.
- Pas de functie
calculateCentroid()toe op de kolomplace.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
def calculateCentroid(place):
""" Calculates the centroid from a bounding box."""
# Obtain the coordinates from the bounding box.
coordinates = place[____][____][0]
longs = np.unique( [x[0] for x in coordinates] )
lats = np.unique( [x[1] for x in coordinates] )
if len(longs) == 1 and len(lats) == 1:
# return a single coordinate
return (longs[0], lats[0])
elif len(longs) == 2 and len(lats) == 2:
# If we have two longs and lats, we have a box.
central_long = ____.____(____) / ____
central_lat = ____.____(____) / ____
else:
raise ValueError("Non-rectangular polygon not supported: %s" %
",".join(map(lambda x: str(x), coordinates)) )
return (central_long, central_lat)
# Calculate the centroids of place
centroids = tweets_sotu[____].apply(____)