├── HTML
└── V0_1.html
├── MVP_V0.1_Get address
├── README.md
├── baidumap.py
├── baidumap.pyc
└── test.py
├── MVP_V0.2
└── edge.py
├── MVP_V0.2_contours
├── Contours.txt
├── WXJ_contours.txt
├── contours.py
└── contours_list.txt
├── MVP_V0.3_CannyEdge_to_contours
├── COVER.jpg
├── Contours.txt
├── canny_contours.py
├── contours_list.txt
├── fx.jpg
├── fx_canny.jpg
└── fx_canny_contours.jpg
├── MVP_V0.4_add url jpg
├── COVER.jpg
├── COVER_canny_img.jpg
├── Contours.log
├── README.md
├── canny_contours.py
├── fx.jpg
├── fx_canny.jpg
└── fx_canny_contours.jpg
├── MVP_V0.5_LBS
├── driving_waypoint.html
└── walking_route.html
├── MVP_V0.6_qnufop
├── README.MD
└── index.html
├── MVP_V0.7_Wechat
├── app.py
├── app
│ ├── __init__.py
│ ├── logger.py
│ ├── main
│ │ ├── __init__.py
│ │ ├── errors.py
│ │ └── views.py
│ ├── static
│ │ ├── css
│ │ │ ├── fontawesome
│ │ │ │ ├── css
│ │ │ │ │ └── font-awesome.min.css
│ │ │ │ └── fonts
│ │ │ │ │ ├── FontAwesome.otf
│ │ │ │ │ ├── font-awesome.min.css
│ │ │ │ │ ├── fontawesome-webfont.eot
│ │ │ │ │ ├── fontawesome-webfont.svg
│ │ │ │ │ ├── fontawesome-webfont.ttf
│ │ │ │ │ ├── fontawesome-webfont.woff
│ │ │ │ │ └── fontawesome-webfont.woff2
│ │ │ ├── jquery.datetimepicker.css
│ │ │ ├── pagination.css
│ │ │ └── track.css
│ │ ├── data
│ │ │ ├── 516915570.json
│ │ │ ├── 516922851.json
│ │ │ ├── 516977414.json
│ │ │ ├── 517118819.json
│ │ │ ├── list.json
│ │ │ └── trace.json
│ │ ├── favicon.ico
│ │ ├── images
│ │ │ ├── 11.png
│ │ │ └── loading-1.gif
│ │ ├── js
│ │ │ ├── baiduTemplate.js
│ │ │ ├── demoTrack.js
│ │ │ ├── esl
│ │ │ │ ├── css.js
│ │ │ │ ├── esl.js
│ │ │ │ └── js.js
│ │ │ ├── jquery.datetimepicker.js
│ │ │ ├── jquery.min.js
│ │ │ ├── jquery.pagination.js
│ │ │ ├── mousewheel.min.js
│ │ │ ├── points-sample-data.js
│ │ │ └── track
│ │ │ │ └── demo.js
│ │ └── points-sample-data.js
│ └── templates
│ │ ├── 404.html
│ │ ├── 500.html
│ │ ├── backup.html
│ │ ├── index.html
│ │ ├── index.html.1
│ │ └── yingyan.html
├── config.py
├── favicon.ico
└── runapp.py
├── README.md
└── doc
└── nengji.md
/HTML/V0_1.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
10 | 单个标注点沿直线的轨迹运动
11 |
12 |
13 |
14 |
15 |
16 |
60 |
--------------------------------------------------------------------------------
/MVP_V0.1_Get address/README.md:
--------------------------------------------------------------------------------
1 | # V0.1
2 |
3 | CLI实现坐标、地址信息的获取
4 |
5 | 运行:`Python test.py`
6 |
7 | + 坐标转换API: [http://developer.baidu.com/map/geocoding-api.htm](http://developer.baidu.com/map/geocoding-api.htm)
8 |
9 | 
10 |
11 |
12 | #架构思考
13 |
14 | 整体流程:
15 | 前端请求自己部署的服务端→服务端→百度API
16 |
17 | →API返回数据至前端输出
18 |
19 |
--------------------------------------------------------------------------------
/MVP_V0.1_Get address/baidumap.py:
--------------------------------------------------------------------------------
1 | #-*- coding:utf-8 -*-
2 | import urllib2,urllib,httplib
3 | import json
4 |
5 |
6 | class xBaiduMap:
7 | def __init__(self,key='1doDqShwqSeBGklH2y4uGR1A'): #key=ak
8 | self.host='http://api.map.baidu.com'
9 | self.path='/geocoder?'
10 | self.version='/v2'
11 | self.param={'address':None,'output':'json','key':key,'location':None,'city':None}
12 |
13 | def getLocation(self,address,city=None):
14 | rlt=self.geocoding('address',address,city)
15 | if rlt!=None:
16 | l=rlt['result']
17 | if isinstance(l,list):
18 | return None
19 | return l['location']['lat'],l['location']['lng']
20 |
21 | def getAddress(self,lat,lng):
22 | rlt=self.geocoding('location',"{0},{1}".format(lat,lng))
23 | if rlt!=None:
24 | l=rlt['result']
25 | return l['formatted_address']
26 | #Here you can get more details about the location with 'addressComponent' key
27 | #ld=rlt['result']['addressComponent']
28 | #print(ld['city']+';'+ld['street'])
29 | #
30 | def geocoding(self,key,value,city=None):
31 | if key=='location':
32 | if 'city' in self.param:
33 | del self.param['city']
34 | if 'address' in self.param:
35 | del self.param['address']
36 |
37 | elif key=='address':
38 | if 'location' in self.param:
39 | del self.param['location']
40 | if city==None and 'city' in self.param:
41 | del self.param['city']
42 | else:
43 | self.param['city']=city
44 | self.param[key]=value
45 | r=urllib.urlopen(self.host+self.path+urllib.urlencode(self.param))
46 | rlt=json.loads(r.read())
47 | if rlt['status']=='OK':
48 | return rlt
49 | else:
50 | print "Decoding Failed"
51 | return None
52 |
--------------------------------------------------------------------------------
/MVP_V0.1_Get address/baidumap.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.1_Get address/baidumap.pyc
--------------------------------------------------------------------------------
/MVP_V0.1_Get address/test.py:
--------------------------------------------------------------------------------
1 | #-*- coding:utf-8 -*-
2 | from baidumap import xBaiduMap
3 | bm=xBaiduMap()
4 | print bm.getLocation("天安门",'北京')
5 | print bm.getLocation("浙江大学玉泉校区")
6 | print bm.getLocation("浙江大学玉泉校区",'杭州')
7 | print bm.getAddress(39.912684,116.404049)
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/MVP_V0.2/edge.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env python
2 | # coding=utf-8
3 | # author: shawn0lee0
4 | # email: run-map@googlegroups.com
5 | # version: 1.0
6 |
7 | print "OpenCV Python version of edge"
8 |
9 | import sys
10 | import urllib2
11 | import cv2.cv as cv
12 | import cv2
13 |
14 | # some definitions
15 | win_name = "Edge"
16 | trackbar_name = "Threshold"
17 |
18 | # the callback on the trackbar
19 | def on_trackbar(position):
20 |
21 | cv.Smooth(gray, edge, cv.CV_BLUR, 3, 3, 0)
22 | cv.Not(gray, edge)
23 |
24 | # run the edge dector on gray scale
25 | cv.Canny(gray, edge, position, position * 3, 3)
26 |
27 | print "Type_edge:%s"%type(edge)
28 | # reset
29 | cv.SetZero(col_edge)
30 |
31 | # copy edge points
32 | cv.Copy(im, col_edge, edge)
33 |
34 |
35 |
36 | # show the im
37 | cv.ShowImage(win_name, edge)
38 |
39 | if __name__ == '__main__':
40 | if len(sys.argv) > 1:
41 | im = cv.LoadImage( sys.argv[1], cv.CV_LOAD_IMAGE_COLOR)
42 | else:
43 | url = 'http://i12.tietuku.com/05ef0b29030fa46c.jpg'
44 | filedata = urllib2.urlopen(url).read()
45 | imagefiledata = cv.CreateMatHeader(1, len(filedata), cv.CV_8UC1) #创建并初始化矩阵头文件
46 |
47 | print "Type_imagefiledata:%s"%type(imagefiledata)
48 | cv.SetData(imagefiledata, filedata, len(filedata)) #将图片数据加入矩阵头文件中
49 | im = cv.DecodeImage(imagefiledata, cv.CV_LOAD_IMAGE_COLOR)
50 | print "Type_SetData_filedata:%s"%type(filedata)
51 | # create the output im
52 | col_edge = cv.CreateImage((im.width, im.height), 8, 3)
53 |
54 | # convert to grayscale
55 | gray = cv.CreateImage((im.width, im.height), 8, 1)
56 | edge = cv.CreateImage((im.width, im.height), 8, 1)
57 | cv.CvtColor(im, gray, cv.CV_BGR2GRAY) #将im灰度处理并存贮在gray的内存容器中
58 |
59 | # create the window
60 | cv.NamedWindow(win_name, cv.CV_WINDOW_AUTOSIZE)
61 |
62 | # create the trackbar
63 | cv.CreateTrackbar(trackbar_name, win_name, 1, 100, on_trackbar)
64 |
65 | # show the im
66 | on_trackbar(100)
67 |
68 | # wait a key pressed to end
69 | print "filedata:%s"%type(filedata)
70 | print "imagefiledata:%s"%type(imagefiledata)
71 |
72 | print "im_cv.DecodeImage:%s"%type(im)
73 | print "col_edge_cv.CreateImage:%s"%type(col_edge)
74 | print "gray_CreateImage:%s"%type(gray)
75 | print "After canny edge type:%s"%type(edge)
76 | '''
77 | OpenCV Python version of edge
78 | Type_imagefiledata:
79 | Type_SetData_filedata:
80 | Type_edge:
81 | filedata:
82 | imagefiledata:
83 | im_cv.DecodeImage:
84 | col_edge_cv.CreateImage:
86 | After canny edge type:
87 | '''
88 | cv.WaitKey(10000) #延迟ms,0表示一直
89 | #cv2.destroyAllWindows()
--------------------------------------------------------------------------------
/MVP_V0.2_contours/Contours.txt:
--------------------------------------------------------------------------------
1 | Img GaussianBlur pix nums:217830
2 | contours num:1
3 | contours num:1
4 | [[[ 10 18]]
5 |
6 | [[ 10 249]]
7 |
8 | [[251 249]]
9 |
10 | [[251 18]]]
11 | ****************************************************************************************************
12 |
--------------------------------------------------------------------------------
/MVP_V0.2_contours/WXJ_contours.txt:
--------------------------------------------------------------------------------
1 | contours num:1
2 | contours num:1
3 | [[[ 10 18]]
4 |
5 | [[ 10 249]]
6 |
7 | [[251 249]]
8 |
9 | [[251 18]]]
10 | ****************************************************************************************************
11 |
--------------------------------------------------------------------------------
/MVP_V0.2_contours/contours.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.2_contours/contours.py
--------------------------------------------------------------------------------
/MVP_V0.2_contours/contours_list.txt:
--------------------------------------------------------------------------------
1 | contours_list
2 | [[10, 18]]
3 | [[10, 249]]
4 | [[251, 249]]
5 | [[251, 18]]
6 | ****************************************************************************************************
7 | contours_list
8 | [[10, 18]]
9 | [[10, 249]]
10 | [[251, 249]]
11 | [[251, 18]]
12 | ****************************************************************************************************
13 |
--------------------------------------------------------------------------------
/MVP_V0.3_CannyEdge_to_contours/COVER.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.3_CannyEdge_to_contours/COVER.jpg
--------------------------------------------------------------------------------
/MVP_V0.3_CannyEdge_to_contours/canny_contours.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # 2015年12月15日 OpenCV converting Canny edges to contours
3 | # runmap by shawn0lee0
4 | # Ref:http://stackoverflow.com/questions/18074680/extract-single-line-contours-from-canny-edges
5 |
6 |
7 | import cv2
8 | import sys,codecs
9 | import json #保证与javascript数据格式统一
10 | import cv2.cv as cv
11 | import numpy as np
12 |
13 | position = 25
14 |
15 | #def main():
16 | img = cv2.imread('D:\\python\\RUNMAP\\MVP_V0.3_CannyEdge_to_contours\\COVER.jpg', 0)
17 | img = cv2.GaussianBlur(img,(3,3),0)
18 | if img is None:
19 | raise Exception("Error while loading the image")
20 |
21 | canny_img = cv2.Canny(img, position, position * 3)
22 |
23 | contours, hierarchy = cv2.findContours(canny_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
24 | contours_img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
25 | str_len_contours = str(len(contours)) #取轮廊数量
26 | print "contours num:%s" %str_len_contours
27 | contours_list = contours[-1].tolist()
28 | print contours_list
29 | print contours_list[0][0]
30 |
31 |
32 | scale = 1 #不缩放
33 | contours_img = cv2.resize(contours_img, (0, 0), fx=scale, fy=scale)
34 |
35 | for cnt in contours:
36 | color = np.random.randint(0, 255, (3)).tolist()
37 | cv2.drawContours(contours_img,[cnt*scale], 0, color, 1)
38 |
39 | #cv2.imwrite("COVER.jpg", canny_img)
40 | #cv2.imwrite("fx_canny_contours.jpg", contours_img)
41 | cv2.imshow("canny_img", canny_img)
42 | cv2.imshow("contours_img", contours_img)
43 |
44 | img_pix = str(np.size(img))
45 | gray_pix = str(np.size(contours_img))
46 | canny_img_pix = str(np.size(canny_img))
47 | #轮廊清单转文本输出
48 | s = open("Contours.txt",'a')
49 | s.write("Img Gausss pix nums:" +"%s" %img_pix + "\n")
50 | s.write("Gray pix nums:" +"%s" %gray_pix + "\n")
51 | s.write("canny_img_pix nums:" +"%s" %canny_img_pix + "\n")
52 | s.write("contours num:" +"%s" %str_len_contours + "\n")
53 | for ele in contours:
54 | s.write("%s\n" % ele)
55 | s.write("**"*50 + "\n")
56 | s.close()
57 |
58 | l = open("contours_list.txt",'a')
59 | l.write("Img Gausss pix nums:" +"%s" %img_pix + "\n")
60 | l.write("Gray pix nums:" +"%s" %gray_pix + "\n")
61 | l.write("canny_img_pix nums:" +"%s" %canny_img_pix + "\n")
62 | l.write("contours num:" +"%s" %str_len_contours + "\n")
63 | l.write("contours_list" + "\n")
64 | for ele in contours_list:
65 | l.write("%s\n" % ele)
66 | l.write("**"*50 + "\n")
67 | l.close()
68 |
69 |
70 | cv2.waitKey(0)
71 |
--------------------------------------------------------------------------------
/MVP_V0.3_CannyEdge_to_contours/contours_list.txt:
--------------------------------------------------------------------------------
1 | Img Gausss pix nums:796800
2 | Gray pix nums:2390400
3 | canny_img_pix nums:796800
4 | contours num:852
5 | contours_list
6 | [[329, 27]]
7 | [[328, 28]]
8 | [[327, 28]]
9 | [[326, 28]]
10 | [[325, 29]]
11 | [[324, 29]]
12 | [[323, 29]]
13 | [[322, 29]]
14 | [[321, 29]]
15 | [[320, 29]]
16 | [[319, 29]]
17 | [[318, 30]]
18 | [[317, 30]]
19 | [[316, 30]]
20 | [[315, 31]]
21 | [[314, 31]]
22 | [[313, 32]]
23 | [[312, 32]]
24 | [[311, 32]]
25 | [[310, 33]]
26 | [[309, 33]]
27 | [[308, 34]]
28 | [[307, 34]]
29 | [[306, 35]]
30 | [[305, 35]]
31 | [[304, 36]]
32 | [[303, 37]]
33 | [[302, 38]]
34 | [[301, 39]]
35 | [[300, 40]]
36 | [[299, 41]]
37 | [[298, 42]]
38 | [[297, 42]]
39 | [[296, 43]]
40 | [[295, 44]]
41 | [[294, 45]]
42 | [[293, 46]]
43 | [[293, 47]]
44 | [[292, 48]]
45 | [[292, 49]]
46 | [[291, 50]]
47 | [[291, 51]]
48 | [[291, 52]]
49 | [[290, 53]]
50 | [[290, 54]]
51 | [[289, 55]]
52 | [[289, 56]]
53 | [[288, 57]]
54 | [[288, 58]]
55 | [[288, 59]]
56 | [[288, 60]]
57 | [[287, 61]]
58 | [[286, 62]]
59 | [[286, 63]]
60 | [[286, 64]]
61 | [[286, 65]]
62 | [[285, 66]]
63 | [[285, 67]]
64 | [[285, 68]]
65 | [[284, 69]]
66 | [[284, 70]]
67 | [[283, 71]]
68 | [[282, 72]]
69 | [[282, 73]]
70 | [[281, 74]]
71 | [[280, 75]]
72 | [[279, 76]]
73 | [[278, 77]]
74 | [[278, 78]]
75 | [[277, 79]]
76 | [[276, 80]]
77 | [[275, 81]]
78 | [[275, 82]]
79 | [[276, 83]]
80 | [[276, 84]]
81 | [[277, 85]]
82 | [[277, 86]]
83 | [[277, 87]]
84 | [[277, 88]]
85 | [[277, 89]]
86 | [[278, 90]]
87 | [[277, 91]]
88 | [[278, 92]]
89 | [[278, 93]]
90 | [[278, 94]]
91 | [[278, 95]]
92 | [[278, 96]]
93 | [[277, 97]]
94 | [[277, 98]]
95 | [[277, 99]]
96 | [[277, 100]]
97 | [[277, 101]]
98 | [[277, 102]]
99 | [[277, 103]]
100 | [[277, 104]]
101 | [[277, 105]]
102 | [[277, 106]]
103 | [[276, 107]]
104 | [[276, 108]]
105 | [[276, 109]]
106 | [[275, 110]]
107 | [[276, 111]]
108 | [[276, 112]]
109 | [[277, 113]]
110 | [[277, 114]]
111 | [[277, 115]]
112 | [[276, 116]]
113 | [[275, 117]]
114 | [[274, 118]]
115 | [[273, 119]]
116 | [[272, 120]]
117 | [[271, 121]]
118 | [[270, 122]]
119 | [[269, 123]]
120 | [[268, 123]]
121 | [[267, 124]]
122 | [[266, 124]]
123 | [[265, 125]]
124 | [[264, 125]]
125 | [[263, 125]]
126 | [[262, 126]]
127 | [[261, 126]]
128 | [[260, 127]]
129 | [[259, 127]]
130 | [[258, 128]]
131 | [[257, 128]]
132 | [[256, 129]]
133 | [[255, 129]]
134 | [[254, 129]]
135 | [[253, 130]]
136 | [[252, 130]]
137 | [[251, 131]]
138 | [[250, 131]]
139 | [[249, 132]]
140 | [[248, 133]]
141 | [[247, 133]]
142 | [[246, 134]]
143 | [[245, 135]]
144 | [[244, 135]]
145 | [[243, 136]]
146 | [[242, 137]]
147 | [[241, 137]]
148 | [[240, 138]]
149 | [[239, 139]]
150 | [[238, 140]]
151 | [[237, 140]]
152 | [[236, 141]]
153 | [[235, 142]]
154 | [[234, 143]]
155 | [[233, 143]]
156 | [[232, 144]]
157 | [[231, 145]]
158 | [[230, 145]]
159 | [[229, 146]]
160 | [[228, 147]]
161 | [[227, 147]]
162 | [[226, 148]]
163 | [[225, 149]]
164 | [[224, 150]]
165 | [[223, 150]]
166 | [[222, 151]]
167 | [[221, 151]]
168 | [[220, 152]]
169 | [[219, 153]]
170 | [[218, 154]]
171 | [[217, 154]]
172 | [[216, 155]]
173 | [[215, 156]]
174 | [[214, 156]]
175 | [[213, 157]]
176 | [[212, 157]]
177 | [[211, 158]]
178 | [[210, 159]]
179 | [[209, 159]]
180 | [[208, 160]]
181 | [[208, 161]]
182 | [[208, 162]]
183 | [[208, 163]]
184 | [[209, 164]]
185 | [[210, 165]]
186 | [[210, 166]]
187 | [[211, 167]]
188 | [[211, 168]]
189 | [[212, 169]]
190 | [[212, 170]]
191 | [[212, 171]]
192 | [[213, 172]]
193 | [[213, 173]]
194 | [[214, 174]]
195 | [[214, 175]]
196 | [[214, 176]]
197 | [[215, 177]]
198 | [[215, 178]]
199 | [[216, 179]]
200 | [[216, 180]]
201 | [[216, 181]]
202 | [[217, 182]]
203 | [[217, 183]]
204 | [[217, 184]]
205 | [[218, 185]]
206 | [[218, 186]]
207 | [[218, 187]]
208 | [[218, 188]]
209 | [[219, 189]]
210 | [[219, 190]]
211 | [[219, 191]]
212 | [[219, 192]]
213 | [[220, 193]]
214 | [[220, 194]]
215 | [[220, 195]]
216 | [[220, 196]]
217 | [[221, 197]]
218 | [[221, 198]]
219 | [[221, 199]]
220 | [[221, 200]]
221 | [[221, 201]]
222 | [[221, 202]]
223 | [[222, 203]]
224 | [[222, 204]]
225 | [[222, 205]]
226 | [[222, 206]]
227 | [[222, 207]]
228 | [[223, 208]]
229 | [[223, 209]]
230 | [[223, 210]]
231 | [[223, 211]]
232 | [[224, 212]]
233 | [[224, 213]]
234 | [[224, 214]]
235 | [[224, 215]]
236 | [[224, 214]]
237 | [[224, 213]]
238 | [[224, 212]]
239 | [[223, 211]]
240 | [[223, 210]]
241 | [[223, 209]]
242 | [[223, 208]]
243 | [[222, 207]]
244 | [[222, 206]]
245 | [[222, 205]]
246 | [[222, 204]]
247 | [[222, 203]]
248 | [[221, 202]]
249 | [[221, 201]]
250 | [[221, 200]]
251 | [[221, 199]]
252 | [[221, 198]]
253 | [[221, 197]]
254 | [[220, 196]]
255 | [[220, 195]]
256 | [[220, 194]]
257 | [[220, 193]]
258 | [[219, 192]]
259 | [[219, 191]]
260 | [[219, 190]]
261 | [[219, 189]]
262 | [[218, 188]]
263 | [[218, 187]]
264 | [[218, 186]]
265 | [[218, 185]]
266 | [[217, 184]]
267 | [[217, 183]]
268 | [[217, 182]]
269 | [[216, 181]]
270 | [[216, 180]]
271 | [[216, 179]]
272 | [[215, 178]]
273 | [[215, 177]]
274 | [[214, 176]]
275 | [[214, 175]]
276 | [[214, 174]]
277 | [[214, 173]]
278 | [[213, 172]]
279 | [[213, 171]]
280 | [[212, 170]]
281 | [[212, 169]]
282 | [[212, 168]]
283 | [[211, 167]]
284 | [[211, 166]]
285 | [[210, 165]]
286 | [[209, 164]]
287 | [[209, 163]]
288 | [[208, 162]]
289 | [[208, 161]]
290 | [[209, 160]]
291 | [[210, 159]]
292 | [[211, 159]]
293 | [[212, 158]]
294 | [[213, 157]]
295 | [[214, 157]]
296 | [[215, 156]]
297 | [[216, 156]]
298 | [[217, 155]]
299 | [[218, 154]]
300 | [[219, 154]]
301 | [[220, 155]]
302 | [[221, 156]]
303 | [[222, 157]]
304 | [[222, 158]]
305 | [[221, 159]]
306 | [[220, 160]]
307 | [[219, 160]]
308 | [[218, 161]]
309 | [[217, 161]]
310 | [[216, 161]]
311 | [[215, 160]]
312 | [[215, 161]]
313 | [[216, 161]]
314 | [[217, 161]]
315 | [[218, 161]]
316 | [[219, 161]]
317 | [[220, 160]]
318 | [[221, 160]]
319 | [[222, 159]]
320 | [[222, 158]]
321 | [[222, 157]]
322 | [[222, 156]]
323 | [[222, 155]]
324 | [[221, 156]]
325 | [[220, 155]]
326 | [[219, 154]]
327 | [[220, 153]]
328 | [[221, 152]]
329 | [[222, 151]]
330 | [[223, 151]]
331 | [[224, 150]]
332 | [[225, 150]]
333 | [[226, 149]]
334 | [[227, 148]]
335 | [[228, 147]]
336 | [[229, 147]]
337 | [[230, 146]]
338 | [[231, 145]]
339 | [[232, 145]]
340 | [[233, 144]]
341 | [[234, 143]]
342 | [[235, 143]]
343 | [[236, 142]]
344 | [[237, 141]]
345 | [[238, 140]]
346 | [[239, 140]]
347 | [[240, 139]]
348 | [[241, 138]]
349 | [[242, 137]]
350 | [[243, 137]]
351 | [[244, 136]]
352 | [[245, 135]]
353 | [[246, 135]]
354 | [[247, 134]]
355 | [[248, 133]]
356 | [[249, 133]]
357 | [[250, 132]]
358 | [[251, 131]]
359 | [[252, 131]]
360 | [[253, 130]]
361 | [[254, 130]]
362 | [[255, 129]]
363 | [[256, 129]]
364 | [[257, 128]]
365 | [[258, 128]]
366 | [[259, 127]]
367 | [[260, 127]]
368 | [[261, 127]]
369 | [[262, 126]]
370 | [[263, 126]]
371 | [[264, 125]]
372 | [[265, 125]]
373 | [[266, 124]]
374 | [[267, 124]]
375 | [[268, 124]]
376 | [[269, 123]]
377 | [[270, 123]]
378 | [[271, 122]]
379 | [[272, 121]]
380 | [[273, 120]]
381 | [[274, 119]]
382 | [[275, 118]]
383 | [[276, 117]]
384 | [[277, 116]]
385 | [[278, 115]]
386 | [[277, 114]]
387 | [[278, 113]]
388 | [[277, 112]]
389 | [[276, 111]]
390 | [[275, 110]]
391 | [[276, 109]]
392 | [[276, 108]]
393 | [[276, 107]]
394 | [[277, 106]]
395 | [[277, 105]]
396 | [[277, 104]]
397 | [[277, 103]]
398 | [[277, 102]]
399 | [[277, 101]]
400 | [[277, 100]]
401 | [[277, 99]]
402 | [[277, 98]]
403 | [[277, 97]]
404 | [[278, 96]]
405 | [[278, 95]]
406 | [[278, 94]]
407 | [[278, 93]]
408 | [[278, 92]]
409 | [[277, 91]]
410 | [[278, 90]]
411 | [[277, 89]]
412 | [[277, 88]]
413 | [[277, 87]]
414 | [[277, 86]]
415 | [[277, 85]]
416 | [[276, 84]]
417 | [[276, 83]]
418 | [[275, 82]]
419 | [[276, 81]]
420 | [[277, 80]]
421 | [[278, 79]]
422 | [[279, 80]]
423 | [[279, 81]]
424 | [[279, 82]]
425 | [[279, 83]]
426 | [[279, 82]]
427 | [[279, 81]]
428 | [[280, 80]]
429 | [[281, 81]]
430 | [[281, 82]]
431 | [[281, 83]]
432 | [[281, 84]]
433 | [[281, 85]]
434 | [[281, 84]]
435 | [[281, 83]]
436 | [[281, 82]]
437 | [[281, 81]]
438 | [[281, 80]]
439 | [[282, 79]]
440 | [[283, 78]]
441 | [[283, 77]]
442 | [[284, 76]]
443 | [[284, 75]]
444 | [[285, 74]]
445 | [[285, 73]]
446 | [[284, 74]]
447 | [[284, 75]]
448 | [[283, 76]]
449 | [[283, 77]]
450 | [[282, 78]]
451 | [[281, 79]]
452 | [[280, 80]]
453 | [[279, 80]]
454 | [[278, 79]]
455 | [[278, 78]]
456 | [[279, 77]]
457 | [[280, 76]]
458 | [[281, 75]]
459 | [[282, 74]]
460 | [[282, 73]]
461 | [[283, 72]]
462 | [[284, 71]]
463 | [[284, 70]]
464 | [[285, 69]]
465 | [[285, 68]]
466 | [[285, 67]]
467 | [[285, 66]]
468 | [[286, 65]]
469 | [[286, 64]]
470 | [[286, 63]]
471 | [[287, 62]]
472 | [[288, 61]]
473 | [[288, 60]]
474 | [[288, 59]]
475 | [[288, 58]]
476 | [[288, 57]]
477 | [[289, 56]]
478 | [[289, 55]]
479 | [[290, 54]]
480 | [[290, 53]]
481 | [[291, 52]]
482 | [[291, 51]]
483 | [[292, 50]]
484 | [[292, 49]]
485 | [[293, 48]]
486 | [[293, 47]]
487 | [[294, 46]]
488 | [[295, 45]]
489 | [[296, 44]]
490 | [[297, 43]]
491 | [[298, 42]]
492 | [[299, 42]]
493 | [[300, 41]]
494 | [[301, 40]]
495 | [[302, 39]]
496 | [[303, 38]]
497 | [[304, 37]]
498 | [[305, 36]]
499 | [[306, 35]]
500 | [[307, 35]]
501 | [[308, 34]]
502 | [[309, 34]]
503 | [[310, 33]]
504 | [[311, 33]]
505 | [[312, 32]]
506 | [[313, 32]]
507 | [[314, 31]]
508 | [[315, 31]]
509 | [[316, 30]]
510 | [[317, 30]]
511 | [[318, 30]]
512 | [[319, 29]]
513 | [[320, 29]]
514 | [[321, 29]]
515 | [[322, 29]]
516 | [[323, 29]]
517 | [[324, 29]]
518 | [[325, 29]]
519 | [[326, 28]]
520 | [[327, 28]]
521 | [[328, 28]]
522 | [[329, 27]]
523 | [[330, 27]]
524 | [[331, 27]]
525 | [[332, 27]]
526 | [[333, 27]]
527 | [[334, 27]]
528 | [[335, 28]]
529 | [[336, 28]]
530 | [[337, 29]]
531 | [[338, 29]]
532 | [[339, 29]]
533 | [[340, 29]]
534 | [[341, 29]]
535 | [[342, 29]]
536 | [[343, 29]]
537 | [[344, 30]]
538 | [[345, 30]]
539 | [[346, 30]]
540 | [[347, 31]]
541 | [[346, 32]]
542 | [[345, 32]]
543 | [[344, 32]]
544 | [[343, 32]]
545 | [[342, 32]]
546 | [[341, 33]]
547 | [[340, 33]]
548 | [[339, 34]]
549 | [[338, 35]]
550 | [[339, 35]]
551 | [[340, 36]]
552 | [[340, 37]]
553 | [[339, 38]]
554 | [[338, 38]]
555 | [[337, 38]]
556 | [[336, 37]]
557 | [[335, 37]]
558 | [[334, 37]]
559 | [[333, 36]]
560 | [[332, 35]]
561 | [[332, 34]]
562 | [[332, 35]]
563 | [[332, 36]]
564 | [[331, 37]]
565 | [[330, 36]]
566 | [[330, 35]]
567 | [[330, 34]]
568 | [[330, 33]]
569 | [[331, 32]]
570 | [[330, 32]]
571 | [[329, 32]]
572 | [[328, 31]]
573 | [[327, 31]]
574 | [[328, 31]]
575 | [[329, 32]]
576 | [[330, 33]]
577 | [[330, 34]]
578 | [[330, 35]]
579 | [[330, 36]]
580 | [[329, 37]]
581 | [[328, 37]]
582 | [[327, 38]]
583 | [[326, 38]]
584 | [[325, 38]]
585 | [[324, 38]]
586 | [[323, 37]]
587 | [[322, 36]]
588 | [[322, 35]]
589 | [[323, 34]]
590 | [[324, 34]]
591 | [[323, 34]]
592 | [[322, 35]]
593 | [[321, 34]]
594 | [[320, 34]]
595 | [[321, 35]]
596 | [[322, 36]]
597 | [[323, 37]]
598 | [[322, 38]]
599 | [[321, 38]]
600 | [[320, 38]]
601 | [[319, 37]]
602 | [[319, 36]]
603 | [[318, 36]]
604 | [[317, 36]]
605 | [[318, 36]]
606 | [[319, 37]]
607 | [[320, 38]]
608 | [[319, 39]]
609 | [[318, 39]]
610 | [[317, 39]]
611 | [[316, 39]]
612 | [[315, 40]]
613 | [[314, 41]]
614 | [[313, 42]]
615 | [[312, 43]]
616 | [[311, 44]]
617 | [[310, 44]]
618 | [[309, 43]]
619 | [[308, 44]]
620 | [[307, 44]]
621 | [[306, 44]]
622 | [[305, 44]]
623 | [[304, 44]]
624 | [[303, 45]]
625 | [[302, 45]]
626 | [[301, 46]]
627 | [[302, 46]]
628 | [[303, 45]]
629 | [[304, 45]]
630 | [[305, 44]]
631 | [[306, 44]]
632 | [[307, 44]]
633 | [[308, 44]]
634 | [[309, 44]]
635 | [[310, 44]]
636 | [[311, 44]]
637 | [[312, 45]]
638 | [[312, 46]]
639 | [[312, 47]]
640 | [[312, 48]]
641 | [[311, 49]]
642 | [[310, 50]]
643 | [[310, 51]]
644 | [[309, 52]]
645 | [[308, 53]]
646 | [[307, 54]]
647 | [[306, 54]]
648 | [[305, 54]]
649 | [[304, 54]]
650 | [[303, 54]]
651 | [[302, 54]]
652 | [[301, 53]]
653 | [[300, 53]]
654 | [[299, 53]]
655 | [[298, 52]]
656 | [[299, 51]]
657 | [[299, 50]]
658 | [[299, 49]]
659 | [[299, 48]]
660 | [[299, 47]]
661 | [[299, 48]]
662 | [[299, 49]]
663 | [[299, 50]]
664 | [[299, 51]]
665 | [[298, 52]]
666 | [[299, 53]]
667 | [[299, 54]]
668 | [[299, 55]]
669 | [[300, 56]]
670 | [[301, 56]]
671 | [[300, 56]]
672 | [[299, 55]]
673 | [[299, 54]]
674 | [[300, 53]]
675 | [[301, 54]]
676 | [[302, 54]]
677 | [[303, 54]]
678 | [[304, 55]]
679 | [[305, 54]]
680 | [[306, 54]]
681 | [[307, 55]]
682 | [[306, 56]]
683 | [[306, 57]]
684 | [[306, 58]]
685 | [[306, 59]]
686 | [[306, 60]]
687 | [[306, 61]]
688 | [[306, 62]]
689 | [[306, 63]]
690 | [[306, 64]]
691 | [[306, 63]]
692 | [[306, 62]]
693 | [[306, 61]]
694 | [[306, 60]]
695 | [[306, 59]]
696 | [[306, 58]]
697 | [[306, 57]]
698 | [[306, 56]]
699 | [[307, 55]]
700 | [[307, 54]]
701 | [[308, 53]]
702 | [[309, 52]]
703 | [[310, 52]]
704 | [[310, 51]]
705 | [[311, 50]]
706 | [[312, 49]]
707 | [[312, 48]]
708 | [[312, 47]]
709 | [[312, 46]]
710 | [[312, 45]]
711 | [[312, 44]]
712 | [[313, 43]]
713 | [[314, 42]]
714 | [[315, 41]]
715 | [[316, 40]]
716 | [[317, 39]]
717 | [[318, 39]]
718 | [[319, 39]]
719 | [[320, 38]]
720 | [[321, 38]]
721 | [[322, 38]]
722 | [[323, 38]]
723 | [[324, 38]]
724 | [[325, 38]]
725 | [[326, 38]]
726 | [[327, 38]]
727 | [[328, 38]]
728 | [[329, 37]]
729 | [[330, 37]]
730 | [[331, 37]]
731 | [[332, 37]]
732 | [[333, 37]]
733 | [[334, 37]]
734 | [[335, 37]]
735 | [[336, 37]]
736 | [[337, 38]]
737 | [[338, 38]]
738 | [[339, 38]]
739 | [[340, 38]]
740 | [[341, 38]]
741 | [[342, 38]]
742 | [[343, 37]]
743 | [[344, 36]]
744 | [[343, 35]]
745 | [[344, 34]]
746 | [[343, 35]]
747 | [[342, 35]]
748 | [[341, 35]]
749 | [[340, 36]]
750 | [[339, 35]]
751 | [[339, 34]]
752 | [[340, 33]]
753 | [[341, 33]]
754 | [[342, 33]]
755 | [[343, 32]]
756 | [[344, 32]]
757 | [[345, 32]]
758 | [[346, 32]]
759 | [[347, 32]]
760 | [[347, 31]]
761 | [[347, 30]]
762 | [[346, 30]]
763 | [[345, 30]]
764 | [[344, 30]]
765 | [[343, 29]]
766 | [[342, 29]]
767 | [[341, 29]]
768 | [[340, 29]]
769 | [[339, 28]]
770 | [[338, 28]]
771 | [[337, 28]]
772 | [[336, 28]]
773 | [[335, 28]]
774 | [[334, 27]]
775 | [[333, 27]]
776 | [[332, 27]]
777 | [[331, 27]]
778 | [[330, 27]]
779 | ****************************************************************************************************
780 |
--------------------------------------------------------------------------------
/MVP_V0.3_CannyEdge_to_contours/fx.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.3_CannyEdge_to_contours/fx.jpg
--------------------------------------------------------------------------------
/MVP_V0.3_CannyEdge_to_contours/fx_canny.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.3_CannyEdge_to_contours/fx_canny.jpg
--------------------------------------------------------------------------------
/MVP_V0.3_CannyEdge_to_contours/fx_canny_contours.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.3_CannyEdge_to_contours/fx_canny_contours.jpg
--------------------------------------------------------------------------------
/MVP_V0.4_add url jpg/COVER.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.4_add url jpg/COVER.jpg
--------------------------------------------------------------------------------
/MVP_V0.4_add url jpg/COVER_canny_img.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.4_add url jpg/COVER_canny_img.jpg
--------------------------------------------------------------------------------
/MVP_V0.4_add url jpg/Contours.log:
--------------------------------------------------------------------------------
1 | edge_im_array_pix nums:228484
2 | contours_img_pix nums:685452
3 | _url_contours num:6
4 | [[[375 241]]
5 |
6 | [[374 242]]
7 |
8 | [[370 242]]
9 |
10 | [[369 243]]
11 |
12 | [[367 243]]
13 |
14 | [[366 244]]
15 |
16 | [[364 244]]
17 |
18 | [[363 245]]
19 |
20 | [[361 245]]
21 |
22 | [[360 246]]
23 |
24 | [[359 246]]
25 |
26 | [[358 247]]
27 |
28 | [[357 247]]
29 |
30 | [[355 249]]
31 |
32 | [[354 249]]
33 |
34 | [[350 253]]
35 |
36 | [[349 253]]
37 |
38 | [[345 257]]
39 |
40 | [[345 258]]
41 |
42 | [[342 261]]
43 |
44 | [[342 262]]
45 |
46 | [[340 264]]
47 |
48 | [[340 265]]
49 |
50 | [[339 266]]
51 |
52 | [[339 267]]
53 |
54 | [[338 268]]
55 |
56 | [[338 269]]
57 |
58 | [[337 270]]
59 |
60 | [[337 273]]
61 |
62 | [[336 274]]
63 |
64 | [[336 276]]
65 |
66 | [[335 277]]
67 |
68 | [[335 281]]
69 |
70 | [[334 282]]
71 |
72 | [[334 295]]
73 |
74 | [[335 296]]
75 |
76 | [[335 300]]
77 |
78 | [[336 301]]
79 |
80 | [[336 303]]
81 |
82 | [[337 304]]
83 |
84 | [[337 306]]
85 |
86 | [[338 307]]
87 |
88 | [[338 309]]
89 |
90 | [[339 310]]
91 |
92 | [[339 311]]
93 |
94 | [[341 313]]
95 |
96 | [[341 314]]
97 |
98 | [[343 316]]
99 |
100 | [[343 317]]
101 |
102 | [[353 327]]
103 |
104 | [[354 327]]
105 |
106 | [[356 329]]
107 |
108 | [[357 329]]
109 |
110 | [[358 330]]
111 |
112 | [[359 330]]
113 |
114 | [[360 331]]
115 |
116 | [[361 331]]
117 |
118 | [[362 332]]
119 |
120 | [[364 332]]
121 |
122 | [[365 333]]
123 |
124 | [[366 333]]
125 |
126 | [[367 334]]
127 |
128 | [[370 334]]
129 |
130 | [[371 335]]
131 |
132 | [[376 335]]
133 |
134 | [[377 336]]
135 |
136 | [[386 336]]
137 |
138 | [[387 335]]
139 |
140 | [[392 335]]
141 |
142 | [[393 334]]
143 |
144 | [[395 334]]
145 |
146 | [[396 333]]
147 |
148 | [[398 333]]
149 |
150 | [[399 332]]
151 |
152 | [[400 332]]
153 |
154 | [[401 331]]
155 |
156 | [[403 331]]
157 |
158 | [[404 330]]
159 |
160 | [[405 330]]
161 |
162 | [[407 328]]
163 |
164 | [[408 328]]
165 |
166 | [[410 326]]
167 |
168 | [[411 326]]
169 |
170 | [[418 319]]
171 |
172 | [[418 318]]
173 |
174 | [[421 315]]
175 |
176 | [[421 314]]
177 |
178 | [[422 313]]
179 |
180 | [[422 312]]
181 |
182 | [[423 311]]
183 |
184 | [[423 310]]
185 |
186 | [[424 309]]
187 |
188 | [[424 308]]
189 |
190 | [[425 307]]
191 |
192 | [[425 306]]
193 |
194 | [[426 305]]
195 |
196 | [[426 303]]
197 |
198 | [[427 302]]
199 |
200 | [[427 299]]
201 |
202 | [[428 298]]
203 |
204 | [[428 291]]
205 |
206 | [[429 290]]
207 |
208 | [[427 288]]
209 |
210 | [[416 288]]
211 |
212 | [[415 289]]
213 |
214 | [[415 291]]
215 |
216 | [[414 292]]
217 |
218 | [[414 297]]
219 |
220 | [[413 298]]
221 |
222 | [[413 300]]
223 |
224 | [[412 301]]
225 |
226 | [[412 302]]
227 |
228 | [[411 303]]
229 |
230 | [[411 304]]
231 |
232 | [[409 306]]
233 |
234 | [[409 307]]
235 |
236 | [[400 316]]
237 |
238 | [[399 316]]
239 |
240 | [[397 318]]
241 |
242 | [[396 318]]
243 |
244 | [[395 319]]
245 |
246 | [[394 319]]
247 |
248 | [[393 320]]
249 |
250 | [[391 320]]
251 |
252 | [[390 321]]
253 |
254 | [[386 321]]
255 |
256 | [[385 322]]
257 |
258 | [[377 322]]
259 |
260 | [[376 321]]
261 |
262 | [[372 321]]
263 |
264 | [[371 320]]
265 |
266 | [[369 320]]
267 |
268 | [[367 318]]
269 |
270 | [[366 318]]
271 |
272 | [[365 317]]
273 |
274 | [[364 317]]
275 |
276 | [[362 315]]
277 |
278 | [[361 315]]
279 |
280 | [[354 308]]
281 |
282 | [[354 307]]
283 |
284 | [[352 305]]
285 |
286 | [[352 304]]
287 |
288 | [[351 303]]
289 |
290 | [[351 301]]
291 |
292 | [[349 299]]
293 |
294 | [[349 296]]
295 |
296 | [[348 295]]
297 |
298 | [[348 282]]
299 |
300 | [[349 281]]
301 |
302 | [[349 278]]
303 |
304 | [[350 277]]
305 |
306 | [[350 276]]
307 |
308 | [[351 275]]
309 |
310 | [[351 274]]
311 |
312 | [[352 273]]
313 |
314 | [[352 272]]
315 |
316 | [[354 270]]
317 |
318 | [[354 269]]
319 |
320 | [[362 261]]
321 |
322 | [[363 261]]
323 |
324 | [[365 259]]
325 |
326 | [[366 259]]
327 |
328 | [[367 258]]
329 |
330 | [[368 258]]
331 |
332 | [[369 257]]
333 |
334 | [[371 257]]
335 |
336 | [[372 256]]
337 |
338 | [[375 256]]
339 |
340 | [[376 255]]
341 |
342 | [[475 255]]
343 |
344 | [[476 256]]
345 |
346 | [[476 255]]
347 |
348 | [[376 255]]
349 |
350 | [[375 256]]
351 |
352 | [[372 256]]
353 |
354 | [[371 257]]
355 |
356 | [[369 257]]
357 |
358 | [[368 258]]
359 |
360 | [[366 258]]
361 |
362 | [[365 259]]
363 |
364 | [[364 259]]
365 |
366 | [[362 261]]
367 |
368 | [[361 261]]
369 |
370 | [[354 268]]
371 |
372 | [[354 269]]
373 |
374 | [[352 271]]
375 |
376 | [[352 272]]
377 |
378 | [[351 273]]
379 |
380 | [[351 275]]
381 |
382 | [[350 276]]
383 |
384 | [[350 277]]
385 |
386 | [[349 278]]
387 |
388 | [[349 281]]
389 |
390 | [[348 282]]
391 |
392 | [[348 295]]
393 |
394 | [[349 296]]
395 |
396 | [[349 299]]
397 |
398 | [[350 300]]
399 |
400 | [[350 301]]
401 |
402 | [[351 302]]
403 |
404 | [[351 304]]
405 |
406 | [[352 305]]
407 |
408 | [[352 306]]
409 |
410 | [[354 308]]
411 |
412 | [[354 309]]
413 |
414 | [[360 315]]
415 |
416 | [[361 315]]
417 |
418 | [[363 317]]
419 |
420 | [[364 317]]
421 |
422 | [[365 318]]
423 |
424 | [[366 318]]
425 |
426 | [[367 319]]
427 |
428 | [[368 319]]
429 |
430 | [[369 320]]
431 |
432 | [[371 320]]
433 |
434 | [[372 321]]
435 |
436 | [[376 321]]
437 |
438 | [[377 322]]
439 |
440 | [[385 322]]
441 |
442 | [[386 321]]
443 |
444 | [[390 321]]
445 |
446 | [[391 320]]
447 |
448 | [[394 320]]
449 |
450 | [[395 319]]
451 |
452 | [[396 319]]
453 |
454 | [[397 318]]
455 |
456 | [[398 318]]
457 |
458 | [[400 316]]
459 |
460 | [[401 316]]
461 |
462 | [[409 308]]
463 |
464 | [[409 307]]
465 |
466 | [[411 305]]
467 |
468 | [[411 303]]
469 |
470 | [[412 302]]
471 |
472 | [[412 301]]
473 |
474 | [[413 300]]
475 |
476 | [[413 298]]
477 |
478 | [[414 297]]
479 |
480 | [[414 292]]
481 |
482 | [[415 291]]
483 |
484 | [[415 289]]
485 |
486 | [[416 288]]
487 |
488 | [[427 288]]
489 |
490 | [[429 290]]
491 |
492 | [[428 291]]
493 |
494 | [[428 298]]
495 |
496 | [[427 299]]
497 |
498 | [[427 302]]
499 |
500 | [[426 303]]
501 |
502 | [[426 305]]
503 |
504 | [[425 306]]
505 |
506 | [[425 307]]
507 |
508 | [[423 309]]
509 |
510 | [[423 310]]
511 |
512 | [[422 311]]
513 |
514 | [[422 312]]
515 |
516 | [[421 313]]
517 |
518 | [[421 314]]
519 |
520 | [[418 317]]
521 |
522 | [[418 318]]
523 |
524 | [[410 326]]
525 |
526 | [[409 326]]
527 |
528 | [[407 328]]
529 |
530 | [[406 328]]
531 |
532 | [[404 330]]
533 |
534 | [[403 330]]
535 |
536 | [[402 331]]
537 |
538 | [[401 331]]
539 |
540 | [[400 332]]
541 |
542 | [[399 332]]
543 |
544 | [[398 333]]
545 |
546 | [[396 333]]
547 |
548 | [[395 334]]
549 |
550 | [[393 334]]
551 |
552 | [[392 335]]
553 |
554 | [[387 335]]
555 |
556 | [[386 336]]
557 |
558 | [[377 336]]
559 |
560 | [[376 335]]
561 |
562 | [[371 335]]
563 |
564 | [[370 334]]
565 |
566 | [[367 334]]
567 |
568 | [[366 333]]
569 |
570 | [[365 333]]
571 |
572 | [[364 332]]
573 |
574 | [[362 332]]
575 |
576 | [[360 330]]
577 |
578 | [[359 330]]
579 |
580 | [[358 329]]
581 |
582 | [[357 329]]
583 |
584 | [[355 327]]
585 |
586 | [[354 327]]
587 |
588 | [[343 316]]
589 |
590 | [[343 315]]
591 |
592 | [[341 313]]
593 |
594 | [[341 312]]
595 |
596 | [[339 310]]
597 |
598 | [[339 309]]
599 |
600 | [[338 308]]
601 |
602 | [[338 307]]
603 |
604 | [[337 306]]
605 |
606 | [[337 304]]
607 |
608 | [[336 303]]
609 |
610 | [[336 301]]
611 |
612 | [[335 300]]
613 |
614 | [[335 296]]
615 |
616 | [[334 295]]
617 |
618 | [[334 282]]
619 |
620 | [[335 281]]
621 |
622 | [[335 277]]
623 |
624 | [[336 276]]
625 |
626 | [[336 274]]
627 |
628 | [[337 273]]
629 |
630 | [[337 271]]
631 |
632 | [[338 270]]
633 |
634 | [[338 269]]
635 |
636 | [[339 268]]
637 |
638 | [[339 267]]
639 |
640 | [[340 266]]
641 |
642 | [[340 265]]
643 |
644 | [[342 263]]
645 |
646 | [[342 262]]
647 |
648 | [[345 259]]
649 |
650 | [[345 258]]
651 |
652 | [[350 253]]
653 |
654 | [[351 253]]
655 |
656 | [[355 249]]
657 |
658 | [[356 249]]
659 |
660 | [[358 247]]
661 |
662 | [[359 247]]
663 |
664 | [[360 246]]
665 |
666 | [[361 246]]
667 |
668 | [[362 245]]
669 |
670 | [[363 245]]
671 |
672 | [[364 244]]
673 |
674 | [[366 244]]
675 |
676 | [[367 243]]
677 |
678 | [[369 243]]
679 |
680 | [[370 242]]
681 |
682 | [[374 242]]
683 |
684 | [[375 241]]
685 |
686 | [[476 241]]][[[476 225]]][[[239 152]]
687 |
688 | [[238 153]]
689 |
690 | [[235 153]]
691 |
692 | [[234 154]]
693 |
694 | [[232 154]]
695 |
696 | [[231 155]]
697 |
698 | [[229 155]]
699 |
700 | [[228 156]]
701 |
702 | [[227 156]]
703 |
704 | [[225 158]]
705 |
706 | [[224 158]]
707 |
708 | [[218 164]]
709 |
710 | [[218 165]]
711 |
712 | [[217 166]]
713 |
714 | [[217 167]]
715 |
716 | [[216 168]]
717 |
718 | [[216 169]]
719 |
720 | [[215 170]]
721 |
722 | [[215 171]]
723 |
724 | [[214 172]]
725 |
726 | [[214 175]]
727 |
728 | [[213 176]]
729 |
730 | [[213 188]]
731 |
732 | [[214 189]]
733 |
734 | [[214 191]]
735 |
736 | [[215 192]]
737 |
738 | [[215 194]]
739 |
740 | [[216 195]]
741 |
742 | [[216 196]]
743 |
744 | [[217 197]]
745 |
746 | [[217 198]]
747 |
748 | [[219 200]]
749 |
750 | [[219 201]]
751 |
752 | [[223 205]]
753 |
754 | [[224 205]]
755 |
756 | [[227 208]]
757 |
758 | [[228 208]]
759 |
760 | [[230 210]]
761 |
762 | [[230 211]]
763 |
764 | [[229 212]]
765 |
766 | [[229 223]]
767 |
768 | [[228 224]]
769 |
770 | [[228 236]]
771 |
772 | [[227 237]]
773 |
774 | [[227 250]]
775 |
776 | [[226 251]]
777 |
778 | [[226 262]]
779 |
780 | [[225 263]]
781 |
782 | [[225 275]]
783 |
784 | [[224 276]]
785 |
786 | [[224 288]]
787 |
788 | [[223 289]]
789 |
790 | [[223 300]]
791 |
792 | [[222 301]]
793 |
794 | [[222 313]]
795 |
796 | [[221 314]]
797 |
798 | [[221 326]]
799 |
800 | [[220 327]]
801 |
802 | [[220 339]]
803 |
804 | [[219 340]]
805 |
806 | [[219 352]]
807 |
808 | [[266 352]]
809 |
810 | [[266 345]]
811 |
812 | [[265 344]]
813 |
814 | [[265 334]]
815 |
816 | [[264 333]]
817 |
818 | [[264 323]]
819 |
820 | [[263 322]]
821 |
822 | [[263 311]]
823 |
824 | [[262 310]]
825 |
826 | [[262 301]]
827 |
828 | [[261 300]]
829 |
830 | [[261 289]]
831 |
832 | [[260 288]]
833 |
834 | [[260 278]]
835 |
836 | [[259 277]]
837 |
838 | [[259 267]]
839 |
840 | [[258 266]]
841 |
842 | [[258 256]]
843 |
844 | [[257 255]]
845 |
846 | [[257 245]]
847 |
848 | [[256 244]]
849 |
850 | [[256 234]]
851 |
852 | [[255 233]]
853 |
854 | [[255 222]]
855 |
856 | [[254 221]]
857 |
858 | [[254 210]]
859 |
860 | [[256 208]]
861 |
862 | [[257 208]]
863 |
864 | [[258 207]]
865 |
866 | [[259 207]]
867 |
868 | [[262 204]]
869 |
870 | [[263 204]]
871 |
872 | [[265 202]]
873 |
874 | [[265 201]]
875 |
876 | [[267 199]]
877 |
878 | [[267 198]]
879 |
880 | [[269 196]]
881 |
882 | [[269 194]]
883 |
884 | [[270 193]]
885 |
886 | [[270 192]]
887 |
888 | [[271 191]]
889 |
890 | [[271 188]]
891 |
892 | [[272 187]]
893 |
894 | [[272 177]]
895 |
896 | [[271 176]]
897 |
898 | [[271 173]]
899 |
900 | [[270 172]]
901 |
902 | [[270 171]]
903 |
904 | [[269 170]]
905 |
906 | [[269 168]]
907 |
908 | [[268 167]]
909 |
910 | [[268 166]]
911 |
912 | [[265 163]]
913 |
914 | [[265 162]]
915 |
916 | [[262 159]]
917 |
918 | [[261 159]]
919 |
920 | [[258 156]]
921 |
922 | [[257 156]]
923 |
924 | [[256 155]]
925 |
926 | [[254 155]]
927 |
928 | [[253 154]]
929 |
930 | [[251 154]]
931 |
932 | [[250 153]]
933 |
934 | [[246 153]]
935 |
936 | [[245 152]]][[[372 78]]
937 |
938 | [[371 79]]
939 |
940 | [[366 79]]
941 |
942 | [[365 80]]
943 |
944 | [[363 80]]
945 |
946 | [[362 81]]
947 |
948 | [[360 81]]
949 |
950 | [[359 82]]
951 |
952 | [[357 82]]
953 |
954 | [[356 83]]
955 |
956 | [[354 83]]
957 |
958 | [[353 84]]
959 |
960 | [[352 84]]
961 |
962 | [[351 85]]
963 |
964 | [[350 85]]
965 |
966 | [[349 86]]
967 |
968 | [[348 86]]
969 |
970 | [[346 88]]
971 |
972 | [[345 88]]
973 |
974 | [[343 90]]
975 |
976 | [[342 90]]
977 |
978 | [[330 102]]
979 |
980 | [[330 103]]
981 |
982 | [[328 105]]
983 |
984 | [[328 106]]
985 |
986 | [[326 108]]
987 |
988 | [[326 109]]
989 |
990 | [[325 110]]
991 |
992 | [[325 111]]
993 |
994 | [[324 112]]
995 |
996 | [[324 113]]
997 |
998 | [[323 114]]
999 |
1000 | [[323 115]]
1001 |
1002 | [[322 116]]
1003 |
1004 | [[322 118]]
1005 |
1006 | [[321 119]]
1007 |
1008 | [[321 121]]
1009 |
1010 | [[320 122]]
1011 |
1012 | [[320 124]]
1013 |
1014 | [[319 125]]
1015 |
1016 | [[319 129]]
1017 |
1018 | [[318 130]]
1019 |
1020 | [[318 139]]
1021 |
1022 | [[317 140]]
1023 |
1024 | [[318 141]]
1025 |
1026 | [[318 151]]
1027 |
1028 | [[319 152]]
1029 |
1030 | [[319 155]]
1031 |
1032 | [[320 156]]
1033 |
1034 | [[320 159]]
1035 |
1036 | [[321 160]]
1037 |
1038 | [[321 162]]
1039 |
1040 | [[322 163]]
1041 |
1042 | [[322 164]]
1043 |
1044 | [[323 165]]
1045 |
1046 | [[323 167]]
1047 |
1048 | [[324 168]]
1049 |
1050 | [[324 169]]
1051 |
1052 | [[325 170]]
1053 |
1054 | [[325 171]]
1055 |
1056 | [[326 172]]
1057 |
1058 | [[326 173]]
1059 |
1060 | [[328 175]]
1061 |
1062 | [[328 176]]
1063 |
1064 | [[331 179]]
1065 |
1066 | [[331 180]]
1067 |
1068 | [[341 190]]
1069 |
1070 | [[342 190]]
1071 |
1072 | [[344 192]]
1073 |
1074 | [[345 192]]
1075 |
1076 | [[347 194]]
1077 |
1078 | [[348 194]]
1079 |
1080 | [[349 195]]
1081 |
1082 | [[350 195]]
1083 |
1084 | [[351 196]]
1085 |
1086 | [[352 196]]
1087 |
1088 | [[353 197]]
1089 |
1090 | [[354 197]]
1091 |
1092 | [[355 198]]
1093 |
1094 | [[357 198]]
1095 |
1096 | [[358 199]]
1097 |
1098 | [[359 199]]
1099 |
1100 | [[360 200]]
1101 |
1102 | [[362 200]]
1103 |
1104 | [[363 201]]
1105 |
1106 | [[367 201]]
1107 |
1108 | [[368 202]]
1109 |
1110 | [[373 202]]
1111 |
1112 | [[374 203]]
1113 |
1114 | [[386 203]]
1115 |
1116 | [[387 202]]
1117 |
1118 | [[392 202]]
1119 |
1120 | [[393 201]]
1121 |
1122 | [[396 201]]
1123 |
1124 | [[397 200]]
1125 |
1126 | [[400 200]]
1127 |
1128 | [[401 199]]
1129 |
1130 | [[402 199]]
1131 |
1132 | [[403 198]]
1133 |
1134 | [[405 198]]
1135 |
1136 | [[406 197]]
1137 |
1138 | [[407 197]]
1139 |
1140 | [[408 196]]
1141 |
1142 | [[409 196]]
1143 |
1144 | [[410 195]]
1145 |
1146 | [[411 195]]
1147 |
1148 | [[412 194]]
1149 |
1150 | [[413 194]]
1151 |
1152 | [[415 192]]
1153 |
1154 | [[416 192]]
1155 |
1156 | [[419 189]]
1157 |
1158 | [[420 189]]
1159 |
1160 | [[428 181]]
1161 |
1162 | [[428 180]]
1163 |
1164 | [[429 179]]
1165 |
1166 | [[429 177]]
1167 |
1168 | [[426 174]]
1169 |
1170 | [[425 174]]
1171 |
1172 | [[422 171]]
1173 |
1174 | [[421 171]]
1175 |
1176 | [[420 170]]
1177 |
1178 | [[418 170]]
1179 |
1180 | [[408 180]]
1181 |
1182 | [[407 180]]
1183 |
1184 | [[405 182]]
1185 |
1186 | [[404 182]]
1187 |
1188 | [[403 183]]
1189 |
1190 | [[402 183]]
1191 |
1192 | [[400 185]]
1193 |
1194 | [[398 185]]
1195 |
1196 | [[397 186]]
1197 |
1198 | [[396 186]]
1199 |
1200 | [[395 187]]
1201 |
1202 | [[392 187]]
1203 |
1204 | [[391 188]]
1205 |
1206 | [[387 188]]
1207 |
1208 | [[386 189]]
1209 |
1210 | [[374 189]]
1211 |
1212 | [[373 188]]
1213 |
1214 | [[369 188]]
1215 |
1216 | [[368 187]]
1217 |
1218 | [[365 187]]
1219 |
1220 | [[364 186]]
1221 |
1222 | [[362 186]]
1223 |
1224 | [[360 184]]
1225 |
1226 | [[359 184]]
1227 |
1228 | [[358 183]]
1229 |
1230 | [[357 183]]
1231 |
1232 | [[356 182]]
1233 |
1234 | [[355 182]]
1235 |
1236 | [[353 180]]
1237 |
1238 | [[352 180]]
1239 |
1240 | [[349 177]]
1241 |
1242 | [[348 177]]
1243 |
1244 | [[344 173]]
1245 |
1246 | [[344 172]]
1247 |
1248 | [[340 168]]
1249 |
1250 | [[340 167]]
1251 |
1252 | [[338 165]]
1253 |
1254 | [[338 164]]
1255 |
1256 | [[336 162]]
1257 |
1258 | [[336 160]]
1259 |
1260 | [[335 159]]
1261 |
1262 | [[335 158]]
1263 |
1264 | [[334 157]]
1265 |
1266 | [[334 155]]
1267 |
1268 | [[333 154]]
1269 |
1270 | [[333 151]]
1271 |
1272 | [[332 150]]
1273 |
1274 | [[332 143]]
1275 |
1276 | [[331 142]]
1277 |
1278 | [[332 141]]
1279 |
1280 | [[332 140]]
1281 |
1282 | [[331 139]]
1283 |
1284 | [[332 138]]
1285 |
1286 | [[332 131]]
1287 |
1288 | [[333 130]]
1289 |
1290 | [[333 127]]
1291 |
1292 | [[334 126]]
1293 |
1294 | [[334 124]]
1295 |
1296 | [[335 123]]
1297 |
1298 | [[335 122]]
1299 |
1300 | [[336 121]]
1301 |
1302 | [[336 120]]
1303 |
1304 | [[337 119]]
1305 |
1306 | [[337 118]]
1307 |
1308 | [[338 117]]
1309 |
1310 | [[338 116]]
1311 |
1312 | [[339 115]]
1313 |
1314 | [[339 114]]
1315 |
1316 | [[342 111]]
1317 |
1318 | [[342 110]]
1319 |
1320 | [[349 103]]
1321 |
1322 | [[350 103]]
1323 |
1324 | [[353 100]]
1325 |
1326 | [[354 100]]
1327 |
1328 | [[356 98]]
1329 |
1330 | [[357 98]]
1331 |
1332 | [[358 97]]
1333 |
1334 | [[359 97]]
1335 |
1336 | [[360 96]]
1337 |
1338 | [[361 96]]
1339 |
1340 | [[362 95]]
1341 |
1342 | [[363 95]]
1343 |
1344 | [[364 94]]
1345 |
1346 | [[367 94]]
1347 |
1348 | [[368 93]]
1349 |
1350 | [[371 93]]
1351 |
1352 | [[372 92]]
1353 |
1354 | [[379 92]]
1355 |
1356 | [[380 91]]
1357 |
1358 | [[380 78]]][[[104 78]]
1359 |
1360 | [[104 92]]
1361 |
1362 | [[111 92]]
1363 |
1364 | [[112 93]]
1365 |
1366 | [[116 93]]
1367 |
1368 | [[117 94]]
1369 |
1370 | [[119 94]]
1371 |
1372 | [[120 95]]
1373 |
1374 | [[121 95]]
1375 |
1376 | [[122 96]]
1377 |
1378 | [[123 96]]
1379 |
1380 | [[124 97]]
1381 |
1382 | [[125 97]]
1383 |
1384 | [[126 98]]
1385 |
1386 | [[127 98]]
1387 |
1388 | [[128 99]]
1389 |
1390 | [[129 99]]
1391 |
1392 | [[132 102]]
1393 |
1394 | [[133 102]]
1395 |
1396 | [[142 111]]
1397 |
1398 | [[142 112]]
1399 |
1400 | [[144 114]]
1401 |
1402 | [[144 115]]
1403 |
1404 | [[146 117]]
1405 |
1406 | [[146 118]]
1407 |
1408 | [[147 119]]
1409 |
1410 | [[147 120]]
1411 |
1412 | [[148 121]]
1413 |
1414 | [[148 122]]
1415 |
1416 | [[149 123]]
1417 |
1418 | [[149 125]]
1419 |
1420 | [[150 126]]
1421 |
1422 | [[150 128]]
1423 |
1424 | [[151 129]]
1425 |
1426 | [[151 134]]
1427 |
1428 | [[152 135]]
1429 |
1430 | [[152 146]]
1431 |
1432 | [[151 147]]
1433 |
1434 | [[151 152]]
1435 |
1436 | [[150 153]]
1437 |
1438 | [[150 155]]
1439 |
1440 | [[149 156]]
1441 |
1442 | [[149 158]]
1443 |
1444 | [[148 159]]
1445 |
1446 | [[148 160]]
1447 |
1448 | [[147 161]]
1449 |
1450 | [[147 162]]
1451 |
1452 | [[145 164]]
1453 |
1454 | [[145 165]]
1455 |
1456 | [[144 166]]
1457 |
1458 | [[144 167]]
1459 |
1460 | [[141 170]]
1461 |
1462 | [[141 171]]
1463 |
1464 | [[133 179]]
1465 |
1466 | [[132 179]]
1467 |
1468 | [[130 181]]
1469 |
1470 | [[129 181]]
1471 |
1472 | [[127 183]]
1473 |
1474 | [[126 183]]
1475 |
1476 | [[125 184]]
1477 |
1478 | [[124 184]]
1479 |
1480 | [[123 185]]
1481 |
1482 | [[122 185]]
1483 |
1484 | [[121 186]]
1485 |
1486 | [[119 186]]
1487 |
1488 | [[118 187]]
1489 |
1490 | [[116 187]]
1491 |
1492 | [[115 188]]
1493 |
1494 | [[110 188]]
1495 |
1496 | [[109 189]]
1497 |
1498 | [[ 97 189]]
1499 |
1500 | [[ 96 188]]
1501 |
1502 | [[ 92 188]]
1503 |
1504 | [[ 91 187]]
1505 |
1506 | [[ 89 187]]
1507 |
1508 | [[ 88 186]]
1509 |
1510 | [[ 86 186]]
1511 |
1512 | [[ 85 185]]
1513 |
1514 | [[ 84 185]]
1515 |
1516 | [[ 83 184]]
1517 |
1518 | [[ 82 184]]
1519 |
1520 | [[ 81 183]]
1521 |
1522 | [[ 80 183]]
1523 |
1524 | [[ 78 181]]
1525 |
1526 | [[ 77 181]]
1527 |
1528 | [[ 75 179]]
1529 |
1530 | [[ 74 179]]
1531 |
1532 | [[ 65 170]]
1533 |
1534 | [[ 63 170]]
1535 |
1536 | [[ 61 172]]
1537 |
1538 | [[ 60 172]]
1539 |
1540 | [[ 57 175]]
1541 |
1542 | [[ 56 175]]
1543 |
1544 | [[ 54 177]]
1545 |
1546 | [[ 54 179]]
1547 |
1548 | [[ 58 183]]
1549 |
1550 | [[ 58 184]]
1551 |
1552 | [[ 61 187]]
1553 |
1554 | [[ 62 187]]
1555 |
1556 | [[ 66 191]]
1557 |
1558 | [[ 67 191]]
1559 |
1560 | [[ 69 193]]
1561 |
1562 | [[ 70 193]]
1563 |
1564 | [[ 72 195]]
1565 |
1566 | [[ 73 195]]
1567 |
1568 | [[ 74 196]]
1569 |
1570 | [[ 76 196]]
1571 |
1572 | [[ 78 198]]
1573 |
1574 | [[ 80 198]]
1575 |
1576 | [[ 81 199]]
1577 |
1578 | [[ 83 199]]
1579 |
1580 | [[ 84 200]]
1581 |
1582 | [[ 86 200]]
1583 |
1584 | [[ 87 201]]
1585 |
1586 | [[ 90 201]]
1587 |
1588 | [[ 91 202]]
1589 |
1590 | [[ 96 202]]
1591 |
1592 | [[ 97 203]]
1593 |
1594 | [[109 203]]
1595 |
1596 | [[110 202]]
1597 |
1598 | [[116 202]]
1599 |
1600 | [[117 201]]
1601 |
1602 | [[120 201]]
1603 |
1604 | [[121 200]]
1605 |
1606 | [[123 200]]
1607 |
1608 | [[124 199]]
1609 |
1610 | [[126 199]]
1611 |
1612 | [[127 198]]
1613 |
1614 | [[129 198]]
1615 |
1616 | [[130 197]]
1617 |
1618 | [[131 197]]
1619 |
1620 | [[132 196]]
1621 |
1622 | [[133 196]]
1623 |
1624 | [[134 195]]
1625 |
1626 | [[135 195]]
1627 |
1628 | [[137 193]]
1629 |
1630 | [[138 193]]
1631 |
1632 | [[141 190]]
1633 |
1634 | [[142 190]]
1635 |
1636 | [[153 179]]
1637 |
1638 | [[153 178]]
1639 |
1640 | [[156 175]]
1641 |
1642 | [[156 174]]
1643 |
1644 | [[157 173]]
1645 |
1646 | [[157 172]]
1647 |
1648 | [[159 170]]
1649 |
1650 | [[159 169]]
1651 |
1652 | [[160 168]]
1653 |
1654 | [[160 166]]
1655 |
1656 | [[161 165]]
1657 |
1658 | [[161 164]]
1659 |
1660 | [[162 163]]
1661 |
1662 | [[162 161]]
1663 |
1664 | [[163 160]]
1665 |
1666 | [[163 158]]
1667 |
1668 | [[164 157]]
1669 |
1670 | [[164 153]]
1671 |
1672 | [[165 152]]
1673 |
1674 | [[165 147]]
1675 |
1676 | [[166 146]]
1677 |
1678 | [[166 135]]
1679 |
1680 | [[165 134]]
1681 |
1682 | [[165 128]]
1683 |
1684 | [[164 127]]
1685 |
1686 | [[164 124]]
1687 |
1688 | [[163 123]]
1689 |
1690 | [[163 121]]
1691 |
1692 | [[162 120]]
1693 |
1694 | [[162 118]]
1695 |
1696 | [[161 117]]
1697 |
1698 | [[161 115]]
1699 |
1700 | [[159 113]]
1701 |
1702 | [[159 111]]
1703 |
1704 | [[158 110]]
1705 |
1706 | [[158 109]]
1707 |
1708 | [[156 107]]
1709 |
1710 | [[156 106]]
1711 |
1712 | [[154 104]]
1713 |
1714 | [[154 103]]
1715 |
1716 | [[151 100]]
1717 |
1718 | [[151 99]]
1719 |
1720 | [[145 93]]
1721 |
1722 | [[144 93]]
1723 |
1724 | [[140 89]]
1725 |
1726 | [[139 89]]
1727 |
1728 | [[137 87]]
1729 |
1730 | [[136 87]]
1731 |
1732 | [[135 86]]
1733 |
1734 | [[134 86]]
1735 |
1736 | [[133 85]]
1737 |
1738 | [[132 85]]
1739 |
1740 | [[131 84]]
1741 |
1742 | [[130 84]]
1743 |
1744 | [[129 83]]
1745 |
1746 | [[127 83]]
1747 |
1748 | [[126 82]]
1749 |
1750 | [[125 82]]
1751 |
1752 | [[124 81]]
1753 |
1754 | [[122 81]]
1755 |
1756 | [[121 80]]
1757 |
1758 | [[118 80]]
1759 |
1760 | [[117 79]]
1761 |
1762 | [[112 79]]
1763 |
1764 | [[111 78]]][[[195 8]]
1765 |
1766 | [[194 9]]
1767 |
1768 | [[190 9]]
1769 |
1770 | ...,
1771 | [[204 9]]
1772 |
1773 | [[202 9]]
1774 |
1775 | [[201 8]]]****************************************************************************************************
1776 |
--------------------------------------------------------------------------------
/MVP_V0.4_add url jpg/README.md:
--------------------------------------------------------------------------------
1 | # 图片边框提取
2 |
3 | 效果图链接:[http://i4.tietuku.com/2d5ced664cf008c1.jpg](http://i4.tietuku.com/2d5ced664cf008c1.jpg)
4 | 
5 |
6 | 函数使用简化算法,只提取图形轮廊的终点坐标,节省存储空间
7 |
8 |
9 | print (type(contours)) #查询所有轮廊数据类型
10 |
11 | print (type(contours[0])) #查询图形中第一个轮廊数据类型
12 |
13 | print (len(contours)) #查询图形中所有轮廊的数量
14 |
15 |
16 | 本案例返回值:
17 |
18 |
19 |
20 |
21 |
22 | 1
23 |
24 |
25 | 接下来:将提取到图形轮廊坐标重定义为javascript api 中的location等
26 |
27 | 海盗教练建议:与javascript的数据接口统一使用json格式
28 |
29 | [https://docs.python.org/2/library/json.html](https://docs.python.org/2/library/json.html)
30 |
31 | 因为contours[0]的数据类型为,``
32 |
33 | 利用ndarray.tolist()可以将numpy的数组转为python的list
34 | 效果如下:
35 | `[[[10, 18]], [[10, 249]], [[251, 249]], [[251, 18]]]`
36 |
37 |
38 |
39 |
40 | ----------
41 | 2015年12月15日
42 |
43 | 因为直接使用contours方法提取的边框非常粗糙,而且会带来很多噪声。
44 | 因此想到了下述方法:
45 |
46 | 1. 载入图片
47 | 2. 高斯降噪
48 | 3. 二值化
49 | 3. 灰度处理
50 | 4. Canny边缘提取
51 | 5. 将提取的到边缘提取轮廊。
52 |
53 | 注意几点,
54 |
55 | 1. cv2.imread("XXX.jpg") #
56 | 2. cv2.findContours的contours是
57 | 3. `cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])`
58 |
59 | 第一个参数是寻找轮廓的图像;
60 |
61 | 第二个参数表示轮廓的检索模式,有四种(本文介绍的都是新的cv2接口):
62 | cv2.RETR_EXTERNAL表示只检测外轮廓
63 | cv2.RETR_LIST检测的轮廓不建立等级关系
64 | cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
65 | cv2.RETR_TREE建立一个等级树结构的轮廓。
66 |
67 | 第三个参数method为轮廓的近似办法
68 | cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
69 | cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
70 | cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法
71 | 返回值
72 | cv2.findContours()函数返回两个值,一个是轮廓本身,还有一个是每条轮廓对应的属性。
73 |
74 | 此处选择`cv2.RETR_EXTERNAL`直接从canny边缘线提取,简单粗暴
75 |
76 | 3. cv2.Canny(img, position, position * 3),position用于设置图片边缘阈值,默认值25.后期建议做成调节杆,方便用户前端直接控制效果并输出。
77 | 4. 通过url载入图片文件,`urllib2.urlopen(url).read()`解析后为str类型,需要重建为cv能够识别的矩阵类型。在对重建矩阵解码为图片格式:iplimage。Canny的输出结果也是iplimage格式。但是cvfindcontour载入源图需要类型为numpy.ndarry,因此数据需要转换,方法如下:
78 |
79 | 下表列出了在这三种对象之间转换的方法:
80 | 在数组、iplimage以及cvmat之间转换
81 |
82 | | 类型转换 | 方法 |
83 | |--------|--------|
84 | | array→cvmat | cv.fromarray(array) |
85 | | cvmat→array | np.asarray(cvmat) |
86 | | cvmat→iplimage | cv.GetImage(cvmat) |
87 | | iplimage→cvmat |iplimage[:],或cv.GetMat(iplimage) |
88 |
89 | 如果需要在array和iplimage之间转换,可以通过cvmat作为桥梁,本代码中使用`edge_im_array = np.asarray(edge_im[:])`
90 |
91 | finish 2015年12月16日
92 |
93 |
94 |
95 |
96 | ******
97 |
98 | 2015年12月17日
99 |
100 | 思考百度api JavaScript语言轨迹生成
101 |
102 | 1. 用户请求上传跑图图片至图片处理服务器,
103 | 2. 客户本地端调用JavaScript“事件”提取本地gps坐标
104 |
105 | var addr = evt.detail.coords;
106 |
107 | var x = addr.lng;
108 |
109 | var y = addr.lat;
110 | 2. 根据本地(x,y)坐标为第一条轮廊的轨迹list起点。
111 | 3. 将图片处理服务器返回的结果list轮廊数据contours(轮廊矩阵),输出给主程序,并写入主服务器数据库;
112 | 4. 主服务器根据图片服务器返回值,
113 | 1. contours[0]表示第一条轨迹坐标集合,--》contours[n=len(contours)]表示最后一条轨迹曲线矩阵,contours[0][0]表示第一个轨迹的第一个坐标例如[[192,8]]
114 | 2. 先执行第i条轨迹,完成后,再执行第i+1条轮廊起点与第1条轮廊起点的差值,生成第二条轨迹起点绝对地理坐标。以此类推。
115 |
116 |
117 | list index的遍历:
118 | > 例如:
119 |
120 | m = [[[12,22]],[[13,23]],[[14,24]]],[[[14,25]],[[55,56]],[[99,98]]]
121 |
122 | for i in range(len(m)):
123 | for j in range(len(m[i])):
124 | for k in range(len(m[i][j])):
125 | for l in range(len(m[i][j][k])):
126 | print m[i][j][k][l]
127 |
128 | > 12
129 | > 22
130 | > 13
131 | > 23
132 | > 14
133 | > 24
134 | > 14
135 | > 25
136 | > 55
137 | > 56
138 | > 99
139 | > 98
140 |
141 |
142 | 方法2:
143 | 用reshape函数
144 |
145 | import numpy
146 | m = np.array([[[[12,22]],[[13,23]],[[14,24]]],[[[14,25]],[[55,56]],[[99,98]]]])
147 |
148 | m.reshape(12)
149 | array([12, 22, 13, 23, 14, 24, 14, 25, 55, 56, 99, 98])
150 |
151 |
152 | [JSON](http://json.org/)
153 |
154 | 1. 并列的数据之间用逗号(",")分隔。
155 | 2. 映射用冒号(":")表示。
156 | 3. 并列数据的集合(数组)用方括号("[]")表示。
157 | 4. 映射的集合(对象)用大括号("{}")表示。
158 |
159 |
160 |
161 | 参考:
162 |
163 | [http://stackoverflow.com/questions/18074680/extract-single-line-contours-from-canny-edges](http://stackoverflow.com/questions/18074680/extract-single-line-contours-from-canny-edges)
164 |
165 | [OpenCV converting Canny edges to contours](http://www.helpsforcoder.com/code/15751940-opencv-converting-canny-edges-to-contours.html)
166 |
167 | [Reading and Writing Images and Video](http://i12.tietuku.com/3eccda985794c42b.jpg)
168 |
169 | [python图片数组格式转化](http://blog.csdn.net/xueweuchen/article/details/38756075 "python图片数组格式转化")
170 |
171 | 效果图链接:
172 |
173 | [http://i4.tietuku.com/6c2f77ca748e17f1.jpg](http://i4.tietuku.com/6c2f77ca748e17f1.jpg)
174 | 
175 |
176 |
--------------------------------------------------------------------------------
/MVP_V0.4_add url jpg/canny_contours.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # 2015年12月15日 OpenCV converting Canny edges to contours
3 | # runmap by shawn0lee0
4 | # Ref:http://stackoverflow.com/questions/18074680/extract-single-line-contours-from-canny-edges
5 |
6 |
7 | import cv2
8 | import sys,codecs
9 | import json #保证与javascript数据格式统一
10 | import cv2.cv as cv
11 | import numpy as np
12 | import urllib2
13 |
14 | position = 100
15 |
16 | def local_jpg_caany_contours():
17 | img = cv2.imread('D:\\python\\RUNMAP\\MVP_V0.4_add url jpg\\COVER.jpg', 0)
18 | img = cv2.GaussianBlur(img,(3,3),0)
19 | if img is None:
20 | raise Exception("Error while loading the image")
21 |
22 | canny_img = cv2.Canny(img, position, position * 3)
23 |
24 | contours, hierarchy = cv2.findContours(canny_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
25 | print type(contours)
26 | contours_img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
27 |
28 | str_len_contours = str(len(contours)) #取轮廊数量
29 | print "contours num:%s" %str_len_contours
30 | contours_list = contours[-1].tolist()
31 | #contours_location=np.array(contours_list).reshape(-1,).tolist()
32 | #contours_location=np.array(contours_list).tolist()
33 | #print contours_list
34 | print contours_list
35 |
36 |
37 | scale = 1 #不缩放
38 | contours_img = cv2.resize(contours_img, (0, 0), fx=scale, fy=scale)
39 |
40 | for cnt in contours:
41 | color = np.random.randint(0, 255, (3)).tolist()
42 | cv2.drawContours(contours_img,[cnt*scale], 0, color, 1)
43 |
44 | cv2.imwrite('C:\\Users\\Administrator\\Desktop\\cany_contours\\COVER_canny_img.jpg', canny_img)
45 | #cv2.imwrite("fx_canny_contours.jpg", contours_img)
46 | cv2.imshow("canny_img", canny_img)
47 | cv2.imshow("contours_img", contours_img)
48 |
49 | img_pix = str(np.size(img))
50 | gray_pix = str(np.size(contours_img))
51 | canny_img_pix = str(np.size(canny_img))
52 | #轮廊清单转文本输出
53 | s = open("Contours.txt",'a')
54 | s.write("Img Gausss pix nums:" +"%s" %img_pix + "\n")
55 | s.write("Gray pix nums:" +"%s" %gray_pix + "\n")
56 | s.write("canny_img_pix nums:" +"%s" %canny_img_pix + "\n")
57 | s.write("contours num:" +"%s" %str_len_contours + "\n")
58 | for ele in contours_list:
59 | s.write("%s\n" % ele)
60 | s.write("**"*50 + "\n")
61 | s.close()
62 |
63 | l = open("contours_list.txt",'a')
64 | l.write("Img Gausss pix nums:" +"%s" %img_pix + "\n")
65 | l.write("Gray pix nums:" +"%s" %gray_pix + "\n")
66 | l.write("canny_img_pix nums:" +"%s" %canny_img_pix + "\n")
67 | l.write("contours num:" +"%s" %str_len_contours + "\n")
68 | l.write("contours_list" + "\n")
69 | for ele in contours_location:
70 | l.write("%s\n" % ele)
71 | l.write("**"*50 + "\n")
72 | l.close()
73 |
74 | print type(canny_img)
75 | cv2.waitKey(100)
76 |
77 | def url_jpg_contours():
78 | url = 'http://i12.tietuku.com/05ef0b29030fa46c.jpg'
79 | filedata = urllib2.urlopen(url).read()
80 | imagefiledata = cv.CreateMatHeader(1, len(filedata), cv.CV_8UC1)
81 | print imagefiledata #
82 | cv.SetData(imagefiledata, filedata, len(filedata))
83 | im = cv.DecodeImage(imagefiledata, cv.CV_LOAD_IMAGE_COLOR)
84 | col_edge = cv.CreateImage((im.width, im.height), 8, 3)
85 |
86 | # convert to grayscale
87 | gray_im = cv.CreateImage((im.width, im.height), 8, 1)
88 | edge_im = cv.CreateImage((im.width, im.height), 8, 1)
89 | cv.CvtColor(im, gray_im, cv.CV_BGR2GRAY)
90 | cv.Canny(gray_im, edge_im, position, position * 3, 3)
91 | cv.SetZero(col_edge)
92 | # copy edge points
93 | cv.Copy(im, col_edge, edge_im)
94 | #ret, edge_jpg = cv2.imencode('.jpg', edge_im, [int(cv.CV_IMWRITE_JPEG_QUALITY), 80])
95 | edge_im_array = np.asarray(edge_im[:])
96 |
97 | print type(edge_im_array)
98 | #edge_jpg_gray = cv2.cvtColor(edge_im_array,cv2.COLOR_BGR2GRAY)
99 | ret, edge_im_array = cv2.threshold(edge_im_array,127,255,cv2.THRESH_BINARY)
100 | print type(edge_im_array)
101 | contours, hierarchy = cv2.findContours(edge_im_array, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) #压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
102 | contours_img = cv2.cvtColor(edge_im_array, cv2.COLOR_GRAY2BGR)
103 | url_str_len_contours = str(len(contours)) #取轮廊数量
104 | str_len_contours = str(len(contours)) #取轮廊数量
105 |
106 | #数据处理
107 |
108 | first_contours = contours[0] #第一条轨迹坐标集合,数据格式为numpy.ndarry
109 |
110 | first_contours_list = first_contours.tolist()
111 | #print contours #输出所有轨迹坐标集合
112 | #print contours[-1] #输出最后一条轨迹坐标,数据格式为numpy.ndarry
113 | #print contours[0][0].tolist()[0] #输出第一条轨迹起始点坐标[[375 241]]并转化成list格式[[375,241]] |**.tolist()[0] 可以省掉一个中括号输出[375,241]
114 | #print contours[0][0].tolist()[0][0] #输出第一条轨迹起始点坐标的X坐标值。
115 | #print contours[0][0].tolist()[0][1] #输出第一条轨迹起始点坐标的Y坐标值。
116 |
117 | #print [i[0][0] for i in contours]
118 | #print [i[0][0] for i in contours[0]]
119 |
120 |
121 |
122 | scale = 1 #不缩放
123 | contours_img = cv2.resize(contours_img, (0, 0), fx=scale, fy=scale)
124 | print "Url_jpg_contours_num:%s" %url_str_len_contours
125 | for cnt in contours:
126 | color = np.random.randint(0, 255, (3)).tolist()
127 | cv2.drawContours(contours_img,[cnt*scale], 0, color, 1)
128 | cv2.imshow("URL_canny_img", edge_im_array)
129 | cv2.imshow("URL_contours_img", contours_img)
130 |
131 |
132 | #轮廊清单转文本输出
133 | edge_im_array_pix = str(np.size(edge_im_array))
134 | contours_img_pix = str(np.size(contours_img))
135 |
136 | ss = open("Contours" + ".log",'w')
137 | ss.write("edge_im_array_pix nums:" +"%s" %edge_im_array_pix + "\n")
138 | ss.write("contours_img_pix nums:" +"%s" %contours_img_pix + "\n")
139 | ss.write("_url_contours num:" +"%s" %str_len_contours + "\n")
140 | for ele in contours:
141 | ss.write("%s" % ele)
142 | ss.write("**"*50 + "\n")
143 | ss.close()
144 | #return contours
145 | cv2.waitKey(0)
146 |
147 | #return contours_list
148 |
149 | def main():
150 | #local_jpg_caany_contours()
151 | url_jpg_contours()
152 |
153 |
154 |
155 | if __name__ == "__main__":
156 | main()
157 |
--------------------------------------------------------------------------------
/MVP_V0.4_add url jpg/fx.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.4_add url jpg/fx.jpg
--------------------------------------------------------------------------------
/MVP_V0.4_add url jpg/fx_canny.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.4_add url jpg/fx_canny.jpg
--------------------------------------------------------------------------------
/MVP_V0.4_add url jpg/fx_canny_contours.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.4_add url jpg/fx_canny_contours.jpg
--------------------------------------------------------------------------------
/MVP_V0.5_LBS/driving_waypoint.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 | 设置驾车路线途经点
10 |
11 |
12 |
13 |
14 |
15 |
31 |
--------------------------------------------------------------------------------
/MVP_V0.5_LBS/walking_route.html:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.5_LBS/walking_route.html
--------------------------------------------------------------------------------
/MVP_V0.6_qnufop/README.MD:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.6_qnufop/README.MD
--------------------------------------------------------------------------------
/MVP_V0.6_qnufop/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | RUNMAP
5 |
6 |
7 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
147 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import os
4 | from app import create_app
5 | from flask.ext.script import Manager, Shell
6 |
7 | app = create_app(os.getenv('FLASK_CONFIG') or 'default')
8 | manager = Manager(app)
9 |
10 |
11 | def make_shell_context():
12 | return dict(app=app)
13 | manager.add_command("shell", Shell(make_context=make_shell_context))
14 |
15 | if __name__ == '__main__':
16 | manager.run()
17 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/__init__.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 | from config import Config
3 | import logging
4 | from .logger import handler
5 | from .main import main as main_blueprint
6 |
7 | logger = logging.getLogger(__file__)
8 | logger.addHandler(handler)
9 | logger.setLevel(logging.DEBUG)
10 |
11 | def create_app(config_name):
12 | app = Flask(__name__)
13 | app.config.from_object(Config)
14 | Config.init_app(app)
15 |
16 | app.register_blueprint(main_blueprint)
17 |
18 | return app
19 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/logger.py:
--------------------------------------------------------------------------------
1 | import logging
2 | import logging.handlers
3 |
4 | LOG_FILE = 'runmap.log'
5 | handler = logging.handlers.RotatingFileHandler(LOG_FILE, maxBytes = 1024*1024, backupCount = 5)
6 | fmt = '%(asctime)s - %(filename)s:%(lineno)s - %(name)s - %(message)s'
7 | formatter = logging.Formatter(fmt)
8 | handler.setFormatter(formatter)
9 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/main/__init__.py:
--------------------------------------------------------------------------------
1 | from flask import Blueprint
2 |
3 | main = Blueprint('main', __name__)
4 |
5 | from . import views, errors
6 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/main/errors.py:
--------------------------------------------------------------------------------
1 | from flask import render_template
2 | from . import main
3 |
4 |
5 | @main.app_errorhandler(404)
6 | def page_not_found(e):
7 | return render_template('404.html'), 404
8 |
9 |
10 | @main.app_errorhandler(500)
11 | def internal_server_error(e):
12 | return render_template('500.html'), 500
13 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/main/views.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #!/usr/bin/env python
3 |
4 | from flask import request, render_template, session, redirect, url_for, current_app, make_response
5 | import json
6 | import logging
7 | from ..logger import handler
8 | from . import main
9 | import hashlib
10 | import xml.etree.ElementTree as ET
11 | import cv2
12 | import sys,codecs
13 | import json
14 | import cv2.cv as cv
15 | import numpy as np
16 | import urllib2
17 | import time
18 | import os
19 |
20 |
21 | logger = logging.getLogger(__file__)
22 | logger.addHandler(handler)
23 | logger.setLevel(logging.DEBUG)
24 |
25 |
26 | @main.route('/runmap/', methods=['GET', 'POST'])
27 | def index(user):
28 | #return render_template('index.html', api_key=current_app.config['API_KEY'])
29 | return render_template('index.html', points_js=url_for('static', filename='js/{0}.js'.format(user)))
30 |
31 | @main.route('/', methods = ['GET', 'POST'] )
32 | def wechat():
33 | if request.method == 'GET':
34 | token = 'runmap'
35 | query = request.args
36 | signature = query.get('signature', '')
37 | timestamp = query.get('timestamp', '')
38 | nonce = query.get('nonce', '')
39 | echostr = query.get('echostr', '')
40 | s = [timestamp, nonce, token]
41 | s.sort()
42 | s = ''.join(s)
43 | if ( hashlib.sha1(s).hexdigest() == signature ):
44 | return make_response(echostr)
45 | else:
46 | rec = request.stream.read()
47 | xml_rec = ET.fromstring(rec)
48 | msgtype = xml_rec.find('MsgType').text
49 | fromu = xml_rec.find('FromUserName').text
50 | tou = xml_rec.find('ToUserName').text
51 | if msgtype == 'image':
52 | picurl = xml_rec.find('PicUrl').text
53 | points_js = "app/static/js/{0}.js".format(fromu)
54 | os.remove(points_js)
55 | with open(points_js, "w") as f:
56 | prefix = 'var data = {"data":['
57 | data_points = ""
58 | points = url_jpg_contours(picurl)
59 | data_points = ",".join(["[{0},{1},1]".format(point[0], point[1]) for point in points])
60 | suffix = '],"total":{0},"rt_loc_cnt":47764510,"errorno":0,"NearestTime":"{1}","userTime":"{1}"}}'.format(len(points), time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
61 | f.write(prefix+data_points+suffix)
62 | xml_rep_text = "%s"
63 | response = make_response(xml_rep_text % (fromu,tou,str(int(time.time())),"http://13.75.40.237/runmap/{0}".format(fromu)))
64 | response.content_type='application/xml'
65 | return response
66 | return make_response('')
67 |
68 | #@main.route('/yingyan', methods=['GET', 'POST'])
69 | #def yingyan():
70 | # return render_template('yingyan.html')
71 |
72 | def url_jpg_contours(url):
73 | position = 100
74 | filedata = urllib2.urlopen(url).read()
75 | imagefiledata = cv.CreateMatHeader(1, len(filedata), cv.CV_8UC1)
76 | cv.SetData(imagefiledata, filedata, len(filedata))
77 | im = cv.DecodeImage(imagefiledata, cv.CV_LOAD_IMAGE_COLOR)
78 | col_edge = cv.CreateImage((im.width, im.height), 8, 3)
79 |
80 | # convert to grayscale
81 | gray_im = cv.CreateImage((im.width, im.height), 8, 1)
82 | edge_im = cv.CreateImage((im.width, im.height), 8, 1)
83 | cv.CvtColor(im, gray_im, cv.CV_BGR2GRAY)
84 | cv.Canny(gray_im, edge_im, position, position * 3, 3)
85 | cv.SetZero(col_edge)
86 | # copy edge points
87 | cv.Copy(im, col_edge, edge_im)
88 | edge_im_array = np.asarray(edge_im[:])
89 |
90 | ret, edge_im_array = cv2.threshold(edge_im_array,127,255,cv2.THRESH_BINARY)
91 | contours, hierarchy = cv2.findContours(edge_im_array, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
92 | scale = 10000.0
93 | points = []
94 | for contour in contours:
95 | for i in contour:
96 | for j in i:
97 | lng_offset = j[0] / scale
98 | lat_offset = j[1] / scale
99 | points.append([lng_offset, lat_offset])
100 | return points
101 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/css/fontawesome/css/font-awesome.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.4.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}
5 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/font-awesome.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.4.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}
5 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/css/jquery.datetimepicker.css:
--------------------------------------------------------------------------------
1 | .xdsoft_datetimepicker{
2 | box-shadow: 0px 5px 15px -5px rgba(0, 0, 0, 0.506);
3 | background: #FFFFFF;
4 | border-bottom: 1px solid #BBBBBB;
5 | border-left: 1px solid #CCCCCC;
6 | border-right: 1px solid #CCCCCC;
7 | border-top: 1px solid #CCCCCC;
8 | color: #333333;
9 | display: block;
10 | /*font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif;*/
11 | padding: 8px;
12 | padding-left: 0px;
13 | padding-top: 2px;
14 | position: absolute;
15 | z-index: 10000;
16 | -moz-box-sizing: border-box;
17 | box-sizing: border-box;
18 | display:none;
19 | }
20 |
21 | .xdsoft_datetimepicker iframe {
22 | position: absolute;
23 | left: 0;
24 | top: 0;
25 | width: 75px;
26 | height: 210px;
27 | background: transparent;
28 | border:none;
29 | }
30 | /*For IE8 or lower*/
31 | .xdsoft_datetimepicker button {
32 | border:none !important;
33 | }
34 |
35 | .xdsoft_noselect{
36 | -webkit-touch-callout: none;
37 | -webkit-user-select: none;
38 | -khtml-user-select: none;
39 | -moz-user-select: none;
40 | -ms-user-select: none;
41 | -o-user-select: none;
42 | user-select: none;
43 | }
44 | .xdsoft_noselect::selection { background: transparent; }
45 | .xdsoft_noselect::-moz-selection { background: transparent; }
46 | .xdsoft_datetimepicker.xdsoft_inline{
47 | display: inline-block;
48 | position: static;
49 | box-shadow: none;
50 | }
51 | .xdsoft_datetimepicker *{
52 | -moz-box-sizing: border-box;
53 | box-sizing: border-box;
54 | padding:0px;
55 | margin:0px;
56 | }
57 | .xdsoft_datetimepicker .xdsoft_datepicker, .xdsoft_datetimepicker .xdsoft_timepicker{
58 | display:none;
59 | }
60 | .xdsoft_datetimepicker .xdsoft_datepicker.active, .xdsoft_datetimepicker .xdsoft_timepicker.active{
61 | display:block;
62 | }
63 | .xdsoft_datetimepicker .xdsoft_datepicker{
64 | width: 224px;
65 | float:left;
66 | margin-left:8px;
67 | }
68 | .xdsoft_datetimepicker .xdsoft_timepicker{
69 | width: 58px;
70 | float:left;
71 | text-align:center;
72 | margin-left:8px;
73 | margin-top:0px;
74 | }
75 | .xdsoft_datetimepicker .xdsoft_datepicker.active+.xdsoft_timepicker{
76 | margin-top:8px;
77 | margin-bottom:3px;
78 | }
79 | .xdsoft_datetimepicker .xdsoft_mounthpicker{
80 | position: relative;
81 | text-align: center;
82 | }
83 |
84 | .xdsoft_datetimepicker .xdsoft_prev, .xdsoft_datetimepicker .xdsoft_next,.xdsoft_datetimepicker .xdsoft_today_button{
85 | background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAeCAYAAACsYQl4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozQjRCQjRGREU4MkNFMzExQjRDQkIyRDJDOTdBRUI1MCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCQjg0OUYyNTZDODAxMUUzQjMwM0IwMERBNUU0ODQ5NSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCQjg0OUYyNDZDODAxMUUzQjMwM0IwMERBNUU0ODQ5NSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkI5NzE3MjFBN0E2Q0UzMTFBQjJEQjgzMDk5RTNBNTdBIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjNCNEJCNEZERTgyQ0UzMTFCNENCQjJEMkM5N0FFQjUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+aQvATgAAAfVJREFUeNrsmr1OwzAQxzGtkPjYEAuvVGAvfQIGRKADE49gdLwDDwBiZ2RhQUKwICQkWLsgFiRQuIBTucFJ/XFp4+hO+quqnZ4uvzj2nV2RpukCW/22yAgYNINmc7du7DcghCjrkqgOKjF1znpt6rZ0AGWQj7TvCU8d9UM+QAGDrhdyc2Bnc1WVVPBev9V8lBnY+rDwncWZThG4xk4lmxtJy2AHgoY/FySgbSBPwPZ8mEXbQx3aDERb0EbYAYFC7pcAtAvkMWwC0D3NX58S9D/YnoGC7nPWr3Dg9JTbtuHhDShBT8D2CBSK/iIEvVXxpuxSgh7DdgwUTL4iA92zmJb6lKB/YTsECmV+IgK947AGDIqgQ/LojsO135Hn51l2cWlov0JdGNrPUceueXRwilSVgkUyom9Rd6gbLfYTDeO+1v6orn0InTogYDGUkYLO3/wc9BdqqTCKP1Tfi+oTIaCBIL2TES+GTyruT9S61p6BHam+99DFEAgLFklYsIBHwSI9QY80H5ta+1rB/6ovaKihBJeEJbgLbBlQgl+j3lDPqA2tfQV1j3pVn8s+oKHGTSVJ+FqDLeR5bCqJ2E/BCycsoLZETXaKGs7rhKVt+9HZScrZNMi88V8P7LlDbvOZYaJVpMMmBCT4n0o8dTBoNgbdWPsRYACs3r7XyNfbnAAAAABJRU5ErkJggg==');
86 | }
87 | .xdsoft_datetimepicker .xdsoft_prev{
88 | float: left;
89 | background-position:-20px 0px;
90 | }
91 | .xdsoft_datetimepicker .xdsoft_today_button{
92 | float: left;
93 | background-position:-70px 0px;
94 | margin-left:5px;
95 | }
96 |
97 | .xdsoft_datetimepicker .xdsoft_next{
98 | float: right;
99 | background-position:0px 0px;
100 | }
101 | .xdsoft_datetimepicker .xdsoft_next:active,.xdsoft_datetimepicker .xdsoft_prev:active{
102 | }
103 | .xdsoft_datetimepicker .xdsoft_next,.xdsoft_datetimepicker .xdsoft_prev ,.xdsoft_datetimepicker .xdsoft_today_button{
104 | background-color: transparent;
105 | background-repeat: no-repeat;
106 | border: 0px none currentColor;
107 | cursor: pointer;
108 | display: block;
109 | height: 30px;
110 | opacity: 0.5;
111 | outline: medium none currentColor;
112 | overflow: hidden;
113 | padding: 0px;
114 | position: relative;
115 | text-indent: 100%;
116 | white-space: nowrap;
117 | width: 20px;
118 | }
119 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev,
120 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_next{
121 | float:none;
122 | background-position:-40px -15px;
123 | height: 15px;
124 | width: 30px;
125 | display: block;
126 | margin-left:14px;
127 | margin-top:7px;
128 | }
129 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev{
130 | background-position:-40px 0px;
131 | margin-bottom:7px;
132 | margin-top:0px;
133 | }
134 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box{
135 | height:151px;
136 | overflow:hidden;
137 | border-bottom:1px solid #DDDDDD;
138 | }
139 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div{
140 | background: #F5F5F5;
141 | border-top:1px solid #DDDDDD;
142 | color: #666666;
143 | font-size: 12px;
144 | text-align: center;
145 | border-collapse:collapse;
146 | cursor:pointer;
147 | border-bottom-width:0px;
148 | height:25px;
149 | line-height:25px;
150 | }
151 |
152 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div > div:first-child{
153 | border-top-width:0px;
154 | }
155 | .xdsoft_datetimepicker .xdsoft_today_button:hover,
156 | .xdsoft_datetimepicker .xdsoft_next:hover,
157 | .xdsoft_datetimepicker .xdsoft_prev:hover {
158 | opacity: 1;
159 | }
160 | .xdsoft_datetimepicker .xdsoft_label{
161 | display: inline;
162 | position: relative;
163 | z-index: 9999;
164 | margin: 0;
165 | padding: 5px 3px;
166 | font-size: 13px;
167 | line-height: 20px;
168 | font-weight: normal;
169 | background-color: #fff;
170 | float:left;
171 | width:182px;
172 | text-align:center;
173 | cursor:pointer;
174 | }
175 | .xdsoft_datetimepicker .xdsoft_label:hover{
176 | text-decoration:underline;
177 | }
178 | .xdsoft_datetimepicker .xdsoft_label > .xdsoft_select{
179 | border:1px solid #ccc;
180 | position:absolute;
181 | display:block;
182 | right:0px;
183 | top:30px;
184 | z-index:101;
185 | display:none;
186 | background:#fff;
187 | max-height:160px;
188 | overflow-y:hidden;
189 | }
190 | .xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_monthselect{right:-7px;}
191 | .xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_yearselect{right:2px;}
192 | .xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover{
193 | color: #fff;
194 | background: #ff8000;
195 | }
196 | .xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option{
197 | padding:2px 10px 2px 5px;
198 | }
199 | .xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current{
200 | background: #33AAFF;
201 | box-shadow: #178FE5 0px 1px 3px 0px inset;
202 | color:#fff;
203 | font-weight: 700;
204 | }
205 | .xdsoft_datetimepicker .xdsoft_month{
206 | width:90px;
207 | text-align:right;
208 | left:35px;
209 | }
210 | .xdsoft_datetimepicker .xdsoft_calendar{
211 | clear:both;
212 | }
213 | .xdsoft_datetimepicker .xdsoft_year{
214 | width:60px;
215 | left:-65px;
216 | }
217 | .xdsoft_datetimepicker .xdsoft_calendar table{
218 | border-collapse:collapse;
219 | width:100%;
220 |
221 | }
222 | .xdsoft_datetimepicker .xdsoft_calendar td > div{
223 | padding-right:5px;
224 | }
225 | .xdsoft_datetimepicker .xdsoft_calendar th{
226 | height: 25px;
227 | }
228 | .xdsoft_datetimepicker .xdsoft_calendar td,.xdsoft_datetimepicker .xdsoft_calendar th{
229 | width:14.2857142%;
230 | text-align:center;
231 | background: #F5F5F5;
232 | border:1px solid #DDDDDD;
233 | color: #666666;
234 | font-size: 12px;
235 | text-align: right;
236 | padding:0px;
237 | border-collapse:collapse;
238 | cursor:pointer;
239 | height: 25px;
240 | }
241 | .xdsoft_datetimepicker .xdsoft_calendar th{
242 | background: #F1F1F1;
243 | }
244 | .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today{
245 | color:#33AAFF;
246 | }
247 | .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default,
248 | .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current,
249 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current{
250 | background: #33AAFF;
251 | box-shadow: #178FE5 0px 1px 3px 0px inset;
252 | color:#fff;
253 | font-weight: 700;
254 | }
255 | .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month,
256 | .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled,
257 | .xdsoft_datetimepicker .xdsoft_time_box >div >div.xdsoft_disabled{
258 | opacity:0.5;
259 | }
260 | .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled{
261 | opacity:0.2;
262 | }
263 | .xdsoft_datetimepicker .xdsoft_calendar td:hover,
264 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div:hover{
265 | color: #fff !important;
266 | background: #ff8000 !important;
267 | box-shadow: none !important;
268 | }
269 | .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled:hover,
270 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_disabled:hover{
271 | color: inherit !important;
272 | background: inherit !important;
273 | box-shadow: inherit !important;
274 | }
275 | .xdsoft_datetimepicker .xdsoft_calendar th{
276 | font-weight: 700;
277 | text-align: center;
278 | color: #999;
279 | cursor:default;
280 | }
281 | .xdsoft_datetimepicker .xdsoft_copyright{ color:#ccc !important; font-size:10px;clear:both;float:none;margin-left:8px;}
282 | .xdsoft_datetimepicker .xdsoft_copyright a{ color:#eee !important;}
283 | .xdsoft_datetimepicker .xdsoft_copyright a:hover{ color:#aaa !important;}
284 |
285 |
286 | .xdsoft_time_box{
287 | position:relative;
288 | border:1px solid #ccc;
289 | }
290 | .xdsoft_scrollbar >.xdsoft_scroller{
291 | background:#ccc !important;
292 | height:20px;
293 | border-radius:3px;
294 | }
295 | .xdsoft_scrollbar{
296 | position:absolute;
297 | width:7px;
298 | width:7px;
299 | right:0px;
300 | top:0px;
301 | bottom:0px;
302 | cursor:pointer;
303 | }
304 | .xdsoft_scroller_box{
305 | position:relative;
306 | }
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/css/pagination.css:
--------------------------------------------------------------------------------
1 | .pagination {
2 | font-size: 16px;
3 | }
4 | .pagination a {
5 | text-decoration: none;
6 | color: #52A3F5;
7 | }
8 | .pagination a,
9 | .pagination span {
10 | display: block;
11 | float: left;
12 | text-align: center;
13 | line-height: 24px;
14 | margin-right: 5px;
15 | margin-bottom: 5px;
16 | width: 24px;
17 | height: 24px;
18 | border-radius: 12px;
19 | }
20 | .pagination span {
21 | margin-right: 3px;
22 | }
23 | .pagination .current {
24 | color: #fff;
25 | }
26 | .pagination .prev,
27 | .pagination .next {
28 | color: #52A3F5 !important;
29 | }
30 | .pagination .current.prev,
31 | .pagination .current.next {
32 | color: #666666 !important;
33 | }
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/css/track.css:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author:xuguanlong
3 | * @Date:2015-09-08 14:27:02
4 | * @Last Modified by: xuguanlong
5 | * @Last Modified time: 2015-11-09 14:47:40
6 | */
7 | html,
8 | body {
9 | font: 14px/1.5 "Microsoft Yahei", arial, "Hiragino Sans GB", sans-serif;
10 | background: #08304A;
11 | height: 100%;
12 | overflow: hidden;
13 | margin: 0;
14 | padding: 0;
15 | }
16 | ul,
17 | li,
18 | p {
19 | list-style: none;
20 | margin: 0;
21 | padding: 0;
22 | }
23 | a {
24 | text-decoration: none;
25 | }
26 | a:focus {
27 | outline: none !important;
28 | }
29 | .left {
30 | left: 0px;
31 | }
32 | .right {
33 | right: 0px;
34 | }
35 | .type-ctr {
36 | position: absolute;
37 | top: 15px;
38 | z-index: 9999;
39 | width: 150px;
40 | margin: 0px;
41 | height: 33px;
42 | background: rgba(8, 47, 76, 0.8);
43 | box-sizing: content-box;
44 | margin-bottom: 2px;
45 | box-shadow: 0 0 10px rgba(0, 0, 0, .3);
46 | top: 48px;
47 | cursor: pointer;
48 | }
49 | .type-ctr.active {
50 | background: rgba(9, 34, 53, 0.8);
51 | }
52 | #track-btn {
53 | left: 15px;
54 | }
55 | #track-btn-2 {
56 | left: 165px;
57 | }
58 | .type-ctr a {
59 | font-size: 14px;
60 | text-decoration: none;
61 | display: inline-block;
62 | width: 100%;
63 | height: 32px;
64 | line-height: 32px;
65 | text-align: center;
66 | color: #eeeeee;
67 | }
68 |
69 | #mapContainer {
70 | height: 100%;
71 | /* 根据个性化地图设置地图容器的背景色 */
72 | background-color: #212121 !important;
73 | }
74 | #data-box {
75 | position: absolute;
76 | width: 300px;
77 | top: 81px;
78 | left: 15px;
79 | z-index: 9999;
80 | }
81 | .title {
82 | position: absolute;
83 | top: 15px;
84 | left: 15px;
85 | width: 300px;
86 | margin: 0px;
87 | height: 32px;
88 | background: rgba(11, 103, 170, 0.5);
89 | box-sizing: content-box;
90 | margin-bottom: 2px;
91 | box-shadow: 0 0 10px rgba(0, 0, 0, .3);
92 | }
93 | .title .circle {
94 | background-color: rgb(98, 181, 0);
95 | display: inline-block;
96 | margin: 0px 3px;
97 | height: 10px;
98 | width: 10px;
99 | border-radius: 5px;
100 | }
101 | .title p {
102 | text-align: center;
103 | line-height: 32px;
104 | color: #ededed;
105 | height: 32px;
106 | }
107 | .title .name {
108 | max-width: 260px;
109 | }
110 | .title .ctrl {
111 | float: right;
112 | padding-right: 10px;
113 | padding-left: 10px;
114 | cursor: pointer;
115 | }
116 | #data-box .panel {
117 | background-color: rgba(0, 0, 0, 0.7);
118 | height: 490px;
119 | box-shadow: 0 0 10px rgba(0, 0, 0, .3);
120 | color: rgb(86, 86, 86);
121 | margin-bottom: 2px;
122 | position: relative;
123 | display: none;
124 | }
125 | #data-box .panel a {
126 | color: #666666;
127 | text-decoration: none;
128 | }
129 | #searchKey,
130 | #searchKey_2 {
131 | outline: none;
132 | width: 156px;
133 | height: 22px;
134 | line-height: 22px;
135 | margin: 15px 0px 10px 16px;
136 | border: solid 1px #343434;
137 | padding-left: 5px;
138 | background: transparent;
139 | color: #787878;
140 | }
141 | .search-i {
142 | cursor: pointer;
143 | position: relative;
144 | left: -25px;
145 | }
146 | #data-box .panel .btn,
147 | #track-box .btn {
148 | display: inline-block;
149 | height: 22px;
150 | font-size: 12px;
151 | line-height: 22px;
152 | padding: 1px 3px;
153 | color: #787878;
154 | margin-right: 3px;
155 | position: relative;
156 | left: -10px;
157 | border: solid 1px #343434;
158 | }
159 | #data-box .panel .btn:hover,
160 | #track-box .btn:hover {
161 | color: #ededed;
162 | }
163 | #data-box .panel .page-btn {
164 | text-align: center;
165 | display: inline-block;
166 | position: absolute;
167 | height: 24px;
168 | line-height: 24px;
169 | width: 150px;
170 | bottom: 0px;
171 | border: 1px solid rgba(0, 0, 0, 0.1);
172 | border-left: none;
173 | border-right: none;
174 | color: #666666;
175 | }
176 | #data-box .panel .page-btn:hover {
177 | background-color: #50667F;
178 | color: #ffffff;
179 | }
180 | #data-box .panel .page-btn.disabled {
181 | color: #9A9797;
182 | cursor: default;
183 | }
184 | #data-box .panel .page-btn.disabled:hover {
185 | color: #9A9797;
186 | background-color: #ffffff;
187 | }
188 | #data-box .panel .page-btn.left {
189 | border-right: 1px solid rgba(0, 0, 0, 0.1);
190 | }
191 | #data-box .tip {
192 | height: 40px;
193 | position: relative;
194 | z-index: 0;
195 | line-height: 40px;
196 | text-align: center;
197 | overflow: hidden;
198 | text-align: center;
199 | display: none;
200 | color: #F54336;
201 | background: rgba(0, 0, 0, 0.7);
202 | }
203 | #data-box .tip a {
204 | text-decoration: none;
205 | margin: 0px 3px;
206 | }
207 | #tracklist-panel {
208 | border-top: 1px solid rgba(86, 86, 86, 0.5);
209 | }
210 | #tracks-pager-ul,
211 | #tracks-pager-ul-2 {
212 | margin-top: 5px;
213 | padding: 6px 15px 0px 25px;
214 | border-top: 1px solid rgba(86, 86, 86, 0.5);
215 | position: absolute;
216 | bottom: 2px;
217 | width: 260px;
218 | overflow: hidden;
219 | }
220 | .tracks-ul {
221 | margin-top: 9px;
222 | }
223 | #tracklist-panel ul li {
224 | height: 27px;
225 | line-height: 27px;
226 | padding: 0px 7px 0px 16px;
227 | color: #cccccc;
228 | }
229 | #tracklist-panel ul li:hover {
230 | cursor: pointer;
231 | background-color: rgba(11, 103, 170, 0.5);
232 | }
233 | #tracklist-panel ul li span {
234 | width: 220px;
235 | white-space: nowrap;
236 | overflow: hidden;
237 | display: inline-block;
238 | float: left;
239 | position: relative;
240 | top: -2px;
241 | -o-text-overflow: ellipsis;
242 | text-overflow: ellipsis;
243 |
244 | }
245 | #tracklist-panel .state {
246 | display: inline-block;
247 | margin: 0px 15px;
248 | height: 10px;
249 | width: 10px;
250 | border-radius: 5px;
251 | background-color: rgb(232, 232, 232);
252 | position: relative;
253 | top: 8px;
254 | }
255 | #tracklist-panel .state.on {
256 | background-color: rgb(98, 181, 0);
257 | }
258 | #tracklist-panel .state.leave {
259 | background-color: rgb(98, 181, 0);
260 | }
261 | #tracklist-panel .state.off {
262 | background-color: rgb(232, 232, 232);
263 | }
264 |
265 | /* Checkmark style starts */
266 | @-moz-keyframes dothabottomcheck {
267 | 0% {
268 | height: 0;
269 | }
270 | 100% {
271 | height: 2px;
272 | }
273 | }
274 | @-webkit-keyframes dothabottomcheck {
275 | 0% {
276 | height: 0;
277 | }
278 | 100% {
279 | height: 2px;
280 | }
281 | }
282 | @keyframes dothabottomcheck {
283 | 0% {
284 | height: 0;
285 | }
286 | 100% {
287 | height: 2px;
288 | }
289 | }
290 | @keyframes dothatopcheck {
291 | 0% {
292 | height: 0;
293 | }
294 | 50% {
295 | height: 0;
296 | }
297 | 100% {
298 | height: 2px;
299 | }
300 | }
301 | @-webkit-keyframes dothatopcheck {
302 | 0% {
303 | height: 0;
304 | }
305 | 50% {
306 | height: 0;
307 | }
308 | 100% {
309 | height: 2px;
310 | }
311 | }
312 | @-moz-keyframes dothatopcheck {
313 | 0% {
314 | height: 0;
315 | }
316 | 50% {
317 | height: 0;
318 | }
319 | 100% {
320 | height: 2px;
321 | }
322 | }
323 | input[type=checkbox] {
324 | display: none;
325 | }
326 | .check-box {
327 | height: 15px;
328 | width: 15px;
329 | background-color: transparent;
330 | border: 1px solid rgba(86, 86, 86, 1);
331 | position: relative;
332 | display: inline-block;
333 | cursor: pointer;
334 | margin-top: 5px;
335 | float: left;
336 | -webkit-box-sizing: border-box;
337 | -moz-box-sizing: border-box;
338 | box-sizing: border-box;
339 | -webkit-transition: border-color ease 0.1s;
340 | -moz-transition: border-color ease 0.1s;
341 | -o-transition: border-color ease 0.1s;
342 | transition: border-color ease 0.1s;
343 | }
344 | .seled-track .check-box {
345 | margin-top: 9px;
346 | margin-right: 10px;
347 | }
348 | .check-box::before,
349 | .check-box::after {
350 | position: absolute;
351 | height: 0;
352 | width: 6px;
353 | background-color: #40AB54;
354 | display: inline-block;
355 | border-radius: 0px;
356 | content: ' ';
357 | -webkit-transform-origin: left top;
358 | -moz-transform-origin: left top;
359 | -ms-transform-origin: left top;
360 | -o-transform-origin: left top;
361 | transform-origin: left top;
362 | -webkit-transition: opacity ease .1;
363 | -moz-transition: opacity ease .1;
364 | transition: opacity ease .1;
365 | -webkit-box-sizing: border-box;
366 | -moz-box-sizing: border-box;
367 | box-sizing: border-box;
368 | }
369 | .check-box::before {
370 | top: 10px;
371 | left: 5px;
372 | width: 6px;
373 | -webkit-transform: rotate(-135deg);
374 | -moz-transform: rotate(-135deg);
375 | -ms-transform: rotate(-135deg);
376 | -o-transform: rotate(-135deg);
377 | transform: rotate(-135deg);
378 |
379 | }
380 | .check-box::after {
381 | top: 10px;
382 | left: 5px;
383 | width: 16px;
384 | -webkit-transform: rotate(-56deg);
385 | -moz-transform: rotate(-56deg);
386 | -ms-transform: rotate(-56deg);
387 | -o-transform: rotate(-56deg);
388 | transform: rotate(-56deg);
389 | }
390 | input[type=checkbox]:checked + .check-box,
391 | .check-box.checked {
392 | border-color: #40AB54;
393 | }
394 | input[type=checkbox]:checked + .check-box::after,
395 | .check-box.checked::after {
396 | height: 2px;
397 | -webkit-animation: dothabottomcheck 0.2s ease 0s forwards;
398 | -moz-animation: dothabottomcheck 0.2s ease 0s forwards;
399 | -o-animation: dothabottomcheck 0.2s ease 0s forwards;
400 | animation: dothabottomcheck 0.2s ease 0s forwards;
401 | }
402 | input[type=checkbox]:checked + .check-box::before,
403 | .check-box.checked::before {
404 | height: 2px;
405 | -webkit-animation: dothatopcheck 0.2s ease 0s forwards;
406 | -moz-animation: dothatopcheck 0.2s ease 0s forwards;
407 | -o-animation: dothatopcheck 0.2s ease 0s forwards;
408 | animation: dothatopcheck 0.2s ease 0s forwards;
409 | }
410 | #track-box {
411 | z-index: 10000;
412 | background-color: rgba(0, 0, 0, 0.7);
413 | box-shadow: 0 0 10px rgba(0, 0, 0, .3);
414 | color: rgb(86, 86, 86);
415 | position: relative;
416 | height: 490px;
417 | width: 300px;
418 | display: none;
419 | }
420 | #track-box p {
421 | margin-top: 12px;
422 | font-size: 18px;
423 | position: relative;
424 | padding: 0px 10px 10px 14px;
425 | border-bottom: solid 1px #e5e5e5;
426 | }
427 | #track-box .close {
428 | padding-left: 5px;
429 | float: right;
430 | margin-right: 5px;
431 | cursor: pointer;
432 | }
433 | .date_btn {
434 | font-size: 12px;
435 | position: relative;
436 | left: -10px;
437 | margin: 0px 5px;
438 | cursor: pointer;
439 | color: #428bca;
440 | }
441 | #track-box .date-panel {
442 | line-height: 40px;
443 | font-size: 14px;
444 | position: relative;
445 | padding-top: 10px;
446 | padding-left: 15px;
447 | padding-bottom: 10px;
448 | color: #cccccc;
449 | background-color: rgba(9, 34, 53, 0.8);
450 | }
451 | #track-box div {
452 | position: relative;
453 | }
454 | #track-box .date {
455 | border: 1px solid rgba(86, 86, 86, 0.6);
456 | padding: 2px 8px;
457 | margin: 6px 10px;
458 | margin-left: 20px;
459 | cursor: pointer;
460 | width: 150px;
461 | display: inline-block;
462 | height: 24px;
463 | position: absolute;
464 | }
465 | .date .date-title {
466 | padding: 0px 10px;
467 | float: left;
468 | width: 95px;
469 | height: 24px;
470 | line-height: 24px;
471 | text-align: center;
472 | }
473 | .date .sele {
474 | width: 24px;
475 | border-left: 1px solid rgba(86, 86, 86, 0.6);
476 | float: right;
477 | margin-left: 8px;
478 | height: 24px;
479 | position: relative;
480 | }
481 | .date-chose {
482 | text-align: center;
483 | }
484 | .sele i {
485 | position: absolute;
486 | left: 48%;
487 | top: 10%;
488 | }
489 | #track-box .tracks-panel {
490 | padding: 5px 5px 15px 5px;
491 | height: 340px;
492 | overflow-y: auto;
493 | }
494 | .seled-track {
495 | padding-left: 10px;
496 | height: 32px;
497 | line-height: 32px;
498 | position: relative;
499 | color: #cccccc;
500 | }
501 | .sel-track-name {
502 | display: inline-block;
503 | width: 90px;
504 | white-space: nowrap;
505 | text-overflow: ellipsis;
506 | -o-text-overflow: ellipsis;
507 | overflow: hidden;
508 | }
509 | .seled-track:hover {
510 | cursor: pointer;
511 | background-color: rgba(11, 103, 170, 0.5);
512 | }
513 | .seled-track.selected {
514 | background-color: rgba(11, 103, 170, 0.5);
515 | }
516 | .pro-bar {
517 | position: relative;
518 | display: inline-block;
519 | position: relative;
520 | margin-left: 5px;
521 | width: 110px;
522 | height: 6px;
523 | top: -13px;
524 | background-color: rgba(110, 106, 95, 1);
525 | border-radius: 10px;
526 | }
527 | .pro-bar.progressing {
528 | background-color: rgba(110, 106, 95, 0.8);
529 | }
530 | .pro-bar .bar {
531 | position: absolute;
532 | left: 0px;
533 | top: 0px;
534 | content: ' ';
535 | height: 100%;
536 | width: 100%;
537 | background-repeat: repeat-x;
538 | border-radius: 10px;
539 | background-size: 30px 30px;
540 | }
541 | .pro-bar.progressing .bar {
542 | background-image: linear-gradient(-45deg, rgba(255, 255, 255, .25) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .25) 50%, rgba(255, 255, 255, .25) 75%, transparent 75%, transparent);
543 | -webkit-animation: progressLTR 0.6s linear infinite;
544 | -o-animation: progressLTR 0.6s linear infinite;
545 | animation: progressLTR 0.6s linear infinite;
546 | }
547 | .process {
548 | font-size: 12px;
549 | color: #bbbbbb;
550 | padding: 3px 5px;
551 | height: 16px;
552 | line-height: 16px;
553 | margin-left: 15px;
554 | border-radius: 4px;
555 | position: absolute;
556 | top: 5px;
557 | right: 10px;
558 | }
559 |
560 | @keyframes progressLTR {
561 | to {
562 | background-position: 30px 0;
563 | }
564 | }
565 | .track-bottom {
566 | padding: 11px 15px 10px 35px;
567 | border-top: solid 1px rgba(86, 86, 86, 0.6);
568 | }
569 | .track-bottom a {
570 | display: inline-block;
571 | height: 30px;
572 | line-height: 30px;
573 | width: 80px;
574 | background-color: #52A3F5;
575 | border-radius: 5px;
576 | color: #ffffff;
577 | text-align: center;
578 | font-size: 14px;
579 | margin: 0px 16px;
580 | }
581 | .track-bottom a:hover {
582 | background-color: #0E7CEC;
583 | }
584 | .mask,
585 | .panel-mask {
586 | position: absolute;
587 | left: 0px;
588 | top: 0px;
589 | width: 100%;
590 | height: 490px;
591 | z-index: 10001;
592 | display: none;
593 | }
594 | .mask img,
595 | .panel-mask img {
596 | position: absolute;
597 | margin-left: -41px;
598 | margin-top: -41px;
599 | top: 50%;
600 | left: 50%;
601 | }
602 | .timeline-ctrl {
603 | position: absolute;
604 | z-index: 10002;
605 | width: 780px;
606 | height: 60px;
607 | right: 5px;
608 | bottom: -65px;
609 | transition: bottom 0.5s;
610 | }
611 | .timeline-ctrl.show {
612 | bottom: 1px;
613 | }
614 | #timeline,
615 | #cursor {
616 | position: absolute;
617 | width: 780px;
618 | height: 60px;
619 | left: 0px;
620 | top: 0px;
621 | cursor: pointer;
622 | }
623 | #timeCtr {
624 | width: 16px;
625 | height: 60px;
626 | position: absolute;
627 | left: 0px;
628 | top: 0px;
629 | cursor: pointer;
630 | }
631 | #time_span {
632 | width: 200px;
633 | height: 60px;
634 | font-size: 19px;
635 | font-weight: 400;
636 | line-height: 60px;
637 | color: #ffffff;
638 | background-color: rgba(0, 0, 0, .5);
639 | text-align: center;
640 | position: absolute;
641 | right: 785px;
642 | bottom: -70px;
643 | transition: bottom 0.5s;
644 | }
645 | #time_span.show {
646 | bottom: 1px;
647 | }
648 | .anchorBL {
649 | display: none !important;
650 | }
651 | .chart-ctrl {
652 | position: absolute;
653 | width: 52px;
654 | height: 52px;
655 | top: 20px;
656 | right: 15px;
657 | background: rgba(66, 66, 66, 0.7);
658 | border: 1px solid rgba(66, 66, 66, 1);
659 | cursor: pointer;
660 | z-index: 200;
661 | display: none;
662 | }
663 | .chart-ctrl:hover {
664 | border: 1px solid rgba(22, 68, 102, 1);
665 | }
666 | .jiupian .title,
667 | .chart-ctrl .title {
668 | position: absolute;
669 | text-align: center;
670 | width: 54px;
671 | height: 18px;
672 | line-height: 18px;
673 | display: inline-block;
674 | top: 35px;
675 | left: -1px;
676 | font-size: 12px;
677 | color: #cccccc;
678 | background-color: rgba(99, 99, 99, 1);
679 | transition: background-color 0.2s;
680 | }
681 | .no-track-tip {
682 | position: absolute;
683 | text-align: center;
684 | top: 10px;
685 | display: inline-block;
686 | height: 28px;
687 | line-height: 28px;
688 | color: #F54336;
689 | right: 60px;
690 | overflow: hidden;
691 | width: 200px;
692 | background-color: rgba(66, 66, 66, 1);
693 | display: none;
694 | }
695 |
696 | .chart-ctrl:hover .title{
697 | background-color: rgba(22, 68, 102, 1);
698 | }
699 | .chart-wrap {
700 | position: absolute;
701 | width: 650px;
702 | height: 340px;
703 | top: 20px;
704 | right: 18px;
705 | display: none;
706 | transition: transform 0.6s;
707 | transform: scale(0.08, 0.1);
708 | transform-origin: 100% 0%;
709 | z-index: 199;
710 | }
711 | .chart-wrap.max {
712 | transform: scale(1, 1);
713 | z-index: 201;
714 | right: 0px;
715 | }
716 | #chart {
717 | position: absolute;
718 | width: 640px;
719 | height: 340px;
720 | left: 0px;
721 | right: 0px;
722 | }
723 | #chart.max {
724 | display: block;
725 | transform: scale(1, 1);
726 | }
727 | .map-ctrl {
728 | position: absolute;
729 | right: 20px;
730 | z-index: 999;
731 | cursor: pointer;
732 | color: rgba(211, 211, 211, 0.8);
733 | font-size: 30px;
734 | }
735 | .map-ctrl:hover {
736 | color: rgba(233, 233, 233, 1);
737 | }
738 | .zoom-out {
739 | bottom: 110px;
740 | }
741 | .zoom-in {
742 | bottom: 70px;
743 | }
744 | .my-alert {
745 | position: absolute;
746 | height: 100%;
747 | width: 100%;
748 | left: 0px;
749 | top: 0px;
750 | background-color: rgba(0,0,0,.5);
751 | text-align:center;
752 | z-index: 100001;
753 | display: none;
754 | }
755 | .my-alert p {
756 | position: absolute;
757 | top: 200px;
758 | text-align: center;
759 | height: 50px;
760 | width: 860px;
761 | font-size: 18px;
762 | color: #F54336;
763 | left: 50%;
764 | margin-left: -430px;
765 | }
766 | .my-alert .close {
767 | position: absolute;
768 | height: 30px;
769 | width: 30px;
770 | right: 0;
771 | top: -50px;
772 | font-size: 24px;
773 | cursor: pointer;
774 | color: rgba(211, 211, 211, 0.8);
775 | }
776 | .my-alert .close:hover {
777 | color: rgba(233, 233, 233, 1);
778 | }
779 | #old-link {
780 | color: #ccc;
781 | }
782 | ::-webkit-scrollbar {
783 | width: 14px;
784 | height: 14px;
785 | }
786 | ::-webkit-scrollbar-track,
787 | ::-webkit-scrollbar-thumb {
788 | border-radius: 999px;
789 | border: 5px solid transparent;
790 | }
791 | ::-webkit-scrollbar-track {
792 | box-shadow: 1px 1px 5px rgba(0, 0, 0, .2) inset;
793 | }
794 | ::-webkit-scrollbar-thumb {
795 | min-height: 20px;
796 | background-clip: content-box;
797 | box-shadow: 0 0 0 5px rgba(0, 0, 0, .2) inset;
798 | background-color: rgba(80, 102, 127, 0.7);
799 | }
800 | ::-webkit-scrollbar-corner {
801 | background: transparent;
802 | }
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/data/list.json:
--------------------------------------------------------------------------------
1 | {
2 | "status": 0,
3 | "size": 4,
4 | "total": 4,
5 | "pois": [{
6 | "city": "来宾市",
7 | "create_time": "2014-10-17 10:46:11",
8 | "district": "兴宾区",
9 | "loc_time": 1413526633,
10 | "location": [
11 | 109.23276173322,
12 | 23.751021734754
13 | ],
14 | "modify_time": "2014-10-17 14:17:01",
15 | "province": "广西壮族自治区",
16 | "title": null,
17 | "track_name": "唐G12001",
18 | "city_id": 202,
19 | "track_id": 517118819
20 | }, {
21 | "city": "常州市",
22 | "create_time": "2014-10-17 09:28:03",
23 | "district": "武进区",
24 | "loc_time": 1413526632,
25 | "location": [
26 | 119.83801525967,
27 | 31.81347898519
28 | ],
29 | "modify_time": "2014-10-17 14:16:59",
30 | "province": "江苏省",
31 | "title": null,
32 | "track_name": "宋D66754",
33 | "city_id": 348,
34 | "track_id": 516977414
35 | }, {
36 | "city": "常州市",
37 | "create_time": "2014-10-17 08:04:05",
38 | "district": "金坛市",
39 | "loc_time": 1413525940,
40 | "location": [
41 | 119.60296060637,
42 | 31.744964416469
43 | ],
44 | "modify_time": "2014-10-17 14:05:33",
45 | "province": "江苏省",
46 | "title": null,
47 | "track_name": "元D33567",
48 | "city_id": 348,
49 | "track_id": 516915570
50 | }, {
51 | "city": "金华市",
52 | "create_time": "2014-10-17 08:59:12",
53 | "district": "义乌市",
54 | "loc_time": 1413526668,
55 | "location": [
56 | 120.14057421723,
57 | 29.320655146984
58 | ],
59 | "modify_time": "2014-10-17 14:16:59",
60 | "province": "浙江省",
61 | "title": null,
62 | "track_name": "明GC9D99",
63 | "city_id": 333,
64 | "track_id": 516922851
65 | }],
66 | "message": "成功"
67 | }
68 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/data/trace.json:
--------------------------------------------------------------------------------
1 | {
2 | "status": 0,
3 | "actives": 0,
4 | "service": {
5 | "name": "车辆示例平台",
6 | "create_time": "2014-10-13 17:39:35",
7 | "modify_time": "2014-10-13 17:39:35",
8 | "service_id": 81142,
9 | "columns": [
10 | {
11 | "key": "loc_time",
12 | "type": 1,
13 | "name": "loc_time",
14 | "is_sortfilter_field": 1,
15 | "sortfilter_id": 1,
16 | "is_search_field": 0,
17 | "is_index_field": 1,
18 | "is_unique_field": 0,
19 | "create_time": "2014-10-13 17:39:34",
20 | "modify_time": "2014-10-13 17:39:34",
21 | "column_id": 80797,
22 | "service_id": 81142
23 | },
24 | {
25 | "key": "track_name",
26 | "type": 3,
27 | "name": "车牌号",
28 | "max_length": 512,
29 | "is_sortfilter_field": 0,
30 | "is_search_field": 1,
31 | "is_index_field": 1,
32 | "is_unique_field": 1,
33 | "create_time": "2014-10-13 17:39:34",
34 | "modify_time": "2014-10-13 17:39:34",
35 | "column_id": 80796,
36 | "service_id": 81142
37 | }
38 | ]
39 | },
40 | "message": "成功"
41 | }
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.7_Wechat/app/static/favicon.ico
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/images/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.7_Wechat/app/static/images/11.png
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/images/loading-1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.7_Wechat/app/static/images/loading-1.gif
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/js/baiduTemplate.js:
--------------------------------------------------------------------------------
1 | /**
2 | * baiduTemplate简单好用的Javascript模板引擎 1.0.6 版本
3 | * http://baidufe.github.com/BaiduTemplate
4 | * 开源协议:BSD License
5 | * 浏览器环境占用命名空间 baidu.template ,nodejs环境直接安装 npm install baidutemplate
6 | * @param str{String} dom结点ID,或者模板string
7 | * @param data{Object} 需要渲染的json对象,可以为空。当data为{}时,仍然返回html。
8 | * @return 如果无data,直接返回编译后的函数;如果有data,返回html。
9 | * @author wangxiao
10 | * @email 1988wangxiao@gmail.com
11 | */
12 |
13 | ;
14 | (function(window) {
15 |
16 | //取得浏览器环境的baidu命名空间,非浏览器环境符合commonjs规范exports出去
17 | //修正在nodejs环境下,采用baidu.template变量名
18 | var baidu = typeof module === 'undefined' ? (window.baidu = window.baidu || {}) : module.exports;
19 |
20 | //模板函数(放置于baidu.template命名空间下)
21 | baidu.template = function(str, data) {
22 |
23 | //检查是否有该id的元素存在,如果有元素则获取元素的innerHTML/value,否则认为字符串为模板
24 | var fn = (function() {
25 |
26 | //判断如果没有document,则为非浏览器环境
27 | if(!window.document) {
28 | return bt._compile(str);
29 | };
30 |
31 | //HTML5规定ID可以由任何不包含空格字符的字符串组成
32 | var element = document.getElementById(str);
33 | if(element) {
34 |
35 | //取到对应id的dom,缓存其编译后的HTML模板函数
36 | if(bt.cache[str]) {
37 | return bt.cache[str];
38 | };
39 |
40 | //textarea或input则取value,其它情况取innerHTML
41 | var html = /^(textarea|input)$/i.test(element.nodeName) ? element.value : element.innerHTML;
42 | return bt._compile(html);
43 |
44 | } else {
45 |
46 | //是模板字符串,则生成一个函数
47 | //如果直接传入字符串作为模板,则可能变化过多,因此不考虑缓存
48 | return bt._compile(str);
49 | };
50 |
51 | })();
52 |
53 | //有数据则返回HTML字符串,没有数据则返回函数 支持data={}的情况
54 | var result = bt._isObject(data) ? fn(data) : fn;
55 | fn = null;
56 |
57 | return result;
58 | };
59 |
60 | //取得命名空间 baidu.template
61 | var bt = baidu.template;
62 |
63 | //标记当前版本
64 | bt.versions = bt.versions || [];
65 | bt.versions.push('1.0.6');
66 |
67 | //缓存 将对应id模板生成的函数缓存下来。
68 | bt.cache = {};
69 |
70 | //自定义分隔符,可以含有正则中的字符,可以是HTML注释开头
71 | bt.LEFT_DELIMITER = bt.LEFT_DELIMITER || '<%';
72 | bt.RIGHT_DELIMITER = bt.RIGHT_DELIMITER || '%>';
73 |
74 | //自定义默认是否转义,默认为默认自动转义
75 | bt.ESCAPE = true;
76 |
77 | //HTML转义
78 | bt._encodeHTML = function(source) {
79 | return String(source)
80 | .replace(/&/g, '&')
81 | .replace(//g, '>')
83 | .replace(/\\/g, '\')
84 | .replace(/"/g, '"')
85 | .replace(/'/g, ''');
86 | };
87 |
88 | //转义影响正则的字符
89 | bt._encodeReg = function(source) {
90 | return String(source).replace(/([.*+?^=!:${}()|[\]/\\])/g, '\\$1');
91 | };
92 |
93 | //转义UI UI变量使用在HTML页面标签onclick等事件函数参数中
94 | bt._encodeEventHTML = function(source) {
95 | return String(source)
96 | .replace(/&/g, '&')
97 | .replace(//g, '>')
99 | .replace(/"/g, '"')
100 | .replace(/'/g, ''')
101 | .replace(/\\\\/g, '\\')
102 | .replace(/\\\//g, '\/')
103 | .replace(/\\n/g, '\n')
104 | .replace(/\\r/g, '\r');
105 | };
106 |
107 | //将字符串拼接生成函数,即编译过程(compile)
108 | bt._compile = function(str) {
109 | var funBody = "var _template_fun_array=[];\nvar fn=(function(__data__){\nvar _template_varName='';\nfor(name in __data__){\n_template_varName+=('var '+name+'=__data__[\"'+name+'\"];');\n};\neval(_template_varName);\n_template_fun_array.push('" + bt._analysisStr(str) + "');\n_template_varName=null;\n})(_template_object);\nfn = null;\nreturn _template_fun_array.join('');\n";
110 | return new Function("_template_object", funBody);
111 | };
112 |
113 | //判断是否是Object类型
114 | bt._isObject = function(source) {
115 | return 'function' === typeof source || !!(source && 'object' === typeof source);
116 | };
117 |
118 | //解析模板字符串
119 | bt._analysisStr = function(str) {
120 |
121 | //取得分隔符
122 | var _left_ = bt.LEFT_DELIMITER;
123 | var _right_ = bt.RIGHT_DELIMITER;
124 |
125 | //对分隔符进行转义,支持正则中的元字符,可以是HTML注释
126 | var _left = bt._encodeReg(_left_);
127 | var _right = bt._encodeReg(_right_);
128 |
129 | str = String(str)
130 |
131 | //去掉分隔符中js注释
132 | .replace(new RegExp("(" + _left + "[^" + _right + "]*)//.*\n", "g"), "$1")
133 |
134 | //去掉注释内容 <%* 这里可以任意的注释 *%>
135 | //默认支持HTML注释,将HTML注释匹配掉的原因是用户有可能用 来做分割符
136 | .replace(new RegExp("", "g"), "")
137 | .replace(new RegExp(_left + "\\*.*?\\*" + _right, "g"), "")
138 |
139 | //把所有换行去掉 \r回车符 \t制表符 \n换行符
140 | .replace(new RegExp("[\\r\\t\\n]", "g"), "")
141 |
142 | //用来处理非分隔符内部的内容中含有 斜杠 \ 单引号 ‘ ,处理办法为HTML转义
143 | .replace(new RegExp(_left + "(?:(?!" + _right + ")[\\s\\S])*" + _right + "|((?:(?!" + _left + ")[\\s\\S])+)", "g"), function(item, $1) {
144 | var str = '';
145 | if($1) {
146 |
147 | //将 斜杠 单引 HTML转义
148 | str = $1.replace(/\\/g, "\").replace(/'/g, ''');
149 | while(/<[^<]*?'[^<]*?>/g.test(str)) {
150 |
151 | //将标签内的单引号转义为\r 结合最后一步,替换为\'
152 | str = str.replace(/(<[^<]*?)'([^<]*?>)/g, '$1\r$2')
153 | };
154 | } else {
155 | str = item;
156 | }
157 | return str;
158 | });
159 |
160 |
161 | str = str
162 | //定义变量,如果没有分号,需要容错 <%var val='test'%>
163 | .replace(new RegExp("(" + _left + "[\\s]*?var[\\s]*?.*?[\\s]*?[^;])[\\s]*?" + _right, "g"), "$1;" + _right_)
164 |
165 | //对变量后面的分号做容错(包括转义模式 如<%:h=value%>) <%=value;%> 排除掉函数的情况 <%fun1();%> 排除定义变量情况 <%var val='test';%>
166 | .replace(new RegExp("(" + _left + ":?[hvu]?[\\s]*?=[\\s]*?[^;|" + _right + "]*?);[\\s]*?" + _right, "g"), "$1" + _right_)
167 |
168 | //按照 <% 分割为一个个数组,再用 \t 和在一起,相当于将 <% 替换为 \t
169 | //将模板按照<%分为一段一段的,再在每段的结尾加入 \t,即用 \t 将每个模板片段前面分隔开
170 | .split(_left_).join("\t");
171 |
172 | //支持用户配置默认是否自动转义
173 | if(bt.ESCAPE) {
174 | str = str
175 |
176 | //找到 \t=任意一个字符%> 替换为 ‘,任意字符,'
177 | //即替换简单变量 \t=data%> 替换为 ',data,'
178 | //默认HTML转义 也支持HTML转义写法<%:h=value%>
179 | .replace(new RegExp("\\t=(.*?)" + _right, "g"), "',typeof($1) === 'undefined'?'':baidu.template._encodeHTML($1),'");
180 | } else {
181 | str = str
182 |
183 | //默认不转义HTML转义
184 | .replace(new RegExp("\\t=(.*?)" + _right, "g"), "',typeof($1) === 'undefined'?'':$1,'");
185 | };
186 |
187 | str = str
188 |
189 | //支持HTML转义写法<%:h=value%>
190 | .replace(new RegExp("\\t:h=(.*?)" + _right, "g"), "',typeof($1) === 'undefined'?'':baidu.template._encodeHTML($1),'")
191 |
192 | //支持不转义写法 <%:=value%>和<%-value%>
193 | .replace(new RegExp("\\t(?::=|-)(.*?)" + _right, "g"), "',typeof($1)==='undefined'?'':$1,'")
194 |
195 | //支持url转义 <%:u=value%>
196 | .replace(new RegExp("\\t:u=(.*?)" + _right, "g"), "',typeof($1)==='undefined'?'':encodeURIComponent($1),'")
197 |
198 | //支持UI 变量使用在HTML页面标签onclick等事件函数参数中 <%:v=value%>
199 | .replace(new RegExp("\\t:v=(.*?)" + _right, "g"), "',typeof($1)==='undefined'?'':baidu.template._encodeEventHTML($1),'")
200 |
201 | //将字符串按照 \t 分成为数组,在用'); 将其合并,即替换掉结尾的 \t 为 ');
202 | //在if,for等语句前面加上 '); ,形成 ');if ');for 的形式
203 | .split("\t").join("');")
204 |
205 | //将 %> 替换为_template_fun_array.push('
206 | //即去掉结尾符,生成函数中的push方法
207 | //如:if(list.length=5){%>',list[4],'
');}
208 | //会被替换为 if(list.length=5){_template_fun_array.push('',list[4],'
');}
209 | .split(_right_).join("_template_fun_array.push('")
210 |
211 | //将 \r 替换为 \
212 | .split("\r").join("\\'");
213 |
214 | return str;
215 | };
216 |
217 | })(window);
218 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/js/demoTrack.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @file overview demoTrack.js
3 | * @Author: xuguanlong
4 | * @Date: 2015-11-03 16:10:57
5 | * @Last Modified by: xuguanlong
6 | * @Last Modified time: 2015-11-03 19:38:23
7 | */
8 |
9 | $(document).ready(function () {
10 | function init() {
11 | var dataBox = require('track/demo');
12 | dataBox.initEvents();
13 | dataBox.getTraceDetail();
14 | }
15 | try {
16 | init();
17 | } catch (e) {
18 | setTimeout(function () {
19 | init();
20 | }, 1000);
21 | }
22 |
23 | });
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/js/esl/css.js:
--------------------------------------------------------------------------------
1 | /**
2 | * ESL (Enterprise Standard Loader)
3 | * Copyright 2013 Baidu Inc. All rights reserved.
4 | *
5 | * @file CSS Loader-Plugin
6 | * @author errorrik(errorrik@gmail.com)
7 | */
8 |
9 | // 构建环境暂不支持分析,为了能合并该plugin到loader里,
10 | // 只能暂时使用具名id
11 | define( 'css', {
12 | load: function ( resourceId, req, load, config ) {
13 | var link = document.createElement( 'link' );
14 | link.setAttribute( 'rel', 'stylesheet' );
15 | link.setAttribute( 'type', 'text/css' );
16 | link.setAttribute( 'href', req.toUrl( resourceId ) );
17 |
18 | var parent = document.getElementsByTagName( 'head' )[ 0 ] || document.body;
19 | parent.appendChild( link );
20 |
21 | parent = null;
22 | link = null;
23 |
24 | load( true );
25 | }
26 | } );
27 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/js/esl/js.js:
--------------------------------------------------------------------------------
1 | /**
2 | * ESL (Enterprise Standard Loader)
3 | * Copyright 2013 Baidu Inc. All rights reserved.
4 | *
5 | * @file JS Loader-Plugin
6 | * @author errorrik(errorrik@gmail.com)
7 | */
8 |
9 | // 构建环境暂不支持分析,为了能合并该plugin到loader里,
10 | // 只能暂时使用具名id
11 | define( 'js', {
12 | load: function ( resourceId, req, load, config ) {
13 | var script = document.createElement( 'script' );
14 | script.src = req.toUrl( resourceId );
15 | script.async = true;
16 | if ( script.readyState ) {
17 | script.onreadystatechange = onload;
18 | }
19 | else {
20 | script.onload = onload;
21 | }
22 |
23 | var parent = document.getElementsByTagName( 'head' )[ 0 ] || document.body;
24 | parent.appendChild( script ) && ( parent = null );
25 |
26 | function onload() {
27 | var readyState = script.readyState;
28 | if (
29 | typeof readyState == 'undefined'
30 | || /^(loaded|complete)$/.test( readyState )
31 | ) {
32 | script.onload = script.onreadystatechange = null;
33 | script = null;
34 | load( true );
35 | }
36 | }
37 | }
38 | } );
39 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/js/jquery.pagination.js:
--------------------------------------------------------------------------------
1 | /**
2 | * This jQuery plugin displays pagination links inside the selected elements.
3 | *
4 | * @author Gabriel Birke (birke *at* d-scribe *dot* de)
5 | * @version 1.2
6 | * @param {int} maxentries Number of entries to paginate
7 | * @param {Object} opts Several options (see README for documentation)
8 | * @return {Object} jQuery Object
9 | */
10 | jQuery.fn.pagination = function(maxentries, opts){
11 | opts = jQuery.extend({
12 | items_per_page:10,
13 | num_display_entries:10,
14 | current_page:0,
15 | num_edge_entries:0,
16 | link_to:"javascript:void(0)",
17 | prev_text:"Prev",
18 | next_text:"Next",
19 | ellipse_text:"...",
20 | prev_show_always:true,
21 | next_show_always:true,
22 | callback:function(){return false;}
23 | },opts||{});
24 |
25 | return this.each(function() {
26 | /**
27 | * Calculate the maximum number of pages
28 | */
29 | function numPages() {
30 | return Math.ceil(maxentries/opts.items_per_page);
31 | }
32 |
33 | /**
34 | * Calculate start and end point of pagination links depending on
35 | * current_page and num_display_entries.
36 | * @return {Array}
37 | */
38 | function getInterval() {
39 | var ne_half = Math.ceil(opts.num_display_entries/2);
40 | var np = numPages();
41 | var upper_limit = np-opts.num_display_entries;
42 | var start = current_page>ne_half?Math.max(Math.min(current_page-ne_half, upper_limit), 0):0;
43 | var end = current_page>ne_half?Math.min(current_page+ne_half, np):Math.min(opts.num_display_entries, np);
44 | return [start,end];
45 | }
46 |
47 | /**
48 | * This is the event handling function for the pagination links.
49 | * @param {int} page_id The new page number
50 | */
51 | function pageSelected(page_id, evt){
52 | current_page = page_id;
53 | drawLinks();
54 | var continuePropagation = opts.callback(page_id, panel);
55 | if (!continuePropagation) {
56 | if (evt.stopPropagation) {
57 | evt.stopPropagation();
58 | }
59 | else {
60 | evt.cancelBubble = true;
61 | }
62 | }
63 | return continuePropagation;
64 | }
65 |
66 | /**
67 | * This function inserts the pagination links into the container element
68 | */
69 | function drawLinks() {
70 | panel.empty();
71 | var interval = getInterval();
72 | var np = numPages();
73 | // This helper function returns a handler function that calls pageSelected with the right page_id
74 | var getClickHandler = function(page_id) {
75 | return function(evt){ return pageSelected(page_id,evt); }
76 | }
77 | // Helper function for generating a single link (or a span tag if it's the current page)
78 | var appendItem = function(page_id, appendopts){
79 | page_id = page_id<0?0:(page_id"+(appendopts.text)+"");
83 | }
84 | else
85 | {
86 | var lnk = jQuery(""+(appendopts.text)+"")
87 | .bind("click", getClickHandler(page_id))
88 | .attr('href', opts.link_to.replace(/__id__/,page_id));
89 |
90 |
91 | }
92 | if(appendopts.classes){lnk.addClass(appendopts.classes);}
93 | panel.append(lnk);
94 | }
95 | // Generate "Previous"-Link
96 | if(opts.prev_text && (current_page > 0 || opts.prev_show_always)){
97 | appendItem(current_page-1,{text:opts.prev_text, classes:"prev"});
98 | }
99 | // Generate starting points
100 | if (interval[0] > 0 && opts.num_edge_entries > 0)
101 | {
102 | var end = Math.min(opts.num_edge_entries, interval[0]);
103 | for(var i=0; i"+opts.ellipse_text+"").appendTo(panel);
109 | }
110 | }
111 | // Generate interval links
112 | for(var i=interval[0]; i 0)
117 | {
118 | if(np-opts.num_edge_entries > interval[1]&& opts.ellipse_text)
119 | {
120 | jQuery(""+opts.ellipse_text+"").appendTo(panel);
121 | }
122 | var begin = Math.max(np-opts.num_edge_entries, interval[1]);
123 | for(var i=begin; i 0) {
145 | pageSelected(current_page - 1);
146 | return true;
147 | }
148 | else {
149 | return false;
150 | }
151 | }
152 | this.nextPage = function(){
153 | if(current_page < numPages()-1) {
154 | pageSelected(current_page+1);
155 | return true;
156 | }
157 | else {
158 | return false;
159 | }
160 | }
161 | // When all initialisation is done, draw the links
162 | drawLinks();
163 | // call callback function
164 | //opts.callback(current_page, this);
165 | });
166 | }
167 |
168 |
169 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/static/js/mousewheel.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * jQuery Mousewheel 3.1.13
3 | *
4 | * Copyright 2015 jQuery Foundation and other contributors
5 | * Released under the MIT license.
6 | * http://jquery.org/license
7 | */
8 | !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})});
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/templates/404.html:
--------------------------------------------------------------------------------
1 | {% block title %}Runmap - Page Not Found{% endblock %}
2 |
3 | {% block page_content %}
4 |
7 | {% endblock %}
8 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/templates/500.html:
--------------------------------------------------------------------------------
1 | {% block title %}Runmap - Internal Server Error{% endblock %}
2 |
3 | {% block page_content %}
4 |
7 | {% endblock %}
8 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/templates/backup.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 | {% block page_content %}
10 |
11 | {% endblock %}
12 | 单个标注点沿直线的轨迹运动
13 |
14 |
15 |
16 |
17 |
18 |
80 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/templates/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | RUNMAP
5 |
6 |
7 |
47 |
48 |
49 |
50 |
51 |
52 |
144 |
145 |
146 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/templates/index.html.1:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
10 | RUNMAP
11 |
12 |
13 |
14 |
54 |
55 |
93 |
94 |
95 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/app/templates/yingyan.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 百度鹰眼
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
38 |
41 |
42 |
43 |

44 |
45 |
46 |
47 |
48 |
49 |
50 |
已选
51 |
清除已选
52 |
53 |
54 |
55 |
56 |
57 |
58 |
查询日期
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
已选
69 |
清除已选
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |

79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
请先勾选需要统计的轨迹!
88 |

89 |
统计
90 |
91 |
92 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
118 |
135 |
136 |
137 |
266 |
267 |
268 |
269 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/config.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import os
4 | basedir = os.path.abspath(os.path.dirname(__file__))
5 |
6 |
7 | class Config:
8 | API_KEY = os.environ.get('API_KEY')
9 |
10 | @staticmethod
11 | def init_app(app):
12 | pass
13 |
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/favicon.ico:
--------------------------------------------------------------------------------
1 | app/static/favicon.ico
--------------------------------------------------------------------------------
/MVP_V0.7_Wechat/runapp.py:
--------------------------------------------------------------------------------
1 | python app.py runserver --host 0.0.0.0 --port 80 -d
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | ## 开发
3 | + Fork: [Github](https://github.com/shawn0lee0/RUNMAP)
4 | + 发起人所在城市:浙江杭州
5 | + 发起人的优势:七年电子产品开发经验,十年体育竞技类游戏骨灰玩家
6 | + 已知的技术难点:
7 | + LBS技术
8 | + 前端
9 | + [WebApp](https://developers.google.com/web/updates/2014/11/Support-for-installable-web-apps-with-webapp-manifest-in-chrome-38-for-Android)
10 | + 服务器架构
11 | + 图形生成
12 | + web前端浏览器内嵌js脚本生成,可调用api接口
13 | + 后台管理数据可用py实现数据可视化管理;
14 | + 用户认证
15 | + 利用现成模块
16 | + 积分反馈(MVP先不做)
17 | + 现有的代码基础:入门
18 | + 问题场景,以及解决思路:见上述分析。
19 | + 未来发展策划
20 | + 市场:开源软件+智能硬件接入
21 | + 潜在用户画像:
22 | + 小明码了一整天的电脑,想参加运动,但是迟迟迈不开第一步;
23 | + 小强每天在小区跑步,跑来跑去都是同样的路线;
24 | + Nike团队在西湖边画上一个10KM的√ , 三叶草团队暗自忧伤。。。
25 | + Github成员通过运动轨迹联线。。
26 | + 小明因经常在小区跑步,系统自动将他周边2km地盘设定为他所有,任意闯入报警提示,并发出战书是否PK?胜利者获得对方地盘10%领地。。。来吧。。攻城掠地
27 | + 系统压力预测:
28 | + 开智群内测吧~
29 | +
30 | + 如何加入:
31 | + [fork](https://github.com/shawn0lee0/RUNMAP)
32 | + [Gmail](mailto:run-map@googlegroups.com?subject=反馈)
33 | + [开发群通讯录](http://qun.hk/b/6427c35cd44c)
34 |
35 | + [目前成员:](https://github.com/shawn0lee0/RUNMAP/issues/3)
36 | + WEB架构+优化:[@Lcking](https://github.com/Lcking)
37 | + 服务器后台:[@bingosummer](https://github.com/bingosummer),[@shawn0lee0](https://github.com/shawn0lee0/RUNMAP),[@Lcking](https://github.com/Lcking)
38 | + 观察、测试:
39 | + 原型设计分析:[@Acural](https://github.com/Acural),[@Lcking](https://github.com/Lcking)
40 | + 用户行为分析:[@wwshen](https://github.com/wwshen),[植入观察@aJiea](https://github.com/aJiea)
41 | + 观察员:开发过程中所有相关工作文档整理、api接口梳理、测试笔记,知识管理(能够相关联起来)
42 | + 测试:全员参与|友情测试@qingquan0083
43 | + 程序猿鼓励师:[@wwshen](https://github.com/wwshen),@aJiea,@shawn0lee0
44 | + 有余力:思考web与ios/android GPS模块调用
45 |
46 | + 欢迎其他团队一起Fork
47 |
48 |
49 |
50 | ## 版本规划:
51 | + 第1周:MVP
52 | + DAY1:功能精简、搭平台、熟悉API
53 | + [交互效果V1.0](https://modao.cc/app/wZtUeShfg7Q8DGUeembZ)
54 | + 
55 | + DAY2:[√]MVP_0.1 实现CLI地址、坐标解析,该结构可适用于后期api调用
56 | + DAY3:--2015年12月9日
57 | + [ ]交互页面V1.1初稿、说明文档(墨刀、layoutit.com)
58 | + [ ]web架构MVP
59 | + []本地运行版本实现:框架:flask
60 | + []云平台选择:云os/sinasae/七牛 原则:优先考虑国内服务器。
61 | + []公网版本MVP
62 | + []通过域名访问
63 | + []获取ip.gps 通过webapi解析
64 | + [ ]服务端后台MVP
65 | + [][数据表属性字段定义完善](http://developer.baidu.com/map/index.php?title=yingyan/api/entity)
66 | + []上传本地gps信息并解析
67 | + []可查询历史轨迹
68 | + DAY4:
69 | + []页面定稿&文档
70 | + []Web + html +(js)接口融合
71 | + []优化、测试
72 | + DAY5/6:核心功能模块开发、优化
73 | + []后台轨迹实时监控存储
74 | + []后台历史轨迹查询
75 | + []时间戳
76 | + []多轨迹统计分析(轨迹活跃度|时间)
77 |
78 | + DAY7:独立模块内测、迭代
79 | + 第2周:优化迭代
80 | + DAY1:
81 | + 增加覆盖物[(制定跑图图案)](http://developer.baidu.com/map/jsdemo.htm#a1_2)
82 | + 轨迹完成度匹配分析--进度条
83 | + DAY2:
84 | + 优化覆盖物[(制定跑图图案)](http://developer.baidu.com/map/jsdemo.htm#a1_2)
85 | + [加载pm2.5天气信息](http://developer.baidu.com/map/index.php?title=car/api/weather)
86 | + [结合历史轨迹数据进度完成情况,酌情生成地理围栏](http://developer.baidu.com/map/index.php?title=yingyan/api/fence)
87 | + DAY3:优化、测试、迭代
88 | + DAY4:
89 | + []用户认证
90 | + DAY5:
91 | + []用户认证
92 | + []自定义图形导航
93 | + DAY6:预发布
94 | + DAY7:迭代
95 | + 第3周:测试、输出
96 | + DAY1:单元测试(相关函数穷举测试)
97 | + DAY2:单元测试(相关函数穷举测试)
98 | + DAY3:整体测试→更新→分支版本输出|操作文档编辑整理|演示素材收集整理
99 | + DAY4:分支版本小范围群测|操作文档编辑整理|演示素材收集整理
100 | + DAY5:群测反馈,修改,更新|操作文档定稿|路演视频初版
101 | + DAY6:预发布||路演视频定稿
102 | + DAY7:检查,总结
103 |
104 | + 代码交流:
105 | + [有道协作群 群号:15172380](http://163.fm/bCEj1yB)
106 | + Wechat群组:个人号:robo_one申请验证后拉群。
107 | + [Google run-map Group](mailto:run-map@googlegroups.com?subject=反馈)
108 | + 代码合并
109 | + 运行
110 | + 测试
111 | + 任务:
112 | + 认领
113 | + 分配
114 | + 指派
115 | + 追踪
116 | + 交付
117 | + 关闭
118 |
119 |
120 |
121 | 技术
122 |
123 | + [百度鹰眼](http://yingyan.baidu.com/)
124 | + [高德LBS开放平台](http://lbs.amap.com/api/javascript-api/reference/plugin/#m_AMap.Geolocation)
125 | + [腾讯LBS开放平台](http://lbs.qq.com/)
126 | + [看板管理](http://www.infoq.com/cn/articles/agile-kanban-boards)
127 | + [《看板方法》](http://book.douban.com/subject/25788807/)
128 | + 版本控制:
129 | + [Git分支管理策略](http://www.ruanyifeng.com/blog/2012/07/git.html)
130 | + [Gitflow](https://github.com/nvie/gitflow/)
131 | + [Managing branches in your repository](https://help.github.com/articles/managing-branches-in-your-repository/)
132 |
133 | ## 意见反馈
134 |
135 | [调查问卷](https://jinshuju.net/f/T85Nps)
136 |
137 | ## 版权
138 |
139 | [本作品采用知识共享许可协议](http://creativecommons.org/licenses/by-nc-sa/3.0)
140 |
141 | 
142 |
143 | 知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议
144 |
145 |
146 | 进行许可。
--------------------------------------------------------------------------------
/doc/nengji.md:
--------------------------------------------------------------------------------
1 | # 能技
2 |
3 | 简单整理下,课程开展以来,get的能技,以及你仍然可以jump到的能技
4 |
5 | ## 思维模式
6 |
7 | + 发散思维(导图)
8 | + 平行思维
9 | + 金字塔思维
10 |
11 | 发散思维我在每周课程笔记,C2T2纪要中都有分享,
12 | 优势:快,人脑对图像比文字更直观
13 | 劣势:知识不去细化巩固,容易遗忘
14 |
15 |
16 | >真正导致人与人之间知识水平差异的,往往并不是知识数量,而是知识之间的联系。而且随着知识的增多,建立联系的收获也会越来越大。
17 |
18 | ## 如何破:
19 | + 抓住思维中的核心观点,找出它的知识联系
20 | + 自己思考,哪些问题可以用这个观点解释?有1.2.3.……种解释(大妈式逻辑)
21 | + 用自己的例子“解释”而不是官方就是这样做的…
22 | + 我的能技、知识哪些可以利用这些观点改善?
23 | + 挖梗--寻找事物背后的原因,时间允许大量快速浏览,说不定你哪个项目正好用到这个梗
24 |
25 | 平行思维,在做产品需求评审时候非常适合,它决定了你的项目不要做什么功能……
26 |
27 | 金字塔思维,如同大妈课程介绍的电梯30秒原则,结论先行,以上统下,归纳分类,逻辑递进。
28 | 这也相当于给提问者提出一个要求:
29 |
30 | > 一个问题30秒都解释不清楚,基本上很难说清了。。。
31 |
32 |
33 |
34 | * * *
35 |
36 | ## 技能
37 |
38 | 下面是产品开发深入阶段,一些需要的技能汇总:
39 |
40 | ### 思维方式
41 | + 换位思考
42 | + 从使用者角度考虑问题
43 | + 对人性的理解
44 | + 不要去改变用户的习惯
45 | + 不要给用户太多选择
46 | + 不要轻易的降低积分,除非你想失去Ta
47 | + 人是群居,喜欢社交,喜欢分享
48 | + 互联网思维
49 | + 免费
50 | + 快
51 | + 链接
52 | + 匠人精神
53 | + 简单的工作做到极致
54 | + 逻辑思维
55 | + 沟通
56 | + 文档条理
57 | + 商业嗅觉
58 |
59 | ### 能力
60 | + 学习能力
61 | + 主动查阅英文原版文档
62 | + 关键词提炼
63 | + 读书方法
64 | + 创新
65 | + 脑暴
66 | + 脑洞
67 | + 沟通
68 | + 最重要的:执行力
69 | + 有待提高(;′⌒`)
70 |
71 | ###工具
72 | + Python
73 | + ipython
74 | + notebook
75 | + Git
76 | + markdown
77 | + mindjet
78 | + 原型设计
79 | + 墨刀
80 | + Mockplus
81 | + Chinco
82 | + 协作
83 | + 有道云
84 | + 虚拟机
85 | + vitrulBox
86 | + 安卓模拟器:Genymotion
87 | + H5(展示、发布)
88 | + [Maka](http://www.maka.im/)
89 | + 图床
90 | + [七牛云存储](https://portal.qiniu.com/tutorial/index)
91 |
92 | ###管理
93 | + 个人管理
94 | + 团队管理
95 | + 时间
96 | + [《把时间当做朋友》-李笑来](http://book.douban.com/subject/25749845/)
97 | + 进度
98 | + 知识
99 | + 情绪
100 |
101 | ###专业:
102 | + 同行分析
103 | + 调研
104 | + 需求提取、评估、筛选
105 | + 规划
106 | + 策划
107 | + 文档撰写、管理
108 | + 测试、监控
109 | + 数据分析
110 |
111 | 如果还要说什么,应该是审美的眼力,发现美好!
112 | Enjoy
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 | 
127 |
128 |
129 | ## 广告时间
130 |
131 |
132 | 团队成员:
133 | @bingosummer --微软开发
134 | @Vivienwwshen --认知心理
135 | @ Lcking -- SEO(搜索引擎优化)
136 | @ Chen_shen_yu 金融
137 | @ Myself --智慧工业
138 |
139 | 友情测试:@qingquan0083
140 |
141 |
142 | 项目链接:https://github.com/shawn0lee0/RUNMAP
143 | 期待您的加入∩_∩
144 |
--------------------------------------------------------------------------------