├── server
├── README.md
├── app
│ ├── forms.pyc
│ ├── views.pyc
│ ├── __init__.pyc
│ ├── models.pyc
│ ├── __pycache__
│ │ ├── forms.cpython-35.pyc
│ │ ├── views.cpython-35.pyc
│ │ ├── models.cpython-35.pyc
│ │ ├── __init__.cpython-35.pyc
│ │ └── __init__.cpython-36.pyc
│ ├── __init__.py
│ ├── forms.py
│ ├── templates
│ │ ├── index.html
│ │ ├── base.html
│ │ └── login.html
│ ├── views.py
│ └── models.py
├── __pycache__
│ ├── config.cpython-35.pyc
│ └── model.cpython-35.pyc
├── db_upgrade.py
├── db_downgrade.py
├── db_create.py
├── config.py
├── db_migrate.py
├── mapping.py
├── delete_repetition.py
├── construct_ipin.py
├── mapping.csv
└── main_build_DB.py
├── img
├── 4Dir.png
├── 4Y_1.png
├── 4Y_2.png
├── 4Y_3.png
├── 4Y_4.png
├── ori.PNG
├── tra.png
├── floor_4.png
├── floor_5.png
├── axisdevice.png
├── diff_batch_size.png
├── diff_time_steps.png
├── error_LSTM_all.png
├── Location_Of_Data.jpg
├── diff_hidden_nodes.png
└── model_ts=30_hn=128_bs=5_ep=100.png
├── Dataset
└── TimeStamp
│ ├── TimeStamp_4th_floor_MIX2.xlsx
│ ├── TimeStamp_Ori_4th_floor.xlsx
│ ├── TimeStamp_4th_floor_HuaWei.xlsx
│ └── TimeStamp_5th_floor_HuaWei.xlsx
├── Data_Processing
├── README.md
├── Analysis_evaluation_data.py
├── BoxPlot_error.py
├── calculate_loc_final.py
└── acc_loss_plot.py
├── .gitignore
├── LICENSE
├── random_waypoint_model
└── README.md
├── 2D_Interpolation
└── Interpolation.py
├── README.md
├── algorithm
├── LSTM_trajectory_estimation.py
└── waypoint_trace.csv
├── floor4_new_data.csv
└── floor5_new_data.csv
/server/README.md:
--------------------------------------------------------------------------------
1 | Just run 'main_build_DB.py' for server part.
2 |
3 |
--------------------------------------------------------------------------------
/img/4Dir.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/img/4Dir.png
--------------------------------------------------------------------------------
/img/4Y_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/img/4Y_1.png
--------------------------------------------------------------------------------
/img/4Y_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/img/4Y_2.png
--------------------------------------------------------------------------------
/img/4Y_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/img/4Y_3.png
--------------------------------------------------------------------------------
/img/4Y_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/img/4Y_4.png
--------------------------------------------------------------------------------
/img/ori.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/img/ori.PNG
--------------------------------------------------------------------------------
/img/tra.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/img/tra.png
--------------------------------------------------------------------------------
/img/floor_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/img/floor_4.png
--------------------------------------------------------------------------------
/img/floor_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/img/floor_5.png
--------------------------------------------------------------------------------
/img/axisdevice.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/img/axisdevice.png
--------------------------------------------------------------------------------
/server/app/forms.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/server/app/forms.pyc
--------------------------------------------------------------------------------
/server/app/views.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/server/app/views.pyc
--------------------------------------------------------------------------------
/img/diff_batch_size.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/img/diff_batch_size.png
--------------------------------------------------------------------------------
/img/diff_time_steps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/img/diff_time_steps.png
--------------------------------------------------------------------------------
/img/error_LSTM_all.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/img/error_LSTM_all.png
--------------------------------------------------------------------------------
/server/app/__init__.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/server/app/__init__.pyc
--------------------------------------------------------------------------------
/server/app/models.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/server/app/models.pyc
--------------------------------------------------------------------------------
/img/Location_Of_Data.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/img/Location_Of_Data.jpg
--------------------------------------------------------------------------------
/img/diff_hidden_nodes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/img/diff_hidden_nodes.png
--------------------------------------------------------------------------------
/img/model_ts=30_hn=128_bs=5_ep=100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/img/model_ts=30_hn=128_bs=5_ep=100.png
--------------------------------------------------------------------------------
/server/__pycache__/config.cpython-35.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/server/__pycache__/config.cpython-35.pyc
--------------------------------------------------------------------------------
/server/__pycache__/model.cpython-35.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/server/__pycache__/model.cpython-35.pyc
--------------------------------------------------------------------------------
/server/app/__pycache__/forms.cpython-35.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/server/app/__pycache__/forms.cpython-35.pyc
--------------------------------------------------------------------------------
/server/app/__pycache__/views.cpython-35.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/server/app/__pycache__/views.cpython-35.pyc
--------------------------------------------------------------------------------
/server/app/__pycache__/models.cpython-35.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/server/app/__pycache__/models.cpython-35.pyc
--------------------------------------------------------------------------------
/Dataset/TimeStamp/TimeStamp_4th_floor_MIX2.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/Dataset/TimeStamp/TimeStamp_4th_floor_MIX2.xlsx
--------------------------------------------------------------------------------
/Dataset/TimeStamp/TimeStamp_Ori_4th_floor.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/Dataset/TimeStamp/TimeStamp_Ori_4th_floor.xlsx
--------------------------------------------------------------------------------
/server/app/__pycache__/__init__.cpython-35.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/server/app/__pycache__/__init__.cpython-35.pyc
--------------------------------------------------------------------------------
/server/app/__pycache__/__init__.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/server/app/__pycache__/__init__.cpython-36.pyc
--------------------------------------------------------------------------------
/Dataset/TimeStamp/TimeStamp_4th_floor_HuaWei.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/Dataset/TimeStamp/TimeStamp_4th_floor_HuaWei.xlsx
--------------------------------------------------------------------------------
/Dataset/TimeStamp/TimeStamp_5th_floor_HuaWei.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Carloslee96/Indoor-Localization/HEAD/Dataset/TimeStamp/TimeStamp_5th_floor_HuaWei.xlsx
--------------------------------------------------------------------------------
/Data_Processing/README.md:
--------------------------------------------------------------------------------
1 | # Order of usage
2 |
3 | 1. calculate_loc_final.py
4 | 2. Analysis_evaluation_data.py
5 | 3. acc_loss_plot.py
6 | 4. BoxPlot_error.py
7 |
8 |
--------------------------------------------------------------------------------
/server/app/__init__.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 | from flask_sqlalchemy import SQLAlchemy
3 |
4 | app = Flask(__name__)
5 | app.config.from_object('config')
6 | db = SQLAlchemy(app)
7 |
8 | from app import views, models
--------------------------------------------------------------------------------
/server/app/forms.py:
--------------------------------------------------------------------------------
1 | from flask_wtf import Form
2 | from wtforms import StringField, BooleanField
3 | from wtforms.validators import DataRequired
4 |
5 | class LoginForm(Form):
6 | openid = StringField('openid', validators=[DataRequired()])
7 | remember_me = BooleanField('remember_me', default=False)
--------------------------------------------------------------------------------
/server/app/templates/index.html:
--------------------------------------------------------------------------------
1 |
2 | {% extends "base.html" %}
3 |
4 | {% block content %}
5 |
Hi, {{ user.nickname }}!
6 | {% for post in posts %}
7 |
8 | {{ post.author.nickname }} says: {{ post.body }}
9 |
10 | {% endfor %}
11 | {% endblock %}
12 |
--------------------------------------------------------------------------------
/server/db_upgrade.py:
--------------------------------------------------------------------------------
1 | #!flask/bin/python
2 | from migrate.versioning import api
3 | from config import SQLALCHEMY_DATABASE_URI
4 | from config import SQLALCHEMY_MIGRATE_REPO
5 | api.upgrade(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
6 | v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
7 | print('Current database version: ' + str(v))
--------------------------------------------------------------------------------
/server/db_downgrade.py:
--------------------------------------------------------------------------------
1 | #!flask/bin/python
2 | from migrate.versioning import api
3 | from config import SQLALCHEMY_DATABASE_URI
4 | from config import SQLALCHEMY_MIGRATE_REPO
5 | v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
6 | api.downgrade(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, v - 1)
7 | v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
8 | print('Current database version: ' + str(v))
--------------------------------------------------------------------------------
/server/db_create.py:
--------------------------------------------------------------------------------
1 | #!flask/bin/python
2 | from migrate.versioning import api
3 | from config import SQLALCHEMY_DATABASE_URI
4 | from config import SQLALCHEMY_MIGRATE_REPO
5 | from app import db
6 | import os.path
7 | db.create_all()
8 | if not os.path.exists(SQLALCHEMY_MIGRATE_REPO):
9 | api.create(SQLALCHEMY_MIGRATE_REPO, 'database repository')
10 | api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
11 | else:
12 | api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, api.version(SQLALCHEMY_MIGRATE_REPO))
13 |
--------------------------------------------------------------------------------
/server/app/templates/base.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {% if title %}
4 | {{ title }} - microblog
5 | {% else %}
6 | microblog
7 | {% endif %}
8 |
9 |
10 |
11 |
12 | {% with messages = get_flashed_messages() %}
13 | {% if messages %}
14 |
15 | {% for message in messages %}
16 | - {{ message }}
17 | {% endfor %}
18 |
19 | {% endif %}
20 | {% endwith %}
21 | {% block content %}{% endblock %}
22 |
23 |
24 |
--------------------------------------------------------------------------------
/server/config.py:
--------------------------------------------------------------------------------
1 | import os
2 | WTF_CSRF_ENABLED = True
3 | SECRET_KEY = 'you-will-never-guess'
4 |
5 | basedir = os.path.abspath(os.path.dirname(__file__))
6 |
7 | SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db')
8 | SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository')
9 |
10 | '''OPENID_PROVIDERS = [
11 | {'name': 'Google', 'url': 'https://www.google.com/accounts/o8/id'},
12 | {'name': 'Yahoo', 'url': 'https://me.yahoo.com'},
13 | {'name': 'AOL', 'url': 'http://openid.aol.com/'},
14 | {'name': 'Flickr', 'url': 'http://www.flickr.com/'},
15 | {'name': 'MyOpenID', 'url': 'https://www.myopenid.com'}]'''
16 |
17 |
--------------------------------------------------------------------------------
/server/db_migrate.py:
--------------------------------------------------------------------------------
1 | #!flask/bin/python
2 | import imp
3 | from migrate.versioning import api
4 | from app import db
5 | from config import SQLALCHEMY_DATABASE_URI
6 | from config import SQLALCHEMY_MIGRATE_REPO
7 |
8 | v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
9 | migration = SQLALCHEMY_MIGRATE_REPO + ('/versions/%03d_migration.py' % (v+1))
10 | tmp_module = imp.new_module('old_model')
11 | old_model = api.create_model(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
12 | exec(old_model, tmp_module.__dict__)
13 | script = api.make_update_script_for_model(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, tmp_module.meta, db.metadata)
14 | open(migration, "wt").write(script)
15 | api.upgrade(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
16 | v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
17 | print('New migration saved as ' + migration)
18 | print('Current database version: ' + str(v))
--------------------------------------------------------------------------------
/server/mapping.py:
--------------------------------------------------------------------------------
1 | # -*- coding:utf-8 -*-
2 |
3 | from app import db, models
4 | import csv
5 |
6 | length = 200
7 |
8 | PYTHONIOENCODING="UTF-8" #set the utf-8 encode mode
9 |
10 | def rawList():
11 | with open('mapping.csv', 'r', newline='') as csvfile:
12 | #APsList = models.User.query.all()
13 | reader = csv.reader(csvfile)
14 | APs = [row[0] for row in reader]
15 |
16 | APlength = len(APs)
17 |
18 | lists = [[0 for col in range(3)] for row in range(APlength)]
19 |
20 | row = 0
21 | for AP in APs:
22 | #dict_APs.update({AP:i})
23 | lists[row][0] = AP
24 | lists[row][1] = '-110'
25 | lists[row][2] = 'ee'
26 | row += 1
27 |
28 | return lists
29 |
30 | def checkAP(list, AP):
31 | row = 0
32 |
33 | for row in range(0,length):
34 | if AP == list[row][0]:
35 | return row
36 | return 'none'
37 |
38 |
39 | list = rawList()
40 | print(list)
41 | print(checkAP(list, '4c:fa:ca:1f:41:40'))
42 | #print(list)
--------------------------------------------------------------------------------
/Data_Processing/Analysis_evaluation_data.py:
--------------------------------------------------------------------------------
1 | '''
2 | By Zhenghang(Klaus) Zhong
3 |
4 | To get the difference of every estimated point and real point
5 | '''
6 |
7 | import csv
8 | import os
9 | import numpy as np
10 | import pandas as pd
11 | import math
12 |
13 | with open('all_steps.csv', 'r', newline='') as csvfile:
14 | reader = csv.reader(csvfile)
15 | dataset_evaluate = np.array([row[1:] for row in reader])
16 |
17 | with open('test_raw_loc.csv', 'r', newline='') as csvfile:
18 | reader = csv.reader(csvfile)
19 | dataset_raw = np.array([row[1:] for row in reader])
20 |
21 | dis_diff = []
22 | for i in range(len(dataset_raw)):
23 | x_pow_diff = math.pow(dataset_evaluate[i][0].astype('float')-dataset_raw[i][0].astype('float'),2)
24 | y_pow_diff = math.pow(dataset_evaluate[i][1].astype('float')-dataset_raw[i][1].astype('float'),2)
25 | dis_diff.append(math.sqrt(x_pow_diff+y_pow_diff))
26 |
27 | print(dis_diff)
28 | dis_diff = pd.DataFrame(dis_diff)
29 | dis_diff.to_csv('dis_diff.csv', mode='a', header=False)
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Built application files
2 | *.apk
3 | *.ap_
4 |
5 | # Files for the ART/Dalvik VM
6 | *.dex
7 |
8 | # Java class files
9 | *.class
10 |
11 | # Generated files
12 | bin/
13 | gen/
14 | out/
15 |
16 | # Gradle files
17 | .gradle/
18 | build/
19 |
20 | # Local configuration file (sdk path, etc)
21 | local.properties
22 |
23 | # Proguard folder generated by Eclipse
24 | proguard/
25 |
26 | # Log Files
27 | *.log
28 |
29 | # Android Studio Navigation editor temp files
30 | .navigation/
31 |
32 | # Android Studio captures folder
33 | captures/
34 |
35 | # Intellij
36 | *.iml
37 | .idea/workspace.xml
38 | .idea/tasks.xml
39 | .idea/gradle.xml
40 | .idea/dictionaries
41 | .idea/libraries
42 |
43 | # Keystore files
44 | *.jks
45 |
46 | # External native build folder generated in Android Studio 2.2 and later
47 | .externalNativeBuild
48 |
49 | # Google Services (e.g. APIs or Firebase)
50 | google-services.json
51 |
52 | # Freeline
53 | freeline.py
54 | freeline/
55 | freeline_project_description.json
56 | *.DESKTOP-0Q5UDGQ
57 | *.DESKTOP-0Q5UDGQ
58 | *.DESKTOP-0Q5UDGQ
59 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Zhong Zhenghang
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/server/app/views.py:
--------------------------------------------------------------------------------
1 | from flask import render_template, flash, redirect
2 | from app import app
3 | from .forms import LoginForm
4 |
5 |
6 | @app.route('/')
7 | @app.route('/index')
8 | def index():
9 | user = {'nickname': 'Miguel'}
10 | posts = [
11 | {
12 | 'author': {'nickname': 'John'},
13 | 'body': 'Beautiful day in Portland!'
14 | },
15 | {
16 | 'author': {'nickname': 'Susan'},
17 | 'body': 'The Avengers movie was so cool!'
18 | }
19 | ]
20 | return render_template('index.html',
21 | title='Home',
22 | user=user,
23 | posts=posts)
24 |
25 |
26 | @app.route('/login', methods=['GET', 'POST'])
27 | def login():
28 | form = LoginForm()
29 | if form.validate_on_submit():
30 | flash('Login requested for OpenID="%s", remember_me=%s' %
31 | (form.openid.data, str(form.remember_me.data)))
32 | return redirect('/index')
33 | return render_template('login.html',
34 | title='Sign In',
35 | form=form,
36 | providers=app.config['OPENID_PROVIDERS'])
37 |
--------------------------------------------------------------------------------
/server/app/templates/login.html:
--------------------------------------------------------------------------------
1 |
2 | {% extends "base.html" %}
3 |
4 | {% block content %}
5 |
18 | Sign In
19 |
34 | {% endblock %}
35 |
--------------------------------------------------------------------------------
/Data_Processing/BoxPlot_error.py:
--------------------------------------------------------------------------------
1 | #By Zhenghang(Klaus) Zhong
2 |
3 | #Box Plot of error distribution
4 |
5 | from pandas import DataFrame
6 | from pandas import read_csv
7 | import pandas as pd
8 | import numpy as np
9 | from matplotlib import pyplot
10 | # load results into a dataframe
11 | filenames_128 = ['dis_diff_128.csv']
12 | filenames_256 = ['dis_diff_256.csv']
13 | filenames_512 = ['dis_diff_512.csv']
14 | results = DataFrame()
15 |
16 | for name in filenames_128:
17 | results_128 = read_csv(name, header=0,usecols = [1])
18 | # describe all results, as 1 unit = 10cm, we want to transfer to meters, /10
19 | results_128 = results_128.div(10, axis = 0)
20 |
21 | for name in filenames_256:
22 | results_256 = read_csv(name, header=0,usecols = [1])
23 | # describe all results
24 | results_256 = results_256.div(10, axis = 0)
25 |
26 | for name in filenames_512:
27 | results_512 = read_csv(name, header=0,usecols = [1])
28 | # describe all results
29 | results_512 = results_512.div(10, axis = 0)
30 |
31 | print(results_128.describe())
32 | print(results_256.describe())
33 | print(results_512.describe())
34 |
35 | # box and whisker plot
36 | df = pd.DataFrame(np.concatenate((results_128,results_512),axis = 1),
37 | columns=['128', '512'])
38 |
39 | df.boxplot(sym='k',showmeans = True,showfliers = False,return_type='dict')
40 | #results_256.boxplot(sym='k',showmeans = True,whis = [0,8],showfliers = False,return_type='dict')
41 |
42 | pyplot.xlabel('Hidden node')
43 | pyplot.ylabel('Error (m)')
44 | pyplot.show()
--------------------------------------------------------------------------------
/server/app/models.py:
--------------------------------------------------------------------------------
1 | from app import db
2 |
3 | class User(db.Model):
4 | id = db.Column(db.Integer, primary_key=True)
5 | Building = db.Column(db.String(10), index=True, unique=False)
6 | Room = db.Column(db.String(10), index=True, unique=False)
7 | Location_x = db.Column(db.String(20), index=True, unique=False)
8 | Location_y = db.Column(db.String(20), index=True, unique=False)
9 | SSID = db.Column(db.String(20), index=True, unique=False)
10 | BSSID = db.Column(db.String(20), index=True, unique=False)
11 | Frequency = db.Column(db.String(10), index=True, unique=False)
12 | Level = db.Column(db.String(10), index=True, unique=False)
13 | Model = db.Column(db.String(10), index=True, unique=False)
14 | Time = db.Column(db.String(10), index=True, unique=False)
15 | def __repr__(self):
16 | return '' % (self.id)
17 |
18 |
19 |
20 |
21 | '''class User(db.Model):
22 | id = db.Column(db.Integer, primary_key=True)
23 | nickname = db.Column(db.String(64), index=True, unique=True)
24 | email = db.Column(db.String(120), index=True, unique=True)
25 | posts = db.relationship('Post', backref='author', lazy='dynamic')
26 |
27 | def __repr__(self):
28 | return '' % (self.nickname)
29 |
30 | class Post(db.Model):
31 | id = db.Column(db.Integer, primary_key = True)
32 | body = db.Column(db.String(140))
33 | timestamp = db.Column(db.DateTime)
34 | user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
35 |
36 | def __repr__(self):
37 | return '' % (self.body)
38 |
39 | nickname = db.Column(db.String(64), index=True, unique=True)
40 | email = db.Column(db.String(120), index=True, unique=True)'''
--------------------------------------------------------------------------------
/Data_Processing/calculate_loc_final.py:
--------------------------------------------------------------------------------
1 | '''
2 | By Zhenghang(Klaus) Zhong
3 |
4 | With data structure of samples X time_steps X features, and the time steps are
5 | created by sliding Window, which means there are a lot of repeating data in input
6 | as well as output, the data sample is like (if with one feature):
7 |
8 | [1 2 3 4 5 6
9 | 2 3 4 5 6 7
10 | 3 4 5 6 7 8
11 | 4 5 6 7 8 9]
12 |
13 | The output is similar, to get a better location coordination, we get location info
14 | of one point based on the mean of all its estimated state, that is its final location.
15 |
16 | For above example, we have input of 9 points' info.
17 |
18 | '''
19 |
20 | import csv
21 | import os
22 | import numpy as np
23 | import pandas as pd
24 |
25 | #Adjust according to parameter setting
26 | time_step = 30
27 |
28 | def mean_of_line(dataset, item, all_steps):
29 | #the points number that is smaller than length of dataset
30 | if item < len(dataset):
31 | # 20 is decided by the time steps
32 | if item >= time_step:
33 | number = time_step
34 | else:
35 | number = item + 1
36 |
37 | row = len(dataset)
38 | length = len(dataset[0])
39 | total = 0
40 | j = 0
41 |
42 | for i in range(number):
43 | total += dataset[item][j].astype('float')
44 | item -= 1
45 | j +=1
46 | mean = total / number
47 | all_steps.append(mean)
48 | if(item == 0):
49 | print('0:',mean)
50 | #Last several points (whos number equal to (time_step -1))
51 | else:
52 | row_start = len(dataset)-1
53 | total = 0
54 | j = item - len(dataset)+1
55 | #print('lengh:',time_step - (item - len(dataset)+1))
56 | for i in range(time_step - (item - len(dataset)+1)):
57 | total += dataset[row_start][j].astype('float')
58 | row_start -= 1
59 | j += 1
60 | mean = total / (time_step - (item - len(dataset)+1))
61 | all_steps.append(mean)
62 |
63 | # read the raw output data
64 | with open('yhat_loc_x.csv', 'r', newline='') as csvfile:
65 | reader = csv.reader(csvfile)
66 | dataset_x = np.array([row[1:] for row in reader])
67 | print(dataset_x)
68 | with open('yhat_loc_y.csv', 'r', newline='') as csvfile:
69 | reader = csv.reader(csvfile)
70 | dataset_y = np.array([row[1:] for row in reader])
71 |
72 | #get the final estimated location of all points with x and y coordinates
73 | all_steps_x = []
74 | for x in range(len(dataset_x)+(time_step-1)):
75 | mean_of_line(dataset_x,x,all_steps_x)
76 | all_steps_x = pd.DataFrame(all_steps_x)
77 | all_steps_x.to_csv('all_steps_x.csv', mode='w', header=['Loc_x'])
78 |
79 | all_steps_y = []
80 | for y in range(len(dataset_y)+(time_step-1)):
81 | mean_of_line(dataset_y,y,all_steps_y)
82 | #print(all_steps_y)
83 | all_steps_y = pd.DataFrame(all_steps_y)
84 | all_steps_y.to_csv('all_steps_y.csv', mode='w', header=['Loc_y'])
85 |
86 | all_steps_x= pd.read_csv(filepath_or_buffer = 'all_steps_x.csv', sep = ',',usecols = [1])
87 | all_steps_y= pd.read_csv(filepath_or_buffer = 'all_steps_y.csv', sep = ',',usecols = [1])
88 |
89 | all_steps = pd.concat([all_steps_x,all_steps_y],axis = 1)
90 | all_steps.to_csv('all_steps.csv', mode='w', header=['Loc_x','Loc_y'])
91 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/random_waypoint_model/README.md:
--------------------------------------------------------------------------------
1 | Description
2 | -----------
3 | This is a python library for simulation of mobility and contact models.
4 |
5 | The following mobility models that simulate node movements are available:
6 |
7 | - Random Walk
8 | - Random Waypoint
9 | - Random Direction
10 | - Truncated Levy Walk [[1]](#references)
11 | - Gauss-Markov [[2]](#references)
12 | - Reference Point Group Mobility model [[3]](#references)
13 | - Time-variant Community [[4]](#references)
14 |
15 | In addition to models that simulate node position in time, this library also provides some models
16 | that simulate node contacts:
17 | - Dynamic G(n,p), a dynamic version of the Erdős–Rényi model [[5]](#references)
18 | - Dynamic G(n,m), another dynamic version of the Erdős–Rényi model [[5]](#references)
19 | - The edge-Markovian dynamic graph model [[6]](#references)
20 | - The continuous-time edge-Markovian dynamic graph model [[7]](#references)
21 | - The Model B, as described in [[8]](#references)
22 |
23 | Installation
24 | ------------
25 |
26 | setuptools - from Git repository
27 |
28 | ```bash
29 | > git clone git://github.com/panisson/pymobility.git
30 | > cd pymobility
31 | > python setup.py install (run as admin/root)
32 | ```
33 |
34 | Dependencies
35 | ------------
36 | NumPy and Matplotlib
37 |
38 | Examples
39 | --------
40 | ### Mobility Models
41 | In a python shell, you can instantiate the mobility models available
42 | in the pymobility.models.mobility package.
43 | For example, to create a Random Waypoint model instace, use the following commands:
44 | ```python
45 | >>> from pymobility.models.mobility import random_waypoint
46 | >>> rw = random_waypoint(200, dimensions=(100, 100), velocity=(0.1, 1.0), wt_max=1.0)
47 | ```
48 | This will create a Random Waypoint instance with 200 nodes in a simulation area of 100x100 units,
49 | velocity chosen from a uniform distribution between 0.1 and 1.0 units/step
50 | and maximum waiting time of 1.0 steps.
51 | This object is a generator that yields the position of the nodes in each step.
52 | For example, to print a 2-dimensional array with the node positions produced in the first step, call
53 | ```python
54 | >>> positions = next(rw)
55 | >>> print positions
56 | ```
57 | You can also iterate over the positions produced in each step:
58 | ```python
59 | >>> for positions in rw:
60 | ... print positions
61 | ...
62 | ```
63 | ### Contact Models
64 | The contact models are available in the pymobility.models.contact package.
65 | Differently from the mobility package that yield node positions for each time step,
66 | the contact models yield a list of node pairs that were in contact at each time step.
67 | For example, to create a Dynamic G(n,p) model instance, use the following commands:
68 | ```python
69 | >>> from pymobility.models.contact import dynamic_gnp
70 | >>> m = dynamic_gnp(200, p=0.01)
71 | ```
72 | This will create a Dynamic G(n,p) model instance with 200 nodes that generates a list of contacts
73 | at each time step.
74 | The probability of any edge appearing at each step is defined by the parameter *p*.
75 | Now you can iterate over the list of contacts produced in each time step:
76 | ```python
77 | >>> for contacts in m:
78 | ... for source, target in contacts:
79 | ... print (source, target)
80 | ```
81 |
82 | ### Simulation and Visualization
83 | The script pymobility/simulation.py, under the src directory, contains examples on how to run different models
84 | and to plot the points in a simulation area using Matplotlib.
85 | To run it, open a shell prompt, go to the src directory and run the following command:
86 | ```bash
87 | python pymobility/simulation.py
88 | ```
89 |
90 | Contributing
91 | ------------
92 | If you have a Github account please fork the repository,
93 | create a topic branch, and commit your changes.
94 | Then submit a pull request from that branch.
95 |
96 | License
97 | -------
98 | Written by André Panisson
99 | Copyright (C) 2012 Istituto per l'Interscambio Scientifico I.S.I.
100 | You can contact us by email (isi@isi.it) or write to:
101 | ISI Foundation, Via Alassio 11/c, 10126 Torino, Italy.
102 |
103 | The Model B was implemented with the contribution of Juliette Stehle.
104 |
105 | References
106 | ----------
107 | [1] Injong Rhee, Minsu Shin, Seongik Hong, Kyunghan Lee, and Song Chong. On the Levy-Walk Nature of Human Mobility.
108 | In 2008 IEEE INFOCOM - Proceedings of the 27th Conference on Computer Communications, pages 924-932. April 2008.
109 |
110 | [2] Camp, T., Boleng, J. & Davies, V. A survey of mobility models for ad hoc network research.
111 | Wireless Communications and Mobile Computing 2, 483-502 (2002).
112 |
113 | [3] Xiaoyan Hong, Mario Gerla, Guangyu Pei, and Ching-Chuan Chiang. 1999.
114 | A group mobility model for ad hoc wireless networks. In Proceedings of the
115 | 2nd ACM international workshop on Modeling, analysis and simulation of
116 | wireless and mobile systems (MSWiM '99). ACM, New York, NY, USA, 53-60.
117 |
118 | [4] Wei-jen Hsu, Thrasyvoulos Spyropoulos, Konstantinos Psounis, and Ahmed Helmy,
119 | Modeling Time-variant User Mobility in Wireless Mobile Networks, INFOCOM 2007, May 2007.
120 |
121 | [5] Andrea E. F. Clementi, Francesco Pasquale, Angelo Monti, and Riccardo Silvestri. 2007.
122 | Communication in dynamic radio networks. In Proceedings of the twenty-sixth annual
123 | ACM symposium on Principles of distributed computing (PODC '07). ACM, New York, NY, USA, 205-214.
124 |
125 | [6] Andrea E.F. Clementi, Claudio Macci, Angelo Monti, Francesco Pasquale, and Riccardo Silvestri. 2008.
126 | Flooding time in edge-Markovian dynamic graphs. In Proceedings of the
127 | twenty-seventh ACM symposium on Principles of distributed computing (PODC '08).
128 | ACM, New York, NY, USA, 213-222.
129 |
130 | [7] Augustin Chaintreau, Abderrahmen Mtibaa, Laurent Massoulie, and Christophe Diot. 2007.
131 | The diameter of opportunistic mobile networks. In Proceedings of the
132 | 2007 ACM CoNEXT conference (CoNEXT '07). ACM, New York, NY, USA, , Article 12 , 12 pages.
133 |
134 | [8] Stehle, J., Barrat, A. & Bianconi, G. Dynamical and bursty interactions in social networks.
135 | Physical Review E 81, 1-4 (2010). Available online at: http://link.aps.org/doi/10.1103/PhysRevE.81.035101
136 |
--------------------------------------------------------------------------------
/Data_Processing/acc_loss_plot.py:
--------------------------------------------------------------------------------
1 | #By Zhenghang(Klaus) Zhong
2 |
3 | import matplotlib.pyplot as plt
4 | import csv
5 | import pandas as pd
6 |
7 | # file name strcture
8 | # log_ts=20_128_10_120 (time_steps, hidden nodes, batch size, epochs, listed values are default)
9 |
10 | #batch size
11 | filename_20_128_1_30 = 'log_1_30.csv'
12 | filename_20_128_5_30 = 'log_5_30.csv'
13 | filename_20_128_10_30 = 'log_10_30.csv'
14 | filename_20_128_20_30 = 'log_20_30.csv'
15 |
16 | #batch size
17 | filename_20_256_5_30 = 'log_ts=20_256_5_30.csv'
18 | filename_20_256_10_30 = 'log_256_10_30.csv'
19 | filename_20_256_20_30 = 'log_256_20_30.csv'
20 | filename_20_256_30_30 = 'log_256_30_30.csv'
21 | filename_20_256_40_30 = 'log_256_40_30.csv'
22 |
23 | #batch size
24 | filename_20_16_20_30 = 'log_16_20_30.csv'
25 | filename_20_32_20_30 = 'log_32_20_30.csv'
26 | filename_20_64_20_30 = 'log_64_20_30.csv'
27 | filename_20_128_20_30 = 'log_20_30.csv'
28 | filename_20_256_20_30 = 'log_256_20_30.csv'
29 | filename_20_512_20_30 = 'log_512_20_30.csv'
30 |
31 | #time steps
32 | filename_10_128_10_120 = 'log_ts=10_128_10_120.csv'
33 | filename_20_128_10_30 = 'log_ts=20_128_10_120.csv'
34 | #filename_20_128_10_30 = 'log_10_30.csv'
35 | filename_30_128_10_120 = 'log_ts=30_128_10_120.csv'
36 | filename_40_128_10_30 = 'log_ts=40_128_10_30.csv'
37 |
38 | filename_20_128_20_100 = 'log_20_100.csv'
39 |
40 | filename_20_128_10_120 = 'log_ts=20_128_10_120.csv'
41 |
42 | filename_30_512_5_100 = 'log_ts=30_512_5_100.csv'
43 |
44 | def returnAccLoss(filename):
45 | csvfile = open(filename, "r")
46 | Hlength=len(csvfile.readlines())
47 | print('File \'%s\' length: %d' % (filename, Hlength-1))
48 |
49 | epochs= pd.read_csv(filepath_or_buffer = filename, sep = ',')["epochs"].values
50 | acc= pd.read_csv(filepath_or_buffer = filename, sep = ',')["acc"].values
51 | loss= pd.read_csv(filepath_or_buffer = filename, sep = ',')["loss"].values
52 |
53 | #epochs = epochs[:] + 1
54 | #print(epochs)
55 | return epochs, acc, loss
56 |
57 | epochs_20_128_1_30, acc_20_128_1_30, loss_20_128_1_30 = returnAccLoss(filename_20_128_1_30)
58 | epochs_20_128_5_30, acc_20_128_5_30, loss_20_128_5_30 = returnAccLoss(filename_20_128_5_30)
59 | epochs_20_128_10_30, acc_20_128_10_30, loss_20_128_10_30 = returnAccLoss(filename_20_128_10_30)
60 | epochs_20_128_20_30, acc_20_128_20_30, loss_20_128_20_30 = returnAccLoss(filename_20_128_20_30)
61 | epochs_20_128_10_120, acc_20_128_10_120, loss_20_128_10_120 = returnAccLoss(filename_20_128_10_120)
62 | '''
63 | plt.plot(epochs_20_128_1_30,acc_20_128_1_30, color = 'green',label = 'batch_size = 1')
64 | plt.plot(epochs_20_128_5_30,acc_20_128_5_30, color = 'red',label = 'batch_size = 5')
65 | plt.plot(epochs_20_128_10_30,acc_20_128_10_30, color = 'black',label = 'batch_size = 10')
66 | plt.plot(epochs_20_128_20_30,acc_20_128_20_30, color = 'blue',label = 'batch_size = 20')
67 | plt.plot(epochs_20_128_10_120,acc_20_128_10_120, color = 'y',label = 'batch_size = 10_ep=120')
68 | '''
69 | '''
70 | plt.plot(epochs_20_128_1_30,loss_20_128_1_30, color = 'green',label = 'batch_size = 1')
71 | plt.plot(epochs_20_128_5_30,loss_20_128_5_30, color = 'red',label = 'batch_size = 5')
72 | plt.plot(epochs_20_128_10_30,loss_20_128_10_30, color = 'skyblue',label = 'batch_size = 10')
73 | plt.plot(epochs_20_128_20_30,loss_20_128_20_30, color = 'blue',label = 'batch_size = 20')
74 | '''
75 |
76 | '''
77 | # Comparing accuracy of different batchs size
78 | epochs_20_256_5_30, acc_20_256_5_30, loss_20_256_5_30 = returnAccLoss(filename_20_256_5_30)
79 | epochs_20_256_10_30, acc_20_256_10_30, loss_20_256_10_30 = returnAccLoss(filename_20_256_10_30)
80 | epochs_20_256_20_30, acc_20_256_20_30, loss_20_256_20_30 = returnAccLoss(filename_20_256_20_30)
81 | epochs_20_256_30_30, acc_20_256_30_30, loss_20_256_30_30 = returnAccLoss(filename_20_256_30_30)
82 | epochs_20_256_40_30, acc_20_256_40_30, loss_20_256_40_30 = returnAccLoss(filename_20_256_40_30)
83 | plt.plot(epochs_20_256_5_30,acc_20_256_5_30, color = 'black',label = 'batch_size = 5')
84 | plt.plot(epochs_20_256_10_30,acc_20_256_10_30, color = 'green',label = 'batch_size = 10')
85 | plt.plot(epochs_20_256_20_30,acc_20_256_20_30, color = 'red',label = 'batch_size = 20')
86 | plt.plot(epochs_20_256_30_30,acc_20_256_30_30, color = 'skyblue',label = 'batch_size = 30')
87 | plt.plot(epochs_20_256_40_30,acc_20_256_40_30, color = 'blue',label = 'batch_size = 40')
88 | '''
89 | #begin drawing: comparing different batchs size
90 | #plt.title('')
91 |
92 | '''
93 | #Comparing accuracy of different hidden nodes
94 | epochs_20_16_20_30, acc_20_16_20_30, loss_20_16_20_30 = returnAccLoss(filename_20_16_20_30)
95 | epochs_20_32_20_30, acc_20_32_20_30, loss_20_32_20_30 = returnAccLoss(filename_20_32_20_30)
96 | epochs_20_64_20_30, acc_20_64_20_30, loss_20_64_20_30 = returnAccLoss(filename_20_64_20_30)
97 | epochs_20_128_20_30, acc_20_128_20_30, loss_20_128_20_30 = returnAccLoss(filename_20_128_20_30)
98 | epochs_20_256_20_30, acc_20_256_20_30, loss_20_256_20_30 = returnAccLoss(filename_20_256_20_30)
99 | epochs_20_512_20_30, acc_20_512_20_30, loss_20_512_20_30 = returnAccLoss(filename_20_512_20_30)
100 | plt.plot(epochs_20_16_20_30,acc_20_16_20_30, color = 'black',label = 'hidden_nodes = 16')
101 | plt.plot(epochs_20_32_20_30,acc_20_32_20_30, color = 'green',label = 'hidden_nodes = 32')
102 | plt.plot(epochs_20_64_20_30,acc_20_64_20_30, color = 'red',label = 'hidden_nodes = 64')
103 | plt.plot(epochs_20_128_20_30,acc_20_128_20_30, color = 'skyblue',label = 'hidden_nodes = 128')
104 | plt.plot(epochs_20_256_20_30,acc_20_256_20_30, color = 'blue',label = 'hidden_nodes = 256')
105 | plt.plot(epochs_20_512_20_30,acc_20_512_20_30, color = 'y',label = 'hidden_nodes = 512')
106 | '''
107 | '''
108 | epochs_10_128_10_120, acc_10_128_10_120, loss_10_128_10_120 = returnAccLoss(filename_10_128_10_120)
109 | epochs_20_128_10_30, acc_20_128_10_30, loss_20_128_10_30 = returnAccLoss(filename_20_128_10_30)
110 | epochs_30_128_10_120, acc_30_128_10_120, loss_30_128_10_120 = returnAccLoss(filename_30_128_10_120)
111 | #epochs_40_128_10_30, acc_40_128_10_30, loss_40_128_10_120 = returnAccLoss(filename_40_128_10_30)
112 |
113 | plt.plot(epochs_10_128_10_120[0:91],acc_10_128_10_120[0:91], color = 'black',label = 'time_steps = 10')
114 | plt.plot(epochs_20_128_10_30,acc_20_128_10_30, color = 'green',label = 'time_steps = 20')
115 | plt.plot(epochs_30_128_10_120[0:91],acc_30_128_10_120[0:91], color = 'red',label = 'time_steps = 30')
116 | #plt.plot(epochs_40_128_10_30,acc_40_128_10_30, color = 'skyblue',label = 'time_steps = 40')
117 | '''
118 | epochs_20_128_20_100, acc_20_128_20_100, loss_20_128_20_100 = returnAccLoss(filename_20_128_20_100)
119 | plt.plot(epochs_20_128_20_100,acc_20_128_20_100, color = 'y',label = 'ts = 20,hn=128,bs=20')
120 |
121 | epochs_30_512_5_100, acc_30_512_5_100, loss_30_512_5_100 = returnAccLoss(filename_30_512_5_100)
122 | plt.plot(epochs_30_512_5_100,acc_30_512_5_100, color = 'blue',label = 'ts = 30,hn=512,bs=5')
123 |
124 |
125 |
126 | plt.legend()
127 | plt.xlabel('Epoch')
128 | plt.ylabel('Accuracy')
129 | plt.grid()
130 | plt.show()
131 | '''
132 | with open('log_1_30.csv','r') as csvfile:
133 | reader = csv.reader(csvfile)
134 | column = [row[2] for row in reader]
135 | '''
136 |
137 | '''
138 | csv_file = csv.reader(open('log_1_30.csv','r'))
139 | print(csv_file)
140 |
141 | for stu in csv_file:
142 | print(stu)
143 | '''
144 |
--------------------------------------------------------------------------------
/2D_Interpolation/Interpolation.py:
--------------------------------------------------------------------------------
1 | '''
2 | By Zhenghang(Klaus) Zhong
3 |
4 | Assuming in a small indoor space, relationship between space and geomagnetic field intensity is linear
5 |
6 | Interpolation method is used for two purpose:
7 |
8 | 1. Imporve the precision of geomagnetic map
9 |
10 | 2. Work with random waypoint model, with generated walk trace
11 | get the points' magnetic field intensity in x,y,z coordination
12 |
13 | For 4th floor detection area, the size is 51 points X 6 points,
14 | we improve the precision by 6 times, which mean to interpolate
15 | 5 points between two raw points.
16 |
17 | For 5th floor detection area, the size is 51 points X 13 points,
18 | do the same way as 4th floor.
19 | '''
20 |
21 | # coding: utf-8
22 | import csv
23 | import os
24 | import re #get number in string
25 | import math
26 | import numpy as np
27 | import pandas as pd
28 | import pylab as pl
29 | import matplotlib as mpl
30 | import matplotlib.pyplot as plt
31 | from scipy import interpolate
32 | from scipy.interpolate import griddata
33 | from scipy.interpolate import SmoothBivariateSpline as SBS
34 | from scipy.interpolate import CloughTocher2DInterpolator
35 | PYTHONIOENCODING="UTF-8"
36 |
37 | filename = '5N_all.csv'
38 |
39 | Loc_x = pd.read_csv(filepath_or_buffer = filename, sep = ',')["Loc_x"].values.astype('int')
40 | Loc_y = pd.read_csv(filepath_or_buffer = filename, sep = ',')["Loc_y"].values.astype('int')
41 | Mag_x = pd.read_csv(filepath_or_buffer = filename, sep = ',')["GeoX"].values.astype('float')
42 | Mag_y = pd.read_csv(filepath_or_buffer = filename, sep = ',')["GeoY"].values.astype('float')
43 | Mag_z = pd.read_csv(filepath_or_buffer = filename, sep = ',')["GeoZ"].values.astype('float')
44 | #Add one axis, transfer to 2-D data
45 | Loc_x = Loc_x[:,np.newaxis]
46 | Loc_y = Loc_y[:,np.newaxis]
47 |
48 | '''
49 | #Old way of doing obove work
50 |
51 | with open('5N_all.csv', 'r', newline='') as csvfile:
52 | reader = csv.reader(csvfile)
53 | frames = [row for row in reader]
54 | frames = np.array(frames)
55 |
56 | Loc_x = frames[1:,518].astype('int')
57 | Loc_x = Loc_x[:,np.newaxis]
58 | Loc_y = frames[1:,519].astype('int')
59 | Loc_y = Loc_y[:,np.newaxis]
60 | Mag_x = frames[1:,524].astype('float')
61 | Mag_y = frames[1:,525].astype('float')
62 | Mag_z = frames[1:,526].astype('float')
63 | '''
64 | Loc = np.concatenate((Loc_x,Loc_y),axis = 1)
65 | print(Loc.shape)
66 |
67 | # The shape of map is 50 X 12
68 | grid_x, grid_y = np.mgrid[0:50:0.01, 0:12:0.01]
69 | print(grid_x.shape)
70 |
71 | #Get total magnetic field intensity
72 | Mag = []
73 | for i in range(len(Mag_x)):
74 | Mag.append( math.sqrt(Mag_x[i]*Mag_x[i]+Mag_y[i]*Mag_y[i]+Mag_z[i]*Mag_z[i]))
75 |
76 | #Show geomagnetic field with graph
77 | G_y_li = griddata(Loc, Mag, (grid_x, grid_y), method='linear')
78 | plt.plot()
79 | plt.imshow(G_y_li.T, extent=(0,50,0,12), origin='lower')
80 | plt.show()
81 |
82 | #Clough-Tocher 2-D Interpolation
83 | C_x = CloughTocher2DInterpolator(Loc, Mag_x, tol=1e-6)
84 | C_y = CloughTocher2DInterpolator(Loc, Mag_y, tol=1e-6)
85 | C_z = CloughTocher2DInterpolator(Loc, Mag_z, tol=1e-6)
86 |
87 | #For forth floor, we collect data in map of 51 X 6 points
88 | def interpolateMap():
89 | with open('newMap_4S.csv', 'w', newline='') as csvfile:
90 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
91 | spamwriter.writerow(['Loc_x','Loc_y','Floor','Mag_x','Mag_y','Mag_z'])
92 |
93 | for x in range((51-1)*6+1):
94 | for y in range((6-1)*6+1):
95 | Loc_x = x
96 | Loc_y = y
97 | Mag_x = C_x(Loc_x/6,Loc_y/6).__float__()
98 | Mag_y = C_y(Loc_x/6,Loc_y/6).__float__()
99 | Mag_z = C_z(Loc_x/6,Loc_y/6).__float__()
100 | row = ([
101 | Loc_x,Loc_y,'4S',Mag_x,Mag_y,Mag_z
102 | ])
103 | spamwriter.writerow(row)
104 |
105 | #Interpolate magnetic values in terms of waypoint traces
106 | #The precision improve 6 times (interpolate 5 points between 2 detected points)
107 | def interpolateValues():
108 | with open('waypoint_trace.csv', 'r', newline='') as csvfile:
109 | reader = csv.reader(csvfile)
110 | traces = [row for row in reader]
111 | traces = np.array(traces)
112 | #traces[1:][:].astype('float')
113 |
114 | with open('waypoint_trace_new.csv', 'w', newline='') as csvfile:
115 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
116 | spamwriter.writerow(['Loc_x','Loc_y','Floor','Mag_x','Mag_y','Mag_z'])
117 |
118 | for x in range(1,len(traces)):
119 | Loc_x = traces[x][0].astype('float')
120 | Loc_y = traces[x][1].astype('float')
121 | Mag_x = C_x(Loc_x/6,Loc_y/6).__float__()
122 | Mag_y = C_y(Loc_x/6,Loc_y/6).__float__()
123 | Mag_z = C_z(Loc_x/6,Loc_y/6).__float__()
124 | row = ([
125 | traces[x][0],traces[x][1],'4',Mag_x,Mag_y,Mag_z
126 | ])
127 | spamwriter.writerow(row)
128 |
129 | #For 5th floor
130 | def generate2Dmagnetic_5():
131 | with open('newMap_5N.csv', 'r', newline='') as csvfile:
132 | reader = csv.reader(csvfile)
133 | frames = [row for row in reader]
134 | frames = np.array(frames)
135 | #frames = pd.DataFrame(frames)
136 | #frames = frames.reshape([len(frames), len(frames[1])])
137 |
138 | Mag_x = frames[1:,3].astype('float')
139 | Mag_y = frames[1:,4].astype('float')
140 | Mag_z = frames[1:,5].astype('float')
141 |
142 | Mag_total = []
143 | for i in range(len(Mag_x)):
144 | Mag_total.append(math.sqrt(Mag_x[i]*Mag_x[i]+Mag_y[i]*Mag_y[i]+Mag_z[i]*Mag_z[i]))
145 | #print(Mag_total)
146 | Mag_total = np.array(Mag_total).reshape(301,73)
147 | Mag_total = Mag_total.transpose()
148 | print(Mag_total.shape)
149 | print(Mag_total)
150 | x = np.arange(0,301,1)
151 | y = np.arange(0,73,1)
152 | X,Y = np.meshgrid(x,y)
153 | print(X)
154 | print(Y)
155 | #plt.contourf(X,Y,Mag_total)
156 | cset = plt.contourf(X,Y,Mag_total,7,alpha=0.99,cmap=plt.cm.hot)
157 | contour = plt.contour(X,Y,Mag_total,10,colors = 'k')
158 | #plt.clabel(contour,fontsize=10,colors = ('k'))
159 | plt.colorbar(cset,orientation='horizontal')
160 | plt.show()
161 |
162 | #For 4th floor
163 | def generate2Dmagnetic_4():
164 | with open('newMap_4N.csv', 'r', newline='') as csvfile:
165 | reader = csv.reader(csvfile)
166 | frames = [row for row in reader]
167 | frames = np.array(frames)
168 | #frames = pd.DataFrame(frames)
169 | #frames = frames.reshape([len(frames), len(frames[1])])
170 |
171 | Mag_x = frames[1:,3].astype('float')
172 | Mag_y = frames[1:,4].astype('float')
173 | Mag_z = frames[1:,5].astype('float')
174 |
175 |
176 | Mag_total = []
177 | for i in range(len(Mag_x)):
178 | Mag_total.append(math.sqrt(Mag_x[i]*Mag_x[i]+Mag_y[i]*Mag_y[i]+Mag_z[i]*Mag_z[i]))
179 | #print(Mag_total)
180 | Mag_total = np.array(Mag_total).reshape(301,31)
181 | Mag_total = Mag_total.transpose()
182 | print(Mag_total.shape)
183 | print(Mag_total)
184 | x = np.arange(0,301,1)
185 | y = np.arange(0,31,1)
186 | X,Y = np.meshgrid(x,y)
187 | print(X)
188 | print(Y)
189 | #plt.contourf(X,Y,Mag_total)
190 | cset = plt.contourf(X,Y,Mag_total,7,alpha=0.99,cmap=plt.cm.hot)
191 | contour = plt.contour(X,Y,Mag_total,10,colors = 'k')
192 | #plt.clabel(contour,fontsize=10,colors = ('k'))
193 | plt.colorbar(cset,orientation='horizontal')
194 | plt.show()
195 |
196 |
197 | #Call one function at a time
198 |
199 | #interpolateMap()
200 | #interpolateValues()
201 | #generate2Dmagnetic_4()
202 | #generate2Dmagnetic_5()
203 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 2018-SURF-Trajectory-Estimation
2 |
3 | 2018 SURF of EEE department XJTLU: Trajectory Estimation of Mobile Users/Devices based on Wi-Fi Fingerprinting and Deep Neural Networks
4 |
5 |
6 |
7 | p.s. The algorithm code is preserved untill workshop paper accepted.
8 |
9 |
10 |
11 | ## Background
12 |
13 | This 2018 SURF(Summer Undergraduate Research Fellowships) project is based on the last year's SURF of [Indoor Localization Based on Wi-Fi Fingerprinting](http://kyeongsoo.github.io/research/projects/surf-201739/index.html) and will go deeper in two directions, one is **advanced DNN-based indoor localization** (including CNN-based approaches); the other is **RNN-based (LSTM) trajectory estimation**.
14 |
15 |
16 |
17 | ## People
18 |
19 | ### Supervisor
20 |
21 | - [Dr Kyeong Soo Kim](http://kyeongsoo.github.io/) ([Department of Electrical and Electronic Engineering](http://www.xjtlu.edu.cn/en/departments/academic-departments/electrical-and-electronic-engineering/), [XJTLU](http://www.xjtlu.edu.cn/en/) )
22 | [Dr Sanghyuk Lee](http://www.xjtlu.edu.cn/en/departments/academic-departments/electrical-and-electronic-engineering/staff/sanghyuk-lee) ([Department of Electrical and Electronic Engineering](http://www.xjtlu.edu.cn/en/departments/academic-departments/electrical-and-electronic-engineering/), [XJTLU](http://www.xjtlu.edu.cn/en/) )
23 |
24 | ### Research Assistant
25 |
26 | - Xintao Huan (E-mail: Xintao.Huan_at_xjtlu.edu.cn; PhD Candidate, ([Department of Electrical and Electronic Engineering](http://www.xjtlu.edu.cn/en/departments/academic-departments/electrical-and-electronic-engineering/), [XJTLU](http://www.xjtlu.edu.cn/en/) )
27 |
28 | ## Meetings:
29 |
30 | - Please refer to the project homepage, [Trajectory Estimation of Mobile Users/Devices based on Wi-Fi Fingerprinting and Deep Neural Networks](http://kyeongsoo.github.io/research/projects/surf-201830/index.html), with presentation materials.
31 |
32 |
33 |
34 | ## Research part (15/6/2018 - 7/9/2018)
35 |
36 | ### Android mobile phone and coordination system
37 |
38 | 
39 |
40 | We used two android mobile phones for collecting Wi-Fi fingerprinting as well as IMU data, for IMU, these data were collected: Geomagnetic field intensity in (x,y,z) coordination, pose direction of phones (pitch, roll, yaw), accelaration data in (x,y,z) coordination.
41 |
42 | - **x - pitch**
43 | - **y - roll**
44 | - **z - yaw (*Azimuth*)**
45 |
46 | ### Transfer the geomagnetic filed intensity from device coordination system to global coordination system
47 |
48 | We have tried several ways :
49 |
50 | 1. **Rotation Matrix**
51 | 2. **quaternion**
52 |
53 | The performance was not as expected and varied in different devices, we made a tradeodd by keeping the devides at same pose when measuring.
54 |
55 |
56 |
57 | ### To keep data accurate and stable
58 |
59 | While WiFi and IMU data were collected together, for one measurement of each point, the collection times of IMU data would be same as the number of APs of that point detected. (Usually more than 50 times), and **Kalman Filter** was implemented in android APP.
60 |
61 |
62 |
63 | ### Data collection
64 |
65 | 
66 |
67 | (Drawn by Zhe (Tim) Tang )
68 |
69 | We collected two areas in 4th and 5th floors of IBSS, XJTLU. The total area is around 300 $m^2$ .
70 |
71 | ### Study on geomagnetic field by different devices on one path
72 |
73 | 
74 |
75 | We found that although the detecting data at one point varies a lot for different devices, the characteristic of changing patterns along one path are very similar.
76 |
77 |
78 |
79 | ### Study on geomagnetic field by different poses of one device
80 |
81 | 
82 |
83 | Although the deteacting data varies when changing the pose of device at one point, the changing patterns along one path are similar, two.
84 |
85 |
86 |
87 | ### The geomagnetic field map for two floors
88 |
89 | 
90 |
91 | **4th floor**
92 |
93 | 
94 |
95 | **5th floor**
96 |
97 | ### Training data: Random waypoint model
98 |
99 | For training data, considering the special characteristic that despite very stable spatially, there are many points with same geomagnetic field intensity, which limits the usage as fingerprint like Wi-Fi signal (where the mac address is unique). We generated a long path of 10,000 steps based on random waypoint model, for both training and evaluation (0.75:0.25).
100 |
101 | 
102 |
103 | **random waypoint model**
104 |
105 | ### Training the LSTM network
106 |
107 | 
108 |
109 | **model structure**
110 |
111 | 
112 |
113 | Training accuracy with different hidden nodes
114 |
115 | 
116 |
117 | Training accuracy with different batch size
118 |
119 |
120 |
121 | 
122 |
123 | Training accuracy with different time steps
124 |
125 | 
126 |
127 |
128 |
129 | **Evaluation error based on 25,000 points**
130 |
131 |
132 |
133 | ## Outcomes
134 |
135 | ### Github repository
136 |
137 | - [Meng (Lemon) Wei](https://github.com/weimengmeng1999/CNN_based_indoor_localization)
138 | - [Zhenghang (Klaus) Zhong](https://github.com/ZzhKlaus/2018-SURF-Trajectory-Estimation)
139 |
140 | ### Publications
141 |
142 | - Zhenghang Zhong, Zhe Tang, Xiangxing Li, Tiancheng Yuan, Yang Yang, Wei Meng, Yuanyuan Zhang, Renzhi Sheng, Naomi Grant, Chongfeng Ling, Xintao Huan, Kyeong Soo Kim and Sanghyuk Lee, "XJTLUIndoorLoc: A new fingerprinting database for indoor localization and trajectory estimation based on Wi-Fi RSS and geomagnetic field," *submitted to* [*GCA'18*](https://is-candar.org/GCA18/), Sep. 7, 2018.
143 |
144 | ## References
145 |
146 | ### Trajectory estimation and PDR
147 |
148 | 1. Ho Jun Jang, Jae Min Shin, and Lynn Choi, "Geomagnetic field based indoor localization using recurrent neural networks," *Proc. GLOBECOM 2017*, pp. 1-6, Dec. 2017. ([DOI](https://doi.org/10.1109/GLOCOM.2017.8254556))
149 |
150 | 2. [DeepML: Deep LSTM for Indoor Localization with Smartphone Magnetic and Light Sensors](http://www.eng.auburn.edu/~szm0001/papers/ICC18_DeepML.pdf)
151 |
152 |
153 |
154 | ### Rucurrent neural networks (RNNs) and long short-term memory (LSTM) networks
155 |
156 | 1. [A Critical Review of Recurrent Neural Networks for Sequence Learning](https://arxiv.org/abs/1506.00019)
157 |
158 | 2. [An advanced method for pedestrian dead reckoning using BLSTM-RNNs](https://ieeexplore.ieee.org/document/7346954/)
159 |
160 | 3. [From Recurrent Neural Network to Long Short Term Memory Architecture](https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/43905.pdf)
161 |
162 | 4. [LSTM AND EXTENDED DEAD RECKONING AUTOMOBILE ROUTE PREDICTION USING SMARTPHONE SENSORS](https://www.ideals.illinois.edu/handle/2142/97357)
163 |
164 | 5. [Keras & machinelearningmastery](https://machinelearningmastery.com/)
165 |
166 |
167 |
168 | ### Fingerprint database combined with IMU data
169 |
170 | 1. [A multisource and multivariate dataset for indoor localization methods based on WLAN and geo-magnetic field fingerprinting](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=7743678)
171 |
172 | 2. [MagPIE: A Dataset for Indoor Positioning with Magnetic Anomalies](https://ieeexplore.ieee.org/document/8115961/)
173 |
174 | 3. [UJIIndoorLoc-Mag: A New Database for Magnetic Field-Based Localization Problems](https://ieeexplore.ieee.org/document/7346763/)
175 |
176 |
177 |
--------------------------------------------------------------------------------
/server/delete_repetition.py:
--------------------------------------------------------------------------------
1 | '''
2 | Usually we donot need this file.
3 |
4 | As at first, we forget to call the function to refresh file 'tempList.csv',
5 | rather than re-detecting the data, I found that we could delete the repeated
6 | info from tail to head, as the info is stored into database in groups, compare
7 | these groups one by one conversely, and delte info that is repeated in latter one.
8 |
9 | '''
10 | import csv
11 | import pandas as pdb
12 | import numpy as np
13 | import tensorflow as tf
14 | #from sklearn.preprocessing import scale
15 | import matplotlib.pyplot as plt
16 |
17 | PYTHONIOENCODING="UTF-8" #set the utf-8 encode mode
18 |
19 |
20 | FILE_0_old = '0_xxx_0_1_5E_39.csv'
21 | FILE_1_old = '1_xxx_0_1_5SW.csv'
22 | FILE_2_old = '2_xxx_0_2_0_3_5f.csv'
23 | FILE_3_old = '3_xxx_0_4_5f.csv'
24 | FILE_4_old = '4_xxx_0_5_5f.csv'
25 | FILE_5_old = '5_xxx_0_6_5f.csv'
26 | FILE_6_old = '6_xxx_0_7_5f.csv'
27 | FILE_7_old = '7_xxx_0_8_5f.csv'
28 | FILE_8_old = '8_xxx_0_9_5f.csv'
29 | FILE_9_old = '9_xxx_0_10_5f.csv'
30 | FILE_10_old = '10_xxx_0_11_5f.csv'
31 | FILE_11_old = '11_xxx_0_12_5f.csv'
32 | FILE_12_old = '12_xxx_0_0_1_4f.csv'
33 | FILE_13_old = '13_xxx_0_2_4f.csv'
34 | FILE_14_old = '14_xxx_0_3_4_5f.csv'
35 | FILE_15_old = '15_xxx_0_5_4f.csv'
36 | FILE_dif_direc_old = 'diff-direction-0_5_4f.csv'
37 |
38 | FILE_0_new = '0_new_0_1_5E_39.csv'
39 | FILE_1_new = '1_new_0_1_5SW.csv'
40 | FILE_2_new = '2_new_0_2_0_3_5f.csv'
41 | FILE_3_new = '3_new_0_4_5f.csv'
42 | FILE_4_new = '4_new_0_5_5f.csv'
43 | FILE_5_new = '5_new_0_6_5f.csv'
44 | FILE_6_new = '6_new_0_7_5f.csv'
45 | FILE_7_new = '7_new_0_8_5f.csv'
46 | FILE_8_new = '8_new_0_9_5f.csv'
47 | FILE_9_new = '9_new_0_10_5f.csv'
48 | FILE_10_new = '10_new_0_11_5f.csv'
49 | FILE_11_new = '11_new_0_12_5f.csv'
50 | FILE_12_new = '12_new_0_0_1_4f.csv'
51 | FILE_13_new = '13_new_0_2_4f.csv'
52 | FILE_14_new = '14_new_0_3_4_5f.csv'
53 | FILE_15_new = '15_new_0_5_4f.csv'
54 | FILE_dif_direc_new = 'new_diff-direction-0_5_4f.csv'
55 |
56 | FILE_mix_0_old = 'MIX2_0_xxx_0_0_1_4f.csv'
57 | FILE_mix_1_old = 'MIX2_1_xxx_0_2_4f.csv'
58 | FILE_mix_2_old = 'MIX2_2_xxx_0_3-S27_4f.csv'
59 | FILE_mix_3_old = 'MIX2_3_xxx_0_4_4f.csv'
60 | FILE_mix_4_old = 'MIX2_4_xxx_0_5_4f.csv'
61 |
62 | FILE_mix_0_new = 'MIX2_0_new_0_0_1_4f.csv'
63 | FILE_mix_1_new = 'MIX2_1_new_0_2_4f.csv'
64 | FILE_mix_2_new = 'MIX2_2_new_0_3-S27_4f.csv'
65 | FILE_mix_3_new = 'MIX2_3_new_0_4_4f.csv'
66 | FILE_mix_4_new = 'MIX2_4_new_0_5_4f.csv'
67 |
68 | def delete_repetition(FileName_this, FileName_last, FileName_new):
69 | with open('mapping.csv', 'r', newline='') as csvfile:
70 | reader = csv.reader(csvfile)
71 | APs = [row for row in reader]
72 | APlength = len(APs) - 1
73 |
74 | with open(FileName_this, 'r', newline='') as csvfile:
75 | reader = csv.reader(csvfile)
76 | RSS = [row for row in reader]
77 | samples = int((len(RSS)-1) / APlength)
78 | """print('length:',len(RSS))
79 | print(APlength)
80 | print(samples)
81 | print('samples:',samples)
82 | print('0,0:',RSS[0][0])
83 | print(float(RSS[2][14]))"""
84 |
85 | for s in range(samples,1,-1):
86 | for AP in range(APlength-1,-1,-1):
87 | if RSS[s*APlength-AP][14] != 'none' and RSS[(s-1)*APlength-AP][14] != 'none':
88 |
89 | if float(RSS[s*APlength-AP][14]) == float(RSS[(s-1)*APlength-AP][14]) and float(RSS[s*APlength-AP][15]) == float(RSS[(s-1)*APlength-AP][15]) and float(RSS[s*APlength-AP][16]) == float(RSS[(s-1)*APlength-AP][16]) or RSS[s*APlength-AP][1]=='surf' or RSS[s*APlength-AP][1]=='SURF':
90 | RSS[s*APlength-AP][6] = 'none'
91 | RSS[s*APlength-AP][7] = 'none'
92 | RSS[s*APlength-AP][8] = 'none'
93 | RSS[s*APlength-AP][9] = 'none'
94 | RSS[s*APlength-AP][10] = 'none'
95 | RSS[s*APlength-AP][11] = 'none'
96 | RSS[s*APlength-AP][12] = 'none'
97 | RSS[s*APlength-AP][13] = '-110'
98 | RSS[s*APlength-AP][14] = 'none'
99 | RSS[s*APlength-AP][15] = 'none'
100 | RSS[s*APlength-AP][16] = 'none'
101 | RSS[s*APlength-AP][18] = 'none'
102 |
103 | with open(FileName_last, 'r', newline='') as csvfile:
104 | reader = csv.reader(csvfile)
105 | RSS_old = [row for row in reader]
106 | samples_old = int((len(RSS_old)-1) / APlength)
107 |
108 | #print(samples_old*APlength-(APlength-1))
109 | x =0
110 | for AP in range(APlength-1,-1,-1):
111 | #print(RSS[APlength-AP][0])
112 | if RSS[APlength-AP][16] != 'none' and RSS_old[(samples_old)*APlength-AP][14] != 'none':
113 | if float(RSS[APlength-AP][14]) == float(RSS_old[(samples_old)*APlength-AP][14]) and float(RSS[APlength-AP][15]) == float(RSS_old[(samples_old)*APlength-AP][15]) and float(RSS[APlength-AP][16]) == float(RSS_old[(samples_old)*APlength-AP][16]) or RSS[APlength-AP][1]=='surf' or RSS[APlength-AP][1]=='SURF':
114 | RSS[APlength-AP][6] = 'none'
115 | RSS[APlength-AP][7] = 'none'
116 | RSS[APlength-AP][8] = 'none'
117 | RSS[APlength-AP][9] = 'none'
118 | RSS[APlength-AP][10] = 'none'
119 | RSS[APlength-AP][11] = 'none'
120 | RSS[APlength-AP][12] = 'none'
121 | RSS[APlength-AP][13] = '-110'
122 | RSS[APlength-AP][14] = 'none'
123 | RSS[APlength-AP][15] = 'none'
124 | RSS[APlength-AP][16] = 'none'
125 | RSS[APlength-AP][18] = 'none'
126 |
127 |
128 | with open(FileName_new, 'w', newline='') as csvfile:
129 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
130 |
131 | for i in range(len(RSS)):
132 | data = ([
133 | RSS[i][0], RSS[i][1], RSS[i][2], RSS[i][3], RSS[i][4], RSS[i][5], RSS[i][6], RSS[i][7], RSS[i][8], RSS[i][9], RSS[i][10], RSS[i][11], RSS[i][12], RSS[i][13], RSS[i][14], RSS[i][15], RSS[i][16], RSS[i][17], RSS[i][18]
134 | ])
135 | spamwriter.writerow(data)
136 |
137 | def delete_repetition_fistFile(FileName_this, FileName_new):
138 | with open('mapping.csv', 'r', newline='') as csvfile:
139 | reader = csv.reader(csvfile)
140 | APs = [row for row in reader]
141 | APlength = len(APs) - 1
142 |
143 | with open(FileName_this, 'r', newline='') as csvfile:
144 | reader = csv.reader(csvfile)
145 | RSS = [row for row in reader]
146 | samples = int((len(RSS)-1) / APlength)
147 | print('samples:',samples)
148 | print(samples*APlength+1)
149 |
150 |
151 | for s in range(samples,0,-1):
152 | for AP in range(APlength-1,-1,-1):
153 | if RSS[s*APlength-AP][14] == RSS[(s-1)*APlength-AP][14] and RSS[s*APlength-AP][15] == RSS[(s-1)*APlength-AP][15] and RSS[s*APlength-AP][16] == RSS[(s-1)*APlength-AP][16] or RSS[s*APlength-AP][1]=='surf' or RSS[s*APlength-AP][1]=='SURF':
154 | RSS[s*APlength-AP][6] = 'none'
155 | RSS[s*APlength-AP][7] = 'none'
156 | RSS[s*APlength-AP][8] = 'none'
157 | RSS[s*APlength-AP][9] = 'none'
158 | RSS[s*APlength-AP][10] = 'none'
159 | RSS[s*APlength-AP][11] = 'none'
160 | RSS[s*APlength-AP][12] = 'none'
161 | RSS[s*APlength-AP][13] = '-110'
162 | RSS[s*APlength-AP][14] = 'none'
163 | RSS[s*APlength-AP][15] = 'none'
164 | RSS[s*APlength-AP][16] = 'none'
165 | RSS[s*APlength-AP][18] = 'none'
166 |
167 |
168 |
169 | with open(FileName_new, 'w', newline='') as csvfile:
170 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
171 |
172 | for i in range(len(RSS)):
173 | data = ([
174 | RSS[i][0], RSS[i][1], RSS[i][2], RSS[i][3], RSS[i][4], RSS[i][5], RSS[i][6], RSS[i][7], RSS[i][8], RSS[i][9], RSS[i][10], RSS[i][11], RSS[i][12], RSS[i][13], RSS[i][14], RSS[i][15], RSS[i][16], RSS[i][17], RSS[i][18]
175 | ])
176 | spamwriter.writerow(data)
177 |
178 | if __name__ == "__main__":
179 |
180 |
181 |
182 | delete_repetition(FILE_dif_direc_old,FILE_15_old,FILE_dif_direc_new)
183 | delete_repetition(FILE_15_old,FILE_14_old,FILE_15_new)
184 | delete_repetition(FILE_14_old,FILE_13_old,FILE_14_new)
185 | delete_repetition(FILE_13_old,FILE_12_old,FILE_13_new)
186 | delete_repetition(FILE_12_old,FILE_11_old,FILE_12_new)
187 | delete_repetition(FILE_11_old,FILE_10_old,FILE_11_new)
188 | delete_repetition(FILE_10_old,FILE_9_old,FILE_10_new)
189 | delete_repetition(FILE_9_old,FILE_8_old,FILE_9_new)
190 | delete_repetition(FILE_8_old,FILE_7_old,FILE_8_new)
191 | delete_repetition(FILE_7_old,FILE_6_old,FILE_7_new)
192 | delete_repetition(FILE_6_old,FILE_5_old,FILE_6_new)
193 | delete_repetition(FILE_5_old,FILE_4_old,FILE_5_new)
194 | delete_repetition(FILE_4_old,FILE_3_old,FILE_4_new)
195 | delete_repetition(FILE_3_old,FILE_2_old,FILE_3_new)
196 | delete_repetition(FILE_2_old,FILE_1_old,FILE_2_new)
197 | delete_repetition(FILE_1_old,FILE_0_old,FILE_1_new)
198 | delete_repetition_fistFile(FILE_0_old,FILE_0_new)
199 |
200 | delete_repetition(FILE_mix_4_old,FILE_mix_3_old,FILE_mix_4_new)
201 | delete_repetition(FILE_mix_3_old,FILE_mix_2_old,FILE_mix_3_new)
202 | delete_repetition(FILE_mix_2_old,FILE_mix_1_old,FILE_mix_2_new)
203 | delete_repetition(FILE_mix_1_old,FILE_mix_0_old,FILE_mix_1_new)
204 | delete_repetition_fistFile(FILE_mix_0_old,FILE_mix_0_new)
205 |
206 |
207 | '''
208 | with open('mapping.csv', 'r', newline='') as csvfile:
209 | reader = csv.reader(csvfile)
210 | APs = [row for row in reader]
211 | APlength = len(APs) - 1
212 |
213 | with open('15_xxx_0_5_4f.csv', 'r', newline='') as csvfile:
214 | reader = csv.reader(csvfile)
215 | RSS = [row for row in reader]
216 | samples = int((len(RSS)-1) / APlength)
217 | print('samples:',samples)
218 | print(samples*APlength+1)
219 |
220 |
221 | for s in range(samples,0,-1):
222 | for AP in range(APlength-1,-1,-1):
223 | if RSS[s*APlength-AP][14] == RSS[(s-1)*APlength-AP][14] and RSS[s*APlength-AP][15] == RSS[(s-1)*APlength-AP][15] and RSS[s*APlength-AP][16] == RSS[(s-1)*APlength-AP][16]:
224 | RSS[s*APlength-AP][6] = 'none'
225 | RSS[s*APlength-AP][7] = 'none'
226 | RSS[s*APlength-AP][8] = 'none'
227 | RSS[s*APlength-AP][9] = 'none'
228 | RSS[s*APlength-AP][10] = 'none'
229 | RSS[s*APlength-AP][11] = 'none'
230 | RSS[s*APlength-AP][12] = 'none'
231 | RSS[s*APlength-AP][13] = '-110'
232 | RSS[s*APlength-AP][14] = 'none'
233 | RSS[s*APlength-AP][15] = 'none'
234 | RSS[s*APlength-AP][16] = 'none'
235 | RSS[s*APlength-AP][18] = 'none'
236 |
237 | with open(FILE_15_new, 'w', newline='') as csvfile:
238 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
239 | spamwriter.writerow(['BSSID', 'SSID','Building', 'Floor','Location_x', 'Location_y', 'Frequency','AccX','AccY','AccZ', 'ORIx','ORIy','ORIz','Level', 'GeoX','GeoY','GeoZ', 'Model','Time'])
240 |
241 | for i in range(len(RSS)):
242 | data = ([
243 | RSS[i][0], RSS[i][1], RSS[i][2], RSS[i][3], RSS[i][4], RSS[i][5], RSS[i][6], RSS[i][7], RSS[i][8], RSS[i][9], RSS[i][10], RSS[i][11], RSS[i][12], RSS[i][13], RSS[i][14], RSS[i][15], RSS[i][16], RSS[i][17], RSS[i][18]
244 | ])
245 | spamwriter.writerow(data)
246 | '''
247 |
--------------------------------------------------------------------------------
/server/construct_ipin.py:
--------------------------------------------------------------------------------
1 | import csv
2 | import pandas as pd
3 | import numpy as np
4 | PYTHONIOENCODING="UTF-8" #set the utf-8 encode mode
5 |
6 |
7 | FileName0 = '0_new_0_1_5E_39.csv'
8 | FileName0_after = 'dataset_0.csv'
9 |
10 | FileName1 = '1_new_0_1_5SW.csv'
11 | FileName1_after = 'dataset_1.csv'
12 |
13 | FileName2 = '2_new_0_2_0_3_5f.csv'
14 | FileName2_after = 'dataset_2.csv'
15 |
16 | FileName3 = '3_new_0_4_5f.csv'
17 | FileName3_after = 'dataset_3.csv'
18 |
19 | FileName4 = '4_new_0_5_5f.csv'
20 | FileName4_after = 'dataset_4.csv'
21 |
22 | FileName5 = '5_new_0_6_5f.csv'
23 | FileName5_after = 'dataset_5.csv'
24 |
25 | FileName6 = '6_new_0_7_5f.csv'
26 | FileName6_after = 'dataset_6.csv'
27 |
28 | FileName7 = '7_new_0_8_5f.csv'
29 | FileName7_after = 'dataset_7.csv'
30 |
31 | FileName8 = '8_new_0_9_5f.csv'
32 | FileName8_after = 'dataset_8.csv'
33 |
34 | FileName9 = '9_new_0_10_5f.csv'
35 | FileName9_after = 'dataset_9.csv'
36 |
37 | FileName10 = '10_new_0_11_5f.csv'
38 | FileName10_after = 'dataset_10.csv'
39 |
40 | FileName11 = '11_new_0_12_5f.csv'
41 | FileName11_after = 'dataset_11.csv'
42 |
43 | FileName12 = '12_new_0_0_1_4f.csv'
44 | FileName12_after = 'dataset_12.csv'
45 |
46 | FileName13 = '13_new_0_2_4f.csv'
47 | FileName13_after = 'dataset_13.csv'
48 |
49 | FileName14 = '14_new_0_3_4_5f.csv'
50 | FileName14_after = 'dataset_14.csv'
51 |
52 | FileName15 = '15_new_0_5_4f.csv'
53 | FileName15_after = 'dataset_15.csv'
54 |
55 | datasetOri = 'new_diff-direction-0_5_4f.csv'
56 | datasetOri_after = 'datasetOri.csv'
57 |
58 |
59 | datasetMix0 = 'MIX2_0_new_0_0_1_4f.csv'
60 | datasetMix0_after = 'datasetMix_0.csv'
61 |
62 | datasetMix1 = 'MIX2_1_new_0_2_4f.csv'
63 | datasetMix1_after = 'datasetMix_1.csv'
64 |
65 | datasetMix2 = 'MIX2_2_new_0_3-S27_4f.csv'
66 | datasetMix2_after = 'datasetMix_2.csv'
67 |
68 | datasetMix3 = 'MIX2_3_new_0_4_4f.csv'
69 | datasetMix3_after = 'datasetMix_3.csv'
70 |
71 | datasetMix4 = 'MIX2_4_new_0_5_4f.csv'
72 | datasetMix4_after = 'datasetMix_4.csv'
73 |
74 | dataset0 = pd.read_csv('0_new_0_1_5E_39.csv', header = 0)
75 | dataset1 = pd.read_csv('1_new_0_1_5SW.csv', header = 0)
76 | dataset2 = pd.read_csv('2_new_0_2_0_3_5f.csv', header = 0)
77 | dataset3 = pd.read_csv('3_new_0_4_5f.csv', header = 0)
78 | dataset4 = pd.read_csv('4_new_0_5_5f.csv', header = 0)
79 | dataset5 = pd.read_csv('5_new_0_6_5f.csv', header = 0)
80 | dataset6 = pd.read_csv('6_new_0_7_5f.csv', header = 0)
81 | dataset7 = pd.read_csv('7_new_0_8_5f.csv', header = 0)
82 | dataset8 = pd.read_csv('8_new_0_9_5f.csv', header = 0)
83 | dataset9 = pd.read_csv('9_new_0_10_5f.csv', header = 0)
84 | dataset10 = pd.read_csv('10_new_0_11_5f.csv', header = 0)
85 | dataset11 = pd.read_csv('11_new_0_12_5f.csv', header = 0)
86 | dataset12 = pd.read_csv('12_new_0_0_1_4f.csv', header = 0)
87 | dataset13 = pd.read_csv('13_new_0_2_4f.csv', header = 0)
88 | dataset14 = pd.read_csv('14_new_0_3_4_5f.csv', header = 0)
89 | dataset15 = pd.read_csv('15_new_0_5_4f.csv', header = 0)
90 |
91 |
92 | '''
93 | with open('MIX2_0_new_0_0_1_4f.csv', 'r', newline='') as csvfile:
94 | reader = csv.reader(csvfile)
95 | RSS = [row for row in reader]
96 | print(len(RSS))
97 | '''
98 | '''
99 | with open('2_new_0_2_0_3_5f.csv', 'r', newline='') as csvfile:
100 | reader = csv.reader(csvfile)
101 | RSS = [row for row in reader]
102 | print(len(RSS))
103 | with open('2_new_0_2_0_3_5f_new.csv', 'w', newline='') as csvfile:
104 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
105 | #edition3
106 | for row in range(0,188857):
107 | data = ([
108 | RSS[row][0], RSS[row][1], RSS[row][2], RSS[row][3], RSS[row][4], RSS[row][5], RSS[row][6], RSS[row][7], RSS[row][8], RSS[row][9], RSS[row][10], RSS[row][11], RSS[row][12], RSS[row][13], RSS[row][14], RSS[row][15], RSS[row][16], RSS[row][17], RSS[row][18]
109 | ])
110 | spamwriter.writerow(data)
111 | '''
112 |
113 | FileName_Total = 'Total.csv'
114 |
115 | def concataneate1Files(FileName_Original,FileName_new = FileName_Total):
116 |
117 | x = []
118 | with open(FileName_Original, 'r', newline='') as csvfile:
119 | reader = csv.reader(csvfile)
120 | RSS = [row for row in reader]
121 | RSS = np.asarray(RSS)
122 | with open(FileName_new, 'a', newline='') as csvfile:
123 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
124 |
125 | for row in range(len(RSS)):
126 | for column in range(RSS.shape[1]):
127 | x.append(RSS[row][column])
128 | #x = ([
129 | # RSS[row][0], RSS[row][1], RSS[row][2], RSS[row][3], RSS[row][4], RSS[row][5], RSS[row][6], RSS[row][7], RSS[row][8], RSS[row][9], RSS[row][10], RSS[row][11], RSS[row][12], RSS[row][13], RSS[row][14], RSS[row][15], RSS[row][16], RSS[row][17], RSS[row][18]
130 | #])
131 |
132 | spamwriter.writerow(x)
133 | x = []
134 |
135 | def concataneate2Files(FileName_Original,FileName_addition,FileName_new = FileName_Total):
136 |
137 | x = []
138 | with open(FileName_Original, 'r', newline='') as csvfile:
139 | reader = csv.reader(csvfile)
140 | RSS_Ori = [row for row in reader]
141 |
142 | with open(FileName_addition, 'r', newline='') as csvfile:
143 | reader = csv.reader(csvfile)
144 | RSS_Add = [row for row in reader]
145 |
146 | with open(FileName_new, 'a', newline='') as csvfile:
147 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
148 | RSS = np.vstack((RSS_Ori,RSS_Add))
149 | print(RSS.shape[1])
150 | print('type:',type(RSS))
151 |
152 | for row in range(len(RSS)):
153 | for column in range(RSS.shape[1]):
154 | x.append(RSS[row][column])
155 | #x = ([
156 | # RSS[row][0], RSS[row][1], RSS[row][2], RSS[row][3], RSS[row][4], RSS[row][5], RSS[row][6], RSS[row][7], RSS[row][8], RSS[row][9], RSS[row][10], RSS[row][11], RSS[row][12], RSS[row][13], RSS[row][14], RSS[row][15], RSS[row][16], RSS[row][17], RSS[row][18]
157 | #])
158 |
159 | spamwriter.writerow(x)
160 | x = []
161 |
162 |
163 |
164 | '''
165 | datasetOri = pd.read_csv(FileName_Original, header = 0)
166 | datasetAdd = pd.read_csv(FileName_addition, header = 0)
167 | frames = np.vstack((datasetOri,datasetAdd))
168 | frames = pd.DataFrame(frames)
169 | #Ori = pd.DataFrame(datasetOri)
170 | #Add = pd.DataFrame(datasetAdd)
171 | new = pd.concat([frames],ignore_index=True,sort=False)
172 |
173 | print(new.shape)
174 | new.to_csv(FileName_new, header = 0)
175 | '''
176 | '''
177 | concataneate2Files(FileName0_after,FileName1_after)
178 | concataneate2Files(FileName2_after,FileName3_after)
179 | concataneate2Files(FileName4_after,FileName5_after)
180 | concataneate2Files(FileName6_after,FileName7_after)
181 | concataneate2Files(FileName8_after,FileName9_after)
182 | concataneate2Files(FileName10_after,FileName11_after)
183 | concataneate2Files(FileName12_after,FileName13_after)
184 | concataneate2Files(FileName14_after,FileName15_after)
185 | '''
186 |
187 | '''
188 | concataneate2Files(datasetMix0_after,datasetMix1_after)
189 | concataneate2Files(datasetMix2_after,datasetMix3_after)
190 | concataneate1Files(datasetMix4_after)
191 | '''
192 | concataneate1Files(datasetMix4_after)
193 |
194 |
195 | def contructDataset(FileName,FileName_after, isHead):
196 | dataset = pd.read_csv(FileName, header = 0)
197 | print('length:',len(dataset))
198 | RSS = np.asarray(dataset.ix[:, 13])
199 | if(isHead ==1):
200 | head = []
201 | for i in range(516):
202 | if(i<10):
203 | head.append('WAP00'+str(i))
204 | elif(i<100):
205 | head.append('WAP0'+str(i))
206 | else:
207 | head.append('WAP'+str(i))
208 | head.append('Loc_x')
209 | head.append('Loc_y')
210 | head.append('Floor')
211 | head.append('Building')
212 | head.append('Model')
213 | head.append('TimeStamp')
214 | head.append('GeoX')
215 | head.append('GeoY')
216 | head.append('GeoZ')
217 | head.append('AccX')
218 | head.append('AccY')
219 | head.append('AccZ')
220 | head.append('OriX')
221 | head.append('GriY')
222 | head.append('GriZ')
223 |
224 | inertia = []
225 | GeoX = 0
226 | GeoY = 0
227 | GeoZ = 0
228 | AccX = 0
229 | AccY = 0
230 | AccZ = 0
231 | OriX = 0
232 | OriY = 0
233 | OriZ = 0
234 | APnumber = 0
235 | for i in range(len(RSS)):
236 | if dataset.ix[i,14] != 'none':
237 | APnumber += 1
238 | GeoX += float(dataset.ix[i,14])
239 | GeoY += float(dataset.ix[i,15])
240 | GeoZ += float(dataset.ix[i,16])
241 | AccX += float(dataset.ix[i,7])
242 | AccY += float(dataset.ix[i,8])
243 | AccZ += float(dataset.ix[i,9])
244 | OriX += float(dataset.ix[i,10])
245 | OriY += float(dataset.ix[i,11])
246 | OriZ += float(dataset.ix[i,12])
247 | if (i+1) % 516 == 0:
248 | if APnumber != 0:
249 | GeoX = GeoX/APnumber
250 | GeoY = GeoY/APnumber
251 | GeoZ = GeoZ/APnumber
252 | AccX = AccX/APnumber
253 | AccY = AccY/APnumber
254 | AccZ = AccZ/APnumber
255 | OriX = OriX/APnumber
256 | OriY = OriY/APnumber
257 | OriZ = OriZ/APnumber
258 | inertia.append(GeoX)
259 | inertia.append(GeoY)
260 | inertia.append(GeoZ)
261 | inertia.append(AccX)
262 | inertia.append(AccY)
263 | inertia.append(AccZ)
264 | inertia.append(OriX)
265 | inertia.append(OriY)
266 | inertia.append(OriZ)
267 | GeoX = 0
268 | GeoY = 0
269 | GeoZ = 0
270 | AccX = 0
271 | AccY = 0
272 | AccZ = 0
273 | OriX = 0
274 | OriY = 0
275 | OriZ = 0
276 | APnumber = 0
277 |
278 | labels = []
279 | for i in range(len(RSS)):
280 | if (i+1) % 516 == 0:
281 | labels.append(dataset.ix[i,4])
282 | labels.append(dataset.ix[i,5])
283 | labels.append(dataset.ix[i,3])
284 | labels.append(dataset.ix[i,2])
285 | labels.append(dataset.ix[i,17])
286 | labels.append(dataset.ix[i,18])
287 |
288 | RSS = RSS.reshape([int(RSS.shape[0]/516), 516])
289 | labels = np.asarray(labels).reshape([int(len(labels)/6), 6])
290 | inertia = np.asarray(inertia).reshape([int(len(inertia)/9), 9])
291 |
292 | dataset = np.hstack((np.hstack((RSS, labels)),inertia))
293 | print(dataset.shape)
294 |
295 | new = pd.DataFrame(dataset)
296 |
297 | if(isHead == 1):
298 | new.to_csv(FileName_after, header = head[:])
299 | elif(isHead == 0):
300 | new.to_csv(FileName_after, header = 0)
301 |
302 | '''
303 | contructDataset(FileName0,FileName0_after,isHead = 1)
304 | contructDataset(FileName1,FileName1_after,isHead = 0)
305 | contructDataset(FileName2,FileName2_after,isHead = 0)
306 | contructDataset(FileName3,FileName3_after,isHead = 0)
307 | contructDataset(FileName4,FileName4_after,isHead = 0)
308 | contructDataset(FileName5,FileName5_after,isHead = 0)
309 | contructDataset(FileName6,FileName6_after,isHead = 0)
310 | contructDataset(FileName7,FileName7_after,isHead = 0)
311 | contructDataset(FileName8,FileName8_after,isHead = 0)
312 | contructDataset(FileName9,FileName9_after,isHead = 0)
313 | contructDataset(FileName10,FileName10_after,isHead = 0)
314 | contructDataset(FileName11,FileName11_after,isHead = 0)
315 | contructDataset(FileName12,FileName12_after,isHead = 0)
316 | contructDataset(FileName13,FileName13_after,isHead = 0)
317 | contructDataset(FileName14,FileName14_after,isHead = 0)
318 | contructDataset(FileName15,FileName15_after,isHead = 0)
319 | contructDataset(datasetOri,datasetOri_after,isHead = 1)
320 | contructDataset(datasetMix0,datasetMix0_after,isHead = 1)
321 | contructDataset(datasetMix1,datasetMix1_after,isHead = 0)
322 | contructDataset(datasetMix2,datasetMix2_after,isHead = 0)
323 | contructDataset(datasetMix3,datasetMix3_after,isHead = 0)
324 | contructDataset(datasetMix4,datasetMix4_after,isHead = 0)
325 | '''
326 | #print(dataset[:, -1])
327 |
328 |
329 |
330 |
331 | '''with open('APs.csv', 'w', newline='') as csvfile:
332 | if not os.path.getsize('./APs.csv'):
333 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
334 | spamwriter.writerow([ 'BSSID','SSID','Building', 'Floor','Location_x', 'Location_y','Frequency','AccX','AccY','AccZ','ORIx','ORIy','ORIz','Level','GeoX','GeoY','GeoZ'])
335 |
336 | '''
--------------------------------------------------------------------------------
/server/mapping.csv:
--------------------------------------------------------------------------------
1 | 44:6a:2e:09:c6:81,43
2 | 44:6a:2e:09:f4:90,261
3 | 44:6a:2e:09:d2:d0,262
4 | a4:c6:4f:d5:df:30,263
5 | 44:6a:2e:09:d6:20,264
6 | 44:6a:2e:09:c0:c0,0
7 | 00:06:f4:b8:12:30,1
8 | 44:6a:2e:09:c1:c1,2
9 | 44:6a:2e:07:41:91,265
10 | 44:6a:2e:09:f7:01,3
11 | 00:06:f4:b8:0f:a1,4
12 | 56:e4:bd:bd:02:45,5
13 | 44:6a:2e:09:c7:b0,6
14 | 44:6a:2e:09:c0:30,7
15 | 44:6a:2e:09:d6:e0,268
16 | 44:6a:2e:09:d2:c0,270
17 | 44:6a:2e:09:f4:a1,269
18 | a4:c6:4f:d5:fa:c1,9
19 | 00:06:f4:b8:1a:70,272
20 | 44:6a:2e:09:d7:c1,274
21 | 44:6a:2e:09:f2:71,10
22 | 44:6a:2e:07:33:f1,275
23 | 44:6a:2e:09:f4:81,11
24 | 00:06:f4:b8:0f:90,276
25 | 24:4c:07:00:d9:80,277
26 | 44:6a:2e:09:c3:a0,278
27 | 44:6a:2e:07:42:c0,385
28 | 00:06:f4:b8:1b:10,12
29 | 44:6a:2e:09:d2:81,279
30 | 44:6a:2e:07:40:01,280
31 | 44:6a:2e:07:41:90,281
32 | 44:6a:2e:09:f6:20,282
33 | 44:6a:2e:07:40:91,13
34 | 44:6a:2e:09:c5:c1,14
35 | 00:06:f4:b8:1b:c0,15
36 | 44:6a:2e:09:bf:11,16
37 | 00:06:f4:b8:11:41,284
38 | 44:6a:2e:09:c4:81,285
39 | 00:36:76:5e:d2:39,17
40 | 00:06:f4:b8:0f:91,18
41 | 44:6a:2e:09:c4:60,481
42 | 44:6a:2e:09:c1:41,287
43 | 44:6a:2e:09:c2:71,443
44 | 44:6a:2e:09:c0:01,388
45 | 44:6a:2e:09:c4:f1,20
46 | a4:c6:4f:d5:ef:b1,288
47 | 00:06:f4:b8:1a:91,174
48 | 44:6a:2e:09:f7:d1,21
49 | 44:6a:2e:07:43:91,22
50 | 44:6a:2e:07:40:50,379
51 | 44:6a:2e:09:c5:d1,23
52 | 44:6a:2e:09:c7:a0,24
53 | 44:6a:2e:09:f2:a0,291
54 | b0:d5:9d:ce:aa:37,292
55 | 44:6a:2e:07:14:80,293
56 | 44:6a:2e:09:d6:f0,25
57 | 44:6a:2e:09:c4:b1,26
58 | 44:6a:2e:07:14:a0,445
59 | 44:6a:2e:07:40:90,294
60 | 44:6a:2e:07:3b:b0,357
61 | 00:06:f4:b8:17:f0,27
62 | 44:6a:2e:09:c0:c1,28
63 | ac:4e:91:61:21:01,29
64 | 44:6a:2e:09:c3:a1,415
65 | a4:c6:4f:d5:fb:61,347
66 | 44:6a:2e:09:f1:c0,30
67 | 44:6a:2e:07:14:90,31
68 | 44:6a:2e:09:f6:31,33
69 | 44:6a:2e:07:36:50,296
70 | a4:c6:4f:d5:fb:01,298
71 | 44:6a:2e:07:43:00,299
72 | 44:6a:2e:07:33:e1,300
73 | 44:6a:2e:09:f2:00,34
74 | ac:4e:91:61:21:00,35
75 | 44:6a:2e:07:41:41,36
76 | 00:06:f4:b8:20:51,37
77 | 44:6a:2e:09:be:60,302
78 | 44:6a:2e:09:f1:60,303
79 | 00:06:f4:b8:17:30,266
80 | 00:06:f4:b8:12:e1,38
81 | 44:6a:2e:09:c6:51,41
82 | 44:6a:2e:09:f4:a0,40
83 | 44:6a:2e:09:d7:61,42
84 | 44:6a:2e:09:f5:11,484
85 | 44:6a:2e:09:c5:c0,306
86 | 28:f3:66:a7:b0:70,307
87 | 44:6a:2e:09:f4:91,44
88 | ac:4e:91:61:1f:c1,45
89 | 44:6a:2e:09:d2:d1,46
90 | 44:6a:2e:09:f5:60,47
91 | 44:6a:2e:09:c6:50,48
92 | 44:6a:2e:09:c2:a1,49
93 | 00:06:f4:b8:16:d0,512
94 | 44:6a:2e:09:f5:e1,51
95 | 44:6a:2e:09:f1:40,309
96 | 44:6a:2e:09:c2:b0,498
97 | 44:6a:2e:09:f5:d0,52
98 | 00:06:f4:b8:1a:90,310
99 | 44:6a:2e:09:f2:c1,234
100 | 84:a9:c4:ef:fb:2b,312
101 | 44:6a:2e:07:3b:a1,53
102 | 00:06:f4:b8:1c:10,314
103 | 44:6a:2e:09:f6:b0,54
104 | a4:c6:4f:d5:b1:d0,55
105 | 44:6a:2e:00:fa:a0,56
106 | 00:06:f4:b8:11:20,315
107 | 44:6a:2e:09:f5:f0,267
108 | 00:06:f4:b8:49:30,57
109 | 44:6a:2e:09:bf:60,316
110 | 00:06:f4:b8:1b:b1,58
111 | 84:a9:c4:ef:fb:4b,59
112 | 44:6a:2e:09:f6:41,317
113 | a4:c6:4f:d5:fb:71,505
114 | 44:6a:2e:09:ef:21,319
115 | 44:6a:2e:09:c4:91,320
116 | a4:c6:4f:d5:a6:61,321
117 | 00:ec:0a:7b:b9:10,322
118 | 44:6a:2e:09:d6:b0,323
119 | 00:06:f4:b8:11:11,8
120 | 44:6a:2e:09:f6:51,60
121 | 44:6a:2e:09:f7:41,486
122 | 44:6a:2e:07:3f:b0,324
123 | 44:6a:2e:07:3b:a0,451
124 | bc:d1:77:5c:11:c0,273
125 | 44:6a:2e:09:f1:81,325
126 | 44:6a:2e:09:f4:b1,61
127 | 44:6a:2e:09:f6:b1,326
128 | 44:6a:2e:09:f5:61,62
129 | 44:6a:2e:09:c6:21,63
130 | b4:0f:3b:9d:3f:28,64
131 | a4:c6:4f:d5:fa:f0,65
132 | 44:6a:2e:09:d8:71,66
133 | 44:6a:2e:09:f8:30,328
134 | 00:06:f4:b8:0f:a0,329
135 | 44:6a:2e:09:e9:40,331
136 | 44:6a:2e:09:c5:90,332
137 | 00:06:f4:b8:1a:81,67
138 | 44:6a:2e:09:c0:21,68
139 | 44:6a:2e:09:f0:e1,70
140 | 56:e4:bd:be:90:79,71
141 | 44:6a:2e:09:c5:91,72
142 | 44:6a:2e:07:3f:a0,73
143 | 00:06:f4:b8:11:10,334
144 | 44:6a:2e:09:f8:21,74
145 | a4:c6:4f:d5:b1:d1,510
146 | 00:06:f4:b8:1c:11,75
147 | 44:6a:2e:09:c1:b0,76
148 | 8c:25:05:d6:fa:6d,77
149 | 44:6a:2e:09:f6:81,78
150 | 44:6a:2e:09:f6:80,79
151 | a4:c6:4f:d5:df:20,80
152 | 44:6a:2e:07:41:b1,81
153 | 44:6a:2e:07:41:a0,82
154 | 44:6a:2e:09:f2:11,455
155 | 44:6a:2e:07:0f:d1,489
156 | 44:6a:2e:09:c2:a0,83
157 | a4:c6:4f:d5:fa:90,84
158 | 44:6a:2e:09:bd:d0,85
159 | 44:6a:2e:09:c3:b1,338
160 | 44:6a:2e:09:c4:f0,318
161 | 44:6a:2e:09:c6:40,339
162 | 44:6a:2e:09:f5:00,340
163 | 84:a9:c4:f0:01:6b,341
164 | 44:6a:2e:09:c7:a1,86
165 | 44:6a:2e:09:f2:10,87
166 | 44:6a:2e:09:d2:80,352
167 | a4:c6:4f:d5:fa:b1,88
168 | 44:6a:2e:09:f6:90,417
169 | 44:6a:2e:09:f2:c0,343
170 | 44:6a:2e:07:40:40,243
171 | 44:6a:2e:07:0f:c0,344
172 | 28:f3:66:a7:c3:4e,39
173 | 44:6a:2e:09:c4:d1,345
174 | 44:6a:2e:09:c0:e0,89
175 | 44:6a:2e:09:d5:c1,346
176 | 00:06:f4:b8:2a:50,90
177 | 44:6a:2e:09:c4:e1,468
178 | 44:6a:2e:07:40:51,399
179 | 44:6a:2e:09:c0:31,92
180 | 00:06:f4:b8:1b:21,93
181 | 44:6a:2e:09:f3:a1,94
182 | 44:6a:2e:09:c0:f1,111
183 | a4:c6:4f:d5:fa:a1,456
184 | 44:6a:2e:09:f7:11,95
185 | 44:6a:2e:09:f2:a1,348
186 | 44:6a:2e:09:f7:50,349
187 | 44:6a:2e:09:d6:e1,350
188 | 44:6a:2e:07:3f:b1,96
189 | 44:6a:2e:09:f7:a0,97
190 | 44:6a:2e:09:d8:60,98
191 | a4:c6:4f:d5:fa:91,99
192 | a4:c6:4f:d5:fa:e1,101
193 | 44:6a:2e:07:41:40,351
194 | 44:6a:2e:09:f2:d0,405
195 | 44:6a:2e:09:c2:61,102
196 | 44:6a:2e:09:c4:b0,103
197 | 44:6a:2e:09:f7:10,354
198 | 44:6a:2e:09:d8:a0,104
199 | 44:6a:2e:09:f5:10,192
200 | 44:6a:2e:09:c4:51,137
201 | 44:6a:2e:09:c2:41,355
202 | 44:6a:2e:09:f1:b1,356
203 | 56:e4:bd:bc:d2:dd,406
204 | 44:6a:2e:09:c4:e0,106
205 | 00:06:f4:b8:49:f1,105
206 | 44:6a:2e:09:f1:91,108
207 | 00:06:f4:b8:1a:f0,109
208 | 44:6a:2e:09:f4:00,195
209 | 44:6a:2e:09:c4:20,358
210 | 44:6a:2e:09:f1:a0,112
211 | 44:6a:2e:09:f6:91,458
212 | 44:6a:2e:09:d5:c0,114
213 | 00:06:f4:b8:4f:b0,382
214 | 44:6a:2e:09:d8:a1,360
215 | a4:c6:4f:d5:fb:70,361
216 | 44:6a:2e:09:c3:b0,362
217 | 44:6a:2e:09:d9:40,107
218 | 44:6a:2e:07:14:b1,115
219 | 9e:2e:a1:54:19:8f,116
220 | 44:6a:2e:09:be:61,117
221 | 00:06:f4:b8:49:f0,283
222 | 44:6a:2e:09:c5:41,118
223 | 00:06:f4:b8:4a:01,119
224 | 44:6a:2e:09:f7:c0,365
225 | 44:6a:2e:09:bf:01,110
226 | 44:6a:2e:09:f4:41,121
227 | 44:6a:2e:09:e9:51,367
228 | 88:25:93:3a:c1:76,122
229 | 44:6a:2e:09:f8:20,176
230 | 44:6a:2e:09:c4:a1,369
231 | 44:6a:2e:09:f2:d1,123
232 | 44:6a:2e:09:bf:71,124
233 | 44:6a:2e:07:0f:c1,125
234 | 44:6a:2e:09:c4:70,126
235 | 44:6a:2e:09:c4:71,127
236 | 44:6a:2e:09:d6:a0,286
237 | 44:6a:2e:09:f5:c0,128
238 | 44:6a:2e:09:c4:d0,371
239 | 44:6a:2e:09:c4:40,129
240 | 44:6a:2e:09:c0:e1,130
241 | 44:6a:2e:09:f5:c1,413
242 | 44:6a:2e:09:c0:00,372
243 | 44:6a:2e:09:bf:10,131
244 | 44:6a:2e:09:f0:e0,374
245 | 44:6a:2e:09:d6:81,480
246 | 44:6a:2e:09:c1:b1,132
247 | 44:6a:2e:09:f8:01,133
248 | 02:28:f8:0e:47:c3,375
249 | 44:6a:2e:09:c6:20,19
250 | 44:6a:2e:09:f8:b0,376
251 | 44:6a:2e:09:bf:61,377
252 | 00:06:f4:b8:11:31,178
253 | 44:6a:2e:09:d7:10,460
254 | 00:06:f4:b8:12:d0,134
255 | 44:6a:2e:09:c5:a1,135
256 | 44:6a:2e:07:14:91,136
257 | 44:6a:2e:09:f4:40,113
258 | 44:6a:2e:09:c0:20,138
259 | 44:6a:2e:09:c4:41,139
260 | 44:6a:2e:09:f5:d1,380
261 | 44:6a:2e:09:f1:20,359
262 | 44:6a:2e:09:f1:00,140
263 | 00:06:f4:b8:1a:71,327
264 | 00:06:f4:b8:12:10,384
265 | 44:6a:2e:09:c1:90,387
266 | 44:6a:2e:07:42:c1,141
267 | 00:06:f4:b8:12:21,389
268 | 44:6a:2e:09:f5:41,390
269 | a4:c6:4f:d5:b1:c0,363
270 | a4:c6:4f:d5:ef:a1,391
271 | 44:6a:2e:09:d2:c1,142
272 | 44:6a:2e:09:c7:c1,143
273 | 44:6a:2e:09:d7:d1,392
274 | 44:6a:2e:09:d2:91,393
275 | 44:6a:2e:09:f6:01,395
276 | 44:6a:2e:09:c6:90,144
277 | 00:06:f4:b8:1c:21,145
278 | 00:06:f4:b8:12:20,249
279 | a4:c6:4f:d5:ef:b0,397
280 | 44:6a:2e:09:c2:60,398
281 | 44:6a:2e:09:d7:11,146
282 | 44:6a:2e:00:fd:50,400
283 | 44:6a:2e:09:f8:b1,290
284 | 44:6a:2e:09:f2:b0,463
285 | 44:6a:2e:09:d7:60,401
286 | a4:c6:4f:d5:fa:d0,147
287 | 44:6a:2e:09:f2:01,330
288 | 44:6a:2e:09:bf:70,403
289 | 4c:e6:76:64:df:00,148
290 | ac:4e:91:61:21:80,404
291 | b0:d5:9d:d1:7e:bd,149
292 | 44:6a:2e:09:f1:61,394
293 | 00:06:f4:b8:1b:11,150
294 | 44:6a:2e:09:f6:40,407
295 | 44:6a:2e:09:c3:60,408
296 | a4:c6:4f:d5:a6:71,409
297 | 00:06:f4:b8:46:11,410
298 | 44:6a:2e:07:38:51,411
299 | 44:6a:2e:09:f0:f0,412
300 | 44:6a:2e:07:3b:90,418
301 | 44:6a:2e:09:c0:d0,414
302 | 44:6a:2e:09:f4:80,497
303 | 44:6a:2e:09:f7:51,151
304 | 44:6a:2e:09:bf:30,152
305 | 00:06:f4:b8:16:b0,153
306 | 44:6a:2e:07:36:41,416
307 | 50:64:2b:dd:cc:85,69
308 | 44:6a:2e:09:d9:41,120
309 | 44:6a:2e:07:43:80,419
310 | 44:6a:2e:09:c7:d1,154
311 | 44:6a:2e:00:fd:41,155
312 | 00:06:f4:b8:11:21,421
313 | 44:6a:2e:09:ef:31,422
314 | dc:fe:18:ac:ee:99,156
315 | 44:6a:2e:09:f5:f1,423
316 | 44:6a:2e:09:c6:91,420
317 | 44:6a:2e:09:f1:b0,424
318 | 44:6a:2e:09:bd:c0,425
319 | 44:6a:2e:07:14:b0,157
320 | 44:6a:2e:07:43:11,158
321 | 44:6a:2e:09:c3:61,308
322 | 44:6a:2e:09:d8:61,428
323 | 44:6a:2e:07:40:00,429
324 | 44:6a:2e:00:fa:a1,386
325 | 44:6a:2e:09:f8:61,431
326 | 44:6a:2e:09:c5:51,159
327 | 44:6a:2e:09:f2:e1,160
328 | 44:6a:2e:09:c3:f1,162
329 | 44:6a:2e:09:f1:41,163
330 | 44:6a:2e:09:c4:a0,164
331 | c4:f0:81:75:03:c9,433
332 | a4:c6:4f:d5:b1:c1,381
333 | a4:c6:4f:d5:ef:a0,165
334 | 44:6a:2e:09:f1:80,166
335 | 44:6a:2e:09:f4:b0,434
336 | 44:6a:2e:07:3b:80,435
337 | 44:6a:2e:09:d7:00,436
338 | 44:6a:2e:09:c4:90,368
339 | 44:6a:2e:09:f1:90,167
340 | 44:6a:2e:07:3b:b1,168
341 | 44:6a:2e:09:d9:01,169
342 | 00:06:f4:b8:11:30,439
343 | 44:6a:2e:09:d7:01,170
344 | 44:6a:2e:09:c1:80,172
345 | 44:6a:2e:01:11:50,441
346 | 44:6a:2e:09:c3:e1,452
347 | 42:49:0f:a3:09:a2,173
348 | 44:6a:2e:09:c5:d0,333
349 | 44:6a:2e:09:c5:a0,442
350 | 44:6a:2e:07:36:40,175
351 | 44:6a:2e:09:c5:b0,177
352 | 00:06:f4:b8:49:91,444
353 | 56:e4:bd:bc:f9:64,446
354 | 44:6a:2e:09:d7:c0,179
355 | 44:6a:2e:09:f4:01,447
356 | 44:6a:2e:09:bd:d1,370
357 | 00:06:f4:b8:20:d0,448
358 | 44:6a:2e:09:bf:31,449
359 | 44:6a:2e:09:f1:a1,180
360 | 44:6a:2e:09:d6:b1,450
361 | 28:f3:66:a7:c4:5e,426
362 | 00:06:f4:b8:2c:10,181
363 | 78:11:dc:39:d3:58,467
364 | 44:6a:2e:09:f6:00,50
365 | 44:6a:2e:09:c2:80,182
366 | 00:06:f4:b8:2a:51,183
367 | a4:c6:4f:d5:a6:70,184
368 | a6:ca:a0:22:e4:e9,185
369 | 44:6a:2e:09:f7:e0,454
370 | 44:6a:2e:07:3b:91,186
371 | d4:ee:07:4f:73:02,187
372 | 44:6a:2e:09:c0:d1,189
373 | 44:6a:2e:09:c2:81,457
374 | 44:6a:2e:07:40:80,289
375 | a4:c6:4f:d5:fa:c0,190
376 | 44:6a:2e:07:36:51,191
377 | 44:6a:2e:07:38:40,193
378 | 44:6a:2e:09:c5:40,194
379 | 00:06:f4:b8:18:00,427
380 | 44:6a:2e:09:f2:70,196
381 | 44:6a:2e:09:c4:c0,459
382 | 44:6a:2e:09:c5:b1,335
383 | 44:6a:2e:09:f8:71,461
384 | 44:6a:2e:07:40:81,197
385 | 44:6a:2e:09:f5:01,462
386 | 44:6a:2e:09:f8:11,198
387 | 44:6a:2e:09:c4:61,212
388 | 44:6a:2e:09:c6:80,464
389 | d4:50:3f:9c:1f:97,509
390 | 56:e4:bd:bc:fa:07,199
391 | 44:6a:2e:09:f6:a0,200
392 | 44:6a:2e:09:f8:10,466
393 | ac:4e:91:61:21:81,201
394 | 00:06:f4:b8:1c:20,202
395 | 44:6a:2e:07:14:81,203
396 | 28:f3:66:a7:c3:c0,205
397 | 44:6a:2e:09:c2:51,430
398 | a4:c6:4f:d5:fa:a0,313
399 | 44:6a:2e:09:f7:00,206
400 | 44:6a:2e:07:41:b0,207
401 | 44:6a:2e:09:f3:e1,208
402 | 44:6a:2e:09:c1:a0,209
403 | 44:6a:2e:09:c2:40,210
404 | 44:6a:2e:09:c4:80,211
405 | 44:6a:2e:09:d6:f1,217
406 | 0c:d8:6c:b9:51:90,213
407 | 80:89:17:1f:09:02,373
408 | 44:6a:2e:09:e9:50,214
409 | 44:6a:2e:09:bd:c1,215
410 | 44:6a:2e:09:d2:90,216
411 | 44:6a:2e:09:f8:70,218
412 | 44:6a:2e:09:c1:81,470
413 | 44:6a:2e:09:d6:21,219
414 | 00:06:f4:b8:12:d1,471
415 | 44:6a:2e:09:c7:d0,220
416 | 44:6a:2e:07:41:81,222
417 | 00:06:f4:b8:4a:00,223
418 | 44:6a:2e:07:43:90,473
419 | 44:6a:2e:00:fd:51,474
420 | 44:6a:2e:09:d8:c0,432
421 | ac:4e:91:61:1f:c0,224
422 | 44:6a:2e:09:d7:d0,476
423 | 44:6a:2e:09:f6:50,161
424 | 44:6a:2e:09:f8:60,477
425 | 44:6a:2e:09:c3:e0,478
426 | 7a:11:dc:38:d3:58,311
427 | 44:6a:2e:09:c6:41,226
428 | 44:6a:2e:09:f2:61,32
429 | 56:e4:bd:bc:da:71,336
430 | 44:6a:2e:09:d6:a1,353
431 | 44:6a:2e:09:c3:80,227
432 | 44:6a:2e:09:f5:40,297
433 | 44:6a:2e:09:d5:d1,228
434 | 44:6a:2e:09:f8:00,229
435 | 44:6a:2e:09:d9:00,230
436 | 44:6a:2e:09:f2:f1,231
437 | 44:6a:2e:07:3f:a1,232
438 | 44:6a:2e:09:c4:c1,100
439 | 44:6a:2e:09:f6:30,402
440 | 44:6a:2e:09:c1:a1,482
441 | 44:6a:2e:09:f6:21,516
442 | a4:c6:4f:d5:fa:e0,221
443 | 44:6a:2e:09:f2:e0,233
444 | 44:6a:2e:09:f1:01,235
445 | ba:69:6c:39:0c:7c,485
446 | 44:6a:2e:09:c1:c0,236
447 | 44:6a:2e:09:bf:00,465
448 | 44:6a:2e:09:c4:50,237
449 | a4:c6:4f:d5:fa:b0,238
450 | 44:6a:2e:09:f7:c1,239
451 | a4:c6:4f:d5:fb:10,472
452 | 44:6a:2e:07:43:81,240
453 | 44:6a:2e:09:c3:f0,499
454 | 44:6a:2e:09:f2:60,487
455 | 44:6a:2e:07:43:10,241
456 | 28:f3:66:a7:96:f6,488
457 | a4:c6:4f:d5:fb:60,242
458 | 00:06:f4:b8:1a:f1,490
459 | a4:c6:4f:d5:fa:d1,475
460 | 44:6a:2e:09:c2:50,491
461 | 44:6a:2e:09:c5:80,244
462 | 44:6a:2e:09:f8:31,366
463 | 44:6a:2e:07:38:41,492
464 | 44:6a:2e:09:f8:91,245
465 | 44:6a:2e:09:c4:21,511
466 | 44:6a:2e:09:d8:70,493
467 | 44:6a:2e:09:c2:70,483
468 | a4:c6:4f:d5:a6:60,246
469 | 44:6a:2e:07:43:01,247
470 | a4:c6:4f:d5:df:21,494
471 | 44:6a:2e:07:41:a1,248
472 | 44:6a:2e:09:f6:a1,301
473 | 44:6a:2e:09:f1:21,171
474 | 44:6a:2e:09:c3:20,337
475 | 00:06:f4:b8:12:11,378
476 | 44:6a:2e:09:f7:a1,453
477 | 44:6a:2e:07:38:50,250
478 | 44:6a:2e:07:40:41,495
479 | 44:6a:2e:00:fa:b0,251
480 | 00:06:f4:b8:2c:11,496
481 | 44:6a:2e:09:f5:e0,437
482 | 44:6a:2e:09:e9:41,188
483 | 44:6a:2e:07:41:80,440
484 | 44:6a:2e:09:c2:b1,252
485 | a4:c6:4f:d5:fa:81,500
486 | 44:6a:2e:01:10:20,253
487 | 44:6a:2e:07:0f:d0,396
488 | 44:6a:2e:09:c1:91,254
489 | 44:6a:2e:09:f4:21,501
490 | 44:6a:2e:09:f2:f0,502
491 | 44:6a:2e:09:c3:91,503
492 | 44:6a:2e:07:33:e0,504
493 | 44:6a:2e:09:ef:20,255
494 | 44:6a:2e:09:f2:b1,295
495 | 44:6a:2e:09:ef:30,469
496 | 44:6a:2e:07:3b:81,204
497 | 00:06:f4:b8:11:40,304
498 | 44:6a:2e:07:33:f0,256
499 | 44:6a:2e:09:c3:90,513
500 | a4:c6:4f:d5:fa:80,479
501 | 44:6a:2e:09:f7:d0,257
502 | 44:6a:2e:09:d8:c1,506
503 | 00:06:f4:b8:17:f1,507
504 | a4:c6:4f:d5:fa:f1,258
505 | 28:f3:66:a4:0a:ca,508
506 | 44:6a:2e:09:c5:81,383
507 | 44:6a:2e:09:f0:f1,305
508 | 44:6a:2e:09:f1:c1,342
509 | a4:c6:4f:d5:fb:00,225
510 | 78:11:dc:39:d3:59,259
511 | 44:6a:2e:07:14:a1,438
512 | 44:6a:2e:09:c7:b1,364
513 | 44:6a:2e:09:c7:c0,91
514 | 44:6a:2e:09:f4:e1,271
515 | 44:6a:2e:09:d5:d0,514
516 | 28:f3:66:a7:a1:c6,515
517 | 44:6a:2e:09:c0:f0,260
518 |
--------------------------------------------------------------------------------
/algorithm/LSTM_trajectory_estimation.py:
--------------------------------------------------------------------------------
1 | #Use scikit-learn to grid search the batch size and epochs
2 | import csv
3 | import os
4 | import numpy as np
5 | import pandas as pd
6 | from standard_plots import *
7 | from sklearn.grid_search import GridSearchCV
8 | from keras.wrappers.scikit_learn import KerasClassifier
9 | from math import sqrt
10 | from sklearn.metrics import mean_squared_error
11 | from sklearn.preprocessing import MinMaxScaler
12 | from keras.layers import Input
13 | from keras.models import model_from_json, load_model
14 | from keras.layers.normalization import BatchNormalization
15 | from keras.models import Sequential, Model
16 | from keras.layers import Dense, LSTM, Dropout, Embedding, Input, Activation, Bidirectional, TimeDistributed, RepeatVector, Flatten
17 | from keras.optimizers import Adam
18 | from keras.utils import plot_model
19 | import matplotlib.pyplot as plt
20 | import tensorflow
21 |
22 | os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
23 | resultpath = "result"
24 |
25 | #Parameters
26 |
27 | #time steps
28 | look_back = 20
29 |
30 | #Optimizer Adam
31 | adam = Adam(lr=learning_rate)
32 |
33 | '''
34 | filename = 'waypoint_trace_new.csv'
35 | Loc_x = pd.read_csv(filepath_or_buffer = filename, sep = ',')["Loc_x"].values.astype('int')
36 | Loc_y = pd.read_csv(filepath_or_buffer = filename, sep = ',')["Loc_y"].values.astype('int')
37 | Mag_x = pd.read_csv(filepath_or_buffer = filename, sep = ',')["Mag_x"].values.astype('float')
38 | Mag_y = pd.read_csv(filepath_or_buffer = filename, sep = ',')["Mag_y"].values.astype('float')
39 | Mag_z = pd.read_csv(filepath_or_buffer = filename, sep = ',')["Mag_z"].values.astype('float')
40 | '''
41 | # convert an array of values into a dataset matrix for both input and output
42 | def create_dataset_input(dataset, look_back=look_back):
43 | dataX = []
44 | for i in range(len(dataset)-look_back):
45 | dataX.append(dataset[i:(i+look_back)])
46 | return np.array(dataX)
47 |
48 | #Process training data
49 | def load_data(file_name, batch_size, split=0.75, look_back = look_back):
50 | raw_Loc_x = pd.read_csv(file_name, sep=',', usecols=[0])
51 | raw_Loc_x = np.array(raw_Loc_x).astype(float)
52 | scaler_loc_x = MinMaxScaler()
53 | Loc_x = scaler_loc_x.fit_transform(raw_Loc_x)
54 |
55 | raw_Loc_y = pd.read_csv(file_name, sep=',', usecols=[1])
56 | raw_Loc_y = np.array(raw_Loc_y).astype(float)
57 | scaler_loc_y = MinMaxScaler()
58 | Loc_y = scaler_loc_y.fit_transform(raw_Loc_y)
59 |
60 | Mag_x = pd.read_csv(file_name, sep=',', usecols=[3])
61 | Mag_x = np.array(Mag_x).astype(float)
62 | scaler_mag_x = MinMaxScaler()
63 | Mag_x = scaler_mag_x.fit_transform(Mag_x)
64 |
65 | Mag_y = pd.read_csv(file_name, sep=',', usecols=[4])
66 | Mag_y = np.array(Mag_y).astype(float)
67 | scaler_mag_y = MinMaxScaler()
68 | Mag_y = scaler_mag_y.fit_transform(Mag_y)
69 |
70 | Mag_z = pd.read_csv(file_name, sep=',', usecols=[5])
71 | Mag_z = np.array(Mag_z).astype(float)
72 | scaler_mag_z = MinMaxScaler()
73 | Mag_z = scaler_mag_z.fit_transform(Mag_z)
74 |
75 | train_size = int(len(Mag_x) * split)
76 | test_size = len(Mag_x) - train_size
77 |
78 | #To get ground truth of evaluation data
79 | #begin
80 | raw_final = test_size -1
81 | test_raw_loc_x = pd.DataFrame(raw_Loc_x[train_size:(train_size+raw_final)])
82 | test_raw_loc_y = pd.DataFrame(raw_Loc_y[train_size:(train_size+raw_final)])
83 | test_raw_loc = pd.concat([test_raw_loc_x,test_raw_loc_y],axis = 1)
84 | test_raw_loc.to_csv('test_raw_loc.csv', mode='w', header= ['Loc_x','Loc_y'])
85 | #end
86 |
87 | train_loc_x, test_loc_x = Loc_x[0:train_size], Loc_x[train_size:len(Loc_x)]
88 | train_loc_y, test_loc_y = Loc_y[0:train_size], Loc_y[train_size:len(Loc_x)]
89 | train_mag_x, test_mag_x = Mag_x[0:train_size], Mag_x[train_size:len(Mag_x)]
90 | train_mag_y, test_mag_y = Mag_y[0:train_size], Mag_y[train_size:len(Mag_y)]
91 | train_mag_z, test_mag_z = Mag_z[0:train_size], Mag_z[train_size:len(Mag_z)]
92 |
93 | print('shapeX:',train_mag_x.shape)
94 | train_mag_x = create_dataset_input(train_mag_x, look_back = look_back)
95 | print('shapeX:',train_mag_x.shape)
96 | train_mag_y = create_dataset_input(train_mag_y, look_back = look_back)
97 | train_mag_z = create_dataset_input(train_mag_z, look_back = look_back)
98 |
99 |
100 | test_mag_x = create_dataset_input(test_mag_x, look_back = look_back)
101 | test_mag_y = create_dataset_input(test_mag_y, look_back = look_back)
102 | test_mag_z = create_dataset_input(test_mag_z, look_back = look_back)
103 |
104 | #print('trian_mag_x:',train_mag_x)
105 |
106 | train_loc_x = create_dataset_input(train_loc_x, look_back = look_back)
107 | train_loc_y = create_dataset_input(train_loc_y, look_back = look_back)
108 | test_loc_x = create_dataset_input(test_loc_x, look_back = look_back)
109 | test_loc_y = create_dataset_input(test_loc_y, look_back = look_back)
110 |
111 | #train_loc_x, test_loc_x = train_loc_x[:,:,np.newaxis], test_loc_x[:,:,np.newaxis]
112 | #train_loc_y, test_loc_y = train_loc_y[:,:,np.newaxis], test_loc_y[:,:,np.newaxis]
113 | #train_mag_x, test_mag_x = train_mag_x[:,:,np.newaxis], test_mag_x[:,:,np.newaxis]
114 | #train_mag_y, test_mag_y = train_mag_y[:,:,np.newaxis], test_mag_y[:,:,np.newaxis]
115 | #train_mag_z, test_mag_z = train_mag_z[:,:,np.newaxis], test_mag_z[:,:,np.newaxis]
116 |
117 | trainX = np.concatenate((train_mag_x,train_mag_y,train_mag_z),axis = 2)
118 | testX = np.concatenate((test_mag_x,test_mag_y,test_mag_z),axis = 2)
119 | print('train_loc_x.shape:',train_loc_x.shape)
120 | trainY = np.concatenate((train_loc_x,train_loc_y),axis = 2)
121 | testY = np.concatenate((test_loc_x,test_loc_y),axis = 2)
122 | trainY = np.reshape(trainY, (len(trainY),look_back,2))
123 | print('trianY:',trainY.shape)
124 | #print('trianX:',trainX)
125 | print(trainX[0][0][0])
126 | lengthTrain = len(trainX)
127 | lengthTest = len(testX)
128 | while(lengthTrain % batch_size != 0):
129 | lengthTrain -= 1
130 | while(lengthTest % batch_size != 0):
131 | lengthTest -= 1
132 |
133 | return scaler_loc_x,scaler_loc_y,trainX[0:lengthTrain],trainY[0:lengthTrain],testX[0:lengthTest],testY[0:lengthTest]
134 | #,scaler_mag_x,scaler_mag_y,scaler_mag_z
135 |
136 |
137 | def build_model(hidden_nodes,batch_size , time_steps = look_back, feature_size = 3):
138 | # train_x has shape of (n_samples, time_steps, input_dim)
139 |
140 | #define model, a stacked two-layer LSTM
141 | inputs1 = Input(batch_shape = (batch_size,look_back,feature_size))
142 | lstm1 = LSTM(hidden_nodes, stateful = True, return_sequences=True, return_state=True)(inputs1)
143 | lstm1 = Dropout(0.2)(lstm1)
144 | lstm1 = LSTM(hidden_nodes,return_sequences=True)(lstm1)
145 | lstm1 = Dropout(0.2)(lstm1)
146 | lstm1 = TimeDistributed(Dense((2)))(lstm1)
147 | model = Model(input = inputs1, outputs = lstm1)
148 | print(model.layers)
149 | model.compile(loss='mean_squared_error', optimizer=adam,metrics=['acc'])
150 | model.summary()
151 | return model
152 |
153 | # make a one-step forecast
154 | def forecast_lstm(model, batch_size, X):
155 | X = X.reshape(batch_size, look_back, 3)
156 | yhat = model.predict(X, batch_size=batch_size)
157 | return yhat
158 |
159 | # inverse scaling for a forecasted value
160 | def invert_scale(scaler, yhat):
161 | inverted = scaler.inverse_transform(yhat)
162 | return inverted[:]
163 |
164 | def train_model(hidden_nodes,batch_size,epochs,file_structure,file_acc2loss):
165 | scaler_loc_x,scaler_loc_y,train_x, train_y, test_x, test_y = load_data(file_name = 'waypoint_trace_new.csv', batch_size = batch_size)
166 | #,scaler_mag_x,scaler_mag_y,scaler_mag_z
167 | #For funtional API
168 | #model,hidden_state = build_model(batch_size=batch_size)
169 |
170 | model = build_model(hidden_nodes,batch_size=batch_size)
171 |
172 | #draw the model structure
173 | plot_model(model, show_shapes=True,to_file=os.path.join(resultpath, file_structure))
174 |
175 | # input data to model and train
176 | print('train_x.shape:',train_x.shape)
177 | print('train_y.shape:',train_y.shape)
178 | print('test_x.shape:',test_x.shape)
179 | print('test_y.shape:',test_y.shape)
180 | for i in range(epochs):
181 | history = model.fit(train_x, train_y, batch_size=batch_size, epochs = 1, verbose=1,shuffle = False) #validation_split=0.1, validation_data=(test_x, test_y)
182 | # need to reset state for every epoch
183 | model.reset_states()
184 | #print('hidden_state:',hidden_state)
185 | # list all data in history
186 | '''
187 | print('history.keys()',hist.history.keys())
188 | # summarize history for accuracy
189 | plt.plot(hist.history['acc'])
190 | plt.plot(hist.history['val_acc'])
191 | plt.title('model accuracy')
192 | plt.ylabel('accuracy')
193 | plt.xlabel('epoch')
194 | plt.legend(['train', 'test'], loc='upper left')
195 | plt.show()
196 | '''
197 | print('Real Epoches:',i+1)
198 | with open(file_acc2loss,'a', newline='') as csvfile:
199 | if not os.path.getsize(file_acc2loss): #file is empty
200 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
201 | spamwriter.writerow(['epochs','loss','acc'])#, 'val_loss','val_acc'
202 |
203 | data = ([
204 | i,history.history['loss'][0],history.history['acc'][0]#, history.history['val_loss'][0], history.history['val_acc'][0]
205 | ])
206 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
207 | spamwriter.writerow(data)
208 | return model
209 |
210 | def my_save_model(hidden_nodes,batch_size,epochs,file_structure,file_acc2loss,file_model):
211 | model = train_model(hidden_nodes,batch_size,epochs,file_structure,file_acc2loss)
212 | model.save(os.path.join(resultpath, file_model))
213 | print('Model have been saved to my_model.h5')
214 |
215 | def my_load_model():
216 | # test data
217 | batch_size = 20
218 |
219 | scaler_loc_x,scaler_loc_y,train_x, train_y, test_x, test_y = load_data(file_name = 'waypoint_trace_new.csv', batch_size = batch_size)
220 |
221 | print(len(test_x))
222 | print(len(test_y))
223 | print(len(test_x)/batch_size)
224 | model2 = load_model(os.path.join(resultpath, 'my_model_256_10_30.h5'))
225 | print("Load model successfully!")
226 | model2.compile(loss='mean_squared_error', optimizer=adam,metrics=['acc'])
227 | print("Compile model successfully!")
228 |
229 | predictions = list()
230 | for i in range(int(len(test_x)/batch_size)):
231 | #predict
232 | print('%d / %d:' % (i,int(len(test_x)/batch_size)))
233 | yhat = forecast_lstm(model2, batch_size=batch_size,X = test_x[i*batch_size:(i+1)*batch_size])
234 |
235 | #invert scaling
236 | yhat_loc_x = invert_scale(scaler_loc_x,yhat[:,:,0])
237 | yhat_loc_x = np.reshape(yhat_loc_x,(batch_size,len(yhat_loc_x[0])))
238 | yhat_loc_y = invert_scale(scaler_loc_y,yhat[:,:,1])
239 | yhat_loc_y = np.reshape(yhat_loc_y,(batch_size,len(yhat_loc_y[0])))
240 |
241 | test_raw_loc_x = invert_scale(scaler_loc_x,test_x[:,:,0])
242 | test_raw_loc_x = np.reshape(test_raw_loc_x[i*batch_size:(i+1)*batch_size],(batch_size,len(test_raw_loc_x[1])))
243 | test_raw_loc_y = invert_scale(scaler_loc_y,test_x[:,:,1])
244 | test_raw_loc_y = np.reshape(test_raw_loc_y[i*batch_size:(i+1)*batch_size],(batch_size,len(test_raw_loc_y[1])))
245 |
246 | yhat_loc_x = pd.DataFrame(yhat_loc_x)
247 | yhat_loc_y = pd.DataFrame(yhat_loc_y)
248 | test_raw_loc_x = pd.DataFrame(test_raw_loc_x)
249 | test_raw_loc_y = pd.DataFrame(test_raw_loc_y)
250 |
251 | if not os.path.isfile('test_raw_loc_x.csv'):
252 | test_raw_loc_x.to_csv('test_raw_loc_x.csv', header=0)
253 | else: # else it exists so append without writing the header
254 | test_raw_loc_x.to_csv('test_raw_loc_x.csv', mode='a', header=False)
255 |
256 | if not os.path.isfile('test_raw_loc_y.csv'):
257 | test_raw_loc_y.to_csv('test_raw_loc_y.csv', header=0)
258 | else: # else it exists so append without writing the header
259 | test_raw_loc_y.to_csv('test_raw_loc_y.csv', mode='a', header=False)
260 |
261 |
262 | if not os.path.isfile('yhat_loc_x.csv'):
263 | yhat_loc_x.to_csv('yhat_loc_x.csv', header=0)
264 | else: # else it exists so append without writing the header
265 | yhat_loc_x.to_csv('yhat_loc_x.csv', mode='a', header=False)
266 |
267 | if not os.path.isfile('yhat_loc_y.csv'):
268 | yhat_loc_y.to_csv('yhat_loc_y.csv', header=0)
269 | else: # else it exists so append without writing the header
270 | yhat_loc_y.to_csv('yhat_loc_y.csv', mode='a', header=False)
271 |
272 | '''
273 | print('test_raw_loc:',test_raw_loc)
274 | print('yhat_loc:',yhat_loc)
275 |
276 | rmse = sqrt(mean_squared_error(test_raw_loc,yhat_loc))
277 | print(rmse)
278 | print('%d)Test RMSE: %.3f'% (i+1,rmse))
279 | '''
280 | '''
281 | print('yhat_loc_x:',yhat_loc_x)
282 | print('yhat_loc_y:',yhat_loc_y)
283 | print('test_raw_loc_x:',test_raw_loc_x)
284 | print('test_raw_loc_y:',test_raw_loc_y)
285 | '''
286 | def main():
287 | #Train parameters in Grid
288 | '''
289 | scaler_loc_x,scaler_loc_y,trainX, trainY, test_x, test_y = load_data('waypoint_trace_new.csv')
290 | model = KerasClassifier(build_fn=build_model, verbose=0)
291 | batch_size = [1, 20, 50, 100, 200]
292 | epochs = [10,30, 50, 100,200, 300]
293 | param_grid = dict(batch_size=batch_size, nb_epoch=epochs)
294 | grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1)
295 | print('Xshape:',trainX.shape)
296 | print('Yshape:',trainY.shape)
297 | grid_result = grid.fit(trainX, trainY)
298 | # summarize results
299 | print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
300 | for params, mean_score, scores in grid_result.grid_scores_:
301 | print("%f (%f) with: %r" % (scores.mean(), scores.std(), params))
302 |
303 | best_batchsize = int(grid_result.best_params_['batch_size'])
304 | best_epoch = int(grid_result.best_params_['nb_epoch'])
305 | print('best_batchsize:',best_batchsize)
306 | print('best_epoch:',best_epoch)
307 | '''
308 |
309 | # Train for one pair of parameters
310 | hidden_nodes = 256
311 | best_batchsize = 5
312 | best_epoch = 100
313 | file_structure = 'model_ts=30_256_5_100.png'
314 | file_acc2loss = 'log_ts=30_256_5_100.csv'
315 | file_model = 'my_model_ts=30_256_5_100.h5'
316 | my_save_model(hidden_nodes,best_batchsize,best_epoch,file_structure,file_acc2loss,file_model)
317 |
318 | #load model
319 | my_load_model()
320 |
321 |
322 | if __name__ == "__main__":
323 | main()
324 |
325 |
326 |
--------------------------------------------------------------------------------
/server/main_build_DB.py:
--------------------------------------------------------------------------------
1 | '''
2 | By Zhenghang(Klaus) Zhong
3 |
4 | ############################################################################################
5 | It's a light server based on FLASK micro framework,
6 |
7 | 1.Requirements: Python 3, Flask and relevant packages
8 |
9 | 2. How does this work?
10 | (1) Firstly, modify the host IP address of your own environment.
11 | (2) Then run this python file,
12 | A temporary file called 'tempList.csv' will be initialized with default data
13 | (e.g. for signal level RSS it would be -110, magnetic field value would be none)
14 | with order according to the unchanged file 'APs.csv' (to store the AP info in a defined order)
15 |
16 | Each time one complete info of AP arrival, (assume there are 60 APs that is detected once, then
17 | the transmission would be repeated 60 times and one symbol called "Done" would be set to '1' for
18 | last time, which means info of one scan has all been sent), the 'tempList.csv' would be refreshed
19 | with one line of AP's info. After 60 times (AP number), the function 'refreshCSV()' would be called.
20 |
21 | Then scan info of once would be be copied from 'tempList.csv' and be added in 'xxx.csv'(which stores
22 | all info that is similar to database) and be refreshed in 'oneTime.csv' (for check last time's scan info).
23 |
24 | Finally, refresh 'tempList.csv' with default value for next time's transmission.
25 | ############################################################################################
26 | '''
27 |
28 | # coding: utf-8
29 | from flask import Flask, request
30 | from app import db, models
31 | import csv
32 | import os #to get current path
33 | import importlib
34 |
35 | from model import *
36 |
37 | #algorithm part
38 | import pandas as pdb
39 | import numpy as np
40 | import tensorflow as tf
41 | from sklearn.preprocessing import scale
42 | import matplotlib.pyplot as plt
43 |
44 | PYTHONIOENCODING="UTF-8" #set the utf-8 encode mode
45 |
46 |
47 | # create the application object
48 | app = Flask(__name__)
49 |
50 | #edition
51 | # Write all info in DB into a csv file, without SSID stored, encode mode is UTF-8 (as some SSID contains chinese characters)
52 | #edition
53 | def addAllCSV(): #whole database
54 | with open('APs.csv', 'w', newline='') as csvfile:
55 | if not os.path.getsize('./APs.csv'):
56 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
57 | spamwriter.writerow([ 'BSSID','SSID','Building', 'Floor','Location_x', 'Location_y','Frequency','AccX','AccY','AccZ','ORIx','ORIy','ORIz','Level','GeoX','GeoY','GeoZ'])
58 |
59 | users = models.User.query.all()
60 |
61 | for u in users:
62 | data = ([u.BSSID, u.SSID, u.Buidling, u.Floor, u.Location_x, u.Location_y, u.Frequency, u.AccX, u.AccY, u.AccZ, u.ORIx, u.ORIy, u.ORIz, u.Level, u.GeoX, u.GeoY, u.GeoZ])
63 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
64 | spamwriter.writerow(data)
65 |
66 | #add one time's scanner result
67 | def addCSV(BSSID, SSID, Building, Floor, Location_x, Location_y, Frequency, AccX, AccY, AccZ, ORIx, ORIy, ORIz, Level, GeoX, GeoY, GeoZ, Model, Time):
68 | with open('userinput.csv', 'a', newline='') as csvfile:
69 | if not os.path.getsize('./userinput.csv'):
70 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
71 | spamwriter.writerow(['BSSID', 'SSID','Building', 'Floor','Location_x', 'Location_y', 'Frequency','AccX','AccY', 'AccZ','ORIx','ORIy','ORIz','Level', 'GeoX','GeoY','GeoZ', 'Model','Time'])
72 |
73 | data = ([
74 | BSSID, SSID, Building, Floor, Location_x, Location_y, Frequency, AccX, AccY, AccZ, ORIx, ORIy, ORIz, Level, GeoX, GeoY, GeoZ, Model, Time
75 | ])
76 |
77 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
78 | spamwriter.writerow(data)
79 |
80 |
81 | def initializeTempList():
82 | with open('mapping.csv', 'r', newline='') as csvfile:
83 | reader = csv.reader(csvfile)
84 | APs = [row[0] for row in reader]
85 | APlength = len(APs)
86 | lists = [[0 for col in range(19)] for row in range(APlength)]
87 | row = 0
88 | for AP in APs:
89 | lists[row][0] = AP
90 | lists[row][1] = 'none'
91 | lists[row][2] = 'none'
92 | lists[row][3] = 'none'
93 | lists[row][4] = 'none'
94 | lists[row][5] = 'none'
95 | lists[row][6] = 'none'
96 | lists[row][7] = 'none'
97 | lists[row][8] = 'none'
98 | lists[row][9] = 'none'
99 | lists[row][10] = 'none'
100 | lists[row][11] = 'none'
101 | lists[row][13] = 'none'
102 | lists[row][14] = '-110'
103 | lists[row][15] = 'none'
104 | lists[row][16] = 'none'
105 | lists[row][17] = 'none'
106 | lists[row][18] = 'none'
107 | row += 1
108 |
109 | with open('tempList.csv', 'w', newline='') as csvfile:
110 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
111 | spamwriter.writerow(['BSSID', 'SSID','Building', 'Floor','Location_x', 'Location_y', 'Frequency','AccX','AccY','AccZ', 'ORIx','ORIy','ORIz','Level', 'GeoX','GeoY','GeoZ', 'Model','Time'])
112 | for i in range(0,517):
113 | data = ([
114 | lists[i][0], lists[i][1], lists[i][2], lists[i][3], lists[i][4], lists[i][5], lists[i][6], lists[i][7], lists[i][8], lists[i][9], lists[i][10], lists[i][11], lists[i][12], lists[i][13], lists[i][14], lists[i][15], lists[i][16], lists[i][17], lists[i][18]
115 | ])
116 | spamwriter.writerow(data)
117 |
118 | #Check if the input AP's BSSID is in the mapping.csv, which contains 200 APs
119 | def checkAP(list, AP):
120 | row = 0
121 |
122 | for row in range(0,517):
123 | if AP == list[row][0]:
124 | return row
125 | return 'none'
126 |
127 | def tempList(BSSID,SSID, Building, Floor, Location_x, Location_y, Frequency, AccX, AccY, AccZ, ORIx, ORIy, ORIz, Level, GeoX, GeoY, GeoZ, Model, Time):
128 | with open('tempList.csv', 'r', newline='') as csvfile:
129 | reader = csv.reader(csvfile)
130 | RSS = [row for row in reader]
131 | #print(RSS,RSS[0][0])
132 | for row in range(1,517):
133 | if RSS[row][0] == BSSID:
134 | RSS[row][1] = SSID
135 | RSS[row][2] = Building
136 | RSS[row][3] = Floor
137 | RSS[row][4] = Location_x
138 | RSS[row][5] = Location_y
139 | RSS[row][6] = Frequency
140 | RSS[row][7] = AccX
141 | RSS[row][8] = AccY
142 | RSS[row][9] = AccZ
143 | RSS[row][10] = ORIx
144 | RSS[row][11] = ORIy
145 | RSS[row][12] = ORIz
146 | RSS[row][13] = Level
147 | RSS[row][14] = GeoX
148 | RSS[row][15] = GeoY
149 | RSS[row][16] = GeoZ
150 | RSS[row][17] = Model
151 | RSS[row][18] = Time
152 |
153 | with open('tempList.csv', 'w', newline='') as csvfile:
154 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
155 | spamwriter.writerow(['BSSID', 'SSID', 'Building','Floor','Location_x','Location_y', 'Frequency','AccX','AccY','AccZ', 'ORIx','ORIy','ORIz', 'Level', 'GeoX','GeoY','GeoZ', 'Model', 'Time'])
156 | for i in range(1,517):
157 | data = ([
158 | RSS[i][0], RSS[i][1], RSS[i][2], RSS[i][3], RSS[i][4], RSS[i][5], RSS[i][6], RSS[i][7], RSS[i][8], RSS[i][9], RSS[i][10], RSS[i][11], RSS[i][12], RSS[i][13], RSS[i][14], RSS[i][15], RSS[i][16], RSS[i][17], RSS[i][18]
159 | ])
160 | spamwriter.writerow(data)
161 | break
162 |
163 | def isEmpty():
164 | with open('xxx.csv', 'a+', newline='') as csvfile: #Check is tempList is empty
165 | if not os.path.getsize('./xxx.csv'): #file not established
166 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
167 | spamwriter.writerow(['BSSID','SSID','Building', 'Floor','Location_x','Location_y','Frequency','AccX','AccY','AccZ','ORIx','ORIy','ORIz', 'Level', 'GeoX','GeoY','GeoZ', 'Model', 'Time'])
168 |
169 | with open('mapping.csv', 'r', newline='') as csvfile:
170 | reader = csv.reader(csvfile)
171 | APs = [row[0] for row in reader]
172 | APlength = len(APs)
173 | lists = [[0 for col in range(19)] for row in range(APlength)]
174 | row = 0
175 | for AP in APs:
176 | lists[row][0] = AP
177 | lists[row][1] = 'none'
178 | lists[row][2] = 'none'
179 | lists[row][3] = 'none'
180 | lists[row][4] = 'none'
181 | lists[row][5] = 'none'
182 | lists[row][6] = 'none'
183 | lists[row][7] = 'none'
184 | lists[row][8] = 'none'
185 | lists[row][9] = 'none'
186 | lists[row][10] = 'none'
187 | lists[row][11] = 'none'
188 | lists[row][12] = 'none'
189 | lists[row][13] = '-110'
190 | lists[row][14] = 'none'
191 | lists[row][15] = 'none'
192 | lists[row][16] = 'none'
193 | lists[row][17] = 'none'
194 | lists[row][18] = 'none'
195 | row += 1
196 | #edition2
197 | with open('tempList.csv', 'a+', newline='') as csvfile: #Check is tempList is empty
198 | if not os.path.getsize('./tempList.csv'): #file is empty
199 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
200 | spamwriter.writerow(['BSSID','SSID','Building','Floor','Location_x','Location_y', 'Frequency','AccX','AccY','AccZ','ORIx','ORIy','ORIz','Level', 'GeoX','GeoY','GeoZ', 'Model', 'Time'])
201 | for i in range(1,517):
202 | data = ([
203 | lists[i][0], lists[i][1], lists[i][2], lists[i][3], lists[i][4], lists[i][5], lists[i][6], lists[i][7], lists[i][8], lists[i][9], lists[i][10], lists[i][11], lists[i][12], lists[i][13], lists[i][14], lists[i][15], lists[i][16], lists[i][17], lists[i][18]
204 | ])
205 | print(i)
206 | spamwriter.writerow(data)
207 |
208 | def refreshCSV(Building, Floor, Location_x, Location_y, Model):
209 | with open('tempList.csv', 'r', newline='') as csvfile:
210 | reader = csv.reader(csvfile)
211 | RSS = [row for row in reader]
212 |
213 | with open('tempList.csv', 'w', newline='') as csvfile:
214 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
215 | spamwriter.writerow(['BSSID','SSID','Building', 'Floor','Location_x', 'Location_y', 'Frequency','AccX','AccY','AccZ','ORIx','ORIy','ORIz','Level', 'GeoX', 'GeoY', 'GeoZ', 'Model', 'Time'])
216 | for row in range(1,517):
217 | RSS[row][2] = Building
218 | RSS[row][3] = Floor
219 | RSS[row][4] = Location_x
220 | RSS[row][5] = Location_y
221 | RSS[row][17] = Model
222 | x = ([
223 | RSS[row][0], RSS[row][1], RSS[row][2], RSS[row][3], RSS[row][4], RSS[row][5], RSS[row][6], RSS[row][7], RSS[row][8], RSS[row][9], RSS[row][10], RSS[row][11], RSS[row][12], RSS[row][13], RSS[row][14], RSS[row][15], RSS[row][16], RSS[row][17], RSS[row][18]
224 | ])
225 |
226 | spamwriter.writerow(x)
227 |
228 | with open('xxx.csv', 'a', newline='') as csvfile:
229 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
230 | #edition3
231 | for row in range(1,517):
232 | data = ([
233 | RSS[row][0], RSS[row][1], RSS[row][2], RSS[row][3], RSS[row][4], RSS[row][5], RSS[row][6], RSS[row][7], RSS[row][8], RSS[row][9], RSS[row][10], RSS[row][11], RSS[row][12], RSS[row][13], RSS[row][14], RSS[row][15], RSS[row][16], RSS[row][17], RSS[row][18]
234 | ])
235 | spamwriter.writerow(data)
236 |
237 | with open('oneTime.csv', 'a', newline='') as csvfile:
238 | if not os.path.getsize('./oneTime.csv'): #file is empty
239 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
240 | spamwriter.writerow(['BSSID','SSID','Building','Floor','Location_x', 'Location_y','Frequency','AccX','AccY','AccZ','ORIx','ORIy','ORIz','Level', 'GeoX','GeoY', 'GeoZ', 'Model', 'Time'])
241 | #edition4
242 | for i in range(1,517):
243 | data = ([
244 | RSS[i][0], RSS[i][1], RSS[i][2], RSS[i][3], RSS[i][4], RSS[i][5], RSS[i][6], RSS[i][7], RSS[i][8], RSS[row][9], RSS[row][10], RSS[row][11], RSS[i][12], RSS[row][13], RSS[row][14], RSS[row][15], RSS[row][16], RSS[row][17], RSS[row][18]
245 | ])
246 | spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
247 | spamwriter.writerow(data)
248 |
249 |
250 | @app.route('/', methods=['POST'])
251 | def post():
252 | #isEmpty()
253 | #edition5
254 | isEmpty()
255 |
256 | BSSID = request.form['BSSID']
257 | Building = request.form['Building']
258 | Floor = request.form['Floor']
259 | Location_x = request.form['Location_x']
260 | Location_y = request.form['Location_y']
261 | Frequency = request.form['Frequency']
262 | Level = request.form['Level']
263 | AccX = request.form['AccX']
264 | AccY = request.form['AccY']
265 | GeoX = request.form['GeoX']
266 | GeoY = request.form['GeoY']
267 | GeoZ = request.form['GeoZ']
268 | Model = request.form['Model']
269 | Time = request.form['Time']
270 | SSID = request.form['SSID']
271 | AccX = request.form['AccX']
272 | AccY = request.form['AccY']
273 | AccZ = request.form['AccZ']
274 | ORIx = request.form['ORIx']
275 | ORIy = request.form['ORIy']
276 | ORIz = request.form['ORIz']
277 | Done = request.form['Done']
278 |
279 | #addCSV(BSSID, SSID, Building, Floor, Location_x, Location_y, Frequency, AccX, AccY, AccZ, ORIx, ORIy, ORIz, Level, GeoX, GeoY, GeoZ, Model, Time)
280 | tempList(BSSID, SSID,Building, Floor, Location_x, Location_y, Frequency, AccX, AccY, AccZ, ORIx, ORIy, ORIz, Level, GeoX, GeoY, GeoZ, Model, Time)
281 | #refreshCSV(SSID,Building, Floor, Location_x, Location_y, Frequency, AccX, AccY, AccZ, ORIx, ORIy, ORIz, Level, GeoX, GeoY, GeoZ, Model, Time)
282 |
283 | #addAPs(BSSID, Building, Location_x, Location_y, Frequency, AccX, AccY, AccZ, ORIx, ORIy, ORIz, Level, GeoX, GeoY, GeoZ, Model, Time)
284 | #addCSV(BSSID, Building, Location_x, Location_y, Frequency, AccX, AccY, AccZ, ORIx, ORIy, ORIz, Level, GeoX, GeoY, GeoZ, Model, Time)
285 |
286 |
287 | #addAPs(list)
288 | #addAllCSV()
289 |
290 | #addAPs(Building, Room, Location_x, Location_y, SSID,BSSID, Frequency, Level)
291 |
292 | #addCSV(Building, Room, Location_x, Location_y, BSSID, Frequency, Level)
293 |
294 | if Done == '1':
295 | refreshCSV(Building, Floor, Location_x, Location_y, Model)
296 | initializeTempList()
297 | print('1')
298 | else:
299 | print('0')
300 |
301 |
302 | return 'OK.'
303 |
304 | if __name__ == "__main__":
305 | #Use local host IP for local server
306 | #Or IPV4 address
307 |
308 | #app.run(host='192.168.xxx.xxx', debug=True)
309 | app.run(host='192.168.xxx.xxx', debug=True)
310 |
311 | '''
312 | #Add RSS info into database whose name is app.db
313 | def addAPs(list):
314 | for row in range(0,517):
315 | u = models.User(BSSID = list[row][0], SSID = list[row][1], Building = list[row][2], Floor = list[row][3], Location_x = list[row][4], Location_y = list[row][5], Frequency = list[row][6], AccX = list[row][7], AccY = list[row][8], AccZ = list[row][9], ORIx = list[row][10], ORIy = list[row][11], ORIz = list[row][12], Level = list[row][13], GeoX=list[row][14], GeoY=list[row][15], GeoZ=list[row][16])
316 | db.session.add(u)
317 | db.session.commit()
318 |
319 | #Show all RSS info from database
320 | def showAPs(num):
321 | ap = models.User.query.get(num)
322 | print(ap.BSSID, ap.SSID, ap.Building, ap.Floor,ap.Location_x, ap.Location_y, ap.Frequency, ap.AccX, ap.AccY, ap.AccZ, ap.ORIx, ap.ORIy, ap.ORIz, ap.Level, ap.GeoX, ap.GeoY, ap.GeoZ)
323 |
324 |
325 | def deleteDB():
326 | users = models.User.query.all()
327 |
328 | for u in users:
329 | db.session.delete(u)
330 |
331 | db.session.commit()
332 | '''
--------------------------------------------------------------------------------
/floor4_new_data.csv:
--------------------------------------------------------------------------------
1 | ID,BUILDING,FLOOR,LOC_X,LOC_Y,MAG_X,MAG_Y,MAG_Z,G
2 | 1,IBSS,4,0,0,0,20.387165,-53.771187,9.806624
3 | 2,IBSS,4,1,0,0,23.939987,-48.772015,9.806639
4 | 3,IBSS,4,2,0,0,24.266232,-43.574265,9.806561
5 | 4,IBSS,4,3,0,0,23.236959,-44.168583,9.806633
6 | 5,IBSS,4,4,0,0,23.998175,-40.786045,9.806617
7 | 6,IBSS,4,5,0,0,23.702391,-39.210735,9.806621
8 | 7,IBSS,4,6,0,0,23.129759,-37.59943,9.806552
9 | 8,IBSS,4,7,0,0,24.369493,-35.752552,9.806579
10 | 9,IBSS,4,8,0,0,26.361261,-34.539463,9.806578
11 | 10,IBSS,4,9,0,0,25.734238,-33.23312,9.806552
12 | 11,IBSS,4,10,0,0,27.162186,-35.384453,9.806599
13 | 12,IBSS,4,11,0,0,27.367218,-37.885212,9.80663
14 | 13,IBSS,4,12,0,0,27.668011,-40.246078,9.806552
15 | 14,IBSS,4,13,0,-0.000001,31.97266,-44.709332,9.806633
16 | 15,IBSS,4,14,0,0,35.532776,-38.292152,9.806592
17 | 16,IBSS,4,15,0,0.000001,41.824036,-37.693932,9.806562
18 | 17,IBSS,4,16,0,0.000001,34.053146,-36.434025,9.8066
19 | 18,IBSS,4,17,0,0.000001,34.086967,-37.049488,9.806621
20 | 19,IBSS,4,18,0,0,34.182194,-38.791355,9.80661
21 | 20,IBSS,4,19,0,0,36.507782,-37.545002,9.806611
22 | 21,IBSS,4,20,0,0,39.331242,-38.182938,9.806554
23 | 22,IBSS,4,21,0,0,37.125729,-37.972652,9.806626
24 | 23,IBSS,4,22,0,0.000001,37.198517,-43.417271,9.80661
25 | 24,IBSS,4,23,0,0,33.521286,-43.473934,9.806566
26 | 25,IBSS,4,24,0,0,36.012196,-34.42498,9.806548
27 | 26,IBSS,4,25,0,0,39.68438,-35.851173,9.806627
28 | 27,IBSS,4,26,0,0,30.63385,-33.732933,9.806589
29 | 28,IBSS,4,27,0,0,27.447407,-41.085312,9.806626
30 | 29,IBSS,4,28,0,0,23.718861,-34.393147,9.806617
31 | 30,IBSS,4,29,0,0,34.766514,-27.045902,9.806575
32 | 31,IBSS,4,30,0,0,35.273655,-28.517199,9.806573
33 | 32,IBSS,4,31,0,0.000001,52.074188,-31.423843,9.806602
34 | 33,IBSS,4,32,0,0,53.971771,-27.970924,9.806564
35 | 34,IBSS,4,33,0,0,53.679749,-37.053852,9.806587
36 | 35,IBSS,4,34,0,0,34.983162,-36.718296,9.806584
37 | 36,IBSS,4,35,0,0,39.452694,-33.562107,9.806592
38 | 37,IBSS,4,36,0,0,33.19791,-45.892544,9.806542
39 | 38,IBSS,4,37,0,-0.000001,27.879715,-46.545288,9.806617
40 | 39,IBSS,4,38,0,0.000001,30.7402,-47.81802,9.806553
41 | 40,IBSS,4,39,0,0,37.245773,-39.548702,9.806561
42 | 41,IBSS,4,40,0,0,40.820984,-33.062313,9.806623
43 | 42,IBSS,4,41,0,0,41.519108,-29.583437,9.806599
44 | 43,IBSS,4,42,0,0.000001,38.943302,-27.287262,9.806555
45 | 44,IBSS,4,43,0,0.000001,36.043953,-33.905384,9.806583
46 | 45,IBSS,4,44,0,0.000001,35.964096,-34.982948,9.806597
47 | 46,IBSS,4,45,0,0,34.929268,-34.218979,9.806563
48 | 47,IBSS,4,46,0,0,34.644161,-34.294289,9.806593
49 | 48,IBSS,4,47,0,0.000001,31.901268,-36.10067,9.80661
50 | 49,IBSS,4,48,0,0,31.736021,-37.85902,9.806578
51 | 50,IBSS,4,49,0,0,31.58305,-40.660992,9.806594
52 | 51,IBSS,4,50,0,0,31.929199,-42.358944,9.806558
53 | 52,IBSS,4,0,1,0,27.034004,-41.734352,9.806601
54 | 53,IBSS,4,1,1,0,23.619974,-42.368073,9.806552
55 | 54,IBSS,4,2,1,0,24.463125,-40.234043,9.806602
56 | 55,IBSS,4,3,1,0,24.557636,-41.487534,9.806623
57 | 56,IBSS,4,4,1,0,24.934658,-38.437664,9.80654
58 | 57,IBSS,4,5,1,0,24.976034,-36.680187,9.806568
59 | 58,IBSS,4,6,1,0,24.31138,-33.822659,9.806623
60 | 59,IBSS,4,7,1,0,24.580887,-32.345829,9.806644
61 | 60,IBSS,4,8,1,0,27.231091,-30.253273,9.806555
62 | 61,IBSS,4,9,1,0,26.237169,-29.391119,9.806591
63 | 62,IBSS,4,10,1,0,26.841024,-30.536619,9.80657
64 | 63,IBSS,4,11,1,0,26.798544,-32.745739,9.806576
65 | 64,IBSS,4,12,1,0,24.421896,-32.382004,9.806566
66 | 65,IBSS,4,13,1,0,26.880308,-32.939331,9.806586
67 | 66,IBSS,4,14,1,0,31.594263,-32.33144,9.806641
68 | 67,IBSS,4,15,1,0,33.666737,-33.775394,9.806608
69 | 68,IBSS,4,16,1,0,35.404129,-33.772171,9.806633
70 | 69,IBSS,4,17,1,0,37.193439,-35.652557,9.806584
71 | 70,IBSS,4,18,1,0,37.885864,-37.377579,9.80656
72 | 71,IBSS,4,19,1,0,38.244003,-37.426353,9.806572
73 | 72,IBSS,4,20,1,0,41.390945,-38.890083,9.806594
74 | 73,IBSS,4,21,1,0,38.087231,-44.695057,9.806602
75 | 74,IBSS,4,22,1,0,36.187355,-45.320198,9.806628
76 | 75,IBSS,4,23,1,0.000001,33.708355,-44.655815,9.806593
77 | 76,IBSS,4,24,1,0,32.997131,-38.117496,9.806546
78 | 77,IBSS,4,25,1,0,34.040958,-38.745193,9.806626
79 | 78,IBSS,4,26,1,0,31.320496,-36.159035,9.806568
80 | 79,IBSS,4,27,1,-0.000001,26.432005,-39.303875,9.806562
81 | 80,IBSS,4,28,1,-0.000001,25.956951,-33.389606,9.806545
82 | 81,IBSS,4,29,1,0,32.342331,-29.165298,9.806626
83 | 82,IBSS,4,30,1,0,37.782494,-37.000034,9.806603
84 | 83,IBSS,4,31,1,0,52.555222,-33.625465,9.806634
85 | 84,IBSS,4,32,1,-0.000001,32.123421,-29.102392,9.806607
86 | 85,IBSS,4,33,1,0,51.765171,-29.707026,9.806626
87 | 86,IBSS,4,34,1,0,36.455811,-36.085152,9.806566
88 | 87,IBSS,4,35,1,0,38.022987,-37.736633,9.806594
89 | 88,IBSS,4,36,1,0,34.049839,-41.340652,9.806597
90 | 89,IBSS,4,37,1,0,40.980614,-39.694233,9.806615
91 | 90,IBSS,4,38,1,0,29.749073,-43.053795,9.806619
92 | 91,IBSS,4,39,1,0,29.908247,-36.289001,9.806602
93 | 92,IBSS,4,40,1,0,31.644188,-36.012104,9.80655
94 | 93,IBSS,4,41,1,0,32.760094,-28.070341,9.806612
95 | 94,IBSS,4,42,1,0.000001,34.998886,-25.575409,9.806593
96 | 95,IBSS,4,43,1,0,35.497681,-31.653776,9.806551
97 | 96,IBSS,4,44,1,-0.000001,35.071846,-32.426121,9.806601
98 | 97,IBSS,4,45,1,0.000001,34.77375,-32.424026,9.80656
99 | 98,IBSS,4,46,1,0,35.052685,-32.076344,9.806563
100 | 99,IBSS,4,47,1,0,33.106762,-33.548603,9.806641
101 | 100,IBSS,4,48,1,0,32.297249,-36.455032,9.806623
102 | 101,IBSS,4,49,1,0,31.214596,-38.947887,9.80655
103 | 102,IBSS,4,50,1,0,31.023561,-42.165543,9.806576
104 | 103,IBSS,4,0,2,0,26.502275,-36.758457,9.806632
105 | 104,IBSS,4,1,2,0,24.62324,-37.396538,9.80664
106 | 105,IBSS,4,2,2,0,25.166376,-37.464638,9.80658
107 | 106,IBSS,4,3,2,0,25.254646,-38.269905,9.80656
108 | 107,IBSS,4,4,2,0,25.815754,-36.295712,9.806606
109 | 108,IBSS,4,5,2,0,25.907557,-33.522926,9.806618
110 | 109,IBSS,4,6,2,0,24.84425,-30.70318,9.806611
111 | 110,IBSS,4,7,2,0,25.659014,-29.911818,9.806594
112 | 111,IBSS,4,8,2,0,27.655165,-27.121119,9.806565
113 | 112,IBSS,4,9,2,0,26.256716,-26.6915,9.806598
114 | 113,IBSS,4,10,2,0,26.199472,-27.828257,9.806642
115 | 114,IBSS,4,11,2,0,24.764263,-28.994492,9.80662
116 | 115,IBSS,4,12,2,0,22.90276,-26.692158,9.806599
117 | 116,IBSS,4,13,2,0,24.63846,-27.465906,9.80659
118 | 117,IBSS,4,14,2,0,30.394936,-28.552851,9.806625
119 | 118,IBSS,4,15,2,0,33.694862,-30.431337,9.806579
120 | 119,IBSS,4,16,2,0,36.688576,-31.705717,9.806627
121 | 120,IBSS,4,17,2,0,38.701199,-34.099895,9.806598
122 | 121,IBSS,4,18,2,0,40.167938,-36.2672,9.806587
123 | 122,IBSS,4,19,2,0,39.769276,-37.252598,9.806638
124 | 123,IBSS,4,20,2,0,41.541759,-38.234539,9.806644
125 | 124,IBSS,4,21,2,0,37.842815,-40.445553,9.806579
126 | 125,IBSS,4,22,2,0,38.250702,-45.051716,9.806627
127 | 126,IBSS,4,23,2,0,32.935608,-44.627094,9.806631
128 | 127,IBSS,4,24,2,0,32.763866,-39.381123,9.80657
129 | 128,IBSS,4,25,2,0,31.821377,-39.229416,9.806633
130 | 129,IBSS,4,26,2,0,29.075367,-36.163822,9.806563
131 | 130,IBSS,4,27,2,0,29.071535,-34.657051,9.806597
132 | 131,IBSS,4,28,2,0,25.846817,-33.862144,9.806555
133 | 132,IBSS,4,29,2,0,32.032303,-30.137157,9.806588
134 | 133,IBSS,4,30,2,0,27.026232,-37.490791,9.806594
135 | 134,IBSS,4,31,2,0,36.659172,-34.551422,9.806632
136 | 135,IBSS,4,32,2,0,38.592812,-30.159302,9.806585
137 | 136,IBSS,4,33,2,-0.000001,60.91481,-47.718864,9.806567
138 | 137,IBSS,4,34,2,0,39.829121,-41.502163,9.80656
139 | 138,IBSS,4,35,2,-0.000001,38.649273,-44.403553,9.806591
140 | 139,IBSS,4,36,2,0,37.407501,-47.214764,9.806596
141 | 140,IBSS,4,37,2,-0.000001,43.533691,-57.440811,9.806623
142 | 141,IBSS,4,38,2,0.000001,29.611437,-52.793072,9.806617
143 | 142,IBSS,4,39,2,0.000001,25.980776,-41.18948,9.806596
144 | 143,IBSS,4,40,2,0,23.530823,-39.014015,9.806641
145 | 144,IBSS,4,41,2,0,28.788004,-30.251883,9.806624
146 | 145,IBSS,4,42,2,0.000001,32.791523,-23.996527,9.806553
147 | 146,IBSS,4,43,2,0,34.906578,-31.577593,9.806622
148 | 147,IBSS,4,44,2,0,34.307274,-32.443569,9.806635
149 | 148,IBSS,4,45,2,-0.000001,34.178097,-32.647713,9.806601
150 | 149,IBSS,4,46,2,-0.000001,35.817795,-32.490437,9.806619
151 | 150,IBSS,4,47,2,-0.000001,34.153389,-33.090889,9.806575
152 | 151,IBSS,4,48,2,0,32.913822,-35.632298,9.806604
153 | 152,IBSS,4,49,2,0,30.955896,-39.439651,9.80655
154 | 153,IBSS,4,50,2,0,30.187973,-42.626732,9.806573
155 | 154,IBSS,4,0,3,0,26.05443,-33.255795,9.806624
156 | 155,IBSS,4,1,3,0,25.014931,-34.467709,9.806558
157 | 156,IBSS,4,2,3,0.000001,25.633053,-34.870316,9.806638
158 | 157,IBSS,4,3,3,0,25.41114,-35.925869,9.806565
159 | 158,IBSS,4,4,3,0,26.169914,-34.256824,9.806614
160 | 159,IBSS,4,5,3,0,26.907497,-31.854134,9.806591
161 | 160,IBSS,4,6,3,0,26.935801,-30.694145,9.80657
162 | 161,IBSS,4,7,3,0,27.925533,-28.416687,9.806616
163 | 162,IBSS,4,8,3,0,27.643902,-26.843992,9.806562
164 | 163,IBSS,4,9,3,0,25.884581,-27.027046,9.806577
165 | 164,IBSS,4,10,3,-0.000001,24.003311,-27.214014,9.80665
166 | 165,IBSS,4,11,3,0,23.081059,-27.056198,9.806607
167 | 166,IBSS,4,12,3,0,146.626892,-112.237053,9.806589
168 | 167,IBSS,4,13,3,0,23.489864,-23.139853,9.806587
169 | 168,IBSS,4,14,3,0,28.820974,-25.397461,9.806607
170 | 169,IBSS,4,15,3,0,34.193714,-29.227577,9.806574
171 | 170,IBSS,4,16,3,0,36.974297,-29.181128,9.806565
172 | 171,IBSS,4,17,3,0,39.936886,-32.780727,9.806571
173 | 172,IBSS,4,18,3,0,41.186523,-34.977867,9.806611
174 | 173,IBSS,4,19,3,0,39.961308,-36.344109,9.806617
175 | 174,IBSS,4,20,3,0,40.490463,-37.594814,9.806611
176 | 175,IBSS,4,21,3,0,39.094543,-36.008404,9.80655
177 | 176,IBSS,4,22,3,0,36.493294,-41.202595,9.806551
178 | 177,IBSS,4,22,3,0,38.998352,-42.041222,9.806597
179 | 178,IBSS,4,23,3,0,34.574619,-40.787636,9.806586
180 | 179,IBSS,4,24,3,0,34.017178,-41.207268,9.806577
181 | 180,IBSS,4,25,3,0,29.535091,-40.741116,9.806643
182 | 181,IBSS,4,26,3,0,29.228855,-35.114189,9.80659
183 | 182,IBSS,4,27,3,0,25.194687,-34.635788,9.806592
184 | 183,IBSS,4,28,3,0,26.152706,-28.850449,9.806628
185 | 184,IBSS,4,29,3,0,32.210739,-24.345322,9.806644
186 | 185,IBSS,4,31,3,-0.000001,33.680431,-44.514961,9.80662
187 | 186,IBSS,4,32,3,0,29.950226,-51.82056,9.806576
188 | 187,IBSS,4,33,3,0,64.103249,-15.670307,9.806596
189 | 188,IBSS,4,34,3,0,46.348419,-48.561817,9.80663
190 | 189,IBSS,4,35,3,0,39.387329,-49.481548,9.806636
191 | 190,IBSS,4,36,3,0.000001,41.698105,-63.324528,9.806585
192 | 191,IBSS,4,37,3,0,28.576683,-80.267952,9.806643
193 | 192,IBSS,4,38,3,0,28.01479,-56.117935,9.806593
194 | 193,IBSS,4,39,3,0,21.7922,-62.038033,9.806575
195 | 194,IBSS,4,40,3,0,18.082117,-40.476585,9.806609
196 | 195,IBSS,4,41,3,0.000001,28.261784,-27.738914,9.806622
197 | 196,IBSS,4,42,3,0,32.585602,-28.565903,9.80663
198 | 197,IBSS,4,43,3,0,34.476639,-32.473515,9.806569
199 | 198,IBSS,4,44,3,0,34.306454,-33.261871,9.806586
200 | 199,IBSS,4,45,3,0,34.535538,-33.368031,9.806561
201 | 200,IBSS,4,46,3,0,35.939114,-33.751644,9.806623
202 | 201,IBSS,4,47,3,0,34.473476,-34.258118,9.80658
203 | 202,IBSS,4,48,3,0,33.459946,-36.396393,9.806589
204 | 203,IBSS,4,49,3,0,31.51923,-40.663197,9.806629
205 | 204,IBSS,4,50,3,0,30.614826,-43.236477,9.806565
206 | 205,IBSS,4,0,4,0,27.988543,-31.582623,9.806616
207 | 206,IBSS,4,1,4,0,25.5135,-30.712612,9.806596
208 | 207,IBSS,4,2,4,0,25.163797,-31.766083,9.806617
209 | 208,IBSS,4,3,4,0,25.838911,-33.203194,9.806635
210 | 209,IBSS,4,4,4,0,26.127453,-32.846481,9.806591
211 | 210,IBSS,4,5,4,0,27.057697,-32.212639,9.806613
212 | 211,IBSS,4,6,4,0,26.089958,-31.731382,9.80658
213 | 212,IBSS,4,7,4,0,27.387358,-29.069208,9.806647
214 | 213,IBSS,4,8,4,0,27.722786,-27.260281,9.806624
215 | 214,IBSS,4,9,4,0,26.044001,-27.1537,9.806606
216 | 215,IBSS,4,10,4,0,23.267578,-27.687403,9.806638
217 | 216,IBSS,4,11,4,0,20.986443,-25.637859,9.806606
218 | 217,IBSS,4,12,4,0,22.707537,-24.390955,9.806562
219 | 218,IBSS,4,13,4,0,22.05196,-20.812695,9.8066
220 | 219,IBSS,4,14,4,0,26.845152,-23.189394,9.80661
221 | 220,IBSS,4,15,4,0,33.495842,-24.586693,9.806602
222 | 221,IBSS,4,16,4,0,36.706257,-26.311279,9.806614
223 | 222,IBSS,4,17,4,-0.000001,41.007858,-30.836706,9.806558
224 | 223,IBSS,4,18,4,0,41.980408,-34.153328,9.806618
225 | 224,IBSS,4,19,4,0,41.114117,-35.773758,9.806558
226 | 225,IBSS,4,20,4,0,41.070152,-36.037746,9.806555
227 | 226,IBSS,4,21,4,0,38.693592,-35.345642,9.806562
228 | 227,IBSS,4,22,4,0,37.626251,-44.328888,9.806602
229 | 228,IBSS,4,23,4,0,35.468571,-39.340557,9.806616
230 | 229,IBSS,4,24,4,0,32.423553,-39.921047,9.80658
231 | 230,IBSS,4,25,4,0,29.018196,-39.530182,9.806644
232 | 231,IBSS,4,26,4,0.000001,27.797562,-33.941906,9.806597
233 | 232,IBSS,4,27,4,0,26.408958,-31.664696,9.806592
234 | 233,IBSS,4,28,4,0,26.633501,-30.687635,9.806561
235 | 234,IBSS,4,29,4,0,33.666512,-28.367216,9.806579
236 | 235,IBSS,4,30,4,0,30.359858,-32.575237,9.806599
237 | 236,IBSS,4,31,4,0,56.16515,-34.838795,9.806565
238 | 237,IBSS,4,32,4,0,28.38129,-32.615753,9.806561
239 | 238,IBSS,4,33,4,0.000001,38.196838,-28.252377,9.806614
240 | 239,IBSS,4,34,4,0,49.565334,-29.773224,9.806563
241 | 240,IBSS,4,35,4,0,42.006874,-47.379047,9.806608
242 | 241,IBSS,4,36,4,-0.000001,45.743511,-52.925102,9.806556
243 | 242,IBSS,4,37,4,0,32.305973,-69.774635,9.806611
244 | 243,IBSS,4,38,4,0,27.637144,-52.776207,9.806637
245 | 244,IBSS,4,39,4,0,36.417728,-47.659431,9.806603
246 | 245,IBSS,4,40,4,-0.000001,21.114517,-38.400299,9.806603
247 | 246,IBSS,4,41,4,0,31.583107,-25.405216,9.806597
248 | 247,IBSS,4,42,4,0,30.679485,-29.88578,9.806593
249 | 248,IBSS,4,43,4,0,32.817688,-33.653381,9.806619
250 | 249,IBSS,4,44,4,0,34.374176,-34.377068,9.806583
251 | 250,IBSS,4,45,4,0,34.763302,-33.997314,9.806604
252 | 251,IBSS,4,46,4,0,35.359726,-34.034191,9.806555
253 | 252,IBSS,4,47,4,0,34.581333,-34.809059,9.806593
254 | 253,IBSS,4,48,4,0,33.627014,-37.011997,9.806631
255 | 254,IBSS,4,49,4,-0.000001,33.090927,-39.36401,9.80659
256 | 255,IBSS,4,50,4,-0.000001,31.354143,-42.066303,9.806603
257 | 256,IBSS,4,0,5,-0.000001,27.032604,-22.831581,9.806604
258 | 257,IBSS,4,1,5,-0.000001,26.887867,-26.679005,9.806621
259 | 258,IBSS,4,2,5,-0.000001,25.073347,-30.183083,9.806616
260 | 259,IBSS,4,3,5,0,24.503954,-31.473476,9.806625
261 | 260,IBSS,4,4,5,-0.000001,25.514503,-32.36285,9.806596
262 | 261,IBSS,4,5,5,-0.000001,23.976873,-32.478722,9.806549
263 | 262,IBSS,4,6,5,0.000001,25.11982,-30.382111,9.806646
264 | 263,IBSS,4,7,5,0,26.714514,-29.418829,9.806576
265 | 264,IBSS,4,8,5,0,26.969893,-28.623972,9.806558
266 | 265,IBSS,4,9,5,-0.000001,24.984264,-28.764282,9.806563
267 | 266,IBSS,4,10,5,0,21.40086,-28.037628,9.806599
268 | 267,IBSS,4,11,5,-0.000001,19.432589,-25.223366,9.806575
269 | 268,IBSS,4,12,5,0,19.308573,-21.533024,9.806605
270 | 269,IBSS,4,13,5,0,20.238968,-18.814404,9.806572
271 | 270,IBSS,4,14,5,0,25.143154,-17.367962,9.806567
272 | 271,IBSS,4,15,5,0,31.800682,-19.463959,9.806615
273 | 272,IBSS,4,16,5,0,36.747616,-23.957882,9.806606
274 | 273,IBSS,4,17,5,0,39.572227,-27.112606,9.806553
275 | 274,IBSS,4,18,5,0,40.034489,-31.007074,9.806639
276 | 275,IBSS,4,19,5,0,40.689564,-33.45647,9.806608
277 | 276,IBSS,4,20,5,0,39.655212,-35.185658,9.80661
278 | 277,IBSS,4,21,5,0.000001,39.061676,-35.43317,9.806621
279 | 278,IBSS,4,22,5,0,36.638523,-37.419575,9.806623
280 | 279,IBSS,4,23,5,-0.000001,34.087349,-38.160507,9.806595
281 | 280,IBSS,4,24,5,0,33.487808,-40.991138,9.806615
282 | 281,IBSS,4,25,5,0,29.77689,-39.704731,9.806548
283 | 282,IBSS,4,26,5,0,29.088211,-37.054081,9.806578
284 | 283,IBSS,4,27,5,0,30.890028,-34.110828,9.806631
285 | 284,IBSS,4,28,5,0,30.706657,-30.683807,9.806608
286 | 285,IBSS,4,29,5,0,33.983917,-28.784885,9.80663
287 | 286,IBSS,4,30,5,0,35.602615,-28.488428,9.806596
288 | 287,IBSS,4,31,5,0,37.860176,-29.211803,9.80663
289 | 288,IBSS,4,32,5,0,36.958427,-29.666704,9.806629
290 | 289,IBSS,4,33,5,0,38.017761,-31.341391,9.806638
291 | 290,IBSS,4,34,5,0,37.025524,-33.788017,9.806619
292 | 291,IBSS,4,35,5,0,36.543919,-35.850143,9.806587
293 | 292,IBSS,4,36,5,0,34.989407,-39.245667,9.806631
294 | 293,IBSS,4,37,5,0,32.251877,-40.109806,9.806553
295 | 294,IBSS,4,38,5,0,27.622852,-37.706688,9.806634
296 | 295,IBSS,4,39,5,0,26.572285,-37.631168,9.806621
297 | 296,IBSS,4,40,5,0,26.258923,-36.157482,9.806602
298 | 297,IBSS,4,41,5,0,26.56242,-34.676014,9.806624
299 | 298,IBSS,4,42,5,0,27.014769,-33.423058,9.806574
300 | 299,IBSS,4,43,5,0,31.27483,-32.487648,9.806629
301 | 300,IBSS,4,44,5,0,31.890291,-34.327492,9.806557
302 | 301,IBSS,4,45,5,0,31.848499,-34.582409,9.80664
303 | 302,IBSS,4,46,5,0,31.486675,-34.979675,9.806613
304 | 303,IBSS,4,47,5,0,32.236786,-34.838757,9.806558
305 | 304,IBSS,4,48,5,0,32.463905,-37.422543,9.806606
306 | 305,IBSS,4,49,5,0,32.09668,-40.294018,9.80663
307 | 306,IBSS,4,50,5,0,38.212772,-44.585972,9.806591
308 |
--------------------------------------------------------------------------------
/algorithm/waypoint_trace.csv:
--------------------------------------------------------------------------------
1 | Loc_x,Loc_y,Floor,Mag_x,Mag_y,Mag_z,
2 | 5.298645306,22.79605933,4,-2.198817039,23.68165812,-34.73901629,42.10053421
3 | 4.51591923,18.41387011,4,-3.316509212,22.59672251,-34.31016424,41.21648301
4 | 3.733193155,14.0316809,4,-3.404664869,22.29684423,-33.8813122,40.70238717
5 | 2.950467079,9.649491688,4,-3.492820526,22.98471143,-33.45246015,40.73774472
6 | 1.786964443,3.135477576,4,-4.76221154,11.85486733,-28.59608739,31.32016526
7 | 4.032623013,5.57012598,4,-3.370941148,22.03370239,-34.04536845,40.69317385
8 | 6.278281583,8.004774383,4,-0.712506282,25.03953072,-33.19740369,41.58789939
9 | 8.523940153,10.43942279,4,-0.448567588,21.42111369,-30.37226027,37.16906669
10 | 11.01506801,13.14019865,4,-1.344175862,16.72322842,-27.64252428,32.33546545
11 | 11.34396985,17.66706719,4,-1.269289675,16.18743443,-26.64079193,31.19897313
12 | 11.67287168,22.19393572,4,-0.141187286,15.65164044,-25.63905959,30.039227
13 | 12.24928652,30.12747075,4,1.835861474,17.91959048,-24.22646611,30.18946456
14 | 10.54747435,33.89920697,4,-1.176066966,17.48495685,-29.06666866,33.94080254
15 | 8.84566218,37.67094319,4,-0.56423283,20.63007303,-30.19390795,36.5730823
16 | 7.14385001,41.44267941,4,0.047601305,24.81443879,-31.13990249,39.81773682
17 | 3.937622191,48.54866079,4,-3.381640753,22.11719002,-33.99331793,40.69583827
18 | 3.651621746,45.25169399,4,-3.413851967,22.36852997,-33.83661959,40.705311
19 | 3.365621301,41.95472719,4,-3.446063181,22.61986991,-33.67992125,40.7169616
20 | 3.079620856,38.65776039,4,-3.478274395,22.87120985,-33.52322291,40.7307882
21 | 2.793620411,35.36079359,4,-3.510485609,23.12254979,-33.36652458,40.74678859
22 | 2.507619966,32.06382679,4,-3.542696823,23.37388973,-32.9130838,40.52357964
23 | 2.221619521,28.76685999,4,-3.574908037,23.62522968,-32.42551421,40.27834923
24 | 1.935619076,25.46989319,4,-3.607119251,23.87656962,-31.93794463,40.03915825
25 | 1.649618631,22.17292639,4,-3.639330465,24.12790956,-31.45037505,39.80611557
26 | 1.317857614,18.34843913,4,-3.676695529,24.41946433,-30.88479349,39.54363156
27 | 2.11622873,20.5684915,4,-3.586777827,23.71784812,-32.24584546,40.18949917
28 | 2.914599846,22.78854387,4,-3.496860125,23.0162319,-33.43280866,40.73975523
29 | 3.712970962,25.00859623,4,-3.406942423,22.31461568,-33.87023255,40.70309549
30 | 4.511342078,27.2286486,4,-3.317024721,22.59037812,-34.30765644,41.21095882
31 | 5.309713194,29.44870097,4,-2.182024765,23.69699931,-34.74508034,42.113295
32 | 6.10808431,31.66875333,4,-0.970730731,24.80362049,-33.60197147,41.77624198
33 | 6.906455426,33.8888057,4,0.132949214,25.39813761,-31.70420177,40.62313971
34 | 8.296691902,37.75467424,4,-0.36686748,21.97986501,-30.49823936,37.59510157
35 | 6.915959201,32.80739172,4,0.129532425,25.37477001,-31.68161081,40.59088808
36 | 6.749266055,35.56178104,4,0.00207453,25.69236169,-32.07784909,41.0984897
37 | 6.58257291,38.31617035,4,-0.250833433,25.46130854,-32.47408737,41.26629981
38 | 6.415879764,41.07055966,4,-0.503741395,25.23025538,-32.87032565,41.44005128
39 | 6.249186619,43.82494898,4,-0.756649358,24.99920222,-33.26656393,41.6196697
40 | 6.082493474,46.57933829,4,-1.009557321,24.76814907,-33.66280222,41.80507944
41 | 5.906073744,49.49444687,4,-1.277222523,24.5236139,-34.0821611,42.00753077
42 | 10.17580114,47.3506029,4,-1.042443315,18.09042709,-29.45652182,34.58376669
43 | 2.805720014,45.03229961,4,-3.509122874,23.11191654,-33.37315389,40.74606767
44 | 5.83933942,47.11449869,4,-1.378472289,24.43111354,-34.24079206,42.08576167
45 | 9.065426474,49.32880266,4,-0.643242312,20.08972304,-30.07207772,36.17099101
46 | 9.540029293,45.78809878,4,-0.813871134,19.12612439,-29.80897323,35.42662706
47 | 10.01463211,42.2473949,4,-0.984499956,18.35297777,-29.54586873,34.79596805
48 | 10.48923493,38.70669102,4,-1.155128777,17.57983115,-29.24404776,34.14087162
49 | 10.96383775,35.16598715,4,-1.325757599,16.80668453,-27.79855567,32.51125921
50 | 11.43844057,31.62528327,4,-0.945263962,16.03353791,-26.35306359,30.86181819
51 | 11.91304339,28.08457939,4,0.682579125,16.40826908,-24.9075715,29.83428106
52 | 12.48410155,23.82428477,4,2.641254967,18.97502017,-24.11982786,30.80249526
53 | 9.755899603,26.05773333,4,-0.891480653,18.77446318,-29.68930169,35.1387228
54 | 7.027697658,28.29118189,4,0.089360305,25.10003078,-31.41600268,40.21174896
55 | 3.482120528,31.19377645,4,-3.432942287,22.51748927,-33.74375065,40.71195308
56 | 4.412559609,28.00176371,4,-3.328150239,22.45345586,-34.25353398,41.0918344
57 | 5.342998689,24.80975097,4,-2.131523787,23.74313629,-34.76331731,42.15172766
58 | 6.27343777,21.61773823,4,-0.719855348,25.03281671,-33.20891769,41.59317634
59 | 7.203876851,18.42572549,4,0.026020504,24.66684655,-31.10406077,39.69781597
60 | 8.134315932,15.23371275,4,-0.308490202,22.37911028,-30.58825536,37.90199347
61 | 9.064755012,12.04170001,4,-0.643000908,20.09137401,-30.07244995,36.17221317
62 | 9.995194093,8.849687273,4,-0.977511615,18.38464306,-29.55664454,34.82162929
63 | 11.56462846,3.46550403,4,-0.42302692,4.871461765,-0.585779565,4.924756766
64 | 9.895237292,7.781735533,4,-0.941575226,18.54747662,-29.61205737,34.95381802
65 | 8.225846121,12.09796704,4,-0.341397062,22.15405854,-30.53751398,37.7287506
66 | 6.556454949,16.41419854,4,-0.290459779,25.42510646,-32.53617112,41.29313305
67 | 4.887063777,20.73043004,4,-2.823271307,23.11116549,-34.51351265,41.6326721
68 | 1.925257286,28.38821732,4,-3.608286262,23.88567566,-31.92028,40.03060712
69 | 2.384873985,25.46508054,4,-3.556521267,23.48176008,-32.70382815,40.41759859
70 | 2.844490683,22.54194375,4,-3.504756271,23.07784451,-33.39439617,40.74378381
71 | 3.304107382,19.61880696,4,-3.452991275,22.67392893,-33.64621806,40.71975186
72 | 3.76372408,16.69567017,4,-3.40122628,22.27001336,-33.89803995,40.7013384
73 | 4.223340779,13.77253339,4,-3.349461284,22.19117989,-34.14986184,40.86417036
74 | 4.682957477,10.8493966,4,-3.132942759,22.82825401,-34.40168374,41.40555947
75 | 5.142574175,7.926259811,4,-2.435609209,23.46532813,-34.65350563,41.92158476
76 | 5.602190874,5.003123023,4,-1.738275659,24.10240225,-34.80450649,42.37099324
77 | 6.315248203,0.468117839,4,-0.865439738,7.285411479,-10.17787866,12.54653021
78 | 6.373733675,3.535730977,4,-1.778181368,4.02843475,-4.53374153,6.32020789
79 | 6.432219148,6.603344115,4,-0.478951173,25.25290338,-32.83148609,41.42275947
80 | 6.49070462,9.670957253,4,-0.39021662,25.33397002,-32.69246308,41.36132793
81 | 6.549190093,12.73857039,4,-0.301482068,25.41503666,-32.55344006,41.30062275
82 | 6.607675565,15.80618353,4,-0.212747515,25.49610329,-32.41441705,41.24064715
83 | 6.666161037,18.87379667,4,-0.124012962,25.57716993,-32.27539404,41.18140432
84 | 6.72464651,21.94140981,4,-0.03527841,25.65823657,-32.13637103,41.12289741
85 | 6.783131982,25.00902294,4,0.053456143,25.70136167,-31.99734802,41.04135877
86 | 6.841617455,28.07663608,4,0.142190695,25.55755931,-31.85832501,40.84313808
87 | 6.900102927,31.14424922,4,0.135233059,25.41375695,-31.719302,40.64469768
88 | 6.958588399,34.21186236,4,0.11420641,25.26995459,-31.58027898,40.44623182
89 | 7.047032198,38.85081537,4,0.082409167,25.05249158,-31.37004347,40.1461549
90 | 6.386426135,34.16330327,4,-0.54842864,25.18942974,-32.94033846,41.47136413
91 | 5.725820072,29.47579118,4,-1.550704607,24.27376452,-34.51063345,42.22089708
92 | 5.065214009,24.78827908,4,-2.552980575,23.3580993,-34.61112035,41.833577
93 | 4.404607946,20.10076699,4,-3.329045807,22.44243408,-34.2491773,41.08225333
94 | 3.744001883,15.41325489,4,-3.403447521,22.28734541,-33.88723425,40.70201304
95 | 3.08339582,10.72574279,4,-3.477849234,22.86789238,-33.5252912,40.73059154
96 | 2.203842403,4.484629499,4,-2.451123046,5.718401985,-0.493592887,6.241134464
97 | 2.843621984,8.958458261,4,-3.504854109,23.07860793,-33.39392021,40.74383454
98 | 3.483401565,13.43228702,4,-3.432798008,22.51636348,-33.74445252,40.71190001
99 | 4.548741761,20.8819615,4,-3.312812527,22.64221777,-34.32814756,41.25610824
100 | 5.530770132,23.64709289,4,-1.84663569,24.00340605,-34.86619642,42.37009816
101 | 6.512798503,26.41222429,4,-0.356695633,25.36459432,-32.63994477,41.33830997
102 | 7.494826873,29.17735569,4,-0.078581613,23.95146719,-30.94276747,39.12970501
103 | 8.476855244,31.94248708,4,-0.431639659,21.53688468,-30.39836262,37.25700155
104 | 9.458883615,34.70761848,4,-0.784697705,19.25831388,-29.85395777,35.53529511
105 | 10.44091199,37.47274988,4,-1.137755751,17.65855112,-29.30955292,34.23695092
106 | 11.42785729,40.25172606,4,-0.981563617,16.05077849,-26.38529695,30.89943126
107 | 5.839802491,34.33243408,4,-1.377769713,24.43175541,-34.23969131,42.08521573
108 | 6.087640622,30.14738557,4,-1.001748033,24.77528352,-33.65056718,41.79926846
109 | 6.335478752,25.96233705,4,-0.625726353,25.11881164,-33.06144304,41.52595872
110 | 6.583316882,21.77728853,4,-0.249704673,25.46233976,-32.47231891,41.2655376
111 | 7.054866318,13.8146023,4,0.07959265,25.03322927,-31.35142136,40.11957782
112 | 4.012078865,17.43772778,4,-3.373254963,22.05175678,-34.0341124,40.69372966
113 | 1.198947615,22.79954453,4,-3.761087284,24.52396358,-30.68207737,39.45833802
114 | 6.380795982,25.40974471,4,-0.556970747,25.18162579,-32.95372163,41.4773705
115 | 7.962324256,28.68287482,4,-0.246655894,22.80199836,-30.683602,38.22924797
116 | 10.69290373,34.33408071,4,-1.228351621,17.24804668,-28.62373614,33.44132522
117 | 8.776450083,29.93285632,4,-0.539349753,20.8002497,-30.23227691,36.70057019
118 | 6.859996432,25.53163193,4,0.149652114,25.51236962,-31.81463722,40.78081094
119 | 4.226856125,19.4845035,4,-3.349065363,22.1960525,-34.15178789,40.86839367
120 | 1.669273471,27.63832706,4,-3.63711681,24.1106367,-31.48388235,39.821932
121 | 4.154156777,24.23007643,4,-3.357253232,22.09528403,-34.11195625,40.78110205
122 | 8.088138237,18.83425172,4,-0.291888435,22.49265064,-30.61385479,37.98963854
123 | 5.176882717,17.58695572,4,-2.383556059,23.51288315,-34.67230312,41.96076283
124 | 1.80306664,16.14148064,4,-3.622048161,23.99305797,-31.71197108,39.93037909
125 | 5.268160352,18.13539398,4,-2.245069017,23.63940296,-34.72231372,42.06543448
126 | 8.733254064,20.12930733,4,-0.523819956,20.9064588,-30.25622339,36.78034068
127 | 12.64129668,22.37810605,4,3.180419499,19.68156953,-24.0484397,31.23790485
128 | 11.17730151,19.12119789,4,-1.402501916,16.45894369,-27.14841168,31.77892535
129 | 9.713306333,15.86428972,4,-0.876167555,18.84384929,-29.71291402,35.19539154
130 | 8.24931116,12.60738156,4,-0.349833194,22.09636339,-30.52450572,37.68444119
131 | 5.708388638,6.954663936,4,-1.577151697,24.24960283,-34.55206888,42.24187625
132 | 7.670021153,10.37441838,4,-0.141567319,23.52070464,-30.84564541,38.7904296
133 | 9.631653668,13.79417282,4,-0.846811855,18.97686468,-29.75817963,35.304217
134 | 12.88108129,19.45896704,4,3.684761191,20.75933614,-23.93954458,31.90030245
135 | 11.745783,17.75292952,4,0.108891714,15.65647914,-25.41699444,29.85231654
136 | 10.61048472,16.04689201,4,-1.198720402,17.38231049,-28.87475875,33.72437311
137 | 9.475186428,14.34085449,4,-0.790558879,19.23175596,-29.84492002,35.51344353
138 | 8.33988814,12.63481697,4,-0.382397357,21.87365537,-30.47429276,37.51380475
139 | 7.204589853,10.92877945,4,0.025764166,24.66509345,-31.10366551,39.6964168
140 | 6.069291565,9.222741933,4,-1.029587345,24.74984992,-33.69418384,41.82000892
141 | 4.918616114,7.493596817,4,-2.775399888,23.15490014,-34.53080003,41.66807406
142 | 6.290870167,5.658116063,4,-0.693406798,25.05697974,-33.16747997,41.57420804
143 | 6.133329874,8.588988021,4,-0.932427991,24.83861334,-33.54196145,41.74792584
144 | 5.975789581,11.51985998,4,-1.171449185,24.62024694,-33.91644292,41.92676893
145 | 5.818249288,14.45073194,4,-1.410470379,24.40188054,-34.2909244,42.110672
146 | 5.660708995,17.3816039,4,-1.649491572,24.18351414,-34.66540587,42.29956906
147 | 5.503168701,20.31247585,4,-1.888512766,23.96514774,-34.85107373,42.33783328
148 | 5.345628408,23.24334781,4,-2.12753396,23.74678134,-34.76475812,42.1547676
149 | 5.188088115,26.17421977,4,-2.366555154,23.52841494,-34.67844251,41.97357821
150 | 5.030547822,29.10509173,4,-2.605576347,23.31004854,-34.5921269,41.7942895
151 | 4.757082932,34.19261925,4,-3.02047912,22.9309992,-34.44229674,41.48765868
152 | 4.990576056,31.53329719,4,-2.66622178,23.25464373,-34.57022655,41.74910487
153 | 5.22406918,28.87397513,4,-2.31196444,23.57828825,-34.69815637,42.01479396
154 | 5.457562304,26.21465307,4,-1.9577071,23.90193277,-34.82608619,42.28464599
155 | 5.691055428,23.55533101,4,-1.60344976,24.22557729,-34.59327082,42.26279726
156 | 5.924548552,20.89600895,4,-1.24919242,24.54922181,-34.03824552,41.98603257
157 | 6.158041676,18.23668689,4,-0.89493508,24.87286633,-33.48322021,41.72033586
158 | 6.549394838,13.7794503,4,-0.301171427,25.41532045,-32.55295337,41.30041152
159 | 7.013141708,11.76550101,4,0.094593448,25.13582052,-31.45060293,40.26113319
160 | 7.476888577,9.751551722,4,-0.072132451,23.99557334,-30.95271188,39.16456454
161 | 7.940635447,7.737602436,4,-0.238858351,22.85532617,-30.69562558,38.27067307
162 | 8.529956917,5.178310649,4,-0.45073073,21.40631985,-30.36892477,37.15784277
163 | 8.445159919,7.332536063,4,-0.420244581,21.61481622,-30.41593349,37.31629531
164 | 8.36036292,9.486761477,4,-0.389758433,21.82331259,-30.46294221,37.47532164
165 | 8.275565922,11.64098689,4,-0.359272285,22.03180895,-30.50995093,37.63491448
166 | 8.190768923,13.7952123,4,-0.328786136,22.24030532,-30.55695965,37.79506666
167 | 8.105971925,15.94943772,4,-0.298299988,22.44880169,-30.60396837,37.9557711
168 | 8.021174926,18.10366313,4,-0.26781384,22.65729806,-30.65097709,38.11702082
169 | 7.936377928,20.25788855,4,-0.237327691,22.86579443,-30.69798581,38.27880891
170 | 7.851580929,22.41211396,4,-0.206841543,23.0742908,-30.74499453,38.4411286
171 | 7.766783931,24.56633937,4,-0.176355395,23.28278716,-30.79200325,38.60397316
172 | 7.681986932,26.72056479,4,-0.145869246,23.49128353,-30.83901197,38.76733598
173 | 7.597189934,28.8747902,4,-0.115383098,23.6997799,-30.88602069,38.93121055
174 | 7.512392935,31.02901561,4,-0.08489695,23.90827627,-30.93302941,39.09559042
175 | 7.427595937,33.18324103,4,-0.054410801,24.11677264,-30.98003813,39.26046925
176 | 7.342798938,35.33746644,4,-0.023924653,24.32526901,-31.02704685,39.42584078
177 | 7.25800194,37.49169186,4,0.006561496,24.53376538,-31.07405557,39.59169883
178 | 7.173204941,39.64591727,4,0.037047644,24.74226174,-31.12106429,39.75803732
179 | 7.088407943,41.80014268,4,0.067533792,24.95075811,-31.27169117,40.00579408
180 | 6.931302104,45.79133809,4,0.124016356,25.33704533,-31.64513993,40.53882247
181 | 7.560034993,42.72441209,4,-0.102025184,23.79113538,-30.90661819,39.00317397
182 | 8.188767882,39.65748609,4,-0.328066723,22.24522542,-30.55806896,37.79885264
183 | 9.430832719,33.59875907,4,-0.77461287,19.30400989,-29.86950828,35.57291593
184 | 5.708312857,36.52783243,4,-1.577266673,24.24949779,-34.55224902,42.24196758
185 | 0.620723827,40.53101362,4,-6.501529371,22.16554382,-29.90136219,37.78455608
186 | 0.754713209,37.42503462,4,-5.866498179,22.75221036,-29.94921286,38.06618221
187 | 0.768896675,35.13505707,4,-5.799276854,22.81431203,-29.9542781,38.0970238
188 | 0.783080142,32.84507953,4,-5.732055529,22.87641371,-29.97311229,38.13888075
189 | 0.797263609,30.55510199,4,-5.664834204,22.93851539,-29.99729207,38.18511969
190 | 0.811447075,28.26512445,4,-5.59761288,23.00061706,-30.02147184,38.23153707
191 | 0.825630542,25.97514691,4,-5.530391555,23.06271874,-30.04565162,38.27813224
192 | 0.839814009,23.68516936,4,-5.46317023,23.12482042,-30.0698314,38.32490455
193 | 0.853997476,21.39519182,4,-5.395948905,23.18692209,-30.09401117,38.37185335
194 | 0.868180942,19.10521428,4,-5.32872758,23.24902377,-30.11819095,38.41897799
195 | 0.882364409,16.81523674,4,-5.261506255,23.31112544,-30.14237073,38.46627784
196 | 0.896547876,14.5252592,4,-5.19428493,23.37322712,-30.1665505,38.51375224
197 | 0.910731342,12.23528165,4,-5.127063606,23.4353288,-30.19073028,38.56140055
198 | 0.924914809,9.945304113,4,-5.059842281,23.49743047,-30.21491006,38.60922212
199 | 0.939098276,7.655326571,4,-4.992620956,23.55953215,-30.23908984,38.65721632
200 | 0.953281743,5.365349029,4,-4.925399631,23.62163383,-30.26326961,38.70538249
201 | 0.97278298,2.216796077,4,-1.458789154,13.89973732,-26.37134126,29.84591099
202 | 2.832320212,6.72490136,4,-3.506126988,23.08854003,-33.38772802,40.74449643
203 | 4.691857445,11.23300664,4,-3.119439669,22.84059024,-34.40655999,41.41539372
204 | 6.551394677,15.74111193,4,-0.298137258,25.41809243,-32.54819965,41.29834875
205 | 9.67563528,23.31525743,4,-0.862624089,18.90521691,-29.73379764,35.24556808
206 | 10.25454426,25.30224916,4,-1.070752977,17.96215146,-29.41286918,34.48046216
207 | 10.83345324,27.28924089,4,-1.278881865,17.01908601,-28.1956662,32.95876849
208 | 11.41236222,29.27623262,4,-1.034710254,16.07602057,-26.4324901,30.9545731
209 | 11.9912712,31.26322435,4,0.950893166,16.7598818,-24.669314,29.83911676
210 | 12.6727754,33.60235407,4,3.28838854,19.8230578,-24.03414404,31.32741929
211 | 11.07102014,31.2831951,4,-1.364291725,16.63208021,-27.47211156,32.14349542
212 | 9.469264882,28.96403614,4,-0.78842997,19.24140239,-29.84820273,35.52137939
213 | 7.867509626,26.64487717,4,-0.212568215,23.03512579,-30.73616417,38.41059741
214 | 6.265754369,24.3257182,4,-0.731512656,25.02216676,-33.22718153,41.60155685
215 | 4.663999113,22.00655923,4,-3.161706517,22.80197584,-34.39129654,41.38463202
216 | 2.427876592,18.76890881,4,-3.551678036,23.44396898,-32.7771384,40.45460295
217 | 2.260409621,22.2429648,4,-3.570539246,23.59114056,-32.49164304,40.31125812
218 | 2.09294265,25.71702079,4,-3.589400455,23.73831215,-32.20614767,40.16997893
219 | 1.881558506,30.10212638,4,-3.613207901,23.92407857,-31.84578293,39.99463335
220 | 1.437963069,33.26285792,4,-3.663168478,24.3139145,-31.0895476,39.63767414
221 | 0.994367631,36.42358947,4,-4.730676583,23.80152656,-30.33331226,38.84587237
222 | 0.258576925,41.66628744,4,-8.217893574,20.57989976,-29.77203124,37.11387737
223 | 2.744768982,38.41284925,4,-3.515987572,23.1654809,-33.31737214,40.73142472
224 | 5.230961039,35.15941105,4,-2.301508065,23.58784104,-34.70193239,42.02269977
225 | 8.457055707,30.93773414,4,-0.424521345,21.5855672,-30.40933884,37.29403195
226 | 8.508389149,26.15868513,4,-0.442976703,21.45935004,-30.38088124,37.1980897
227 | 8.594205703,18.16932197,4,-0.473829401,21.24834682,-30.33330731,37.03817341
228 | 8.513058753,25.69628167,4,-0.444655515,21.44786856,-30.37829256,37.18937272
229 | 7.912800704,28.7449345,4,-0.228851227,22.92376541,-30.71105626,38.32388772
230 | 7.312542656,31.79358733,4,-0.013046939,24.39966227,-31.04381996,39.48496481
231 | 6.712284608,34.84224016,4,-0.054033971,25.64110176,-32.16575592,41.13520235
232 | 6.112026559,37.89089299,4,-0.964749524,24.80908484,-33.59260053,41.77181158
233 | 5.511768511,40.93954582,4,-1.875465077,23.97706792,-34.85578552,42.34787999
234 | 4.911510463,43.98819865,4,-2.78618063,23.14505101,-34.52690688,41.66009466
235 | 3.791960699,49.6742841,4,-3.39804609,22.24519874,-33.91351067,40.70039054
236 | 4.259724415,47.46227808,4,-3.345363524,22.2416112,-34.16979627,40.90789292
237 | 4.727488131,45.25027206,4,-3.06538055,22.88997789,-34.42608188,41.45482794
238 | 5.195251848,43.03826604,4,-2.35568629,23.53834458,-34.68236749,41.98177626
239 | 5.663015564,40.82626002,4,-1.64599203,24.18671127,-34.65992304,42.29676769
240 | 6.13077928,38.61425401,4,-0.93629777,24.83507796,-33.54802434,41.75078069
241 | 6.598542997,36.40224799,4,-0.226603509,25.48344465,-32.43612564,41.24996421
242 | 7.267236136,33.2400676,4,0.003241625,24.5110606,-31.06893643,39.57361385
243 | 6.78508136,30.41908808,4,0.056413752,25.6965686,-31.99271425,41.03474851
244 | 6.302926584,27.59810857,4,-0.675114721,25.07369112,-33.13882124,41.56112654
245 | 5.820771808,24.77712905,4,-1.406643194,24.405377,-34.28492824,42.10768785
246 | 5.338617032,21.95614953,4,-2.138171667,23.73706288,-34.76091662,42.14666364
247 | 4.856462256,19.13517002,4,-2.86970014,23.06874876,-34.49674621,41.5984116
248 | 4.37430748,16.3141905,4,-3.332458441,22.40043464,-34.23257581,41.04575493
249 | 3.830819043,13.13436148,4,-3.393669612,22.21104966,-33.93480098,40.69912085
250 | 4.995248961,16.87888222,4,-2.659132016,23.26112083,-34.57278682,41.75438077
251 | 6.15967888,20.62340296,4,-0.892451103,24.87513566,-33.47932849,41.71851243
252 | 7.324108798,24.3679237,4,-0.017205189,24.37122378,-31.03740806,39.46235603
253 | 8.488538716,28.11244444,4,-0.435840092,21.5081577,-30.39188568,37.23516509
254 | 9.652968634,31.85696519,4,-0.854474994,18.94214177,-29.7463633,35.27578478
255 | 11.05392312,36.36209088,4,-1.35814502,16.65993192,-27.52418373,32.20215179
256 | 9.47315071,40.20405437,4,-0.789827,19.23507222,-29.84604855,35.51617159
257 | 7.892378296,44.04601785,4,-0.221508979,22.97397943,-30.72237778,38.36296774
258 | 5.51987213,49.8122382,4,-1.863170211,23.98830034,-34.86022546,42.35735208
259 | 5.39488428,45.53825043,4,-2.05280262,23.81505484,-34.79174519,42.21180367
260 | 5.269896429,41.26426266,4,-2.242435028,23.64180934,-34.72326491,42.06743146
261 | 5.144908579,36.99027489,4,-2.432067437,23.46856384,-34.65478464,41.92424763
262 | 5.019920728,32.71628712,4,-2.621699845,23.29531834,-34.58630437,41.78226437
263 | 4.894932878,28.44229935,4,-2.811332254,23.12207284,-34.51782409,41.64149399
264 | 4.769945027,24.16831158,4,-3.000964663,22.94882734,-34.44934382,41.50194881
265 | 4.644957177,19.8943238,4,-3.190597071,22.77558184,-34.38086355,41.36364123
266 | 4.519969326,15.62033603,4,-3.316053065,22.60233634,-34.31238327,41.22137142
267 | 4.394981475,11.34634826,4,-3.330130002,22.42909084,-34.243903,41.07065588
268 | 4.269993625,7.072360491,4,-3.34420694,22.25584534,-34.17542273,40.92023815
269 | 4.100626868,1.280825985,4,1.011313342,0.604341341,-20.89212836,20.92531984
270 | 4.559570052,5.698960069,4,-3.311592976,22.65722685,-34.33408033,41.26918522
271 | 5.018513236,10.11709415,4,-2.623835303,23.29336742,-34.58553321,41.78067238
272 | 5.47745642,14.53522824,4,-1.927523613,23.92950798,-34.83698608,42.30782787
273 | 5.936399604,18.95336232,4,-1.231211924,24.56564854,-34.01007495,41.97227858
274 | 6.395342788,23.3714964,4,-0.534900235,25.2017891,-32.91914312,41.46186532
275 | 6.854285971,27.78963049,4,0.151705134,25.52641034,-31.82821128,40.80019207
276 | 7.313229155,32.20776457,4,-0.013293748,24.39797432,-31.04343938,39.48362264
277 | 7.941445146,38.25544668,4,-0.239149453,22.8533353,-30.69517671,38.26912593
278 | 7.006154519,34.57196974,4,0.097105477,25.15300041,-31.46721184,40.28483934
279 | 6.070863891,30.8884928,4,-1.027201801,24.75202932,-33.69044634,41.81822896
280 | 5.135573264,27.20501587,4,-2.446231039,23.45562417,-34.64966986,41.91360129
281 | 4.200282637,23.52153893,4,-3.352058241,22.15921902,-34.13722839,40.83647444
282 | 3.264992009,19.838062,4,-3.457396701,22.7083039,-33.62478692,40.72157848
283 | 2.329701382,16.15458506,4,-3.562735161,23.5302463,-32.60977067,40.37031974
284 | 0.99083628,10.88170135,4,-4.747413119,23.7860647,-30.32729207,38.83374112
285 | 3.293472585,10.12128923,4,-3.454189035,22.68327489,-33.6403913,40.72024446
286 | 5.59610889,9.360877107,4,-1.747503287,24.09397202,-34.81896368,42.37845546
287 | 9.768275876,7.983079695,4,-0.895930161,18.75430175,-29.68244068,35.12226943
288 | 5.252251374,7.550365019,4,-2.269206224,23.61735155,-34.71359727,42.04714528
289 | 4.878749314,10.44391513,4,-2.835886066,23.09964082,-34.50895719,41.62335621
290 | 4.505247253,13.33746523,4,-3.317711159,22.58193009,-34.30431712,41.20360356
291 | 4.131745192,16.23101534,4,-3.359777369,22.06421936,-34.09967704,40.75421272
292 | 3.758243132,19.12456545,4,-3.401843579,22.27483007,-33.89503696,40.70152485
293 | 3.384741071,22.01811556,4,-3.443909789,22.60306727,-33.69039689,40.71611483
294 | 3.01123901,24.91166567,4,-3.485975999,22.93130447,-33.48575681,40.7344162
295 | 2.637736949,27.80521577,4,-3.528042209,23.25954168,-33.13490542,40.63711749
296 | 2.264234889,30.69876588,4,-3.570108419,23.58777888,-32.4981643,40.31450942
297 | 1.890732828,33.59231599,4,-3.612174629,23.91601608,-31.86142318,40.00217392
298 | 1.517230767,36.4858661,4,-3.654240839,24.24425329,-31.22468207,39.70035344
299 | 1.143728707,39.3794162,4,-4.022792568,24.45549737,-30.58794095,39.36846889
300 | 0.647240648,43.2257486,4,-6.37585517,22.28164654,-29.91083195,37.83888436
301 | 6.738412804,39.81183977,4,-0.014392096,25.67731802,-32.10364783,41.10923341
302 | 4.305631872,36.76934437,4,-3.34019313,22.30524347,-34.19494876,40.96309677
303 | 3.725412555,33.63036514,4,-3.40554117,22.30368189,-33.87704924,40.70265841
304 | 3.145193238,30.49138592,4,-3.470889211,22.81358421,-33.55914972,40.72742598
305 | 2.564973921,27.35240669,4,-3.536237251,23.32348653,-33.01086002,40.57347504
306 | 1.984754604,24.21342746,4,-3.601585291,23.83338884,-32.0217102,40.07981742
307 | 1.404535287,21.07444824,4,-3.666933331,24.34329116,-31.03256038,39.61138761
308 | 0.54891758,16.44556718,4,-6.841848922,21.85114337,-29.87571853,37.64096069
309 | 1.750381463,14.40708949,4,-3.627981905,24.03935821,-31.62215413,39.88751218
310 | 2.951845346,12.3686118,4,-3.492665297,22.9835002,-33.4532153,40.73766814
311 | 4.153309229,10.33013411,4,-3.357348689,22.09410924,-34.11149188,40.78008499
312 | 5.354773112,8.291656415,4,-2.113659554,23.7594568,-34.76976846,42.16534291
313 | 6.556236995,6.253178725,4,-0.29079046,25.42480436,-32.53668921,41.29335758
314 | 7.757700878,4.214701035,4,-3.634710024,9.047233725,-14.82851559,17.74678646
315 | 9.793253105,0.76105764,4,-2.938567846,17.32323001,-22.89481579,28.86004277
316 | 5.601173181,0.520545454,4,-0.533901285,9.244198956,-12.73749357,15.74750797
317 | 5.694482872,4.341649862,4,-2.923494858,0.764768007,-9.018045102,9.510879547
318 | 5.787792564,8.16275427,4,-1.456679526,24.35966451,-34.36332162,42.14680347
319 | 5.881102255,11.98385868,4,-1.315109433,24.48900096,-34.14151962,42.03669876
320 | 5.974411947,15.80496309,4,-1.173539341,24.6183374,-33.91971763,41.92835526
321 | 6.067721638,19.62606749,4,-1.031969249,24.74767384,-33.69791564,41.82178666
322 | 6.16103133,23.4471719,4,-0.890399157,24.87701029,-33.47611365,41.71700656
323 | 6.254341021,27.26827631,4,-0.748829064,25.00634673,-33.25431165,41.61402847
324 | 6.347650713,31.08938072,4,-0.607258972,25.13568318,-33.03250966,41.5128658
325 | 6.440960404,34.91048512,4,-0.46568888,25.26501962,-32.81070767,41.41353185
326 | 6.534270095,38.73158953,4,-0.324118788,25.39435607,-32.58890567,41.31603982
327 | 6.627579787,42.55269394,4,-0.182548695,25.52369251,-32.36710368,41.22040277
328 | 6.720889478,46.37379835,4,-0.040978603,25.65302896,-32.14530169,41.12663364
329 | 6.818432802,50.36827329,4,0.107014785,25.61456506,-31.91343613,40.92169108
330 | 6.68185811,45.92790336,4,-0.100197259,25.59892763,-32.23808128,41.16562911
331 | 6.545283417,41.48753343,4,-0.307409302,25.40962162,-32.56272644,41.30465499
332 | 6.408708725,37.0471635,4,-0.514621345,25.22031561,-32.88737159,41.44765813
333 | 6.272134032,32.60679356,4,-0.721833388,25.0310096,-33.21201674,41.5945975
334 | 6.13555934,28.16642363,4,-0.929045431,24.8417036,-33.53666189,41.74543153
335 | 5.998984647,23.7260537,4,-1.136257474,24.65239759,-33.86130704,41.90011817
336 | 5.862409955,19.28568377,4,-1.343469517,24.46309158,-34.18595219,42.0586149
337 | 5.725835262,14.84531384,4,-1.550681561,24.27378558,-34.51059735,42.22087882
338 | 5.474399092,6.67052252,4,-1.932162211,23.92527022,-34.83531099,42.30426335
339 | 3.236308802,4.423385873,4,-2.617997823,3.450871064,-3.768940492,5.741718917
340 | 3.240462104,8.372747797,4,-3.460159417,22.72986101,-33.6113471,40.72274474
341 | 3.244615406,12.32210972,4,-3.459691645,22.72621105,-33.61362268,40.72254614
342 | 3.248768707,16.27147165,4,-3.459223873,22.72256109,-33.61589825,40.72234801
343 | 3.252922009,20.22083357,4,-3.458756102,22.71891113,-33.61817383,40.72215034
344 | 3.257075311,24.1701955,4,-3.45828833,22.71526117,-33.6204494,40.72195312
345 | 3.261228612,28.11955742,4,-3.457820559,22.71161121,-33.62272498,40.72175636
346 | 3.265381914,32.06891934,4,-3.457352787,22.70796125,-33.62500055,40.72156007
347 | 3.269535215,36.01828127,4,-3.456885015,22.70431128,-33.62727613,40.72136423
348 | 3.277294127,43.39620673,4,-3.456011157,22.69749268,-33.6315272,40.7209996
349 | 4.651657896,38.9865527,4,-3.180430694,22.7848697,-34.38453484,41.37102443
350 | 6.550068353,32.89549186,4,-0.300149565,25.41625401,-32.55135239,41.29971671
351 | 6.82416709,30.37355567,4,0.115714885,25.60046576,-31.89980543,40.90225939
352 | 7.098265828,27.85161949,4,0.063989693,24.92651983,-31.24825847,39.97235473
353 | 7.372364565,25.3296833,4,-0.034554063,24.25257391,-31.01065662,39.36812619
354 | 7.646463302,22.80774712,4,-0.133097819,23.57862799,-30.85870512,38.83592531
355 | 7.920562039,20.28581094,4,-0.231641576,22.90468207,-30.70675363,38.3090438
356 | 8.194660776,17.76387475,4,-0.330185332,22.23073615,-30.55480213,37.78770415
357 | 8.468759514,15.24193857,4,-0.428729089,21.55679023,-30.40285063,37.27213893
358 | 8.742858251,12.72000238,4,-0.527272845,20.88284431,-30.25089913,36.76259106
359 | 9.016956988,10.1980662,4,-0.625816601,20.20889838,-30.09894764,36.25931424
360 | 9.291055725,7.676130012,4,-0.724360358,19.53495246,-29.94699614,35.76257322
361 | 9.793425399,3.053911501,4,-3.261337191,15.14673789,-26.3263148,30.54725585
362 | 1.9922712,1.067645904,4,2.636669465,21.17097853,-35.29121331,41.23872082
363 | 2.508520771,3.675673393,4,-0.544947851,0.627627737,-13.69198506,13.71719139
364 | 3.024770343,6.283700882,4,-3.484452013,22.91941301,-33.49317057,40.73368843
365 | 3.541019915,8.891728371,4,-3.426308658,22.46572792,-33.77602135,40.70955834
366 | 4.057269486,11.49975586,4,-3.368165304,22.01204283,-34.05887214,40.6925219
367 | 4.573519058,14.10778335,4,-3.298983466,22.67656155,-34.34172293,41.28515071
368 | 5.089768629,16.71581084,4,-2.515726139,23.39213443,-34.62457371,41.86146122
369 | 5.606018201,19.32383833,4,-1.732468813,24.1077073,-34.79540874,42.3663011
370 | 6.122267773,21.93186582,4,-0.949211486,24.82328017,-33.56825664,41.76031722
371 | 6.638517344,24.5398933,4,-0.16595416,25.53885305,-32.34110454,41.20931446
372 | 7.154766916,27.14792079,4,0.043676468,24.78759662,-31.13128574,39.7942685
373 | 7.671016488,29.75594828,4,-0.141925161,23.51825734,-30.84509363,38.78850825
374 | 8.187266059,32.36397577,4,-0.327526789,22.24891806,-30.55890152,37.80169429
375 | 8.703515631,34.97200326,4,-0.513128418,20.97957878,-30.27270941,36.83534935
376 | 9.219765203,37.58003075,4,-0.698730047,19.7102395,-29.98651731,35.89112683
377 | 9.910755015,41.07082381,4,-0.947154145,18.52219764,-29.60345485,34.93327132
378 | 8.540385253,38.12633114,4,-0.454479917,21.38067896,-30.36314363,37.13839625
379 | 7.170015492,35.18183847,4,0.038194312,24.75010387,-31.12283242,39.76430306
380 | 5.799645731,32.2373458,4,-1.438695821,24.37609417,-34.33514602,42.13271965
381 | 4.429275969,29.29285313,4,-3.326267535,22.47662639,-34.2626928,41.11198009
382 | 3.058906208,26.34836046,4,-3.480607412,22.88941408,-33.51187345,40.7318741
383 | 0.379974206,20.59218001,4,-7.642541562,21.11143235,-29.81538499,37.32369488
384 | 0.977265511,23.46223646,4,-4.811730617,23.72664569,-30.30415681,38.78721937
385 | 1.574556815,26.33229291,4,-3.64778441,24.19387461,-31.32241071,39.74598486
386 | 2.171848119,29.20234937,4,-3.580513613,23.66896926,-32.34066462,40.23628676
387 | 2.769139424,32.07240582,4,-3.513242816,23.14406392,-33.35311155,40.7482591
388 | 3.366430728,34.94246228,4,-3.445972018,22.61915858,-33.68036474,40.71692555
389 | 3.963722032,37.81251873,4,-3.378701221,22.09425323,-34.00761792,40.69508231
390 | 4.678145323,41.24540845,4,-3.140243792,22.82158388,-34.39904718,41.40024479
391 | 3.136369212,42.10693628,4,-3.471883029,22.82133885,-33.55431508,40.72787177
392 | 2.935188839,39.30690298,4,-3.49454126,22.9981381,-33.44408927,40.73859695
393 | 2.734008467,36.50686969,4,-3.51719949,23.17493734,-33.29902776,40.72190643
394 | 2.532828095,33.7068364,4,-3.539857721,23.35173659,-32.95605826,40.54548027
395 | 2.331647723,30.90680311,4,-3.562515951,23.52853583,-32.61308876,40.37198381
396 | 2.130467351,28.10676981,4,-3.585174182,23.70533508,-32.27011926,40.20145498
397 | 1.929286979,25.30673652,4,-3.607832412,23.88213433,-31.92714976,40.03393169
398 | 1.728106606,22.50670323,4,-3.630490643,24.05893357,-31.58418026,39.86945184
399 | 1.526926234,19.70666994,4,-3.653148873,24.23573282,-31.24121076,39.70805324
400 | 1.325745862,16.90663664,4,-3.675807104,24.41253206,-30.89824126,39.54977361
401 | 1.12456549,14.10660335,4,-4.113614991,24.37159208,-30.55527176,39.3003939
402 |
--------------------------------------------------------------------------------
/floor5_new_data.csv:
--------------------------------------------------------------------------------
1 | ID,BUILDING,FLOOR,LOC_X,LOC_Y,MAG_X,MAG_Y,MAG_Z,G
2 | 1,IBSS,5,0,0,0,25.828617,-28.685183,9.806577
3 | 2,IBSS,5,1,0,0,30.582264,-26.536137,9.80663
4 | 3,IBSS,5,2,0,-0.000001,27.197075,-23.733107,9.806599
5 | 4,IBSS,5,3,0,-0.000001,29.218052,-22.29553,9.806585
6 | 5,IBSS,5,4,0,0,24.842531,-22.799934,9.806636
7 | 6,IBSS,5,5,0,0,28.575375,-20.265488,9.806549
8 | 7,IBSS,5,6,0,-0.000001,31.676973,-25.566601,9.806592
9 | 8,IBSS,5,7,0,0,33.136116,-28.817413,9.80656
10 | 9,IBSS,5,8,0,-0.000001,31.638348,-29.528578,9.806632
11 | 10,IBSS,5,9,0,0,31.452923,-30.999039,9.806559
12 | 11,IBSS,5,10,0,0,29.899551,-31.762743,9.806552
13 | 12,IBSS,5,11,0,0,28.95252,-31.688454,9.806611
14 | 13,IBSS,5,12,0,0,26.558552,-27.970877,9.806623
15 | 14,IBSS,5,13,0,0,27.55983,-29.392389,9.806615
16 | 15,IBSS,5,14,0,0,25.084644,-29.663261,9.806615
17 | 16,IBSS,5,15,0,0,25.486389,-28.333096,9.806556
18 | 17,IBSS,5,16,0,-0.000001,31.683157,-31.746216,9.80659
19 | 18,IBSS,5,17,0,0,31.728256,-30.79236,9.806594
20 | 19,IBSS,5,18,0,0,35.823601,-27.998213,9.806606
21 | 20,IBSS,5,19,0,0,35.67548,-29.499517,9.806569
22 | 21,IBSS,5,20,0,-0.000001,36.218399,-22.355122,9.806568
23 | 22,IBSS,5,21,0,0,39.094856,-25.108644,9.80658
24 | 23,IBSS,5,22,0,0,38.263607,-26.381336,9.8066
25 | 24,IBSS,5,23,0,-0.000001,37.187706,-27.055353,9.806592
26 | 25,IBSS,5,24,0,0,36.71767,-25.518764,9.80657
27 | 26,IBSS,5,25,0,-0.000001,34.839104,-27.27017,9.806557
28 | 27,IBSS,5,26,0,0,34.571606,-26.850851,9.806615
29 | 28,IBSS,5,27,0,-0.000001,32.630138,-26.246071,9.806582
30 | 29,IBSS,5,28,0,-0.000002,33.839809,-25.784641,9.80664
31 | 30,IBSS,5,29,0,0,31.771179,-26.737705,9.806648
32 | 31,IBSS,5,30,0,0,32.206108,-25.159044,9.806604
33 | 32,IBSS,5,31,0,0.000001,32.310421,-24.285849,9.806559
34 | 33,IBSS,5,32,0,0,36.969707,-24.038925,9.806554
35 | 34,IBSS,5,33,0,0,33.420116,-25.87368,9.806596
36 | 35,IBSS,5,34,0,0,32.244804,-28.220028,9.806571
37 | 36,IBSS,5,35,0,0,30.698557,-26.096748,9.806606
38 | 37,IBSS,5,36,0,0,32.875427,-23.19001,9.806642
39 | 38,IBSS,5,37,0,0,34.692665,-22.369003,9.806588
40 | 39,IBSS,5,38,0,0,35.927513,-22.549582,9.806617
41 | 40,IBSS,5,39,0,0,38.410297,-22.916216,9.806623
42 | 41,IBSS,5,40,0,0,37.038502,-24.665281,9.806629
43 | 42,IBSS,5,41,0,-0.000001,33.872208,-26.751341,9.806584
44 | 43,IBSS,5,42,0,0,30.050575,-28.265034,9.806602
45 | 44,IBSS,5,43,0,0,33.001839,-26.402973,9.806586
46 | 45,IBSS,5,44,0,0,36.323528,-28.839464,9.806624
47 | 46,IBSS,5,45,0,0,34.536999,-33.057247,9.806595
48 | 47,IBSS,5,46,0,-0.000001,34.160286,-35.75613,9.806611
49 | 48,IBSS,5,47,0,0,33.802811,-38.788776,9.806645
50 | 49,IBSS,5,48,0,0,27.571014,-40.213486,9.806563
51 | 50,IBSS,5,49,0,0,24.459059,-38.277321,9.806571
52 | 51,IBSS,5,50,0,0,23.622116,-36.042934,9.806639
53 | 52,IBSS,5,0,1,0,24.219872,-33.254749,9.806585
54 | 53,IBSS,5,1,1,0,25.49568,-31.596292,9.806618
55 | 54,IBSS,5,2,1,0,23.190363,-31.898642,9.806566
56 | 55,IBSS,5,3,1,0,23.465971,-28.313753,9.806579
57 | 56,IBSS,5,4,1,0,22.755148,-25.359833,9.80658
58 | 57,IBSS,5,5,1,0,26.025284,-24.927414,9.806605
59 | 58,IBSS,5,6,1,0,28.18396,-27.579651,9.806574
60 | 59,IBSS,5,7,1,0,29.251375,-31.603951,9.806637
61 | 60,IBSS,5,8,1,0,27.973112,-33.972206,9.806577
62 | 61,IBSS,5,9,1,0,25.346596,-36.435242,9.806593
63 | 62,IBSS,5,10,1,0,24.629995,-32.368607,9.806579
64 | 63,IBSS,5,11,1,0,25.928249,-32.062183,9.806613
65 | 64,IBSS,5,12,1,0,25.91433,-32.408798,9.80662
66 | 65,IBSS,5,13,1,-0.000001,26.669516,-33.754032,9.80657
67 | 66,IBSS,5,14,1,0,21.96121,-33.084553,9.806577
68 | 67,IBSS,5,15,1,0,22.055813,-28.644407,9.80656
69 | 68,IBSS,5,16,1,0,26.458237,-25.100903,9.806621
70 | 69,IBSS,5,17,1,0,29.711199,-23.405029,9.806573
71 | 70,IBSS,5,18,1,0,35.669697,-25.46521,9.80654
72 | 71,IBSS,5,19,1,0,33.909924,-27.932323,9.806578
73 | 72,IBSS,5,20,1,0,38.95153,-26.593607,9.806551
74 | 73,IBSS,5,21,1,0,41.135727,-29.989914,9.806572
75 | 74,IBSS,5,22,1,0,38.38208,-31.606148,9.806586
76 | 75,IBSS,5,23,1,0,37.789852,-28.761507,9.806564
77 | 76,IBSS,5,24,1,0,37.577217,-26.96945,9.806584
78 | 77,IBSS,5,25,1,0,36.674866,-28.11204,9.806545
79 | 78,IBSS,5,26,1,0,33.038189,-28.03014,9.806615
80 | 79,IBSS,5,27,1,0,30.82107,-26.958649,9.806626
81 | 80,IBSS,5,28,1,0,30.758976,-28.318819,9.806619
82 | 81,IBSS,5,29,1,0,27.606689,-27.935888,9.806596
83 | 82,IBSS,5,30,1,0,27.054947,-26.425133,9.806619
84 | 83,IBSS,5,31,1,0,30.461872,-25.643442,9.806624
85 | 84,IBSS,5,32,1,0,33.113953,-22.913507,9.806545
86 | 85,IBSS,5,33,1,0,36.215679,-26.813791,9.806561
87 | 86,IBSS,5,34,1,0,32.735397,-28.47044,9.806547
88 | 87,IBSS,5,35,1,0,30.658306,-25.278954,9.806565
89 | 88,IBSS,5,36,1,0,30.361195,-23.327049,9.806558
90 | 89,IBSS,5,37,1,0,32.216824,-19.584114,9.806559
91 | 90,IBSS,5,38,1,0,37.648544,-20.705929,9.806637
92 | 91,IBSS,5,39,1,0,35.59166,-27.469713,9.806552
93 | 92,IBSS,5,40,1,0,32.789165,-27.479315,9.806552
94 | 93,IBSS,5,41,1,0,31.504547,-24.428038,9.806635
95 | 94,IBSS,5,42,1,0,32.353569,-24.795824,9.806564
96 | 95,IBSS,5,43,1,0,31.342882,-26.878466,9.806583
97 | 96,IBSS,5,44,1,0,34.570107,-28.588562,9.80659
98 | 97,IBSS,5,45,1,0,33.332191,-31.822758,9.806585
99 | 98,IBSS,5,46,1,0,30.584991,-31.31674,9.806592
100 | 99,IBSS,5,47,1,0,34.089863,-34.473644,9.806548
101 | 100,IBSS,5,48,1,0,30.80946,-37.591557,9.806595
102 | 101,IBSS,5,49,1,0,27.863359,-38.757465,9.806606
103 | 102,IBSS,5,50,1,0.000004,32.200165,-32.015266,9.806541
104 | 103,IBSS,5,0,2,0,36.093811,-45.334072,9.806613
105 | 104,IBSS,5,1,2,0.000001,24.221413,-42.883369,9.806559
106 | 105,IBSS,5,2,2,0,21.45437,-34.285095,9.806555
107 | 106,IBSS,5,3,2,0,21.896179,-29.075043,9.806581
108 | 107,IBSS,5,4,2,0,24.784189,-30.93166,9.806555
109 | 108,IBSS,5,5,2,0,31.708841,-15.615825,9.806598
110 | 109,IBSS,5,6,2,0.000001,44.414948,-20.499434,9.80662
111 | 110,IBSS,5,7,2,0,23.078764,-34.393169,9.806608
112 | 111,IBSS,5,8,2,0,40.644558,-37.516411,9.806552
113 | 112,IBSS,5,9,2,0.000001,30.563299,-51.690353,9.806615
114 | 113,IBSS,5,10,2,0,29.468605,-36.899937,9.806579
115 | 114,IBSS,5,11,2,0,30.328215,-36.149647,9.806556
116 | 115,IBSS,5,12,2,0,27.652187,-37.584911,9.806628
117 | 116,IBSS,5,13,2,0,21.055853,-32.332001,9.806637
118 | 117,IBSS,5,14,2,0,14.309853,-44.906956,9.806549
119 | 118,IBSS,5,15,2,0,21.593742,-28.637472,9.806605
120 | 119,IBSS,5,16,2,0,22.539684,-24.843609,9.806641
121 | 120,IBSS,5,17,2,0,27.357645,-16.091673,9.806646
122 | 121,IBSS,5,18,2,0,44.798698,-28.673662,9.806584
123 | 122,IBSS,5,19,2,0,26.057043,-32.876534,9.806551
124 | 123,IBSS,5,20,2,0,40.437012,-35.732838,9.80662
125 | 124,IBSS,5,21,2,0,49.279373,-36.960716,9.806547
126 | 125,IBSS,5,22,2,0,38.877151,-49.28334,9.806623
127 | 126,IBSS,5,23,2,0,32.694195,-46.591507,9.806539
128 | 127,IBSS,5,24,2,0,35.524475,-30.276133,9.806586
129 | 128,IBSS,5,25,2,0,33.656586,-25.280689,9.806551
130 | 129,IBSS,5,26,2,0,37.001846,-35.454144,9.8066
131 | 130,IBSS,5,27,2,0,33.362408,-38.02113,9.806588
132 | 131,IBSS,5,28,2,0,27.253853,-34.528534,9.806564
133 | 132,IBSS,5,29,2,0.000001,20.862305,-33.338966,9.80658
134 | 133,IBSS,5,30,2,0,24.023876,-20.943327,9.806627
135 | 134,IBSS,5,31,2,0,26.036201,-12.963249,9.806644
136 | 135,IBSS,5,32,2,0,36.423721,-13.96549,9.806593
137 | 136,IBSS,5,33,2,0,39.757011,-28.670286,9.806605
138 | 137,IBSS,5,34,2,0,27.841061,-22.23201,9.806582
139 | 138,IBSS,5,35,2,0,22.204405,-15.759282,9.806554
140 | 139,IBSS,5,37,2,0,31.629944,-19.395348,9.806598
141 | 140,IBSS,5,38,2,0,51.820202,-29.100342,9.806562
142 | 141,IBSS,5,39,2,0,45.059082,-22.699453,9.806613
143 | 142,IBSS,5,40,2,-0.000001,39.433876,-34.956566,9.806596
144 | 143,IBSS,5,41,2,0,25.67938,-31.916502,9.806558
145 | 144,IBSS,5,42,2,0,19.887413,-19.283823,9.806641
146 | 145,IBSS,5,43,2,-0.000002,33.972126,-23.827993,9.806629
147 | 146,IBSS,5,44,2,0.000002,31.104137,-25.629374,9.806628
148 | 147,IBSS,5,45,2,0,35.190037,-28.268192,9.806633
149 | 148,IBSS,5,46,2,0,34.517727,-33.02507,9.806598
150 | 149,IBSS,5,46,2,0,34.791405,-33.302113,9.806605
151 | 150,IBSS,5,47,2,0,34.785294,-34.456818,9.806572
152 | 151,IBSS,5,48,2,0.000001,32.613281,-38.761326,9.806603
153 | 152,IBSS,5,49,2,0,32.335823,-43.435795,9.806584
154 | 153,IBSS,5,50,2,0,29.96273,-45.01918,9.806552
155 | 154,IBSS,5,0,3,0,31.904808,-33.05933,9.806606
156 | 155,IBSS,5,1,3,0,24.066446,-36.795166,9.806648
157 | 156,IBSS,5,2,3,0,25.049231,-32.690861,9.806633
158 | 157,IBSS,5,3,3,0,24.653143,-31.022421,9.806575
159 | 158,IBSS,5,4,3,0,24.421808,-28.19389,9.80662
160 | 159,IBSS,5,5,3,0,25.887384,-28.085382,9.806577
161 | 160,IBSS,5,6,3,0,25.284134,-28.608582,9.806548
162 | 161,IBSS,5,7,3,0,26.394014,-29.769306,9.806579
163 | 162,IBSS,5,8,3,0,27.938993,-32.493908,9.806576
164 | 163,IBSS,5,9,3,0,27.085972,-35.133038,9.806569
165 | 164,IBSS,5,10,3,0,26.493473,-36.536503,9.806546
166 | 165,IBSS,5,11,3,0,27.057077,-36.069824,9.806583
167 | 166,IBSS,5,12,3,0,27.015984,-36.099197,9.80663
168 | 167,IBSS,5,13,3,0,27.249435,-35.023701,9.806612
169 | 168,IBSS,5,14,3,0,25.763414,-34.29377,9.806629
170 | 169,IBSS,5,15,3,0,26.699104,-31.97823,9.806601
171 | 170,IBSS,5,16,3,0,28.607677,-30.251278,9.806581
172 | 171,IBSS,5,17,3,0,30.742672,-28.311634,9.806567
173 | 172,IBSS,5,18,3,0,33.580662,-27.268398,9.806553
174 | 173,IBSS,5,19,3,0,35.319447,-27.666143,9.806635
175 | 174,IBSS,5,20,3,0,37.766254,-27.244968,9.806612
176 | 175,IBSS,5,21,3,0,39.659233,-27.120842,9.806556
177 | 176,IBSS,5,22,3,0,42.076134,-28.548441,9.80655
178 | 177,IBSS,5,23,3,0,42.018147,-28.81567,9.80661
179 | 178,IBSS,5,24,3,0,42.013622,-28.52055,9.806605
180 | 179,IBSS,5,25,3,0,37.385426,-27.993954,9.806563
181 | 180,IBSS,5,26,3,0,35.024067,-25.650784,9.806603
182 | 181,IBSS,5,27,3,0,32.36525,-24.415634,9.806584
183 | 182,IBSS,5,28,3,0,30.219036,-23.133812,9.806556
184 | 183,IBSS,5,29,3,0,28.835968,-23.754002,9.806588
185 | 184,IBSS,5,30,3,0,28.003725,-24.296719,9.80662
186 | 185,IBSS,5,31,3,0,27.611462,-25.164728,9.806598
187 | 186,IBSS,5,32,3,0,29.181273,-24.584763,9.806597
188 | 187,IBSS,5,33,3,0,30.423553,-26.616211,9.806598
189 | 188,IBSS,5,34,3,0,30.251543,-28.117645,9.806573
190 | 189,IBSS,5,35,3,0,30.014509,-27.423403,9.806581
191 | 190,IBSS,5,36,3,0,30.640913,-27.560196,9.806566
192 | 191,IBSS,5,37,3,0,30.605251,-28.70265,9.806614
193 | 192,IBSS,5,38,3,-0.000001,30.862032,-29.026323,9.806606
194 | 193,IBSS,5,39,3,0,29.973267,-30.842625,9.806605
195 | 194,IBSS,5,40,3,0,30.267513,-31.136717,9.806556
196 | 195,IBSS,5,41,3,0,29.594898,-31.625635,9.806555
197 | 196,IBSS,5,42,3,0,29.040911,-31.695028,9.806588
198 | 197,IBSS,5,43,3,0,30.743193,-32.82275,9.806619
199 | 198,IBSS,5,44,3,0,29.662428,-34.19212,9.806595
200 | 199,IBSS,5,45,3,-0.000001,31.046389,-33.40221,9.806575
201 | 200,IBSS,5,46,3,0,32.435867,-34.86504,9.80662
202 | 201,IBSS,5,47,3,0.000001,32.222782,-37.185303,9.806627
203 | 202,IBSS,5,48,3,0.000001,32.151176,-37.807198,9.806553
204 | 203,IBSS,5,49,3,-0.000001,30.781631,-39.268097,9.806603
205 | 204,IBSS,5,50,3,0.000001,28.596581,-40.107925,9.806582
206 | 205,IBSS,5,0,4,0,28.900915,-36.119308,9.806587
207 | 206,IBSS,5,1,4,0,27.556376,-37.071217,9.806594
208 | 207,IBSS,5,2,4,0,25.674959,-36.148556,9.806561
209 | 208,IBSS,5,3,4,0,23.979265,-33.649952,9.806577
210 | 209,IBSS,5,4,4,0,23.401405,-32.655266,9.806594
211 | 210,IBSS,5,5,4,0,24.482492,-30.852444,9.806562
212 | 211,IBSS,5,6,4,0,24.411781,-31.909945,9.806606
213 | 212,IBSS,5,7,4,0,25.332956,-32.288181,9.806602
214 | 213,IBSS,5,8,4,0,26.891569,-34.847038,9.806539
215 | 214,IBSS,5,9,4,0,28.335794,-38.933346,9.80656
216 | 215,IBSS,5,10,4,0,26.368034,-39.89151,9.806598
217 | 216,IBSS,5,11,4,0.000001,26.995958,-38.999344,9.806591
218 | 217,IBSS,5,12,4,0,27.023567,-38.606293,9.806588
219 | 218,IBSS,5,13,4,0,26.526327,-35.439075,9.806553
220 | 219,IBSS,5,14,4,0,25.749678,-33.392799,9.806551
221 | 220,IBSS,5,15,4,0,27.097414,-31.399448,9.806622
222 | 221,IBSS,5,16,4,0,27.708111,-30.654879,9.806633
223 | 222,IBSS,5,17,4,0,28.574903,-28.249418,9.806602
224 | 223,IBSS,5,18,4,0,30.260387,-25.138988,9.80662
225 | 224,IBSS,5,19,4,0,32.743084,-24.178049,9.806573
226 | 225,IBSS,5,20,4,0,35.875748,-24.069908,9.806562
227 | 226,IBSS,5,21,4,0,37.618675,-25.534748,9.80656
228 | 227,IBSS,5,22,4,0,39.149517,-26.050863,9.80663
229 | 228,IBSS,5,23,4,0,40.540821,-26.97794,9.806625
230 | 229,IBSS,5,24,4,0,40.606178,-29.013025,9.806547
231 | 230,IBSS,5,25,4,0,37.04731,-27.885521,9.806625
232 | 231,IBSS,5,26,4,0,34.210548,-25.337452,9.806557
233 | 232,IBSS,5,27,4,0,31.468489,-22.068514,9.806627
234 | 233,IBSS,5,28,4,0,29.570784,-22.000584,9.806564
235 | 234,IBSS,5,29,4,0,29.104134,-22.453434,9.806602
236 | 235,IBSS,5,30,4,0,29.683332,-24.303452,9.806644
237 | 236,IBSS,5,31,4,0,28.578667,-25.802475,9.806552
238 | 237,IBSS,5,32,4,0,28.665779,-25.456676,9.806615
239 | 238,IBSS,5,33,4,0,30.789782,-26.053228,9.806579
240 | 239,IBSS,5,34,4,0,29.363733,-29.473934,9.806631
241 | 240,IBSS,5,35,4,0,29.781424,-29.965219,9.806567
242 | 241,IBSS,5,36,4,0.000001,31.007147,-40.755825,9.806564
243 | 242,IBSS,5,37,4,0.000001,31.015291,-40.394695,9.806603
244 | 243,IBSS,5,38,4,0,30.585575,-42.289074,9.806567
245 | 244,IBSS,5,39,4,0.000001,27.123447,-42.861858,9.806604
246 | 245,IBSS,5,40,4,0,25.296589,-41.710457,9.806565
247 | 246,IBSS,5,41,4,0,24.232098,-41.66473,9.806623
248 | 247,IBSS,5,42,4,0,25.69891,-42.926262,9.806637
249 | 248,IBSS,5,43,4,0,24.499352,-43.064728,9.806588
250 | 249,IBSS,5,44,4,0,28.12002,-37.641853,9.80663
251 | 250,IBSS,5,45,4,0,29.823648,-37.744453,9.806559
252 | 251,IBSS,5,46,4,0.000001,31.516251,-38.840458,9.806616
253 | 252,IBSS,5,47,4,0,32.6912,-40.524792,9.806583
254 | 253,IBSS,5,48,4,-0.000001,32.897938,-42.392223,9.806632
255 | 254,IBSS,5,49,4,0,30.614843,-43.587029,9.80664
256 | 255,IBSS,5,50,4,-0.000001,29.089251,-41.13781,9.806608
257 | 256,IBSS,5,0,5,0,31.609804,-31.907207,9.806589
258 | 257,IBSS,5,1,5,0,30.738632,-33.725914,9.806636
259 | 258,IBSS,5,2,5,0,28.772911,-32.034195,9.806561
260 | 259,IBSS,5,3,5,0,26.104927,-31.488243,9.806617
261 | 260,IBSS,5,4,5,0,25.761154,-30.341667,9.806575
262 | 261,IBSS,5,5,5,0,25.778265,-29.743509,9.806635
263 | 262,IBSS,5,6,5,0,25.838484,-31.654041,9.806612
264 | 263,IBSS,5,7,5,0,27.261873,-32.024117,9.80663
265 | 264,IBSS,5,8,5,0,29.134336,-34.999653,9.806551
266 | 265,IBSS,5,9,5,0,31.381336,-38.460579,9.806577
267 | 266,IBSS,5,10,5,0,31.1563,-42.476048,9.806634
268 | 267,IBSS,5,11,5,0,31.266718,-42.021271,9.806613
269 | 268,IBSS,5,12,5,0,31.282528,-41.058231,9.80665
270 | 269,IBSS,5,13,5,0,31.638062,-40.004997,9.806627
271 | 270,IBSS,5,14,5,0,29.898197,-37.929115,9.806553
272 | 271,IBSS,5,15,5,0,29.212093,-36.226517,9.806622
273 | 272,IBSS,5,16,5,0,30.24803,-32.959518,9.806611
274 | 273,IBSS,5,17,5,0,30.972986,-30.927435,9.806644
275 | 274,IBSS,5,18,5,0,31.823284,-27.993881,9.806551
276 | 275,IBSS,5,19,5,0,33.892639,-25.568159,9.806558
277 | 276,IBSS,5,20,5,0,36.681763,-25.282211,9.806569
278 | 277,IBSS,5,21,5,0,39.337124,-26.449263,9.806575
279 | 278,IBSS,5,22,5,0,39.569504,-28.448015,9.806566
280 | 279,IBSS,5,23,5,0,42.388847,-28.845543,9.806606
281 | 280,IBSS,5,24,5,0,41.965084,-29.883213,9.806551
282 | 281,IBSS,5,25,5,0,40.335392,-28.285898,9.806566
283 | 282,IBSS,5,26,5,0,37.915035,-26.260208,9.806555
284 | 283,IBSS,5,27,5,0,34.556171,-23.491686,9.806572
285 | 284,IBSS,5,28,5,0,31.788927,-23.062571,9.806638
286 | 285,IBSS,5,29,5,0,31.952101,-24.318222,9.806581
287 | 286,IBSS,5,30,5,0,32.065228,-25.953402,9.80655
288 | 287,IBSS,5,31,5,0,30.523239,-26.380768,9.806607
289 | 288,IBSS,5,32,5,0,31.514074,-28.207859,9.806577
290 | 289,IBSS,5,33,5,0,32.242104,-28.886992,9.806575
291 | 290,IBSS,5,34,5,0,33.56284,-30.905039,9.806601
292 | 291,IBSS,5,35,5,0,33.360252,-30.733603,9.806619
293 | 292,IBSS,5,36,5,0,33.967793,-33.887123,9.806569
294 | 293,IBSS,5,37,5,0,33.215343,-35.681244,9.806631
295 | 294,IBSS,5,38,5,0,31.816751,-37.202503,9.806572
296 | 295,IBSS,5,39,5,-0.000001,28.052347,-37.711842,9.806607
297 | 296,IBSS,5,40,5,0,24.686043,-38.037781,9.80663
298 | 297,IBSS,5,41,5,0,24.071955,-36.698334,9.806593
299 | 298,IBSS,5,42,5,0,26.159115,-35.748005,9.806576
300 | 299,IBSS,5,43,5,0,27.443949,-35.58213,9.806632
301 | 300,IBSS,5,44,5,0,28.529516,-35.259254,9.806588
302 | 301,IBSS,5,45,5,-0.000001,29.586662,-34.95863,9.806584
303 | 302,IBSS,5,46,5,0,31.443941,-35.554111,9.806638
304 | 303,IBSS,5,47,5,0,32.180607,-35.462162,9.806615
305 | 304,IBSS,5,48,5,0,33.880337,-38.210838,9.806556
306 | 305,IBSS,5,49,5,-0.000001,32.229248,-39.361092,9.80656
307 | 306,IBSS,5,50,5,0,30.523701,-38.702381,9.80657
308 | 307,IBSS,5,0,6,-0.000001,29.164804,-33.29895,9.806589
309 | 308,IBSS,5,1,6,-0.000001,35.517925,-31.045513,9.806597
310 | 309,IBSS,5,2,6,0.000001,83.557243,-17.740898,9.80658
311 | 310,IBSS,5,3,6,0,22.393328,-25.520973,9.806552
312 | 311,IBSS,5,4,6,0,23.56872,-32.124146,9.806549
313 | 312,IBSS,5,5,6,0,27.065601,-33.215328,9.806587
314 | 313,IBSS,5,6,6,0,26.295113,-34.058037,9.806571
315 | 314,IBSS,5,7,6,0,27.018204,-36.143715,9.806597
316 | 315,IBSS,5,8,6,0.000001,30.382914,-39.135132,9.806569
317 | 316,IBSS,5,9,6,0,31.761745,-43.535637,9.806602
318 | 317,IBSS,5,10,6,0,29.74087,-47.400883,9.806642
319 | 318,IBSS,5,11,6,0.000001,29.850559,-46.399956,9.806608
320 | 319,IBSS,5,12,6,0,29.965652,-43.82909,9.806605
321 | 320,IBSS,5,13,6,0,35.67046,-43.330276,9.806555
322 | 321,IBSS,5,14,6,0,40.784584,-41.516613,9.806626
323 | 322,IBSS,5,15,6,-0.000002,18.252926,-41.017982,9.80659
324 | 323,IBSS,5,16,6,0,21.931164,-31.381359,9.806632
325 | 324,IBSS,5,17,6,0,24.130047,-29.119812,9.806614
326 | 325,IBSS,5,18,6,0,25.194511,-23.891155,9.806638
327 | 326,IBSS,5,19,6,0,28.226849,-22.168808,9.806584
328 | 327,IBSS,5,20,6,0,33.022659,-21.699839,9.806572
329 | 328,IBSS,5,21,6,0,34.944653,-26.853336,9.806576
330 | 329,IBSS,5,22,6,0,37.809315,-26.209612,9.806555
331 | 330,IBSS,5,23,6,0,39.629089,-26.466816,9.806565
332 | 331,IBSS,5,24,6,0,42.147911,-29.713787,9.806544
333 | 332,IBSS,5,25,6,-0.000001,40.070644,-29.242252,9.806596
334 | 333,IBSS,5,26,6,0,38.703976,-27.308254,9.80656
335 | 334,IBSS,5,27,6,0,31.735895,-28.662453,9.806549
336 | 335,IBSS,5,28,6,0,26.765371,-27.778732,9.806594
337 | 336,IBSS,5,29,6,0,32.645878,-24.476801,9.806621
338 | 337,IBSS,5,30,6,0,31.567106,-23.874466,9.806615
339 | 338,IBSS,5,31,6,0,32.996147,-28.558811,9.806631
340 | 339,IBSS,5,32,6,0,32.613804,-28.496706,9.806555
341 | 340,IBSS,5,33,6,0,35.929039,-29.701286,9.806603
342 | 341,IBSS,5,34,6,0,36.252968,-32.187187,9.806551
343 | 342,IBSS,5,35,6,0,38.953743,-34.739487,9.806626
344 | 343,IBSS,5,36,6,0,41.519279,-39.948948,9.80659
345 | 344,IBSS,5,37,6,0,42.04187,-47.263691,9.806611
346 | 345,IBSS,5,38,6,0,34.440571,-57.649334,9.806547
347 | 346,IBSS,5,39,6,0,13.780042,-57.058334,9.806553
348 | 347,IBSS,5,40,6,0.000001,13.054213,-57.00396,9.806583
349 | 348,IBSS,5,41,6,0,22.447203,-39.115192,9.806592
350 | 349,IBSS,5,42,6,0,18.960682,-21.463821,9.806596
351 | 350,IBSS,5,43,6,0,25.04277,-31.336199,9.806605
352 | 351,IBSS,5,44,6,0,26.973295,-29.598221,9.806605
353 | 352,IBSS,5,45,6,-0.000001,29.872026,-30.117125,9.806605
354 | 353,IBSS,5,46,6,0,31.466639,-32.06316,9.806642
355 | 354,IBSS,5,47,6,0,33.543217,-34.040829,9.806645
356 | 355,IBSS,5,48,6,0,34.783081,-36.572285,9.806582
357 | 356,IBSS,5,49,6,0,33.564091,-37.212582,9.806597
358 | 357,IBSS,5,50,6,0,31.217859,-36.654797,9.806607
359 | 358,IBSS,5,0,7,0,25.042021,-32.655323,9.806556
360 | 359,IBSS,5,1,7,0,37.841305,-29.193733,9.806608
361 | 360,IBSS,5,2,7,0,63.607803,-20.980749,9.806564
362 | 361,IBSS,5,3,7,0,20.227308,-22.60368,9.806576
363 | 362,IBSS,5,4,7,0,24.364746,-29.374596,9.806577
364 | 363,IBSS,5,5,7,0,26.831947,-33.12228,9.806558
365 | 364,IBSS,5,6,7,0,25.234455,-33.225136,9.806549
366 | 365,IBSS,5,7,7,0,26.495815,-37.332687,9.806594
367 | 366,IBSS,5,8,7,0,30.135979,-39.752243,9.806636
368 | 367,IBSS,5,9,7,0,30.516218,-46.72612,9.806569
369 | 368,IBSS,5,10,7,0,30.16021,-48.836563,9.806628
370 | 369,IBSS,5,11,7,0,30.779053,-47.654655,9.806581
371 | 370,IBSS,5,12,7,0,30.851883,-45.299976,9.806572
372 | 371,IBSS,5,13,7,-0.000001,36.039265,-48.467854,9.806603
373 | 372,IBSS,5,14,7,0,41.500847,-45.561562,9.806554
374 | 373,IBSS,5,15,7,0,16.551626,-42.565353,9.806612
375 | 374,IBSS,5,16,7,0,19.455488,-32.405262,9.80662
376 | 375,IBSS,5,17,7,0,23.629833,-28.07332,9.806577
377 | 376,IBSS,5,18,7,0,25.174442,-22.468929,9.806613
378 | 377,IBSS,5,19,7,0,27.501623,-20.52639,9.806581
379 | 378,IBSS,5,20,7,0,30.501884,-21.934341,9.806621
380 | 379,IBSS,5,21,7,0,33.53616,-22.37845,9.806576
381 | 380,IBSS,5,22,7,0,37.680664,-25.453232,9.806568
382 | 381,IBSS,5,23,7,0,38.854996,-27.593531,9.806602
383 | 382,IBSS,5,24,7,0,41.702255,-28.71806,9.806588
384 | 383,IBSS,5,25,7,0,41.187054,-27.697123,9.806599
385 | 384,IBSS,5,26,7,0,40.09021,-27.585197,9.806604
386 | 385,IBSS,5,27,7,0,41.494965,-27.793674,9.806628
387 | 386,IBSS,5,28,7,0,17.112078,-26.905668,9.806612
388 | 387,IBSS,5,29,7,0,34.913517,-23.169538,9.806617
389 | 388,IBSS,5,30,7,0,30.598053,-20.924187,9.806567
390 | 389,IBSS,5,31,7,0,35.138,-22.337103,9.806588
391 | 390,IBSS,5,32,7,0,35.466942,-28.930723,9.806589
392 | 391,IBSS,5,33,7,0,36.570705,-30.134754,9.806634
393 | 392,IBSS,5,34,7,0,36.362411,-32.735645,9.806594
394 | 393,IBSS,5,35,7,0,40.493561,-35.418678,9.806637
395 | 394,IBSS,5,36,7,0,41.853542,-41.694057,9.806644
396 | 395,IBSS,5,37,7,0,44.352455,-52.432735,9.806601
397 | 396,IBSS,5,38,7,0,30.55287,-49.71307,9.806631
398 | 397,IBSS,5,39,7,0,24.730761,-46.566345,9.806596
399 | 398,IBSS,5,40,7,0,20.915194,-42.521324,9.806575
400 | 399,IBSS,5,41,7,0,15.794904,-41.256836,9.806598
401 | 400,IBSS,5,42,7,0,19.235926,-33.549324,9.806578
402 | 401,IBSS,5,43,7,0.000001,21.139441,-28.151361,9.806628
403 | 402,IBSS,5,44,7,0,26.097378,-25.822733,9.806569
404 | 403,IBSS,5,45,7,0,30.979397,-29.729763,9.806634
405 | 404,IBSS,5,46,7,0,31.464682,-33.470329,9.806593
406 | 405,IBSS,5,47,7,0,33.095131,-35.26614,9.806558
407 | 406,IBSS,5,48,7,0,33.643997,-36.647488,9.8066
408 | 407,IBSS,5,49,7,0,33.20734,-36.517956,9.806603
409 | 408,IBSS,5,50,7,0,35.661037,-35.975655,9.806559
410 | 409,IBSS,5,0,8,0,28.768223,-34.270622,9.806586
411 | 410,IBSS,5,1,8,0,29.959375,-31.756498,9.806634
412 | 411,IBSS,5,2,8,0.000001,30.144756,-30.313349,9.806607
413 | 412,IBSS,5,3,8,0.000001,27.551689,-30.11343,9.806582
414 | 413,IBSS,5,4,8,0,26.144505,-32.201153,9.806596
415 | 414,IBSS,5,5,8,0,25.444084,-35.167194,9.806633
416 | 415,IBSS,5,6,8,0,25.593506,-37.525928,9.806573
417 | 416,IBSS,5,7,8,0,26.625496,-40.401081,9.806612
418 | 417,IBSS,5,8,8,0,26.895769,-41.591766,9.806617
419 | 418,IBSS,5,9,8,0,28.98041,-44.408253,9.806645
420 | 419,IBSS,5,10,8,0,30.598455,-47.161671,9.806602
421 | 420,IBSS,5,11,8,0,29.541697,-48.561005,9.806564
422 | 421,IBSS,5,12,8,0,29.577055,-47.19936,9.806581
423 | 422,IBSS,5,13,8,0,30.550884,-44.301952,9.806596
424 | 423,IBSS,5,14,8,0,28.715919,-40.710163,9.80664
425 | 424,IBSS,5,15,8,0,25.604853,-38.200657,9.806587
426 | 425,IBSS,5,16,8,0,24.997879,-33.307762,9.806613
427 | 426,IBSS,5,17,8,0,25.970594,-29.291586,9.806581
428 | 427,IBSS,5,18,8,0,26.570919,-26.894361,9.806564
429 | 428,IBSS,5,19,8,0,27.650932,-25.025457,9.806582
430 | 429,IBSS,5,20,8,0,28.531868,-23.845587,9.806599
431 | 430,IBSS,5,21,8,0,30.896532,-24.282961,9.806594
432 | 431,IBSS,5,22,8,0,34.389111,-25.448524,9.806566
433 | 432,IBSS,5,23,8,0,36.935085,-26.560266,9.806581
434 | 433,IBSS,5,24,8,0,38.517544,-27.209766,9.806639
435 | 434,IBSS,5,25,8,0,39.883858,-26.791016,9.80657
436 | 435,IBSS,5,26,8,0,38.685383,-26.341808,9.806591
437 | 436,IBSS,5,27,8,-0.000001,35.822765,-24.90715,9.806626
438 | 437,IBSS,5,28,8,0,31.227638,-23.075754,9.806592
439 | 438,IBSS,5,29,8,0,31.058523,-22.797964,9.80661
440 | 439,IBSS,5,30,8,0,32.630329,-23.538864,9.806555
441 | 440,IBSS,5,31,8,0,32.484211,-25.860254,9.806601
442 | 441,IBSS,5,32,8,0,31.610607,-28.315878,9.806641
443 | 442,IBSS,5,33,8,0,31.843456,-29.573172,9.806574
444 | 443,IBSS,5,34,8,0,34.342136,-32.271561,9.806588
445 | 444,IBSS,5,35,8,0,36.139786,-35.168591,9.806579
446 | 445,IBSS,5,36,8,-0.000001,36.181553,-39.383892,9.806631
447 | 446,IBSS,5,37,8,0,35.574986,-42.316963,9.806588
448 | 447,IBSS,5,38,8,0,31.547279,-43.497929,9.806647
449 | 448,IBSS,5,39,8,0,27.958731,-44.580391,9.806621
450 | 449,IBSS,5,40,8,0,24.400856,-44.830761,9.806563
451 | 450,IBSS,5,41,8,0,19.864656,-43.945202,9.806618
452 | 451,IBSS,5,42,8,0,16.738214,-40.136341,9.806638
453 | 452,IBSS,5,43,8,0,19.174614,-35.137203,9.806627
454 | 453,IBSS,5,44,8,0,22.933727,-32.88369,9.806597
455 | 454,IBSS,5,45,8,0,26.426481,-32.927311,9.806565
456 | 455,IBSS,5,46,8,0,30.861618,-34.649616,9.806576
457 | 456,IBSS,5,47,8,-0.000001,32.218395,-35.123367,9.80655
458 | 457,IBSS,5,48,8,0,32.967514,-35.469154,9.806608
459 | 458,IBSS,5,49,8,0,33.461216,-35.271595,9.806645
460 | 459,IBSS,5,50,8,0,33.501617,-34.247791,9.806587
461 | 460,IBSS,5,0,9,0,24.494497,-37.418766,9.806636
462 | 461,IBSS,5,1,9,0,23.303104,-33.771469,9.806625
463 | 462,IBSS,5,2,9,0,22.048262,-30.115196,9.80659
464 | 463,IBSS,5,3,9,0,25.104158,-32.438042,9.806585
465 | 464,IBSS,5,4,9,0,22.9062,-36.829914,9.806629
466 | 465,IBSS,5,5,9,0,23.522795,-36.26889,9.806588
467 | 466,IBSS,5,6,9,0,24.544491,-38.393993,9.806629
468 | 467,IBSS,5,7,9,0,24.53389,-37.553329,9.806612
469 | 468,IBSS,5,8,9,0,28.159962,-37.75819,9.806561
470 | 469,IBSS,5,9,9,0,29.886612,-39.614323,9.806555
471 | 470,IBSS,5,10,9,0,31.161991,-43.658127,9.806607
472 | 471,IBSS,5,11,9,0,29.95631,-45.032135,9.806624
473 | 472,IBSS,5,12,9,0,27.510834,-42.176037,9.806632
474 | 473,IBSS,5,13,9,0,27.440033,-39.634335,9.806637
475 | 474,IBSS,5,14,9,0,27.092478,-36.764317,9.806593
476 | 475,IBSS,5,15,9,0,26.874552,-33.68821,9.806577
477 | 476,IBSS,5,16,9,0,21.797222,-33.610744,9.806603
478 | 477,IBSS,5,17,9,0,24.877497,-31.70871,9.8066
479 | 478,IBSS,5,19,9,0,25.473917,-28.117044,9.806621
480 | 479,IBSS,5,20,9,0,28.41013,-23.969408,9.80661
481 | 480,IBSS,5,21,9,0,28.196148,-25.843515,9.806559
482 | 481,IBSS,5,22,9,0,30.608793,-26.114456,9.806579
483 | 482,IBSS,5,23,9,0,32.660282,-25.780573,9.80662
484 | 483,IBSS,5,24,9,0,34.059883,-25.732975,9.806618
485 | 484,IBSS,5,25,9,0,35.895271,-25.208628,9.806605
486 | 485,IBSS,5,26,9,0,35.785866,-23.212349,9.806622
487 | 486,IBSS,5,27,9,0,34.281776,-22.110912,9.806601
488 | 487,IBSS,5,27,9,0,35.407833,-22.715731,9.806633
489 | 488,IBSS,5,28,9,0,32.238544,-22.156593,9.806593
490 | 489,IBSS,5,29,9,0,34.007378,-20.051842,9.806615
491 | 490,IBSS,5,30,9,0,34.663296,-23.856319,9.80659
492 | 491,IBSS,5,31,9,0,33.027206,-26.285105,9.806576
493 | 492,IBSS,5,32,9,0,31.697369,-28.29393,9.806548
494 | 493,IBSS,5,33,9,-0.000001,32.822556,-25.180758,9.806621
495 | 494,IBSS,5,34,9,0,36.861134,-29.640205,9.806544
496 | 495,IBSS,5,35,9,0,39.032402,-33.409023,9.806626
497 | 496,IBSS,5,36,9,0,37.555626,-34.434628,9.80656
498 | 497,IBSS,5,37,9,0,37.149807,-37.209774,9.806573
499 | 498,IBSS,5,38,9,-0.000001,35.013798,-39.542534,9.806604
500 | 499,IBSS,5,39,9,0,32.388748,-41.781242,9.806578
501 | 500,IBSS,5,40,9,0,28.945232,-44.767906,9.806599
502 | 501,IBSS,5,41,9,0,21.809307,-46.659569,9.806563
503 | 502,IBSS,5,42,9,0,17.015224,-43.341148,9.806613
504 | 503,IBSS,5,43,9,0,18.454769,-37.115627,9.806624
505 | 504,IBSS,5,44,9,0,21.655722,-33.565327,9.806552
506 | 505,IBSS,5,45,9,0,27.124821,-30.704266,9.806597
507 | 506,IBSS,5,46,9,0,29.476049,-30.030039,9.80655
508 | 507,IBSS,5,47,9,0,31.410425,-30.996763,9.806592
509 | 508,IBSS,5,48,9,0,30.553663,-32.074093,9.806632
510 | 509,IBSS,5,49,9,0,30.63945,-30.588139,9.806611
511 | 510,IBSS,5,50,9,0,32.152451,-30.142456,9.806582
512 | 511,IBSS,5,0,10,0.000001,35.320713,-27.336203,9.806602
513 | 512,IBSS,5,1,10,-0.000002,39.541302,-22.381655,9.806588
514 | 513,IBSS,5,2,10,0,24.913561,-22.058027,9.806612
515 | 514,IBSS,5,3,10,0.000001,28.340782,-26.048542,9.80659
516 | 515,IBSS,5,4,10,0,27.908752,-29.76812,9.806589
517 | 516,IBSS,5,5,10,0,27.033344,-31.303503,9.806581
518 | 517,IBSS,5,6,10,0.000001,27.090279,-33.533672,9.806604
519 | 518,IBSS,5,7,10,0,27.423012,-34.712521,9.806631
520 | 519,IBSS,5,8,10,0,29.280098,-34.907635,9.806629
521 | 520,IBSS,5,9,10,0.000001,30.085001,-36.090733,9.806569
522 | 521,IBSS,5,10,10,0,29.677937,-37.025879,9.806605
523 | 522,IBSS,5,11,10,0,29.15526,-38.388363,9.806553
524 | 523,IBSS,5,12,10,0,27.862144,-37.746456,9.806613
525 | 524,IBSS,5,13,10,0.000001,27.835667,-37.100895,9.806618
526 | 525,IBSS,5,14,10,0,28.326519,-35.14378,9.806636
527 | 526,IBSS,5,15,10,0,27.798212,-33.531837,9.806555
528 | 527,IBSS,5,16,10,0,26.967854,-32.306217,9.806638
529 | 528,IBSS,5,17,10,0,28.626312,-31.157227,9.806571
530 | 529,IBSS,5,18,10,0,28.232845,-30.682156,9.806587
531 | 530,IBSS,5,19,10,0,29.947821,-29.182932,9.806598
532 | 531,IBSS,5,20,10,0,31.248714,-30.927687,9.806567
533 | 532,IBSS,5,21,10,0,31.535158,-28.880384,9.806599
534 | 533,IBSS,5,22,10,0,33.28064,-28.174974,9.806591
535 | 534,IBSS,5,23,10,0,35.299637,-26.997215,9.806586
536 | 535,IBSS,5,24,10,0,35.910912,-26.705128,9.806578
537 | 536,IBSS,5,25,10,0,37.105953,-23.917419,9.806627
538 | 537,IBSS,5,26,10,0,37.192902,-22.717789,9.806615
539 | 538,IBSS,5,27,10,0,36.636818,-21.630444,9.806629
540 | 539,IBSS,5,28,10,0.000001,33.836933,-20.521423,9.806626
541 | 540,IBSS,5,29,10,0,32.983448,-20.813301,9.806638
542 | 541,IBSS,5,30,10,0,32.127293,-23.545525,9.806627
543 | 542,IBSS,5,31,10,0,33.721394,-24.263447,9.806572
544 | 543,IBSS,5,32,10,0,31.1814,-25.307585,9.806578
545 | 544,IBSS,5,33,10,0,31.847015,-29.22485,9.806602
546 | 545,IBSS,5,34,10,0,32.854717,-29.854746,9.806632
547 | 546,IBSS,5,35,10,0,34.288685,-31.517555,9.806624
548 | 547,IBSS,5,36,10,0.000001,35.334633,-34.41927,9.806625
549 | 548,IBSS,5,37,10,0,34.590332,-36.104736,9.806602
550 | 549,IBSS,5,38,10,0,33.98262,-37.236977,9.806595
551 | 550,IBSS,5,39,10,0,31.714418,-40.33609,9.806611
552 | 551,IBSS,5,40,10,0.000001,29.882881,-42.43306,9.806602
553 | 552,IBSS,5,41,10,0,23.872498,-41.812435,9.806597
554 | 553,IBSS,5,42,10,0,20.372761,-39.485573,9.806566
555 | 554,IBSS,5,43,10,0,20.763428,-34.15974,9.806587
556 | 555,IBSS,5,44,10,0,23.337368,-29.758928,9.806599
557 | 556,IBSS,5,45,10,0,26.954153,-27.66853,9.806615
558 | 557,IBSS,5,46,10,0,29.839632,-27.263374,9.806567
559 | 558,IBSS,5,47,10,0,30.448206,-30.112165,9.806645
560 | 559,IBSS,5,48,10,0,29.927769,-30.074398,9.806639
561 | 560,IBSS,5,49,10,0,30.846653,-28.285715,9.806549
562 | 561,IBSS,5,50,10,0,30.928598,-26.319626,9.806636
563 | 562,IBSS,5,0,11,-0.000001,31.647181,-31.856897,9.806598
564 | 563,IBSS,5,1,11,0,30.389198,-29.497822,9.806537
565 | 564,IBSS,5,2,11,0,30.54224,-28.584713,9.806558
566 | 565,IBSS,5,3,11,0,31.414719,-29.916063,9.806605
567 | 566,IBSS,5,4,11,0,31.41151,-31.581688,9.806597
568 | 567,IBSS,5,5,11,0,30.378983,-32.113079,9.806595
569 | 568,IBSS,5,6,11,0,30.663157,-32.78495,9.806563
570 | 569,IBSS,5,7,11,0,32.03397,-33.300312,9.806625
571 | 570,IBSS,5,8,11,0,32.829353,-34.194229,9.80663
572 | 571,IBSS,5,9,11,0,32.976547,-34.659172,9.806627
573 | 572,IBSS,5,10,11,0,32.242146,-35.849659,9.806634
574 | 573,IBSS,5,11,11,0,30.575781,-34.900249,9.80662
575 | 574,IBSS,5,12,11,0,31.042484,-35.26054,9.80661
576 | 575,IBSS,5,13,11,0,31.18857,-36.36232,9.806541
577 | 576,IBSS,5,14,11,0,30.52619,-37.961323,9.806621
578 | 577,IBSS,5,15,11,0,31.453382,-35.810337,9.806621
579 | 578,IBSS,5,16,11,0,30.349728,-36.512138,9.806553
580 | 579,IBSS,5,17,11,0,29.322165,-34.745724,9.806602
581 | 580,IBSS,5,18,11,0,28.984549,-33.553036,9.806588
582 | 581,IBSS,5,19,11,0,31.628044,-31.931372,9.80662
583 | 582,IBSS,5,20,11,0,31.749149,-34.309471,9.806629
584 | 583,IBSS,5,21,11,0,31.175543,-32.933163,9.806575
585 | 584,IBSS,5,22,11,0,31.938047,-31.043318,9.806622
586 | 585,IBSS,5,23,11,0,32.597137,-29.28405,9.806631
587 | 586,IBSS,5,24,11,0,33.889076,-27.533913,9.806566
588 | 587,IBSS,5,25,11,0,33.577389,-23.910645,9.806557
589 | 588,IBSS,5,26,11,0,37.055161,-21.028557,9.806638
590 | 589,IBSS,5,27,11,0,39.101925,-25.068045,9.806581
591 | 590,IBSS,5,28,11,0,38.927269,-23.907696,9.80662
592 | 591,IBSS,5,29,11,0,35.018402,-22.223927,9.806585
593 | 592,IBSS,5,30,11,0,35.114208,-25.161592,9.806575
594 | 593,IBSS,5,31,11,0,33.078938,-25.885695,9.806576
595 | 594,IBSS,5,32,11,0,34.399422,-26.166988,9.806628
596 | 595,IBSS,5,33,11,0,33.958767,-27.751295,9.80662
597 | 596,IBSS,5,34,11,0,32.437866,-30.22978,9.806621
598 | 597,IBSS,5,35,11,0.000001,32.977207,-29.827236,9.806631
599 | 598,IBSS,5,36,11,0,36.416862,-30.725143,9.806557
600 | 599,IBSS,5,37,11,0,37.065586,-32.43404,9.806631
601 | 600,IBSS,5,38,11,0,35.987091,-35.411812,9.806628
602 | 601,IBSS,5,39,11,0.000002,35.888416,-37.301685,9.806559
603 | 602,IBSS,5,40,11,0.000001,32.490829,-40.856342,9.806571
604 | 603,IBSS,5,41,11,0,28.477541,-44.845772,9.806568
605 | 604,IBSS,5,42,11,0,22.709875,-39.620262,9.806561
606 | 605,IBSS,5,43,11,0,21.057301,-34.004139,9.806637
607 | 606,IBSS,5,44,11,0,23.422852,-27.45356,9.806629
608 | 607,IBSS,5,45,11,0,26.959536,-22.924892,9.806619
609 | 608,IBSS,5,46,11,0,29.746164,-24.121153,9.806593
610 | 609,IBSS,5,47,11,0,30.695511,-24.426474,9.806616
611 | 610,IBSS,5,48,11,0,30.805218,-25.387615,9.806633
612 | 611,IBSS,5,49,11,-0.000001,28.650347,-24.082079,9.806568
613 | 612,IBSS,5,50,11,0,29.640543,-21.858667,9.806561
614 | 613,IBSS,5,0,12,0,31.885374,-28.718849,9.806572
615 | 614,IBSS,5,1,12,0.000001,31.234419,-27.784061,9.806552
616 | 615,IBSS,5,2,12,0.000001,30.708853,-26.664103,9.806619
617 | 616,IBSS,5,3,12,-0.000001,31.629778,-27.572823,9.806635
618 | 617,IBSS,5,4,12,-0.000001,32.220161,-29.749111,9.806555
619 | 618,IBSS,5,5,12,0,32.578732,-30.015512,9.806624
620 | 619,IBSS,5,6,12,0,32.843529,-31.150246,9.806613
621 | 620,IBSS,5,7,12,0,33.752914,-31.183903,9.806574
622 | 621,IBSS,5,8,12,0,34.284081,-30.567303,9.80662
623 | 622,IBSS,5,9,12,0,33.834587,-30.58049,9.806609
624 | 623,IBSS,5,10,12,0,32.259998,-29.309559,9.806567
625 | 624,IBSS,5,11,12,0,30.354692,-30.304811,9.806609
626 | 625,IBSS,5,12,12,0,29.942083,-30.749599,9.806622
627 | 626,IBSS,5,13,12,0,30.756784,-33.379986,9.806598
628 | 627,IBSS,5,14,12,0,30.057602,-34.507889,9.806641
629 | 628,IBSS,5,15,12,0,29.169044,-36.96793,9.806549
630 | 629,IBSS,5,16,12,0,29.064468,-37.346756,9.806587
631 | 630,IBSS,5,17,12,0,28.507568,-37.153954,9.806629
632 | 631,IBSS,5,18,12,0,30.499817,-37.370762,9.806544
633 | 632,IBSS,5,19,12,0,32.062225,-38.088123,9.806638
634 | 633,IBSS,5,20,12,-0.000001,33.790661,-36.359425,9.806604
635 | 634,IBSS,5,21,12,0,34.539665,-34.87466,9.806638
636 | 635,IBSS,5,22,12,0,34.570938,-32.510677,9.806569
637 | 636,IBSS,5,23,12,0,35.005611,-30.452085,9.806582
638 | 637,IBSS,5,24,12,0,34.460217,-28.393465,9.806606
639 | 638,IBSS,5,25,12,0,36.256691,-25.679955,9.806628
640 | 639,IBSS,5,26,12,0,37.037369,-26.596361,9.806545
641 | 640,IBSS,5,27,12,0,36.460735,-25.779219,9.806596
642 | 641,IBSS,5,28,12,0,35.379486,-25.359118,9.806548
643 | 642,IBSS,5,29,12,0,34.175831,-25.481022,9.806548
644 | 643,IBSS,5,30,12,0,32.448593,-25.494846,9.80661
645 | 644,IBSS,5,31,12,0,32.317307,-26.540686,9.80663
646 | 645,IBSS,5,32,12,0,31.958261,-27.721651,9.806611
647 | 646,IBSS,5,33,12,0,30.460011,-29.996677,9.80658
648 | 647,IBSS,5,34,12,0,30.478579,-31.708044,9.806579
649 | 648,IBSS,5,35,12,0,30.929197,-32.267223,9.806585
650 | 649,IBSS,5,36,12,0,32.294598,-32.057079,9.806595
651 | 650,IBSS,5,37,12,0,34.379314,-33.750477,9.806582
652 | 651,IBSS,5,38,12,0,34.101288,-35.459492,9.806629
653 | 652,IBSS,5,39,12,0,33.580299,-37.720707,9.806581
654 | 653,IBSS,5,40,12,0,31.527212,-40.020107,9.806624
655 | 654,IBSS,5,41,12,0,29.428722,-39.849537,9.806591
656 | 655,IBSS,5,42,12,0,28.642826,-37.448902,9.806622
657 | 656,IBSS,5,43,12,0,27.494602,-34.313126,9.806597
658 | 657,IBSS,5,44,12,0,27.905436,-29.252895,9.806598
659 | 658,IBSS,5,45,12,0,29.925335,-27.258846,9.80661
660 | 659,IBSS,5,46,12,0,31.680887,-26.120832,9.806593
661 | 660,IBSS,5,47,12,0,31.481764,-25.077066,9.806603
662 | 661,IBSS,5,48,12,0,31.648468,-24.703705,9.806577
663 | 662,IBSS,5,49,12,0,31.983561,-26.097193,9.806633
664 | 663,IBSS,5,50,12,0,31.966194,-25.471691,9.806588
665 |
--------------------------------------------------------------------------------