diff --git a/web_app_django/tweet/static/css/hover_window.css b/web_app_django/tweet/static/css/hover_window.css
new file mode 100644
index 0000000000000000000000000000000000000000..286cf33a29fb74a8cb83c6682d72671960053a55
--- /dev/null
+++ b/web_app_django/tweet/static/css/hover_window.css
@@ -0,0 +1,38 @@
+.window_info {
+    padding: 1rem 1.25rem;
+    margin-bottom: 1rem;
+    border-radius: .25rem;
+    background-color: rgba(50, 138, 175, 0.9);
+    width: auto;
+    min-width: 12rem;
+    border-width: 0;
+    /* right: 1rem; */
+    box-shadow: 0 4px 6px 0 rgba(50, 138, 175, 0.6);
+  }
+.window_info tr .content {
+    text-align: left;
+    color: rgb(234, 238, 232);
+    max-width: 200px;
+}
+.window_info tr .label {
+    text-align: left;
+    color: rgb(236, 225, 123);
+    max-width: 8rem;
+}
+
+.marker_wrap{
+    display: flex;
+    background-color: rgba(4, 42, 66, 0.8);
+    width: auto;
+    min-width: 10rem;
+    height: 2rem;
+    border: none;
+    border-radius: 0.3rem;
+    text-align: left;
+}
+.marker_label{
+    margin: auto;
+    flex: 1;
+    color: rgb(236, 225, 123);
+    line-height: 1.5rem;
+}
diff --git a/web_app_django/tweet/static/css/img.css b/web_app_django/tweet/static/css/img.css
deleted file mode 100644
index 9affde1e30b56ab70a203b6af540820e5f785d6f..0000000000000000000000000000000000000000
--- a/web_app_django/tweet/static/css/img.css
+++ /dev/null
@@ -1,20 +0,0 @@
-
-a.snapchat{
-    position: relative;
-    background: lightgrey;
-  }
-
-  a.snapchat img {
-    position: absolute;
-    opacity: 0;
-    width: 100px;
-    height: 100px;
-    left: 0;
-    top: -20px;
-    transition: opacity .5s, top .5s;
-  }
-
-  a.snapchat:hover img {
-    opacity: 1;
-    top: 20px;
-  }
\ No newline at end of file
diff --git a/web_app_django/tweet/static/css/style.css b/web_app_django/tweet/static/css/style.css
new file mode 100644
index 0000000000000000000000000000000000000000..d13540f63aee95c34eeaa2eb6f0fd5433837ec21
--- /dev/null
+++ b/web_app_django/tweet/static/css/style.css
@@ -0,0 +1,640 @@
+html {
+    font-size: 12px;
+  }
+  .amap-copyright{
+    box-sizing: content-box
+  }
+  * {
+    box-sizing: border-box
+  }
+  .input-textarea{
+     color:grey;
+     height:8em;
+     overflow:auto;
+     border-radius:0.4rem;
+     border:1px solid #ced4da;
+     margin-bottom:1rem;
+  }
+  body {
+    margin: 0;
+    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+    line-height: 1.5;
+    font-weight: 300;
+    color: #111213;
+  }
+  
+  hr {
+    margin: 0.5rem 0;
+    box-sizing: content-box;
+    height: 0;
+    overflow: visible;
+    border: 0;
+    border-top: 1px solid rgba(0, 0, 0, .1)
+  }
+  
+  p {
+    margin-top: 0;
+    margin-bottom: 0;
+  }
+  
+  label {
+    display: inline-block;
+    margin-bottom: 0.4rem;
+  }
+  
+  label, .btn {
+    margin-left: 0;
+    font-size: 1rem;
+  }
+  
+  button, input, select {
+    margin: 0;
+    font-family: inherit;
+    font-size: inherit;
+    line-height: inherit;
+    overflow: visible;
+    text-transform: none
+  }
+  
+  [type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner, button::-moz-focus-inner {
+    padding: 0;
+    border-style: none;
+  }
+  
+  input[type=checkbox], input[type=radio] {
+    box-sizing: border-box;
+    padding: 0;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    padding: 0;
+    margin: 0 0.5rem 0 0;
+  }
+  
+  h4 {
+    font-family: inherit;
+    line-height: 1.8;
+    font-weight: 300;
+    color: inherit;
+    font-size: 1.1rem;
+    margin-top: 0;
+    margin-bottom: .5rem
+  }
+  
+  .btn {
+    /* display: inline-block; */
+    margin: 0.25rem;
+    flex: 1;
+    font-weight: 400;
+    text-align: center;
+    white-space: nowrap;
+    vertical-align: middle;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    border: 1px solid transparent;
+    transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
+    background-color: transparent;
+    background-image: none;
+    color: #25A5F7;
+    border-color: #25A5F7;
+    padding: .25rem .5rem;
+    line-height: 1.5;
+    border-radius: 1rem;
+    -webkit-appearance: button;
+    cursor:pointer;
+  }
+  
+  .btn:hover {
+    color: #fff;
+    background-color: #25A5F7;
+    border-color: #25A5F7
+  }
+  
+  .btn:hover {
+    text-decoration: none
+  }
+
+  
+  .input-item {
+    position: relative;
+    display: -ms-flexbox;
+    display: flex;
+    -ms-flex-wrap: wrap;
+    flex-wrap: wrap;
+    -ms-flex-align: center;
+    align-items: center;
+    width: 100%;
+    height: 3rem;
+  }
+  
+  .input-item:last-child {
+    margin-bottom: 0;
+  }
+  
+  .input-item>select, .input-item>input[type=text], .input-item>input[type=date] {
+    position: relative;
+    -ms-flex: 1 1 auto;
+    flex: 1 1 auto;
+    width: 1%;
+    margin-bottom: 0;
+  }
+  
+  .input-item>select:not(:last-child), .input-item>input[type=text]:not(:last-child), .input-item>input[type=date]:not(:last-child) {
+    border-top-right-radius: 0;
+    border-bottom-right-radius: 0
+  }
+  
+  .input-item>select:not(:first-child), .input-item>input[type=text]:not(:first-child), .input-item>input[type=date]:not(:first-child) {
+    border-top-left-radius: 0;
+    border-bottom-left-radius: 0
+  }
+  
+  .input-item-prepend {
+    margin-right: -1px;
+  }
+  
+  .input-item-text, input[type=text],input[type=date], select {
+    height: calc(2.2rem + 2px);
+  }
+  
+  .input-item-text {
+    width: 6rem;
+    text-align: justify;
+    padding: 0.4rem 0.7rem;
+    display: inline-block;
+    text-justify: distribute-all-lines;
+    /*ie6-8*/
+    text-align-last: justify;
+    /* ie9*/
+    -moz-text-align-last: justify;
+    /*ff*/
+    -webkit-text-align-last: justify;
+    /*chrome 20+*/
+    -ms-flex-align: center;
+    align-items: center;
+    margin-bottom: 0;
+    font-size: 1rem;
+    font-weight: 400;
+    line-height: 1.5;
+    color: #495057;
+    text-align: center;
+    white-space: nowrap;
+    background-color: #e9ecef;
+    border: 1px solid #ced4da;
+    border-radius: .25rem;
+    border-bottom-right-radius: 0;
+    border-top-right-radius: 0;
+  }
+  
+  .input-item-text input[type=checkbox], .input-item-text input[type=radio] {
+    margin-top: 0
+  }
+
+  
+  .input-card {
+    display: flex;
+    flex-direction: column;
+    min-width: 0;
+    height: auto;
+    word-wrap: break-word;
+    background-color:rgba(0, 0, 0, 0.6);
+    color: white;
+    background-clip: border-box;
+    border-radius: .25rem;
+    width: 22rem;
+    border-width: 0;
+    border-radius: 0.4rem;
+    box-shadow: 0 2px 6px 0 rgba(114, 124, 245, .5);
+    position: absolute;
+    -ms-flex: 1 1 auto;
+    flex: 1 1 auto;
+    padding: 0.75rem 1.25rem;
+  }
+
+
+  .input-text {
+    line-height: 2rem;
+    margin-right: 2rem;
+  }
+  
+  .info hr {
+    margin-right: 0;
+    margin-left: 0;
+    border-top-color: grey;
+  }
+  
+  .info {
+    padding: .75rem 1.25rem;
+    margin-bottom: 1rem;
+    border-radius: .25rem;
+    /* position: fixed; */
+    top: 1rem;
+    background-color: white;
+    width: auto;
+    min-width: 22rem;
+    border-width: 0;
+    right: 1rem;
+    box-shadow: 0 2px 6px 0 rgba(114, 124, 245, .5);
+  }
+
+  
+  .code {
+    left: 1.5rem;
+    right: 1.5rem;
+    top: 1.5rem;
+    bottom: 1.5rem;
+    overflow: auto;
+    margin-bottom: 0rem;
+  }
+  
+  .code .btn {
+    top: 1rem;
+    position: absolute;
+    right: 1rem;
+  }
+  
+  .code .result {
+    border: 1px solid rgba(0, 0, 0, 0.1);
+    border-radius: 0.5rem;
+    padding: 1rem;
+    bottom: 1rem;
+    position: absolute;
+    top: 5.5rem;
+    right: 1rem;
+    left: 1rem;
+    overflow: auto;
+  }
+  
+  .code .status {
+    color: #80adff;
+    display: inline-block;
+    font-size: 14px;
+  }
+  
+  .code h4 {
+    display: inline-block;
+    max-width: 20rem;
+    margin-right: 1rem;
+    margin-bottom: 1rem;
+  }
+  
+  select, input[type=text], input[type=date] {
+    display: inline-block;
+    width: 100%;
+    padding: .375rem 1.75rem .375rem .75rem;
+    line-height: 1.5;
+    color: #495057;
+    vertical-align: middle;
+    background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;
+    background-size: 8px 10px;
+    border: 1px solid #ced4da;
+    border-radius: .25rem;
+    -webkit-appearance: none;
+    -moz-appearance: none;
+    appearance: none
+  }
+  
+
+  
+  input[type=text],input[type=date] {
+    background: #fff;
+    padding: .375rem .75rem;
+  }
+  
+  select:focus, input[type=text]:focus, input[type=date]:focus {
+    border-color: #80bdff;
+    outline: 0;
+    box-shadow: 0 0 0 .1rem rgba(128, 189, 255, .1)
+  }
+  
+  .btn:focus {
+    outline: 0;
+    box-shadow: none;
+  }
+  
+  select:focus::-ms-value, input[type=text]:focus::-ms-value,input[type=date]:focus::-ms-value {
+    color: #495057;
+    background-color: #fff
+  }
+  
+  
+  /* native toastr */
+  .native-toast {
+    position: fixed;
+    background-color: rgba(50, 50, 50, .8);
+    border-radius: 33px;
+    color: white;
+    left: 50%;
+    text-align: center;
+    padding: 6px 12px;
+    opacity: 0;
+    z-index: 99999;
+    transition: transform .25s, opacity .25s, top .25s;
+    box-sizing: border-box;
+  }
+  
+  .native-toast-bottom {
+    bottom: 50px;
+    -ms-transform: translateX(-50%) translateY(50px);
+        transform: translateX(-50%) translateY(50px)
+  }
+  
+  .native-toast-bottom.native-toast-shown {
+    opacity: 1;
+    -ms-transform: translateX(-50%) translateY(0);
+        transform: translateX(-50%) translateY(0);
+  }
+  
+  .native-toast-bottom.native-toast-edge {
+    bottom: 0;
+  }
+  
+  .native-toast-top {
+    top: 50px;
+    -ms-transform: translateX(-50%) translateY(-50px);
+        transform: translateX(-50%) translateY(-50px)
+  }
+  
+  .native-toast-top.native-toast-shown {
+    opacity: 1;
+    -ms-transform: translateX(-50%) translateY(0);
+        transform: translateX(-50%) translateY(0);
+  }
+  
+  .native-toast-top.native-toast-edge {
+    top: 0;
+  }
+  
+  .native-toast-center {
+    top: 0;
+    -ms-transform: translateX(-50%) translateY(-50px);
+        transform: translateX(-50%) translateY(-50px)
+  }
+  
+  .native-toast-center.native-toast-shown {
+    opacity: 1;
+    top: 50%;
+    -ms-transform: translateX(-50%) translateY(-50%);
+        transform: translateX(-50%) translateY(-50%);
+  }
+  
+  .native-toast-edge {
+    border-radius: 0;
+    width: 100%;
+    text-align: left;
+  }
+  
+  @media screen and (min-width: 40rem) {
+    .native-toast:not(.native-toast-edge) {
+      max-width: 18rem;
+    }
+  }
+  
+  /*
+    max-width does not seem to work in small screen?
+  */
+  
+  /*@media screen and (max-width: 768px) {
+    .native-toast:not(.native-toast-edge) {
+      max-width: 400px;
+    }
+  }
+  
+  @media screen and (max-width: 468px) {
+    .native-toast:not(.native-toast-edge) {
+      max-width: 300px;
+    }
+  }*/
+  
+  /* types */
+  
+  .native-toast-error {
+    background-color: #d92727;
+    color: white;
+  }
+  
+  .native-toast-success {
+    background-color: #62a465;
+    color: white;
+  }
+  
+  .native-toast-warning {
+    background-color: #fab01b;
+    color: white;
+  }
+  
+  .native-toast-info {
+    background-color: rgb(82, 98, 189);
+    color: white;
+  }
+  
+  [class^="native-toast-icon-"] {
+    vertical-align: middle;
+    margin-right: 8px
+  }
+  
+  [class^="native-toast-icon-"] svg {
+    width: 16px;
+    height: 16px;
+  }
+
+   /********************** custom for project **********************/
+   /* 标题框 */
+  .title-banner{
+    position: fixed;
+    width: 42rem;
+    top: 2rem;
+    left: 0;
+    height: 6rem;
+    background: rgba(21, 84, 110, 0.749);
+    /* border-radius: 0 0.4rem 0.4rem 0; */
+    display: flex;
+    align-items: center;
+  }
+  .title-content{
+    margin: auto;
+    text-align: center;
+  }
+  .title-content p{
+    color: whitesmoke;
+    font-size: 1.7rem;
+    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
+    font-weight: 350;
+  }
+
+  /* 城市选择框 */
+  .selection-hub{
+    position: fixed;
+    left: 2rem;
+    top: 0;
+    padding-top: 20%;
+    width: 20rem;
+  }
+  .selection-window{
+    display: flex;
+    flex-flow: column;
+    align-items: center;
+    height: 11rem;
+    border: transparent;
+    margin: 4rem 0;
+    padding: 0.5rem;
+    background-color:rgba(9, 75, 116, 0.264);
+    box-shadow: 0 4px 6px 0 rgba(50, 138, 175, 0.749);
+    border-radius: 0.4rem;
+  }
+  .selection-window .title{
+    position: absolute;
+    padding: 0.7rem 2rem;
+    background: rgba(4, 42, 66, 0.75);
+    transform: translate(0,-60%)
+  }
+  .selection-window .title p{
+    font-size: 1.5rem;
+    padding: 0.3rem;
+    color: rgb(236, 225, 123);
+    font-weight: 400;
+  }
+  .selection-window .content{
+    width: 60%;
+    margin: auto;
+  }
+  .select_lg {
+    align-items: center;
+    border: none;
+    outline: none;
+    height: 5rem;
+    line-height: 3rem;
+    padding-left: 2rem;
+    background-color: rgba(50, 138, 175, 0.749);
+    color:rgb(255, 255, 255);
+    font-size: 2rem;
+  }
+  .info-hub{
+    position: fixed;
+    right: 2rem;
+    top: 0;
+    padding-top: 5%;
+    width: 40rem;
+    height: 40rem;
+    display: -webkit-flex;
+    display: flex;
+    flex-flow: column;
+    /* align-items: center; */
+  }
+  .sub_window {
+    flex: auto;
+    min-width: 15rem;
+    margin: 2rem 0;
+    height: auto;
+    word-wrap: break-word;
+    background-color:rgba(9, 75, 116, 0.264);
+    color: white;
+    background-clip: border-box;
+    border-radius: .25rem;
+    border-width: 0;
+    border-radius: 0.4rem;
+    box-shadow: 0 4px 6px 0 rgba(50, 138, 175, 0.749);
+    padding: 0.75rem 1.25rem;
+  }
+  .sub_window .title{
+    display: block;
+    color: rgb(253, 253, 253);
+    position: absolute;
+    transform: translate(25%, -70%);
+    font-size: 1.35rem;
+    width: 31rem;
+    padding: 0.75rem 1rem;
+    text-align: left;
+    background: rgba(4, 42, 66, 0.75);
+    font-weight: 420;
+  }
+  .sub_window .rcm_list{
+    margin-top: 2rem;
+  }
+  .rcm_list .table-header{
+    width: 100%;
+    display: flex;
+    flex-flow: row;
+  }
+  .rcm_list .table-header li{
+    flex: 1;
+    text-align: center;
+    font-size: 1.5rem;
+    color: rgb(236, 225, 123);
+  }
+  .rcm_list .table-content{
+    font-size: 1.2rem;
+    display: flex;
+    flex-flow: column;
+  }
+  .rcm_list .line-info{
+    flex: 1;
+    width: 100%;
+    display: flex;
+    flex-flow: row;
+  }
+  .rcm_list .line-info p{
+    flex: 1;
+    text-align: center;
+  }
+
+  .sub_window .horzontal-spliter{
+    margin-top: 2rem;
+    display: flex;
+    flex-flow: row;
+  }
+  .horzontal-spliter .sublist{
+    padding-left: 0.75rem;
+    display: flex;
+    flex-flow: column;
+  }
+  .sublist .list-item{
+    width: 100%;
+    flex: 1;
+    display: flex;
+    flex-flow: row;
+    align-items: center;
+    margin-left: 1rem;
+  }
+  .sublist .list-item p{
+    text-align: center;
+    padding-left: 0.75rem;
+  }
+
+  #circle {
+    width: 10px;
+    height: 10px;
+    background: rgb(209,209,255);
+    -moz-border-radius: 50px;
+    -webkit-border-radius: 50px;
+    border-radius: 50px;
+  }
+  #circle2 {
+    width: 10px;
+    height: 10px;
+    background: rgb(94,211,229);
+    -moz-border-radius: 50px;
+    -webkit-border-radius: 50px;
+    border-radius: 50px;
+  }
+  #circle3 {
+    width: 10px;
+    height: 10px;
+    background: rgb(110, 190, 160);
+    -moz-border-radius: 50px;
+    -webkit-border-radius: 50px;
+    border-radius: 50px;
+  }
+
+  .chart{
+    width: 15rem; 
+    height: 15rem;
+    color: rgb(110, 190, 160)
+  }
+ 
+  
+
+  
+
+  
\ No newline at end of file
diff --git a/web_app_django/tweet/static/images/circle.png b/web_app_django/tweet/static/images/circle.png
deleted file mode 100644
index 8510accf77434e3815005f1923478ea1216b05bf..0000000000000000000000000000000000000000
Binary files a/web_app_django/tweet/static/images/circle.png and /dev/null differ
diff --git a/web_app_django/tweet/static/img.js b/web_app_django/tweet/static/img.js
deleted file mode 100644
index 365ba8ff7cea14745fbad73073a63042e5b4bb4f..0000000000000000000000000000000000000000
--- a/web_app_django/tweet/static/img.js
+++ /dev/null
@@ -1,13 +0,0 @@
-
-<script>
-    
-        $(document).ready(function(){
-            $("#Image").mouseover(function(){
-                $("#Image").show();
-            });
-            $("#Image").mouseout(function(){
-                $("#Image").hide();
-            });
-        });
-        
-</script>
diff --git a/web_app_django/tweet/static/js/district.js b/web_app_django/tweet/static/js/district.js
new file mode 100644
index 0000000000000000000000000000000000000000..36245a3f2bf20e183fe07123322cab60c29645b3
--- /dev/null
+++ b/web_app_django/tweet/static/js/district.js
@@ -0,0 +1,8 @@
+var districts = [
+    { 'name': 'Melbourne', 'center': '144.946014,-37.815018' ,'size': melval*0.01,'rate':melrate} ,
+    { 'name': 'Sydney', 'center': '151.209900,-33.865143','size':sydval*0.01,'rate':sydrate },
+    { 'name': 'Brisbane', 'center': '153.021072,-27.470125' ,'size':brival*0.01,'rate':brirate},
+    { 'name': 'Adelaide', 'center': '138.599503,-34.921230' ,'size':adeval*0.01,'rate':aderate},
+    { 'name': 'Perth', 'center': '115.857048,-31.953512' ,'size':perval*0.01,'rate':perrate}
+    
+];
\ No newline at end of file
diff --git a/web_app_django/tweet/static/js/img.js b/web_app_django/tweet/static/js/img.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/web_app_django/tweet/static/js/infoshow.js b/web_app_django/tweet/static/js/infoshow.js
new file mode 100644
index 0000000000000000000000000000000000000000..e0be71683f483c526bf29d99bec782d472e6f1fb
--- /dev/null
+++ b/web_app_django/tweet/static/js/infoshow.js
@@ -0,0 +1,84 @@
+var infoWin;
+var tableDom;
+var rcmWins =[];
+/**
+ * 封装便捷的撞题
+ * @param {AMap.Map} map
+ * @param {Array} event
+ * @param {Object} content
+ */
+
+
+function openInfoWin(map, event, content) {
+    if (!infoWin) {
+        infoWin = new AMap.InfoWindow({
+            isCustom: true,  //使用自定义窗体
+            offset: new AMap.Pixel(70, -10),
+        });
+    }
+
+    var x = event.offsetX;
+    var y = event.offsetY;
+    var lngLat = map.containerToLngLat(new AMap.Pixel(x, y));
+    // console.log(lngLat)
+
+    if (!tableDom) {
+        let infoDom = document.createElement('div');
+        infoDom.className = 'window_info';
+        tableDom = document.createElement('table');
+        infoDom.appendChild(tableDom);
+        infoWin.setContent(infoDom);
+    }
+
+    var trStr = '';
+    for (var name in content) {
+        var val = content[name];
+        trStr += 
+            '<tr>' +
+                '<td class="label">' + name + '</td>' +
+                '<td>&nbsp;</td>' +
+                '<td class="content">' + val + '</td>' +
+            '</tr>'
+    }
+
+    tableDom.innerHTML = trStr;
+    infoWin.open(map, lngLat);
+}
+
+function closeInfoWin() {
+    if (infoWin) {
+        infoWin.close();
+    }
+}
+
+function showRcmWin(map,points){
+    var coor;
+    var name;
+    var price;
+    if(points.length > 0){
+        rcmWins = []
+        for(city in points){
+            if(points[city].price == 0){
+                continue
+            }
+            coor = points[city]["center"].split(',')
+            name = points[city]["name"]
+            price = points[city]["price"]
+            var rcmWin = new AMap.Marker({
+                position:coor,
+                content: "<div class = 'marker_wrap' ><div class='marker_label'><p>"+name +" : " +price+"元</p></div></div>",
+                offset: new AMap.Pixel(-50, -35),
+            });
+            rcmWins.push(rcmWin)
+        }
+        map.add(rcmWins)
+    }
+    return rcmWins
+}
+
+function closeRcmWin(map,rcmWins){
+    rcmWins.forEach(marker => {
+        map.remove(marker);
+    });
+    rcmWins = []
+}
\ No newline at end of file
diff --git a/web_app_django/tweet/templates/index.html b/web_app_django/tweet/templates/index.html
index 4fb600e2347e796bd266ba02002d4e332feca253..fd0976d2ed96fc002e0ae38dee12bb73d682fe4e 100644
--- a/web_app_django/tweet/templates/index.html
+++ b/web_app_django/tweet/templates/index.html
@@ -1,43 +1,270 @@
 {% load static %}
 <!DOCTYPE html>
 <html lang="zh-CN">
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <title>COMP90024 Team:69</title>
+    <link href="http://a.amap.com/Loca/static/manual/example/style/demo.css" rel="stylesheet">
+    <style>
+        html,
+        body,
+        #container {
+            margin: 0;
+            padding: 0;
+            width: 100%;
+            height: 100%;
+        }
+    </style>
+</head>
+<body>
+<div id="container" class="container">
+</div>
+    <div class="title-banner">
+        <div class="title-content">
+            <p>The Analysis of the sin of Wrath</p>
+            <p>based on tweets across the major cities in Melbourne</p>
+        </div>
+    </div>
 
