rrz0
rrz0

Reputation: 2302

Connecting points in a specific order

The full code (excluding the path finding algorithm) I am about to describe can be found on Code Review.

I am reading in 10 co-ordinates from a text file in Python. I then proceed to pass the latitude and longitude co-ordinates to a function which prints the points as follows.

def read_two_column_file(file_name):
    with open(file_name, 'r') as f_input:
        csv_input = csv.reader(f_input, delimiter=' ', skipinitialspace=True, )
        long = []
        lat = []
        for col in csv_input:
            x = float(col[0])  # converting to float
            y = float(col[1])
            long.append(x)
            lat.append(y)

    return long, lat


def display_points(long, lat):
    plt.figure()
    plt.gca().set_aspect('equal', adjustable='box')
    plt.ylabel('latitude')
    plt.xlabel('longitude')
    plt.title('longitude vs latitude')
    plt.scatter(lat, long)
    plt.orientation = u'vertical'
    plt.grid('True')
    plt.show()

Sample Input:

35.905333, 14.471970
35.896389, 14.477780
35.901281, 14.518173
35.860491, 14.572245
35.807607, 14.535320
35.832267, 14.455894
35.882414, 14.373217
35.983794, 14.336096
35.974463, 14.351006
35.930951, 14.401137

Plot:

enter image description here

This plots points on a map, and the idea is to find the shortest possible route from a starting point to an end point. Forgetting about the algorithm which does so, let us say I get an output representing the route as:

[2, 1, 0, 9, 8, 7, 6, 5, 4, 3, 2]

How can I translate these nodes back to the co-ordinates they are representing in order to connect them on Matplotlib?

Upvotes: 1

Views: 193

Answers (1)

Matthieu Brucher
Matthieu Brucher

Reputation: 22023

Transform your latitude and longitude into numpy arrays:

long = np.array(long)
lat = np.array(lat)

I would advise to do it in read_two_column_file directly.

Then if the path is in the variable path, you can do directly:

plt.plot(long[path], lat[path])

Upvotes: 3

Related Questions