+<div class="info-hub">
+    <div class="sub_window" style="width:auto">
+            <div class="title">
+                <p>Hate Speech Rate VS number of assault violence </p>
+            </div>
+                <div id="chart" class="chart" ></div>
+    </div>
+</div>
 
-         
-    <body>
+              
     
-    {% if cityInfo %}
-      {% for city in cityInfo %}
-      <td>{{city.key}}</td>
-      <td> {{city.value}}</td>
-     
-       {% endfor %}
-       {% for city1 in cityTotal %}
-      <td>{{city1.melbourne}}</td>
-      <td> {{city1.sydney}}</td>
-      <td> {{city1.adelaide}}</td>
-      <td> {{city1.perth}}</td>
-      <td> {{city1.brisbane}}</td>
-     
-       {% endfor %}
-      
-     <td>{{NswCount}}</td>
-     <td>{{VicCount}}</td>
-     <td>{{SaCount}}</td>
-     {% for cityOld in cityTotalOld %}
-      <td>{{cityOld.melbourne}}</td>
-      <td> {{cityOld.sydney}}</td>
-      <td> {{cityOld.adelaide}}</td>
-     
-       {% endfor %}
-    {%else%}
-    <hr>NO DATA</hr>
+
+{% if cityInfo %}
     
+{% for city in cityInfo %}
+    {% for city1 in cityTotal %}
     
-     
-     {% endif %}
-    </body>
-     
-      
+    {% if city.key == "melbourne" %}
+    <script type="text/javascript">
+    var melval = "{{city.value}}";
+    var melrate = "{{city1.melbourne}}";
+    </script>
+    {% endif %}
+   
+   {% if city.key == "sydney" %}
+   <script>
+    var sydval = "{{city.value}}";
+    var sydrate = "{{city1.sydney}}";
+   </script>
+   {% endif %}
+   
+   
+   {% if city.key == "adelaide" %}
+   <script>
+    var adeval = "{{city.value}}";
+    var aderate = "{{city1.adelaide}}";
+
+   </script>
+   {% endif %}
+
+   {% if city.key == "brisbane" %}
+   <script>
+    var brival = "{{city.value}}";
+    var brirate = "{{city1.brisbane}}";
+
+   </script>
+   {% endif %}
+   
+   {% if city.key == "perth" %}
+   <script>
+    var perval = "{{city.value}}";
+    var perrate = "{{city1.perth}}";
+   </script>
+   {% endif %}
+
+   
+   {% endfor %}
+
+ {% endfor %}
+ <script src="{% static 'js/district.js' %}"></script>
+ 
+
+
+<td>{{NswCount}}</td>
+<script>
+    var nswcount = "{{NswCount}}";
+</script>
+<td>{{VicCount}}</td>
+<script>
+    var viccount = "{{VicCount}}";
+</script>
+<td>{{SaCount}}</td>
+<script>
+    var sacount = "{{SaCount}}";
+</script>
+{% for cityOld in cityTotalOld %}
+<td>{{cityOld.melbourne}}</td>
+<script>
+    var melold = "{{cityOld.melbourne}}";
+</script>
+<td> {{cityOld.sydney}}</td>
+<script>
+    var sydold = "{{cityOld.sydney}}";
+</script>
+<td> {{cityOld.adelaide}}</td>
+<script>
+    var adeold = "{{cityOld.adelaide}}";
+</script>
+ {% endfor %}
+{%else%}
+<hr>NO DATA</hr>
+
+
+
+{% endif %}
+<!--<script src="./script/loca.js"></script>-->
+<link rel="stylesheet" href="{% static 'css/style.css' %}"/>
+<link rel="stylesheet" href="{% static 'css/hover_window.css' %}"/>
+<script src="http://webapi.amap.com/loca?v=1.2.0&key=393144ee0738b91f3e93b0c6d0c36562"></script>
+<script src= "{% static 'js/infoshow.js' %}"></script>
+<script src = "https://www.gstatic.com/charts/loader.js"></script>
+<script type = "text/javascript">
+    google.charts.load('current', {packages: ['corechart']});     
+ </script>
+<!-- <script src=".\infoshow.js"></script> -->
+<script src = "{% static 'js/district.js' %}"></script>
+
+<script>
     
-   </html>
\ No newline at end of file
+    var map = Loca.create('container', {
+       
+        zoom: 4.5,
+        center: [150, -28]
+    });
+
+    var layer = Loca.visualLayer({
+        eventSupport: true,    // selectStyle 配置需要开启 eventSupport: true
+        container: map,
+        type: 'point',
+        shape: 'circle'
+    });
+   
+
+    layer.on('mousemove', function (ev) {
+        // 事件类型
+        var type = ev.type;
+        // 当前元素的原始数据
+        var rawData = ev.rawData;
+        
+        // 原始鼠标事件
+        var originalEvent = ev.originalEvent;
+        
+        openInfoWin(map.getMap(), originalEvent, {
+            'City': rawData.name,
+            'Hate_Speech_Rate': rawData.rate
+        });
+    });
+
+    layer.on('mouseleave', function (ev) {
+        closeInfoWin();
+    });
+
+    layer.setData(districts, {
+        lnglat: 'center'
+    });
+
+    layer.setOptions({
+        style: {
+            radius: function(data){
+                return data.value.size
+            },
+            color: '#c54400',
+            borderColor: '#c5001f',
+            borderWidth: 1.5,
+            opacity: 0.3
+        },
+        
+    });
+
+    layer.render();
+
+    var layer0 = Loca.visualLayer({
+        eventSupport: true,    // selectStyle 配置需要开启 eventSupport: true
+        container: map,
+        type: 'point',
+        shape: 'circle'
+    });
+
+    layer0.setData(districts, {
+        lnglat: 'center'
+    });
+
+    layer0.setOptions({
+        style: {
+            radius:5,
+            color: '#626262',
+            borderColor: '#626262',
+            borderWidth: 1.5,
+            opacity: 0.8
+        },
+        selectStyle: {
+            radius: 10,
+            color: '#ffe30a',
+            opacity: 0.8
+        }
+    });
+
+    layer0.render();
+
+
+    function drawChart() {
+            // Define the chart to be drawn.
+            var data = new google.visualization.DataTable();
+            var nsw = parseFloat(nswcount);
+            var vic = parseFloat(viccount);
+            var sa = parseFloat(sacount);
+            var syd =parseFloat(sydold);
+            var mel = parseFloat(melold);
+            var ade = parseFloat(adeold);
+            data.addColumn('string', 'State');
+            data.addColumn('number', 'Criminal Stastics from Aurin');
+            data.addColumn('number', 'Hate Speech Percentage');
+           
+            data.addRows([
+               ['Nsw',  nsw, syd],
+               ['Vic',  vic, mel],
+               ['Sa',  sa,  ade]
+              
+               
+            ]);
+               
+            // Set chart options
+            var options = {
+               hAxis: {
+                  title: 'State'
+               },
+               vAxis: {
+                  title: ''
+               },   
+               'width':450,
+               'height':350,
+               pointsVisible: true,
+               backgroundColor:"transparent" 
+            };
+
+            // Instantiate and draw the chart.
+            var chart = new google.visualization.LineChart(document.getElementById('chart'));
+            chart.draw(data, options);
+         }
+         google.charts.setOnLoadCallback(drawChart);
+
+
+</script>
+
+
+</body>
+</html>
+
+
+        
\ No newline at end of file
diff --git a/web_app_django/tweet/views.py b/web_app_django/tweet/views.py
index 6423e190d218622d031d10ffd0bfb95ef002bf21..c1b43192e7d4739d8ed146a45ae88abaf8cddb89 100644
--- a/web_app_django/tweet/views.py
+++ b/web_app_django/tweet/views.py
@@ -111,7 +111,7 @@ def index(request):
 
 
 
-        docs = SERVER['tweet_2014_raw']
+        docs = SERVER['tweet_2014_results']
         cityInfoOld = []
         cityTotalOld = []
         cityPercentageOld = {}
@@ -123,7 +123,7 @@ def index(request):
             for data in cityInfoOld:
                 if data.key == doc.key:
                     number = (data.value/doc.value)*100
-                    percentage = str(round(number,2))+"%"
+                    percentage = round(number,2)
                     #print(percentage)
                     cityPercentageOld[data.key] = percentage
         cityTotalOld.append(cityPercentageOld)