├── .gitignore ├── .swift-version ├── CONTRIBUTING.md ├── Package.resolved ├── Package.swift ├── Procfile ├── Public ├── .gitkeep ├── geo │ ├── bikes.geojson │ ├── hubs.geojson │ └── portland.geojson ├── images │ └── bike.svg ├── scripts │ └── application.js └── styles │ └── application.css ├── Resources └── Views │ └── map.leaf ├── Sources ├── App │ ├── Controllers │ │ └── .gitkeep │ ├── Models │ │ ├── .gitkeep │ │ └── MapKitJSToken.swift │ ├── app.swift │ ├── boot.swift │ ├── configure.swift │ └── routes.swift └── Run │ └── main.swift ├── Tests ├── AppTests │ └── AppTests.swift └── LinuxMain.swift ├── app.json ├── circle.yml └── web.Dockerfile /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.gitignore.io/api/vapor 3 | 4 | ### Vapor ### 5 | Config/secrets 6 | 7 | ### Vapor Patch ### 8 | Packages 9 | .build 10 | xcuserdata 11 | *.xcodeproj 12 | DerivedData/ 13 | .DS_Store 14 | 15 | # End of https://www.gitignore.io/api/vapor 16 | -------------------------------------------------------------------------------- /.swift-version: -------------------------------------------------------------------------------- 1 | 4.2.1 2 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Vapor Web Template 2 | 3 | If you found a mistake or think of a cool new feature, please [create an issue](https://github.com/vapor/web-template/issues/new) or, if you want to implement it yourself, [fork this repo](https://github.com/vapor/web-template/fork) and open a Pull Request! 4 | 5 | We'll take a look as soon as we can. 6 | 7 | Thanks! 8 | 9 | ## Maintainers 10 | 11 | - [@0xTim](https://github.com/0xTim) 12 | 13 | See the [Vapor maintainers doc](https://github.com/vapor/vapor/blob/master/Docs/maintainers.md) for more information. 14 | -------------------------------------------------------------------------------- /Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "object": { 3 | "pins": [ 4 | { 5 | "package": "Cryptor", 6 | "repositoryURL": "https://github.com/IBM-Swift/BlueCryptor.git", 7 | "state": { 8 | "branch": null, 9 | "revision": "fe59cc1fcabb390bf9b3b6dd4f8cacc897d91cf6", 10 | "version": "1.0.24" 11 | } 12 | }, 13 | { 14 | "package": "CryptorECC", 15 | "repositoryURL": "https://github.com/IBM-Swift/BlueECC.git", 16 | "state": { 17 | "branch": null, 18 | "revision": "6b7bc9e06a90f274ffeb26a08f70ba81c4b6ec81", 19 | "version": "1.1.0" 20 | } 21 | }, 22 | { 23 | "package": "CryptorRSA", 24 | "repositoryURL": "https://github.com/IBM-Swift/BlueRSA.git", 25 | "state": { 26 | "branch": null, 27 | "revision": "353ad7ff027fde129dfdcb30ce2f426b4e8f8466", 28 | "version": "1.0.25" 29 | } 30 | }, 31 | { 32 | "package": "Console", 33 | "repositoryURL": "https://github.com/vapor/console.git", 34 | "state": { 35 | "branch": null, 36 | "revision": "5b9796d39f201b3dd06800437abd9d774a455e57", 37 | "version": "3.0.2" 38 | } 39 | }, 40 | { 41 | "package": "Core", 42 | "repositoryURL": "https://github.com/vapor/core.git", 43 | "state": { 44 | "branch": null, 45 | "revision": "96ce86ebf9198328795c4b9cb711489460be083c", 46 | "version": "3.4.4" 47 | } 48 | }, 49 | { 50 | "package": "Crypto", 51 | "repositoryURL": "https://github.com/vapor/crypto.git", 52 | "state": { 53 | "branch": null, 54 | "revision": "5605334590affd4785a5839806b4504407e054ac", 55 | "version": "3.3.0" 56 | } 57 | }, 58 | { 59 | "package": "DatabaseKit", 60 | "repositoryURL": "https://github.com/vapor/database-kit.git", 61 | "state": { 62 | "branch": null, 63 | "revision": "3a17dbbe9be5f8c37703e4b7982c1332ad6b00c4", 64 | "version": "1.3.1" 65 | } 66 | }, 67 | { 68 | "package": "HTTP", 69 | "repositoryURL": "https://github.com/vapor/http.git", 70 | "state": { 71 | "branch": null, 72 | "revision": "272b22be8cb3364e42a4701c2e0676e37480ec5a", 73 | "version": "3.1.5" 74 | } 75 | }, 76 | { 77 | "package": "KituraContracts", 78 | "repositoryURL": "https://github.com/IBM-Swift/KituraContracts.git", 79 | "state": { 80 | "branch": null, 81 | "revision": "acfad5b37e70590261c1181b1ad29758d20bf167", 82 | "version": "1.1.1" 83 | } 84 | }, 85 | { 86 | "package": "Leaf", 87 | "repositoryURL": "https://github.com/vapor/leaf.git", 88 | "state": { 89 | "branch": null, 90 | "revision": "fc6a3938b1c7cfa49dc6b06e54d84179bdf92810", 91 | "version": "3.0.1" 92 | } 93 | }, 94 | { 95 | "package": "LoggerAPI", 96 | "repositoryURL": "https://github.com/IBM-Swift/LoggerAPI.git", 97 | "state": { 98 | "branch": null, 99 | "revision": "d0ccb4158b83f8692531892a9c894bb757593c6f", 100 | "version": "1.8.0" 101 | } 102 | }, 103 | { 104 | "package": "Multipart", 105 | "repositoryURL": "https://github.com/vapor/multipart.git", 106 | "state": { 107 | "branch": null, 108 | "revision": "e57007c23a52b68e44ebdfc70cbe882a7c4f1ec3", 109 | "version": "3.0.2" 110 | } 111 | }, 112 | { 113 | "package": "Routing", 114 | "repositoryURL": "https://github.com/vapor/routing.git", 115 | "state": { 116 | "branch": null, 117 | "revision": "3219e328491b0853b8554c5a694add344d2c6cfb", 118 | "version": "3.0.1" 119 | } 120 | }, 121 | { 122 | "package": "Service", 123 | "repositoryURL": "https://github.com/vapor/service.git", 124 | "state": { 125 | "branch": null, 126 | "revision": "281a70b69783891900be31a9e70051b6fe19e146", 127 | "version": "1.0.0" 128 | } 129 | }, 130 | { 131 | "package": "SwiftJWT", 132 | "repositoryURL": "https://github.com/IBM-Swift/Swift-JWT.git", 133 | "state": { 134 | "branch": null, 135 | "revision": "527e7577e928acb6a0f69c5badd934c82fb5abe7", 136 | "version": "3.3.0" 137 | } 138 | }, 139 | { 140 | "package": "swift-nio", 141 | "repositoryURL": "https://github.com/apple/swift-nio.git", 142 | "state": { 143 | "branch": null, 144 | "revision": "5d8148c8b45dfb449276557f22120694567dd1d2", 145 | "version": "1.9.5" 146 | } 147 | }, 148 | { 149 | "package": "swift-nio-ssl", 150 | "repositoryURL": "https://github.com/apple/swift-nio-ssl.git", 151 | "state": { 152 | "branch": null, 153 | "revision": "8380fa29a2af784b067d8ee01c956626ca29f172", 154 | "version": "1.3.1" 155 | } 156 | }, 157 | { 158 | "package": "swift-nio-ssl-support", 159 | "repositoryURL": "https://github.com/apple/swift-nio-ssl-support.git", 160 | "state": { 161 | "branch": null, 162 | "revision": "c02eec4e0e6d351cd092938cf44195a8e669f555", 163 | "version": "1.0.0" 164 | } 165 | }, 166 | { 167 | "package": "swift-nio-zlib-support", 168 | "repositoryURL": "https://github.com/apple/swift-nio-zlib-support.git", 169 | "state": { 170 | "branch": null, 171 | "revision": "37760e9a52030bb9011972c5213c3350fa9d41fd", 172 | "version": "1.0.0" 173 | } 174 | }, 175 | { 176 | "package": "TemplateKit", 177 | "repositoryURL": "https://github.com/vapor/template-kit.git", 178 | "state": { 179 | "branch": null, 180 | "revision": "db35b1c35aabd0f5db3abca0cfda7becfe9c43e2", 181 | "version": "1.1.0" 182 | } 183 | }, 184 | { 185 | "package": "URLEncodedForm", 186 | "repositoryURL": "https://github.com/vapor/url-encoded-form.git", 187 | "state": { 188 | "branch": null, 189 | "revision": "932024f363ee5ff59059cf7d67194a1c271d3d0c", 190 | "version": "1.0.5" 191 | } 192 | }, 193 | { 194 | "package": "Validation", 195 | "repositoryURL": "https://github.com/vapor/validation.git", 196 | "state": { 197 | "branch": null, 198 | "revision": "156f8adeac3440e868da3757777884efbc6ec0cc", 199 | "version": "2.1.0" 200 | } 201 | }, 202 | { 203 | "package": "Vapor", 204 | "repositoryURL": "https://github.com/vapor/vapor.git", 205 | "state": { 206 | "branch": null, 207 | "revision": "157d3b15336caa882662cc75024dd04b2e225246", 208 | "version": "3.1.0" 209 | } 210 | }, 211 | { 212 | "package": "WebSocket", 213 | "repositoryURL": "https://github.com/vapor/websocket.git", 214 | "state": { 215 | "branch": null, 216 | "revision": "149af03348f60ac8b84defdf277112d62fd8c704", 217 | "version": "1.0.2" 218 | } 219 | } 220 | ] 221 | }, 222 | "version": 1 223 | } 224 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:4.0 2 | import PackageDescription 3 | 4 | let package = Package( 5 | name: "Map", 6 | dependencies: [ 7 | .package(url: "https://github.com/vapor/vapor.git", from: "3.0.0"), 8 | .package(url: "https://github.com/vapor/leaf.git", from: "3.0.0"), 9 | .package(url: "https://github.com/IBM-Swift/Swift-JWT.git", from: "3.0.0"), 10 | ], 11 | targets: [ 12 | .target(name: "App", dependencies: ["Vapor", "Leaf", "SwiftJWT"]), 13 | .target(name: "Run", dependencies: ["App"]), 14 | .testTarget(name: "AppTests", dependencies: ["App"]) 15 | ] 16 | ) 17 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: Run serve --env production --hostname 0.0.0.0 --port $PORT 2 | -------------------------------------------------------------------------------- /Public/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NSHipster/MapKitJS-Demo/c9d4033b1a6c41123c3c7ce299856192cd14b92f/Public/.gitkeep -------------------------------------------------------------------------------- /Public/geo/bikes.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "FeatureCollection", 3 | "features": [ 4 | { 5 | "type": "Feature", 6 | "geometry": { 7 | "type": "Point", 8 | "coordinates": [-122.65287833333333, 45.55197833333333] 9 | }, 10 | "properties": { 11 | "name": "0723 BIKETOWN", 12 | "inside_area": true, 13 | "address": "1236 Northeast Shaver Street, Portland" 14 | } 15 | }, 16 | { 17 | "type": "Feature", 18 | "geometry": { 19 | "type": "Point", 20 | "coordinates": [-122.67245166666666, 45.524225] 21 | }, 22 | "properties": { 23 | "name": "0715 BIKETOWN", 24 | "inside_area": true, 25 | "address": "123 Northwest 2nd Avenue, Portland" 26 | } 27 | }, 28 | { 29 | "type": "Feature", 30 | "geometry": { 31 | "type": "Point", 32 | "coordinates": [-122.68192666666667, 45.50546833333333] 33 | }, 34 | "properties": { 35 | "name": "0341 BIKETOWN", 36 | "inside_area": true, 37 | "address": "2400 Southwest 4th Avenue, Portland" 38 | } 39 | }, 40 | { 41 | "type": "Feature", 42 | "geometry": { 43 | "type": "Point", 44 | "coordinates": [-122.65450666666666, 45.511246666666665] 45 | }, 46 | "properties": { 47 | "name": "0465 BIKETOWN", 48 | "inside_area": true, 49 | "address": "1616 Southeast 11th Avenue, Portland" 50 | } 51 | }, 52 | { 53 | "type": "Feature", 54 | "geometry": { 55 | "type": "Point", 56 | "coordinates": [-122.70594333333334, 45.53295333333333] 57 | }, 58 | "properties": { 59 | "name": "0002 BIKETOWN", 60 | "inside_area": true, 61 | "address": "1445 Northwest 26th Avenue, Portland" 62 | } 63 | }, 64 | { 65 | "type": "Feature", 66 | "geometry": { 67 | "type": "Point", 68 | "coordinates": [-122.68042666666666, 45.547865] 69 | }, 70 | "properties": { 71 | "name": "0399 BIKETOWN", 72 | "inside_area": true, 73 | "address": "Kaiser Interstate Optical, Portland" 74 | } 75 | }, 76 | { 77 | "type": "Feature", 78 | "geometry": { 79 | "type": "Point", 80 | "coordinates": [-122.62256333333333, 45.493721666666666] 81 | }, 82 | "properties": { 83 | "name": "0015 BIKETOWN", 84 | "inside_area": true, 85 | "address": "Southeast César E. Chávez Boulevard, Portland" 86 | } 87 | }, 88 | { 89 | "type": "Feature", 90 | "geometry": { 91 | "type": "Point", 92 | "coordinates": [-122.66391833333333, 45.51881] 93 | }, 94 | "properties": { 95 | "name": "0948 DESIGN BIKE, COLORFUL PORTLAND NW", 96 | "inside_area": true, 97 | "address": "107 Southeast Washington Street, Portland" 98 | } 99 | }, 100 | { 101 | "type": "Feature", 102 | "geometry": { 103 | "type": "Point", 104 | "coordinates": [-122.64833, 45.489565] 105 | }, 106 | "properties": { 107 | "name": "0054 BIKETOWN", 108 | "inside_area": true, 109 | "address": "4534 Southeast 17th Avenue, Portland" 110 | } 111 | }, 112 | { 113 | "type": "Feature", 114 | "geometry": { 115 | "type": "Point", 116 | "coordinates": [-122.62359, 45.512945] 117 | }, 118 | "properties": { 119 | "name": "0292 BIKETOWN", 120 | "inside_area": true, 121 | "address": "3805 Southeast Hawthorne Boulevard, Portland" 122 | } 123 | }, 124 | { 125 | "type": "Feature", 126 | "geometry": { 127 | "type": "Point", 128 | "coordinates": [-122.67175, 45.52137666666667] 129 | }, 130 | "properties": { 131 | "name": "0616 BIKETOWN", 132 | "inside_area": true, 133 | "address": "City Center Parking, Southwest 1st Avenue, Pearl District, Portland, Oregon" 134 | } 135 | }, 136 | { 137 | "type": "Feature", 138 | "geometry": { 139 | "type": "Point", 140 | "coordinates": [-122.659715, 45.507373333333334] 141 | }, 142 | "properties": { 143 | "name": "0197 BIKETOWN", 144 | "inside_area": true, 145 | "address": "2100-2198 Southeast 6th Avenue, Portland" 146 | } 147 | }, 148 | { 149 | "type": "Feature", 150 | "geometry": { 151 | "type": "Point", 152 | "coordinates": [-122.65863833333333, 45.54139] 153 | }, 154 | "properties": { 155 | "name": "0078 BIKETOWN", 156 | "inside_area": true, 157 | "address": "2602, Northeast 7th Avenue, Irvington, Portland, Oregon" 158 | } 159 | }, 160 | { 161 | "type": "Feature", 162 | "geometry": { 163 | "type": "Point", 164 | "coordinates": [-122.657775, 45.513598333333334] 165 | }, 166 | "properties": { 167 | "name": "0179 BIKETOWN", 168 | "inside_area": true, 169 | "address": "706-798 Southeast Main Street, Portland" 170 | } 171 | }, 172 | { 173 | "type": "Feature", 174 | "geometry": { 175 | "type": "Point", 176 | "coordinates": [-122.66068333333334, 45.51660666666667] 177 | }, 178 | "properties": { 179 | "name": "0224 BIKETOWN", 180 | "inside_area": true, 181 | "address": "860-898 Southeast Grand Avenue, Portland" 182 | } 183 | }, 184 | { 185 | "type": "Feature", 186 | "geometry": { 187 | "type": "Point", 188 | "coordinates": [-122.66501666666667, 45.5187] 189 | }, 190 | "properties": { 191 | "name": "0195 BIKETOWN", 192 | "inside_area": true, 193 | "address": "Vaughan Bros., 88, Southeast Washington Street, Ladd's Addition, Central East Side, Portland, Oregon" 194 | } 195 | }, 196 | { 197 | "type": "Feature", 198 | "geometry": { 199 | "type": "Point", 200 | "coordinates": [-122.683495, 45.50940333333333] 201 | }, 202 | "properties": { 203 | "name": "1019 MSS AIR SAFARI", 204 | "inside_area": true, 205 | "address": "Portland" 206 | } 207 | }, 208 | { 209 | "type": "Feature", 210 | "geometry": { 211 | "type": "Point", 212 | "coordinates": [-122.6803, 45.53033833333333] 213 | }, 214 | "properties": { 215 | "name": "0452 BIKETOWN", 216 | "inside_area": true, 217 | "address": "1006-1014 Northwest 9th Avenue, Portland" 218 | } 219 | }, 220 | { 221 | "type": "Feature", 222 | "geometry": { 223 | "type": "Point", 224 | "coordinates": [-122.63961166666667, 45.49867] 225 | }, 226 | "properties": { 227 | "name": "1014 DESIGN BIKE, NE CYCLING LIFE ", 228 | "inside_area": true, 229 | "address": "3324-3388 Southeast 26th Avenue, Portland" 230 | } 231 | }, 232 | { 233 | "type": "Feature", 234 | "geometry": { 235 | "type": "Point", 236 | "coordinates": [-122.680245, 45.521663333333336] 237 | }, 238 | "properties": { 239 | "name": "0690 BIKETOWN", 240 | "inside_area": true, 241 | "address": "Downtown Community Public Safety Office, 409, Southwest 9th Avenue, Pearl District, Portland, Oregon" 242 | } 243 | }, 244 | { 245 | "type": "Feature", 246 | "geometry": { 247 | "type": "Point", 248 | "coordinates": [-122.68453, 45.50579] 249 | }, 250 | "properties": { 251 | "name": "0220 BIKETOWN", 252 | "inside_area": false, 253 | "address": "615 Southwest Caruthers Street, Portland" 254 | } 255 | }, 256 | { 257 | "type": "Feature", 258 | "geometry": { 259 | "type": "Point", 260 | "coordinates": [-122.66655166666666, 45.51518] 261 | }, 262 | "properties": { 263 | "name": "0685 BIKETOWN", 264 | "inside_area": true, 265 | "address": "1-49 Southeast Taylor Street, Portland" 266 | } 267 | }, 268 | { 269 | "type": "Feature", 270 | "geometry": { 271 | "type": "Point", 272 | "coordinates": [-122.66169833333333, 45.522936666666666] 273 | }, 274 | "properties": { 275 | "name": "0759 BIKETOWN ", 276 | "inside_area": true, 277 | "address": "400 East Burnside Street, Portland" 278 | } 279 | }, 280 | { 281 | "type": "Feature", 282 | "geometry": { 283 | "type": "Point", 284 | "coordinates": [-122.63961833333333, 45.497263333333336] 285 | }, 286 | "properties": { 287 | "name": "0471 BIKETOWN", 288 | "inside_area": true, 289 | "address": "SEIU Local 49, 3536, Southeast 26th Avenue, Creston-Kenilworth, Brooklyn, Portland, Oregon" 290 | } 291 | }, 292 | { 293 | "type": "Feature", 294 | "geometry": { 295 | "type": "Point", 296 | "coordinates": [-122.67654, 45.52726333333333] 297 | }, 298 | "properties": { 299 | "name": "0934 DESIGN BIKE, WATERFRONT WANDERER SW", 300 | "inside_area": true, 301 | "address": "Union Station/Northwest 6th & Hoyt, Northwest 6th Avenue, Pearl District, Portland, Oregon" 302 | } 303 | }, 304 | { 305 | "type": "Feature", 306 | "geometry": { 307 | "type": "Point", 308 | "coordinates": [-122.68170666666667, 45.517516666666666] 309 | }, 310 | "properties": { 311 | "name": "0686 BIKETOWN", 312 | "inside_area": true, 313 | "address": "Arlene Schnitzer Concert Hall, 1037, Southwest Broadway, University District, Portland, Oregon" 314 | } 315 | }, 316 | { 317 | "type": "Feature", 318 | "geometry": { 319 | "type": "Point", 320 | "coordinates": [-122.63955833333333, 45.499736666666664] 321 | }, 322 | "properties": { 323 | "name": "0594 BIKETOWN", 324 | "inside_area": true, 325 | "address": "3204, Southeast 26th Avenue, Creston-Kenilworth, Brooklyn, Portland, Oregon" 326 | } 327 | }, 328 | { 329 | "type": "Feature", 330 | "geometry": { 331 | "type": "Point", 332 | "coordinates": [-122.57953, 45.50487666666667] 333 | }, 334 | "properties": { 335 | "name": "0553 BIKETOWN", 336 | "inside_area": false, 337 | "address": "8100-8112 Southeast Division Street, Portland" 338 | } 339 | }, 340 | { 341 | "type": "Feature", 342 | "geometry": { 343 | "type": "Point", 344 | "coordinates": [-122.68525833333334, 45.527206666666665] 345 | }, 346 | "properties": { 347 | "name": "0137 BIKETOWN", 348 | "inside_area": true, 349 | "address": "Parklane Mattresses, 536, Northwest 14th Avenue, Pearl District, Portland, Oregon" 350 | } 351 | }, 352 | { 353 | "type": "Feature", 354 | "geometry": { 355 | "type": "Point", 356 | "coordinates": [-122.68088833333333, 45.52947666666667] 357 | }, 358 | "properties": { 359 | "name": "0303 BIKETOWN", 360 | "inside_area": true, 361 | "address": "910 Northwest 10th Avenue, Portland" 362 | } 363 | }, 364 | { 365 | "type": "Feature", 366 | "geometry": { 367 | "type": "Point", 368 | "coordinates": [-122.65257333333334, 45.559555] 369 | }, 370 | "properties": { 371 | "name": "0505 BIKETOWN", 372 | "inside_area": true, 373 | "address": "5028 Northeast 13th Avenue, Portland" 374 | } 375 | }, 376 | { 377 | "type": "Feature", 378 | "geometry": { 379 | "type": "Point", 380 | "coordinates": [-122.65989666666667, 45.507845] 381 | }, 382 | "properties": { 383 | "name": "1016 AIR SAFARI", 384 | "inside_area": true, 385 | "address": "2101, Southeast 6th Avenue, Ladd's Addition, Central East Side, Portland, Oregon" 386 | } 387 | }, 388 | { 389 | "type": "Feature", 390 | "geometry": { 391 | "type": "Point", 392 | "coordinates": [-122.643375, 45.520085] 393 | }, 394 | "properties": { 395 | "name": "0248 BIKETOWN", 396 | "inside_area": true, 397 | "address": "310-398 Southeast 22nd Avenue, Portland" 398 | } 399 | }, 400 | { 401 | "type": "Feature", 402 | "geometry": { 403 | "type": "Point", 404 | "coordinates": [-122.68116166666667, 45.54604666666667] 405 | }, 406 | "properties": { 407 | "name": "0775 BIKETOWN", 408 | "inside_area": true, 409 | "address": "3265 North Interstate Avenue, Portland" 410 | } 411 | }, 412 | { 413 | "type": "Feature", 414 | "geometry": { 415 | "type": "Point", 416 | "coordinates": [-122.66068833333334, 45.51667] 417 | }, 418 | "properties": { 419 | "name": "0709 BIKETOWN", 420 | "inside_area": true, 421 | "address": "860-898 Southeast Grand Avenue, Portland" 422 | } 423 | }, 424 | { 425 | "type": "Feature", 426 | "geometry": { 427 | "type": "Point", 428 | "coordinates": [-122.69257166666667, 45.52908166666667] 429 | }, 430 | "properties": { 431 | "name": "0035 BIKETOWN", 432 | "inside_area": true, 433 | "address": "The John & Marlis Carson Center, 2010, Northwest Kearney Street, Pearl District, Portland, Oregon" 434 | } 435 | }, 436 | { 437 | "type": "Feature", 438 | "geometry": { 439 | "type": "Point", 440 | "coordinates": [-122.640135, 45.49359] 441 | }, 442 | "properties": { 443 | "name": "0390 BIKETOWN", 444 | "inside_area": true, 445 | "address": "4031 Southeast 26th Avenue, Portland" 446 | } 447 | }, 448 | { 449 | "type": "Feature", 450 | "geometry": { 451 | "type": "Point", 452 | "coordinates": [-122.69159666666667, 45.52495] 453 | }, 454 | "properties": { 455 | "name": "0442 BIKETOWN", 456 | "inside_area": true, 457 | "address": "1956 Northwest Everett Street, Portland" 458 | } 459 | }, 460 | { 461 | "type": "Feature", 462 | "geometry": { 463 | "type": "Point", 464 | "coordinates": [-122.70825666666667, 45.538866666666664] 465 | }, 466 | "properties": { 467 | "name": "0222 BIKETOWN", 468 | "inside_area": true, 469 | "address": "2765 Northwest Nicolai Street, Portland" 470 | } 471 | }, 472 | { 473 | "type": "Feature", 474 | "geometry": { 475 | "type": "Point", 476 | "coordinates": [-122.68771833333334, 45.51307666666666] 477 | }, 478 | "properties": { 479 | "name": "0903 BIKETOWN", 480 | "inside_area": true, 481 | "address": "1136 Southwest Montgomery Street, Portland" 482 | } 483 | }, 484 | { 485 | "type": "Feature", 486 | "geometry": { 487 | "type": "Point", 488 | "coordinates": [-122.64623333333333, 45.55177] 489 | }, 490 | "properties": { 491 | "name": "0036 BIKETOWN", 492 | "inside_area": true, 493 | "address": "3946-3998 Northeast 19th Avenue, Portland" 494 | } 495 | }, 496 | { 497 | "type": "Feature", 498 | "geometry": { 499 | "type": "Point", 500 | "coordinates": [-122.64647166666667, 45.523625] 501 | }, 502 | "properties": { 503 | "name": "0843 BIKETOWN", 504 | "inside_area": true, 505 | "address": "1905 Northeast Couch Street, Portland" 506 | } 507 | }, 508 | { 509 | "type": "Feature", 510 | "geometry": { 511 | "type": "Point", 512 | "coordinates": [-122.68061, 45.52122] 513 | }, 514 | "properties": { 515 | "name": "0678 BIKETOWN", 516 | "inside_area": true, 517 | "address": "909 Southwest Washington Street, Portland" 518 | } 519 | }, 520 | { 521 | "type": "Feature", 522 | "geometry": { 523 | "type": "Point", 524 | "coordinates": [-122.68342666666666, 45.52373333333333] 525 | }, 526 | "properties": { 527 | "name": "0788 BIKETOWN", 528 | "inside_area": true, 529 | "address": "1201 Northwest Couch Street, Portland" 530 | } 531 | }, 532 | { 533 | "type": "Feature", 534 | "geometry": { 535 | "type": "Point", 536 | "coordinates": [-122.679935, 45.523698333333336] 537 | }, 538 | "properties": { 539 | "name": "0868 BIKETOWN", 540 | "inside_area": true, 541 | "address": "Pearl Bakery, 102, Northwest 9th Avenue, Pearl District, Portland, Oregon" 542 | } 543 | }, 544 | { 545 | "type": "Feature", 546 | "geometry": { 547 | "type": "Point", 548 | "coordinates": [-122.68342, 45.52719333333334] 549 | }, 550 | "properties": { 551 | "name": "0208 BIKETOWN", 552 | "inside_area": true, 553 | "address": "¡Oba!, 555, Northwest Hoyt Street, Pearl District, Portland, Oregon" 554 | } 555 | }, 556 | { 557 | "type": "Feature", 558 | "geometry": { 559 | "type": "Point", 560 | "coordinates": [-122.645575, 45.522125] 561 | }, 562 | "properties": { 563 | "name": "0665 BIKETOWN", 564 | "inside_area": true, 565 | "address": "101-125 Southeast 20th Avenue, Portland" 566 | } 567 | }, 568 | { 569 | "type": "Feature", 570 | "geometry": { 571 | "type": "Point", 572 | "coordinates": [-122.69172666666667, 45.51647666666667] 573 | }, 574 | "properties": { 575 | "name": "0508 BIKETOWN", 576 | "inside_area": true, 577 | "address": "1630 Southwest Clay Street, Portland" 578 | } 579 | }, 580 | { 581 | "type": "Feature", 582 | "geometry": { 583 | "type": "Point", 584 | "coordinates": [-122.672545, 45.523763333333335] 585 | }, 586 | "properties": { 587 | "name": "0990 BETRUE 2018 TRAINER", 588 | "inside_area": true, 589 | "address": "208 Northwest Couch Street, Portland" 590 | } 591 | }, 592 | { 593 | "type": "Feature", 594 | "geometry": { 595 | "type": "Point", 596 | "coordinates": [-122.69175666666666, 45.522603333333336] 597 | }, 598 | "properties": { 599 | "name": "0180 BIKETOWN", 600 | "inside_area": true, 601 | "address": "1844-1998 Southwest Morrison Street, Portland" 602 | } 603 | }, 604 | { 605 | "type": "Feature", 606 | "geometry": { 607 | "type": "Point", 608 | "coordinates": [-122.65033333333334, 45.531395] 609 | }, 610 | "properties": { 611 | "name": "0144 BIKETOWN", 612 | "inside_area": true, 613 | "address": "1510 Northeast Multnomah Street, Portland" 614 | } 615 | }, 616 | { 617 | "type": "Feature", 618 | "geometry": { 619 | "type": "Point", 620 | "coordinates": [-122.67855, 45.526965] 621 | }, 622 | "properties": { 623 | "name": "1025 AIR SAFARI", 624 | "inside_area": true, 625 | "address": "Pacific Northwest College of Art - Schnitzer Center, 511, Northwest Broadway, Pearl District, Portland, Oregon" 626 | } 627 | }, 628 | { 629 | "type": "Feature", 630 | "geometry": { 631 | "type": "Point", 632 | "coordinates": [-122.61195166666667, 45.539613333333335] 633 | }, 634 | "properties": { 635 | "name": "0708 BIKETOWN", 636 | "inside_area": true, 637 | "address": "2425 Northeast 50th Avenue, Portland" 638 | } 639 | }, 640 | { 641 | "type": "Feature", 642 | "geometry": { 643 | "type": "Point", 644 | "coordinates": [-122.68474666666667, 45.5068] 645 | }, 646 | "properties": { 647 | "name": "0931 BETRUE MAX ", 648 | "inside_area": false, 649 | "address": "2221 Southwest 6th Avenue, Portland" 650 | } 651 | }, 652 | { 653 | "type": "Feature", 654 | "geometry": { 655 | "type": "Point", 656 | "coordinates": [-122.67511, 45.52297166666666] 657 | }, 658 | "properties": { 659 | "name": "0950 DESIGN BIKE, COLORFUL PORTLAND NW", 660 | "inside_area": true, 661 | "address": "498-496 West Burnside Street, Portland" 662 | } 663 | }, 664 | { 665 | "type": "Feature", 666 | "geometry": { 667 | "type": "Point", 668 | "coordinates": [-122.67052666666666, 45.52392833333333] 669 | }, 670 | "properties": { 671 | "name": "0972 BETRUE 2018 TRAINER", 672 | "inside_area": true, 673 | "address": "1-75 Northwest Couch Street, Portland" 674 | } 675 | }, 676 | { 677 | "type": "Feature", 678 | "geometry": { 679 | "type": "Point", 680 | "coordinates": [-122.708265, 45.538845] 681 | }, 682 | "properties": { 683 | "name": "0954 DESIGN BIKE, COLORFUL PORTLAND NW", 684 | "inside_area": true, 685 | "address": "2765 Northwest Nicolai Street, Portland" 686 | } 687 | }, 688 | { 689 | "type": "Feature", 690 | "geometry": { 691 | "type": "Point", 692 | "coordinates": [-122.674085, 45.52075166666667] 693 | }, 694 | "properties": { 695 | "name": "0334 BIKETOWN", 696 | "inside_area": true, 697 | "address": "300 Southwest 3rd Avenue, Portland" 698 | } 699 | }, 700 | { 701 | "type": "Feature", 702 | "geometry": { 703 | "type": "Point", 704 | "coordinates": [-122.70521333333333, 45.533035] 705 | }, 706 | "properties": { 707 | "name": "0726 BIKETOWN", 708 | "inside_area": true, 709 | "address": "1445 Northwest 26th Avenue, Portland" 710 | } 711 | }, 712 | { 713 | "type": "Feature", 714 | "geometry": { 715 | "type": "Point", 716 | "coordinates": [-122.63081, 45.511986666666665] 717 | }, 718 | "properties": { 719 | "name": "0182 BIKETOWN", 720 | "inside_area": true, 721 | "address": "3294, Southeast Hawthorne Boulevard, Ladd's Addition, Belmont, Portland, Oregon" 722 | } 723 | }, 724 | { 725 | "type": "Feature", 726 | "geometry": { 727 | "type": "Point", 728 | "coordinates": [-122.67613833333333, 45.517705] 729 | }, 730 | "properties": { 731 | "name": "0907 BIKETOWN", 732 | "inside_area": true, 733 | "address": "309-315 Southwest Yamhill Street, Portland" 734 | } 735 | }, 736 | { 737 | "type": "Feature", 738 | "geometry": { 739 | "type": "Point", 740 | "coordinates": [-122.69091166666666, 45.53713166666667] 741 | }, 742 | "properties": { 743 | "name": "0290 BIKETOWN ", 744 | "inside_area": true, 745 | "address": "1901-1913 Northwest Vaughn Street, Portland" 746 | } 747 | }, 748 | { 749 | "type": "Feature", 750 | "geometry": { 751 | "type": "Point", 752 | "coordinates": [-122.68023166666667, 45.528025] 753 | }, 754 | "properties": { 755 | "name": "0774 BIKETOWN", 756 | "inside_area": true, 757 | "address": "Patagonia, 907, Northwest Irving Street, Pearl District, Portland, Oregon" 758 | } 759 | }, 760 | { 761 | "type": "Feature", 762 | "geometry": { 763 | "type": "Point", 764 | "coordinates": [-122.67525833333333, 45.540965] 765 | }, 766 | "properties": { 767 | "name": "0283 BIKETOWN", 768 | "inside_area": true, 769 | "address": "White Eagle Saloon, 836, North Russell Street, Albina, Portland, Oregon" 770 | } 771 | }, 772 | { 773 | "type": "Feature", 774 | "geometry": { 775 | "type": "Point", 776 | "coordinates": [-122.66303833333333, 45.55218166666667] 777 | }, 778 | "properties": { 779 | "name": "0994 BETRUE 2018 TRAINER ", 780 | "inside_area": true, 781 | "address": "235 Northeast Shaver Street, Portland, OR" 782 | } 783 | }, 784 | { 785 | "type": "Feature", 786 | "geometry": { 787 | "type": "Point", 788 | "coordinates": [-122.66901166666666, 45.53510166666667] 789 | }, 790 | "properties": { 791 | "name": "0824 BIKETOWN", 792 | "inside_area": true, 793 | "address": "1700-1756 North Wheeler Avenue, Portland" 794 | } 795 | }, 796 | { 797 | "type": "Feature", 798 | "geometry": { 799 | "type": "Point", 800 | "coordinates": [-122.654655, 45.50521333333333] 801 | }, 802 | "properties": { 803 | "name": "0545 BIKETOWN", 804 | "inside_area": true, 805 | "address": "2442, Southeast 11th Avenue, Ladd's Addition, Central East Side, Portland, Oregon" 806 | } 807 | }, 808 | { 809 | "type": "Feature", 810 | "geometry": { 811 | "type": "Point", 812 | "coordinates": [-122.657385, 45.53514166666667] 813 | }, 814 | "properties": { 815 | "name": "0653 BIKETOWN", 816 | "inside_area": true, 817 | "address": "801 Northeast Broadway Street, Portland" 818 | } 819 | }, 820 | { 821 | "type": "Feature", 822 | "geometry": { 823 | "type": "Point", 824 | "coordinates": [-122.66426, 45.53897] 825 | }, 826 | "properties": { 827 | "name": "0090 BIKETOWN", 828 | "inside_area": true, 829 | "address": "76-98 Northeast Thompson Street, Portland" 830 | } 831 | }, 832 | { 833 | "type": "Feature", 834 | "geometry": { 835 | "type": "Point", 836 | "coordinates": [-122.659765, 45.52377166666667] 837 | }, 838 | "properties": { 839 | "name": "0417 BIKETOWN", 840 | "inside_area": true, 841 | "address": "116, Northeast 6th Avenue, Ladd's Addition, Lloyd District, Portland, Oregon" 842 | } 843 | }, 844 | { 845 | "type": "Feature", 846 | "geometry": { 847 | "type": "Point", 848 | "coordinates": [-122.64605333333333, 45.504755] 849 | }, 850 | "properties": { 851 | "name": "0229 BIKETOWN", 852 | "inside_area": true, 853 | "address": "1954-1964 Southeast Division Street, Portland" 854 | } 855 | }, 856 | { 857 | "type": "Feature", 858 | "geometry": { 859 | "type": "Point", 860 | "coordinates": [-122.67574333333333, 45.519416666666665] 861 | }, 862 | "properties": { 863 | "name": "0190 BIKETOWN", 864 | "inside_area": true, 865 | "address": "518 Southwest 4th Avenue, Portland" 866 | } 867 | }, 868 | { 869 | "type": "Feature", 870 | "geometry": { 871 | "type": "Point", 872 | "coordinates": [-122.67635666666666, 45.51690833333333] 873 | }, 874 | "properties": { 875 | "name": "0988 DESIGN BIKE, N PAUL BUNYAN", 876 | "inside_area": true, 877 | "address": "Bangkok Palace, 300, Southwest Taylor Street, University District, Portland, Oregon" 878 | } 879 | }, 880 | { 881 | "type": "Feature", 882 | "geometry": { 883 | "type": "Point", 884 | "coordinates": [-122.68092, 45.528305] 885 | }, 886 | "properties": { 887 | "name": "0118 BIKETOWN", 888 | "inside_area": true, 889 | "address": "Hotlips Pizza, 721, Northwest 9th Avenue, Pearl District, Portland, Oregon" 890 | } 891 | }, 892 | { 893 | "type": "Feature", 894 | "geometry": { 895 | "type": "Point", 896 | "coordinates": [-122.663835, 45.531965] 897 | }, 898 | "properties": { 899 | "name": "0830 BIKETOWN", 900 | "inside_area": true, 901 | "address": ", Portland" 902 | } 903 | }, 904 | { 905 | "type": "Feature", 906 | "geometry": { 907 | "type": "Point", 908 | "coordinates": [-122.67106666666666, 45.533425] 909 | }, 910 | "properties": { 911 | "name": "1024 DESIGN BIKE, NE CYCLING LIFE ", 912 | "inside_area": true, 913 | "address": "1200-1478 North Larrabee Avenue, Portland" 914 | } 915 | }, 916 | { 917 | "type": "Feature", 918 | "geometry": { 919 | "type": "Point", 920 | "coordinates": [-122.65474833333333, 45.506661666666666] 921 | }, 922 | "properties": { 923 | "name": "0961 DESIGN BIKE, WATERFRONT WANDERER SW ", 924 | "inside_area": true, 925 | "address": "Southeast 11th & Sherman, Southeast 11th Avenue, Ladd's Addition, Central East Side, Portland, Oregon" 926 | } 927 | }, 928 | { 929 | "type": "Feature", 930 | "geometry": { 931 | "type": "Point", 932 | "coordinates": [-122.663985, 45.513753333333334] 933 | }, 934 | "properties": { 935 | "name": "1001 AIR SAFARI ", 936 | "inside_area": true, 937 | "address": "211, Southeast Madison Street, Ladd's Addition, Central East Side, Portland, Oregon" 938 | } 939 | }, 940 | { 941 | "type": "Feature", 942 | "geometry": { 943 | "type": "Point", 944 | "coordinates": [-122.699025, 45.524186666666665] 945 | }, 946 | "properties": { 947 | "name": "0955 DESIGN BIKE, COLORFUL PORTLAND NW", 948 | "inside_area": true, 949 | "address": "2345-2353 Northwest Westover Road, Portland" 950 | } 951 | }, 952 | { 953 | "type": "Feature", 954 | "geometry": { 955 | "type": "Point", 956 | "coordinates": [-122.66543833333333, 45.53031333333333] 957 | }, 958 | "properties": { 959 | "name": "0734 BIKETOWN ", 960 | "inside_area": true, 961 | "address": "Interstate 5, Portland" 962 | } 963 | }, 964 | { 965 | "type": "Feature", 966 | "geometry": { 967 | "type": "Point", 968 | "coordinates": [-122.66123833333333, 45.554575] 969 | }, 970 | "properties": { 971 | "name": "0151 BIKETOWN", 972 | "inside_area": true, 973 | "address": "4232, Northeast Skidmore Street, Irvington, Portland, Oregon" 974 | } 975 | }, 976 | { 977 | "type": "Feature", 978 | "geometry": { 979 | "type": "Point", 980 | "coordinates": [-122.67688166666667, 45.523755] 981 | }, 982 | "properties": { 983 | "name": "0688 BIKETOWN", 984 | "inside_area": true, 985 | "address": "Macdonald Center, 605, Northwest Couch Street, Pearl District, Portland, Oregon" 986 | } 987 | }, 988 | { 989 | "type": "Feature", 990 | "geometry": { 991 | "type": "Point", 992 | "coordinates": [-122.71242166666667, 45.53575] 993 | }, 994 | "properties": { 995 | "name": "0586 BIKETOWN", 996 | "inside_area": false, 997 | "address": "Macleay Park, Lower Macleay Trail, Willamette Heights, Portland, Oregon" 998 | } 999 | }, 1000 | { 1001 | "type": "Feature", 1002 | "geometry": { 1003 | "type": "Point", 1004 | "coordinates": [-122.66096666666667, 45.52103666666667] 1005 | }, 1006 | "properties": { 1007 | "name": "0647 BIKETOWN", 1008 | "inside_area": true, 1009 | "address": "407 Southeast Pine Street, Portland" 1010 | } 1011 | }, 1012 | { 1013 | "type": "Feature", 1014 | "geometry": { 1015 | "type": "Point", 1016 | "coordinates": [-122.673945, 45.52582833333334] 1017 | }, 1018 | "properties": { 1019 | "name": "0601 BIKETOWN", 1020 | "inside_area": true, 1021 | "address": "310 Northwest Flanders Street, Portland" 1022 | } 1023 | }, 1024 | { 1025 | "type": "Feature", 1026 | "geometry": { 1027 | "type": "Point", 1028 | "coordinates": [-122.68083833333333, 45.517338333333335] 1029 | }, 1030 | "properties": { 1031 | "name": "0048 BIKETOWN", 1032 | "inside_area": true, 1033 | "address": "Cacao, 712, Southwest Salmon Street, University District, Portland, Oregon" 1034 | } 1035 | }, 1036 | { 1037 | "type": "Feature", 1038 | "geometry": { 1039 | "type": "Point", 1040 | "coordinates": [-122.67149833333333, 45.52394] 1041 | }, 1042 | "properties": { 1043 | "name": "0496 BIKETOWN ", 1044 | "inside_area": true, 1045 | "address": "101-107 Northwest Couch Street, Portland" 1046 | } 1047 | }, 1048 | { 1049 | "type": "Feature", 1050 | "geometry": { 1051 | "type": "Point", 1052 | "coordinates": [-122.68002833333334, 45.52370333333333] 1053 | }, 1054 | "properties": { 1055 | "name": "0767 BIKETOWN ", 1056 | "inside_area": true, 1057 | "address": "808 Northwest Couch Street, Portland" 1058 | } 1059 | }, 1060 | { 1061 | "type": "Feature", 1062 | "geometry": { 1063 | "type": "Point", 1064 | "coordinates": [-122.68336166666667, 45.524208333333334] 1065 | }, 1066 | "properties": { 1067 | "name": "0305 BIKETOWN", 1068 | "inside_area": true, 1069 | "address": "1202 Northwest Davis Street, Portland" 1070 | } 1071 | }, 1072 | { 1073 | "type": "Feature", 1074 | "geometry": { 1075 | "type": "Point", 1076 | "coordinates": [-122.65859833333333, 45.514606666666666] 1077 | }, 1078 | "properties": { 1079 | "name": "0171 BIKETOWN ", 1080 | "inside_area": true, 1081 | "address": "1150-1198 Southeast 7th Avenue, Portland" 1082 | } 1083 | }, 1084 | { 1085 | "type": "Feature", 1086 | "geometry": { 1087 | "type": "Point", 1088 | "coordinates": [-122.65969, 45.52278833333333] 1089 | }, 1090 | "properties": { 1091 | "name": "0765 BIKETOWN", 1092 | "inside_area": true, 1093 | "address": "15 Southeast 6th Avenue, Portland" 1094 | } 1095 | }, 1096 | { 1097 | "type": "Feature", 1098 | "geometry": { 1099 | "type": "Point", 1100 | "coordinates": [-122.63316, 45.534346666666664] 1101 | }, 1102 | "properties": { 1103 | "name": "0892 BIKETOWN", 1104 | "inside_area": true, 1105 | "address": "1580 Northeast 32nd Avenue, Portland, OR" 1106 | } 1107 | }, 1108 | { 1109 | "type": "Feature", 1110 | "geometry": { 1111 | "type": "Point", 1112 | "coordinates": [-122.65903666666667, 45.511445] 1113 | }, 1114 | "properties": { 1115 | "name": "0202 BIKETOWN", 1116 | "inside_area": true, 1117 | "address": "1605 Southeast 7th Avenue, Portland" 1118 | } 1119 | }, 1120 | { 1121 | "type": "Feature", 1122 | "geometry": { 1123 | "type": "Point", 1124 | "coordinates": [-122.63985666666666, 45.493318333333335] 1125 | }, 1126 | "properties": { 1127 | "name": "0102 BIKETOWN", 1128 | "inside_area": true, 1129 | "address": "2512 Southeast Gladstone Street, Portland" 1130 | } 1131 | }, 1132 | { 1133 | "type": "Feature", 1134 | "geometry": { 1135 | "type": "Point", 1136 | "coordinates": [-122.67409333333333, 45.52075333333333] 1137 | }, 1138 | "properties": { 1139 | "name": "0357 BIKETOWN", 1140 | "inside_area": true, 1141 | "address": "300 Southwest 3rd Avenue, Portland" 1142 | } 1143 | }, 1144 | { 1145 | "type": "Feature", 1146 | "geometry": { 1147 | "type": "Point", 1148 | "coordinates": [-122.69832, 45.52406833333333] 1149 | }, 1150 | "properties": { 1151 | "name": "0951 DESIGN BIKE, WATERFRONT WANDERER SW", 1152 | "inside_area": true, 1153 | "address": "Uptown Billiards, Northwest 23rd Avenue, Kings Heights, Portland, Oregon" 1154 | } 1155 | }, 1156 | { 1157 | "type": "Feature", 1158 | "geometry": { 1159 | "type": "Point", 1160 | "coordinates": [-122.65363, 45.510315] 1161 | }, 1162 | "properties": { 1163 | "name": "0719 BIKETOWN", 1164 | "inside_area": true, 1165 | "address": "1734 Southeast 12th Avenue, Portland" 1166 | } 1167 | }, 1168 | { 1169 | "type": "Feature", 1170 | "geometry": { 1171 | "type": "Point", 1172 | "coordinates": [-122.671435, 45.52439833333333] 1173 | }, 1174 | "properties": { 1175 | "name": "0610 BIKETOWN", 1176 | "inside_area": true, 1177 | "address": "115, Northwest 1st Avenue, Pearl District, Portland, Oregon" 1178 | } 1179 | }, 1180 | { 1181 | "type": "Feature", 1182 | "geometry": { 1183 | "type": "Point", 1184 | "coordinates": [-122.680115, 45.52207166666667] 1185 | }, 1186 | "properties": { 1187 | "name": "0056 BIKETOWN", 1188 | "inside_area": true, 1189 | "address": "Jive Software, 915, Southwest Stark Street, Pearl District, Portland, Oregon" 1190 | } 1191 | }, 1192 | { 1193 | "type": "Feature", 1194 | "geometry": { 1195 | "type": "Point", 1196 | "coordinates": [-122.65868666666667, 45.541425] 1197 | }, 1198 | "properties": { 1199 | "name": "0873 BIKETOWN", 1200 | "inside_area": true, 1201 | "address": "2601-2603 Northeast 7th Avenue, Portland" 1202 | } 1203 | }, 1204 | { 1205 | "type": "Feature", 1206 | "geometry": { 1207 | "type": "Point", 1208 | "coordinates": [-122.680475, 45.51061333333333] 1209 | }, 1210 | "properties": { 1211 | "name": "0684 BIKETOWN ", 1212 | "inside_area": true, 1213 | "address": "U-Park, Southwest Montgomery Street, Cyan, University District, Portland, Oregon" 1214 | } 1215 | }, 1216 | { 1217 | "type": "Feature", 1218 | "geometry": { 1219 | "type": "Point", 1220 | "coordinates": [-122.66312, 45.513753333333334] 1221 | }, 1222 | "properties": { 1223 | "name": "0874 BIKETOWN", 1224 | "inside_area": true, 1225 | "address": "221 Southeast Main Street, Portland" 1226 | } 1227 | }, 1228 | { 1229 | "type": "Feature", 1230 | "geometry": { 1231 | "type": "Point", 1232 | "coordinates": [-122.67655833333333, 45.527165] 1233 | }, 1234 | "properties": { 1235 | "name": "0369 BIKETOWN", 1236 | "inside_area": true, 1237 | "address": "Union Station/Northwest 6th & Hoyt, Northwest 6th Avenue, Pearl District, Portland, Oregon" 1238 | } 1239 | }, 1240 | { 1241 | "type": "Feature", 1242 | "geometry": { 1243 | "type": "Point", 1244 | "coordinates": [-122.69081, 45.53619333333333] 1245 | }, 1246 | "properties": { 1247 | "name": "0834 BIKETOWN", 1248 | "inside_area": true, 1249 | "address": "1825 Northwest 19th Avenue, Portland" 1250 | } 1251 | }, 1252 | { 1253 | "type": "Feature", 1254 | "geometry": { 1255 | "type": "Point", 1256 | "coordinates": [-122.67972666666667, 45.52364] 1257 | }, 1258 | "properties": { 1259 | "name": "0736 BIKETOWN", 1260 | "inside_area": true, 1261 | "address": "34, Northwest 9th Avenue, Pearl District, Portland, Oregon" 1262 | } 1263 | }, 1264 | { 1265 | "type": "Feature", 1266 | "geometry": { 1267 | "type": "Point", 1268 | "coordinates": [-122.61971833333334, 45.533665] 1269 | }, 1270 | "properties": { 1271 | "name": "0987 BLACK HISTORY MONTH ", 1272 | "inside_area": true, 1273 | "address": "4246-4254 Northeast Halsey Street, Portland" 1274 | } 1275 | }, 1276 | { 1277 | "type": "Feature", 1278 | "geometry": { 1279 | "type": "Point", 1280 | "coordinates": [-122.65861666666666, 45.52215666666667] 1281 | }, 1282 | "properties": { 1283 | "name": "0599 BIKETOWN", 1284 | "inside_area": true, 1285 | "address": "700-720 Southeast Ankeny Street, Portland" 1286 | } 1287 | }, 1288 | { 1289 | "type": "Feature", 1290 | "geometry": { 1291 | "type": "Point", 1292 | "coordinates": [-122.695525, 45.562956666666665] 1293 | }, 1294 | "properties": { 1295 | "name": "0346 BIKETOWN", 1296 | "inside_area": true, 1297 | "address": "5526, North Greeley Avenue, Kenton, Portland, Oregon" 1298 | } 1299 | }, 1300 | { 1301 | "type": "Feature", 1302 | "geometry": { 1303 | "type": "Point", 1304 | "coordinates": [-122.69179833333334, 45.5164] 1305 | }, 1306 | "properties": { 1307 | "name": "0011 BIKETOWN", 1308 | "inside_area": true, 1309 | "address": "1630 Southwest Clay Street, Portland" 1310 | } 1311 | }, 1312 | { 1313 | "type": "Feature", 1314 | "geometry": { 1315 | "type": "Point", 1316 | "coordinates": [-122.67388333333334, 45.51137333333333] 1317 | }, 1318 | "properties": { 1319 | "name": "0206 BIKETOWN", 1320 | "inside_area": true, 1321 | "address": "1510 Southwest Harbor Way, Portland" 1322 | } 1323 | }, 1324 | { 1325 | "type": "Feature", 1326 | "geometry": { 1327 | "type": "Point", 1328 | "coordinates": [-122.66879666666667, 45.53870166666667] 1329 | }, 1330 | "properties": { 1331 | "name": "0230 BIKETOWN", 1332 | "inside_area": true, 1333 | "address": "2125 North Flint Avenue, Portland" 1334 | } 1335 | }, 1336 | { 1337 | "type": "Feature", 1338 | "geometry": { 1339 | "type": "Point", 1340 | "coordinates": [-122.66865333333334, 45.54006] 1341 | }, 1342 | "properties": { 1343 | "name": "0456 BIKETOWN", 1344 | "inside_area": true, 1345 | "address": "2326 North Flint Avenue, Portland" 1346 | } 1347 | }, 1348 | { 1349 | "type": "Feature", 1350 | "geometry": { 1351 | "type": "Point", 1352 | "coordinates": [-122.652695, 45.561856666666664] 1353 | }, 1354 | "properties": { 1355 | "name": "0087 BIKETOWN", 1356 | "inside_area": true, 1357 | "address": "1221 Northeast Emerson Street, Portland" 1358 | } 1359 | }, 1360 | { 1361 | "type": "Feature", 1362 | "geometry": { 1363 | "type": "Point", 1364 | "coordinates": [-122.685155, 45.52392833333333] 1365 | }, 1366 | "properties": { 1367 | "name": "0459 BIKETOWN", 1368 | "inside_area": true, 1369 | "address": "First American Title, 120, Northwest 14th Avenue, Pearl District, Portland, Oregon" 1370 | } 1371 | }, 1372 | { 1373 | "type": "Feature", 1374 | "geometry": { 1375 | "type": "Point", 1376 | "coordinates": [-122.663685, 45.52008] 1377 | }, 1378 | "properties": { 1379 | "name": "0356 BIKETOWN", 1380 | "inside_area": true, 1381 | "address": "Johnny Law Motors, 201, Southeast Oak Street, Ladd's Addition, Central East Side, Portland, Oregon" 1382 | } 1383 | }, 1384 | { 1385 | "type": "Feature", 1386 | "geometry": { 1387 | "type": "Point", 1388 | "coordinates": [-122.62817166666666, 45.51615666666667] 1389 | }, 1390 | "properties": { 1391 | "name": "0997 BETRUE 2018 TRAINER", 1392 | "inside_area": true, 1393 | "address": "901-915 Southeast 35th Avenue, Portland" 1394 | } 1395 | }, 1396 | { 1397 | "type": "Feature", 1398 | "geometry": { 1399 | "type": "Point", 1400 | "coordinates": [-122.64604666666666, 45.52583] 1401 | }, 1402 | "properties": { 1403 | "name": "0796 BIKETOWN", 1404 | "inside_area": true, 1405 | "address": "2034B Northeast Flanders Street, Portland" 1406 | } 1407 | }, 1408 | { 1409 | "type": "Feature", 1410 | "geometry": { 1411 | "type": "Point", 1412 | "coordinates": [-122.674735, 45.52196] 1413 | }, 1414 | "properties": { 1415 | "name": "0306 BIKETOWN ", 1416 | "inside_area": true, 1417 | "address": "The Natural Nails, 337, Southwest Pine Street, Pearl District, Portland, Oregon" 1418 | } 1419 | }, 1420 | { 1421 | "type": "Feature", 1422 | "geometry": { 1423 | "type": "Point", 1424 | "coordinates": [-122.63418, 45.516398333333335] 1425 | }, 1426 | "properties": { 1427 | "name": "0558 BIKETOWN", 1428 | "inside_area": true, 1429 | "address": "3010, Southeast Belmont Street, Belmont, Portland, Oregon" 1430 | } 1431 | }, 1432 | { 1433 | "type": "Feature", 1434 | "geometry": { 1435 | "type": "Point", 1436 | "coordinates": [-122.63032166666666, 45.512103333333336] 1437 | }, 1438 | "properties": { 1439 | "name": "0070 BIKETOWN", 1440 | "inside_area": true, 1441 | "address": "3325 Southeast Hawthorne Boulevard, Portland" 1442 | } 1443 | }, 1444 | { 1445 | "type": "Feature", 1446 | "geometry": { 1447 | "type": "Point", 1448 | "coordinates": [-122.64949833333333, 45.49397666666667] 1449 | }, 1450 | "properties": { 1451 | "name": "0865 BIKETOWN", 1452 | "inside_area": true, 1453 | "address": "1534, Southeast Center Street, Creston-Kenilworth, Brooklyn, Portland, Oregon" 1454 | } 1455 | }, 1456 | { 1457 | "type": "Feature", 1458 | "geometry": { 1459 | "type": "Point", 1460 | "coordinates": [-122.65562333333334, 45.515745] 1461 | }, 1462 | "properties": { 1463 | "name": "0401 BIKETOWN", 1464 | "inside_area": true, 1465 | "address": "1000-1098 Southeast 10th Avenue, Portland" 1466 | } 1467 | }, 1468 | { 1469 | "type": "Feature", 1470 | "geometry": { 1471 | "type": "Point", 1472 | "coordinates": [-122.67579, 45.52183333333333] 1473 | }, 1474 | "properties": { 1475 | "name": "0802 BIKETOWN", 1476 | "inside_area": true, 1477 | "address": "208 Southwest 5th Avenue, Portland" 1478 | } 1479 | }, 1480 | { 1481 | "type": "Feature", 1482 | "geometry": { 1483 | "type": "Point", 1484 | "coordinates": [-122.67493833333333, 45.527318333333334] 1485 | }, 1486 | "properties": { 1487 | "name": "0883 BIKETOWN", 1488 | "inside_area": true, 1489 | "address": "434 Northwest Hoyt Street, Portland" 1490 | } 1491 | }, 1492 | { 1493 | "type": "Feature", 1494 | "geometry": { 1495 | "type": "Point", 1496 | "coordinates": [-122.68528333333333, 45.56229] 1497 | }, 1498 | "properties": { 1499 | "name": "0520 BIKETOWN ", 1500 | "inside_area": true, 1501 | "address": "1715 North Willamette Boulevard, Portland" 1502 | } 1503 | }, 1504 | { 1505 | "type": "Feature", 1506 | "geometry": { 1507 | "type": "Point", 1508 | "coordinates": [-122.68564666666667, 45.528595] 1509 | }, 1510 | "properties": { 1511 | "name": "0210 BIKETOWN", 1512 | "inside_area": true, 1513 | "address": "1405, Northwest Johnson Street, Pearl District, Portland, Oregon" 1514 | } 1515 | }, 1516 | { 1517 | "type": "Feature", 1518 | "geometry": { 1519 | "type": "Point", 1520 | "coordinates": [-122.67486666666667, 45.52173333333333] 1521 | }, 1522 | "properties": { 1523 | "name": "0646 BIKETOWN", 1524 | "inside_area": true, 1525 | "address": "201-209 Southwest 4th Avenue, Portland" 1526 | } 1527 | }, 1528 | { 1529 | "type": "Feature", 1530 | "geometry": { 1531 | "type": "Point", 1532 | "coordinates": [-122.57629833333333, 45.49392666666667] 1533 | }, 1534 | "properties": { 1535 | "name": "0333 BIKETOWN", 1536 | "inside_area": false, 1537 | "address": "3900 SE 82nd Ave., Portland" 1538 | } 1539 | }, 1540 | { 1541 | "type": "Feature", 1542 | "geometry": { 1543 | "type": "Point", 1544 | "coordinates": [-122.64801666666666, 45.498286666666665] 1545 | }, 1546 | "properties": { 1547 | "name": "0098 BIKETOWN", 1548 | "inside_area": true, 1549 | "address": "3390 Southeast 17th Avenue, Portland" 1550 | } 1551 | }, 1552 | { 1553 | "type": "Feature", 1554 | "geometry": { 1555 | "type": "Point", 1556 | "coordinates": [-122.62678333333334, 45.512915] 1557 | }, 1558 | "properties": { 1559 | "name": "0453 BIKETOWN", 1560 | "inside_area": true, 1561 | "address": "3609 Southeast Madison Street, Portland" 1562 | } 1563 | }, 1564 | { 1565 | "type": "Feature", 1566 | "geometry": { 1567 | "type": "Point", 1568 | "coordinates": [-122.68491, 45.52719166666667] 1569 | }, 1570 | "properties": { 1571 | "name": "0256 BIKETOWN", 1572 | "inside_area": true, 1573 | "address": "1335-1399 Northwest Hoyt Street, Portland" 1574 | } 1575 | }, 1576 | { 1577 | "type": "Feature", 1578 | "geometry": { 1579 | "type": "Point", 1580 | "coordinates": [-122.70137666666666, 45.52937333333333] 1581 | }, 1582 | "properties": { 1583 | "name": "0626 BIKETOWN", 1584 | "inside_area": true, 1585 | "address": "2424 Northwest Lovejoy Street, Portland" 1586 | } 1587 | }, 1588 | { 1589 | "type": "Feature", 1590 | "geometry": { 1591 | "type": "Point", 1592 | "coordinates": [-122.675745, 45.50579666666667] 1593 | }, 1594 | "properties": { 1595 | "name": "0309 XM BIKETOWN", 1596 | "inside_area": true, 1597 | "address": "2301-2399 Southwest Water Avenue, Portland" 1598 | } 1599 | }, 1600 | { 1601 | "type": "Feature", 1602 | "geometry": { 1603 | "type": "Point", 1604 | "coordinates": [-122.67673166666667, 45.524723333333334] 1605 | }, 1606 | "properties": { 1607 | "name": "0162 BIKETOWN", 1608 | "inside_area": true, 1609 | "address": "201-299 Northwest 6th Avenue, Portland" 1610 | } 1611 | }, 1612 | { 1613 | "type": "Feature", 1614 | "geometry": { 1615 | "type": "Point", 1616 | "coordinates": [-122.66367666666666, 45.520536666666665] 1617 | }, 1618 | "properties": { 1619 | "name": "0537 BIKETOWN", 1620 | "inside_area": true, 1621 | "address": "312-318 Southeast 2nd Avenue, Portland" 1622 | } 1623 | }, 1624 | { 1625 | "type": "Feature", 1626 | "geometry": { 1627 | "type": "Point", 1628 | "coordinates": [-122.66274, 45.51719833333333] 1629 | }, 1630 | "properties": { 1631 | "name": "0694 BIKETOWN", 1632 | "inside_area": true, 1633 | "address": "322 Southeast Morrison Bridge, Portland" 1634 | } 1635 | }, 1636 | { 1637 | "type": "Feature", 1638 | "geometry": { 1639 | "type": "Point", 1640 | "coordinates": [-122.67542666666667, 45.55112833333333] 1641 | }, 1642 | "properties": { 1643 | "name": "0810 BIKETOWN", 1644 | "inside_area": true, 1645 | "address": "3912 North Mississippi Avenue, Portland" 1646 | } 1647 | }, 1648 | { 1649 | "type": "Feature", 1650 | "geometry": { 1651 | "type": "Point", 1652 | "coordinates": [-122.64902166666667, 45.522775] 1653 | }, 1654 | "properties": { 1655 | "name": "0629 BIKETOWN", 1656 | "inside_area": true, 1657 | "address": "1636 East Burnside Street, Portland" 1658 | } 1659 | }, 1660 | { 1661 | "type": "Feature", 1662 | "geometry": { 1663 | "type": "Point", 1664 | "coordinates": [-122.66552333333334, 45.530186666666665] 1665 | }, 1666 | "properties": { 1667 | "name": "1009 DESIGN BIKE, NE CYCLING LIFE", 1668 | "inside_area": true, 1669 | "address": "Interstate 5, Portland" 1670 | } 1671 | }, 1672 | { 1673 | "type": "Feature", 1674 | "geometry": { 1675 | "type": "Point", 1676 | "coordinates": [-122.63818, 45.517091666666666] 1677 | }, 1678 | "properties": { 1679 | "name": "0966 XC WOMEN’S HISTORY MONTH", 1680 | "inside_area": true, 1681 | "address": "2600-2698 Southeast Morrison Street, Portland" 1682 | } 1683 | }, 1684 | { 1685 | "type": "Feature", 1686 | "geometry": { 1687 | "type": "Point", 1688 | "coordinates": [-122.6918, 45.51654166666667] 1689 | }, 1690 | "properties": { 1691 | "name": "0754 BIKETOWN", 1692 | "inside_area": true, 1693 | "address": "1630 Southwest Clay Street, Portland" 1694 | } 1695 | }, 1696 | { 1697 | "type": "Feature", 1698 | "geometry": { 1699 | "type": "Point", 1700 | "coordinates": [-122.67516, 45.52987666666667] 1701 | }, 1702 | "properties": { 1703 | "name": "0492 BIKETOWN", 1704 | "inside_area": true, 1705 | "address": "961-1005 Northwest Naito Parkway, Portland" 1706 | } 1707 | }, 1708 | { 1709 | "type": "Feature", 1710 | "geometry": { 1711 | "type": "Point", 1712 | "coordinates": [-122.65968666666667, 45.508035] 1713 | }, 1714 | "properties": { 1715 | "name": "0935 DESIGN BIKE, WATERFRONT WANDERER SW", 1716 | "inside_area": true, 1717 | "address": "2034, Southeast 6th Avenue, Ladd's Addition, Central East Side, Portland, Oregon" 1718 | } 1719 | }, 1720 | { 1721 | "type": "Feature", 1722 | "geometry": { 1723 | "type": "Point", 1724 | "coordinates": [-122.65762, 45.518723333333334] 1725 | }, 1726 | "properties": { 1727 | "name": "0414 BIKETOWN", 1728 | "inside_area": true, 1729 | "address": "801-815 Southeast Washington Street, Portland" 1730 | } 1731 | }, 1732 | { 1733 | "type": "Feature", 1734 | "geometry": { 1735 | "type": "Point", 1736 | "coordinates": [-122.67596666666667, 45.519765] 1737 | }, 1738 | "properties": { 1739 | "name": "0932 DESIGN BIKE, EXPLORIN' SE", 1740 | "inside_area": true, 1741 | "address": "404 Southwest Washington Street, Portland" 1742 | } 1743 | }, 1744 | { 1745 | "type": "Feature", 1746 | "geometry": { 1747 | "type": "Point", 1748 | "coordinates": [-122.68409333333334, 45.534485] 1749 | }, 1750 | "properties": { 1751 | "name": "0057 BIKETOWN", 1752 | "inside_area": true, 1753 | "address": "Northwest 13th Avenue, Pearl District, Portland, Oregon" 1754 | } 1755 | }, 1756 | { 1757 | "type": "Feature", 1758 | "geometry": { 1759 | "type": "Point", 1760 | "coordinates": [-122.688495, 45.533076666666666] 1761 | }, 1762 | "properties": { 1763 | "name": "0730 BIKETOWN", 1764 | "inside_area": true, 1765 | "address": "1400-1420 Northwest 17th Avenue, Portland" 1766 | } 1767 | }, 1768 | { 1769 | "type": "Feature", 1770 | "geometry": { 1771 | "type": "Point", 1772 | "coordinates": [-122.68945333333333, 45.526313333333334] 1773 | }, 1774 | "properties": { 1775 | "name": "0402 BIKETOWN", 1776 | "inside_area": true, 1777 | "address": "425, Northwest 18th Avenue, Pearl District, Portland, Oregon" 1778 | } 1779 | }, 1780 | { 1781 | "type": "Feature", 1782 | "geometry": { 1783 | "type": "Point", 1784 | "coordinates": [-122.64298833333334, 45.53352833333334] 1785 | }, 1786 | "properties": { 1787 | "name": "0984 WOMEN’S HISTORY MONTH", 1788 | "inside_area": true, 1789 | "address": "1430 Northeast 22nd Avenue, Portland" 1790 | } 1791 | }, 1792 | { 1793 | "type": "Feature", 1794 | "geometry": { 1795 | "type": "Point", 1796 | "coordinates": [-122.632975, 45.51688] 1797 | }, 1798 | "properties": { 1799 | "name": " 0063 BIKETOWN", 1800 | "inside_area": true, 1801 | "address": "3128 Southeast Morrison Street, Portland" 1802 | } 1803 | }, 1804 | { 1805 | "type": "Feature", 1806 | "geometry": { 1807 | "type": "Point", 1808 | "coordinates": [-122.658805, 45.52283333333333] 1809 | }, 1810 | "properties": { 1811 | "name": "0628 BIKETOWN", 1812 | "inside_area": true, 1813 | "address": "632 East Burnside Street, Portland" 1814 | } 1815 | }, 1816 | { 1817 | "type": "Feature", 1818 | "geometry": { 1819 | "type": "Point", 1820 | "coordinates": [-122.68743666666667, 45.56229] 1821 | }, 1822 | "properties": { 1823 | "name": "0196 BIKETOWN", 1824 | "inside_area": true, 1825 | "address": "5400-5476 North Denver Avenue, Portland" 1826 | } 1827 | }, 1828 | { 1829 | "type": "Feature", 1830 | "geometry": { 1831 | "type": "Point", 1832 | "coordinates": [-122.64839833333333, 45.533656666666666] 1833 | }, 1834 | "properties": { 1835 | "name": "0166 BIKETOWN", 1836 | "inside_area": true, 1837 | "address": "1504, Northeast 17th Avenue, Irvington, Portland, Oregon" 1838 | } 1839 | }, 1840 | { 1841 | "type": "Feature", 1842 | "geometry": { 1843 | "type": "Point", 1844 | "coordinates": [-122.674825, 45.521591666666666] 1845 | }, 1846 | "properties": { 1847 | "name": "0941 DESIGN BIKE, WATERFRONT WANDERER SW", 1848 | "inside_area": true, 1849 | "address": "216 Southwest 4th Avenue, Portland" 1850 | } 1851 | }, 1852 | { 1853 | "type": "Feature", 1854 | "geometry": { 1855 | "type": "Point", 1856 | "coordinates": [-122.63979166666667, 45.504871666666666] 1857 | }, 1858 | "properties": { 1859 | "name": "0535 BIKETOWN", 1860 | "inside_area": true, 1861 | "address": "2425 Southeast 26th Avenue, Portland" 1862 | } 1863 | }, 1864 | { 1865 | "type": "Feature", 1866 | "geometry": { 1867 | "type": "Point", 1868 | "coordinates": [-122.65592, 45.52124166666667] 1869 | }, 1870 | "properties": { 1871 | "name": "0385 BIKETOWN", 1872 | "inside_area": true, 1873 | "address": "930 Southeast Sandy Boulevard, Portland" 1874 | } 1875 | }, 1876 | { 1877 | "type": "Feature", 1878 | "geometry": { 1879 | "type": "Point", 1880 | "coordinates": [-122.6111, 45.53982333333333] 1881 | }, 1882 | "properties": { 1883 | "name": "0374 BIKETOWN", 1884 | "inside_area": true, 1885 | "address": "5039 Northeast Sandy Boulevard, Portland" 1886 | } 1887 | }, 1888 | { 1889 | "type": "Feature", 1890 | "geometry": { 1891 | "type": "Point", 1892 | "coordinates": [-122.67398166666666, 45.518546666666666] 1893 | }, 1894 | "properties": { 1895 | "name": "0437 BIKETOWN", 1896 | "inside_area": true, 1897 | "address": "121 Southwest Morrison Street, Portland" 1898 | } 1899 | }, 1900 | { 1901 | "type": "Feature", 1902 | "geometry": { 1903 | "type": "Point", 1904 | "coordinates": [-122.67330666666666, 45.528171666666665] 1905 | }, 1906 | "properties": { 1907 | "name": "0203 BIKETOWN", 1908 | "inside_area": true, 1909 | "address": "600 Block Northwest Naito Parkway, Northwest Naito Parkway, Pearl District, Portland, Oregon" 1910 | } 1911 | }, 1912 | { 1913 | "type": "Feature", 1914 | "geometry": { 1915 | "type": "Point", 1916 | "coordinates": [-122.65835333333334, 45.53440333333333] 1917 | }, 1918 | "properties": { 1919 | "name": "0837 BIKETOWN", 1920 | "inside_area": true, 1921 | "address": "Muchas Gracias, 707, Northeast Weidler Street, Lloyd District, Portland, Oregon" 1922 | } 1923 | }, 1924 | { 1925 | "type": "Feature", 1926 | "geometry": { 1927 | "type": "Point", 1928 | "coordinates": [-122.67005166666667, 45.545435] 1929 | }, 1930 | "properties": { 1931 | "name": "0349 BIKETOWN", 1932 | "inside_area": true, 1933 | "address": "2801 North Gantenbein Avenue, Portland" 1934 | } 1935 | }, 1936 | { 1937 | "type": "Feature", 1938 | "geometry": { 1939 | "type": "Point", 1940 | "coordinates": [-122.68975666666667, 45.53648] 1941 | }, 1942 | "properties": { 1943 | "name": "0739 BIKETOWN", 1944 | "inside_area": true, 1945 | "address": "1801, Northwest Upshur Street, Pearl District, Portland, Oregon" 1946 | } 1947 | }, 1948 | { 1949 | "type": "Feature", 1950 | "geometry": { 1951 | "type": "Point", 1952 | "coordinates": [-122.69749666666667, 45.52706666666667] 1953 | }, 1954 | "properties": { 1955 | "name": "0912 BIKETOWN", 1956 | "inside_area": true, 1957 | "address": "2247 Northwest Hoyt Street, Portland" 1958 | } 1959 | }, 1960 | { 1961 | "type": "Feature", 1962 | "geometry": { 1963 | "type": "Point", 1964 | "coordinates": [-122.63724666666667, 45.52786] 1965 | }, 1966 | "properties": { 1967 | "name": "0227 BIKETOWN", 1968 | "inside_area": true, 1969 | "address": "705 Northeast 28th Avenue, Portland" 1970 | } 1971 | }, 1972 | { 1973 | "type": "Feature", 1974 | "geometry": { 1975 | "type": "Point", 1976 | "coordinates": [-122.67375, 45.51155333333333] 1977 | }, 1978 | "properties": { 1979 | "name": "0762 BIKETOWN", 1980 | "inside_area": true, 1981 | "address": "1510 Southwest Harbor Way, Portland" 1982 | } 1983 | }, 1984 | { 1985 | "type": "Feature", 1986 | "geometry": { 1987 | "type": "Point", 1988 | "coordinates": [-122.676435, 45.50302833333333] 1989 | }, 1990 | "properties": { 1991 | "name": "0757 BIKETOWN", 1992 | "inside_area": true, 1993 | "address": "2862-2898 U.S. Highway 26, Portland" 1994 | } 1995 | }, 1996 | { 1997 | "type": "Feature", 1998 | "geometry": { 1999 | "type": "Point", 2000 | "coordinates": [-122.67471, 45.52182166666667] 2001 | }, 2002 | "properties": { 2003 | "name": "1030 AIR SAFARI ", 2004 | "inside_area": true, 2005 | "address": "The Natural Nails, 337, Southwest Pine Street, Pearl District, Portland, Oregon" 2006 | } 2007 | }, 2008 | { 2009 | "type": "Feature", 2010 | "geometry": { 2011 | "type": "Point", 2012 | "coordinates": [-122.61866333333333, 45.52032666666667] 2013 | }, 2014 | "properties": { 2015 | "name": "0742 BIKETOWN", 2016 | "inside_area": true, 2017 | "address": "4225 Southeast Oak Street, Portland" 2018 | } 2019 | }, 2020 | { 2021 | "type": "Feature", 2022 | "geometry": { 2023 | "type": "Point", 2024 | "coordinates": [-122.66302, 45.51517666666667] 2025 | }, 2026 | "properties": { 2027 | "name": "0428 BIKETOWN", 2028 | "inside_area": true, 2029 | "address": "1035 Southeast 3rd Avenue, Portland" 2030 | } 2031 | }, 2032 | { 2033 | "type": "Feature", 2034 | "geometry": { 2035 | "type": "Point", 2036 | "coordinates": [-122.681235, 45.55909666666667] 2037 | }, 2038 | "properties": { 2039 | "name": "0042 BIKETOWN", 2040 | "inside_area": true, 2041 | "address": "5001-5025 North Maryland Avenue, Portland" 2042 | } 2043 | }, 2044 | { 2045 | "type": "Feature", 2046 | "geometry": { 2047 | "type": "Point", 2048 | "coordinates": [-122.65973166666667, 45.523723333333336] 2049 | }, 2050 | "properties": { 2051 | "name": "0384 BIKETOWN", 2052 | "inside_area": true, 2053 | "address": "111 Northeast 6th Avenue, Portland" 2054 | } 2055 | }, 2056 | { 2057 | "type": "Feature", 2058 | "geometry": { 2059 | "type": "Point", 2060 | "coordinates": [-122.64802, 45.49827833333333] 2061 | }, 2062 | "properties": { 2063 | "name": "0132 BIKETOWN", 2064 | "inside_area": true, 2065 | "address": "3390 Southeast 17th Avenue, Portland" 2066 | } 2067 | }, 2068 | { 2069 | "type": "Feature", 2070 | "geometry": { 2071 | "type": "Point", 2072 | "coordinates": [-122.675995, 45.519083333333334] 2073 | }, 2074 | "properties": { 2075 | "name": "0968 BETRUE TRAINER", 2076 | "inside_area": true, 2077 | "address": "340-398 Southwest Alder Street, Portland" 2078 | } 2079 | }, 2080 | { 2081 | "type": "Feature", 2082 | "geometry": { 2083 | "type": "Point", 2084 | "coordinates": [-122.66885666666667, 45.53024166666667] 2085 | }, 2086 | "properties": { 2087 | "name": "0084 BIKETOWN", 2088 | "inside_area": true, 2089 | "address": "901-1049 North Thunderbird Way, Portland" 2090 | } 2091 | }, 2092 | { 2093 | "type": "Feature", 2094 | "geometry": { 2095 | "type": "Point", 2096 | "coordinates": [-122.68448666666667, 45.534395] 2097 | }, 2098 | "properties": { 2099 | "name": "0595 BIKETOWN", 2100 | "inside_area": true, 2101 | "address": "1301 Northwest Raleigh Street, Portland" 2102 | } 2103 | }, 2104 | { 2105 | "type": "Feature", 2106 | "geometry": { 2107 | "type": "Point", 2108 | "coordinates": [-122.65880666666666, 45.522845] 2109 | }, 2110 | "properties": { 2111 | "name": "0608 BIKETOWN", 2112 | "inside_area": true, 2113 | "address": "632 East Burnside Street, Portland" 2114 | } 2115 | }, 2116 | { 2117 | "type": "Feature", 2118 | "geometry": { 2119 | "type": "Point", 2120 | "coordinates": [-122.66355666666666, 45.520091666666666] 2121 | }, 2122 | "properties": { 2123 | "name": "0673 BIKETOWN", 2124 | "inside_area": true, 2125 | "address": "201 Southeast Oak Street, Portland" 2126 | } 2127 | }, 2128 | { 2129 | "type": "Feature", 2130 | "geometry": { 2131 | "type": "Point", 2132 | "coordinates": [-122.67633166666667, 45.51900666666667] 2133 | }, 2134 | "properties": { 2135 | "name": "0658 BIKETOWN", 2136 | "inside_area": true, 2137 | "address": "600 Southwest 4th Avenue, Portland" 2138 | } 2139 | }, 2140 | { 2141 | "type": "Feature", 2142 | "geometry": { 2143 | "type": "Point", 2144 | "coordinates": [-122.66163833333333, 45.561143333333334] 2145 | }, 2146 | "properties": { 2147 | "name": "0466 BIKETOWN", 2148 | "inside_area": true, 2149 | "address": "5225 Oregon 99E, Portland" 2150 | } 2151 | }, 2152 | { 2153 | "type": "Feature", 2154 | "geometry": { 2155 | "type": "Point", 2156 | "coordinates": [-122.65594666666667, 45.521251666666664] 2157 | }, 2158 | "properties": { 2159 | "name": "0680 BIKETOWN", 2160 | "inside_area": true, 2161 | "address": "930 Southeast Sandy Boulevard, Portland" 2162 | } 2163 | }, 2164 | { 2165 | "type": "Feature", 2166 | "geometry": { 2167 | "type": "Point", 2168 | "coordinates": [-122.66780166666666, 45.53014666666667] 2169 | }, 2170 | "properties": { 2171 | "name": "0596 BIKETOWN", 2172 | "inside_area": true, 2173 | "address": "951-979 North Interstate Avenue, Portland" 2174 | } 2175 | }, 2176 | { 2177 | "type": "Feature", 2178 | "geometry": { 2179 | "type": "Point", 2180 | "coordinates": [-122.68422, 45.52423833333334] 2181 | }, 2182 | "properties": { 2183 | "name": "0018 BIKETOWN", 2184 | "inside_area": true, 2185 | "address": "131-199 Northwest 13th Avenue, Portland" 2186 | } 2187 | }, 2188 | { 2189 | "type": "Feature", 2190 | "geometry": { 2191 | "type": "Point", 2192 | "coordinates": [-122.67586666666666, 45.51857833333333] 2193 | }, 2194 | "properties": { 2195 | "name": "0439 BIKETOWN", 2196 | "inside_area": true, 2197 | "address": "Smart Park, 620, Southwest 4th Avenue, Pearl District, Portland, Oregon" 2198 | } 2199 | }, 2200 | { 2201 | "type": "Feature", 2202 | "geometry": { 2203 | "type": "Point", 2204 | "coordinates": [-122.67383, 45.523133333333334] 2205 | }, 2206 | "properties": { 2207 | "name": "0971 WOMEN’S HISTORY MONTH ", 2208 | "inside_area": true, 2209 | "address": "Limbo Lounge, 350, West Burnside Street, Pearl District, Portland, Oregon" 2210 | } 2211 | }, 2212 | { 2213 | "type": "Feature", 2214 | "geometry": { 2215 | "type": "Point", 2216 | "coordinates": [-122.63908166666667, 45.516371666666664] 2217 | }, 2218 | "properties": { 2219 | "name": "0936 DESIGN BIKE, COLORFUL PORTLAND NW", 2220 | "inside_area": true, 2221 | "address": "900-908 Southeast 26th Avenue, Portland" 2222 | } 2223 | }, 2224 | { 2225 | "type": "Feature", 2226 | "geometry": { 2227 | "type": "Point", 2228 | "coordinates": [-122.65562666666666, 45.515715] 2229 | }, 2230 | "properties": { 2231 | "name": "0911 BIKETOWN", 2232 | "inside_area": true, 2233 | "address": "1000-1098 Southeast 10th Avenue, Portland" 2234 | } 2235 | }, 2236 | { 2237 | "type": "Feature", 2238 | "geometry": { 2239 | "type": "Point", 2240 | "coordinates": [-122.67646333333333, 45.50304666666667] 2241 | }, 2242 | "properties": { 2243 | "name": "0769 BIKETOWN", 2244 | "inside_area": true, 2245 | "address": "0103, Southwest Meade Street, University District, Portland, Oregon" 2246 | } 2247 | }, 2248 | { 2249 | "type": "Feature", 2250 | "geometry": { 2251 | "type": "Point", 2252 | "coordinates": [-122.66833666666666, 45.496543333333335] 2253 | }, 2254 | "properties": { 2255 | "name": "0563 BIKETOWN", 2256 | "inside_area": true, 2257 | "address": "0841 Southwest Gaines Street, Portland" 2258 | } 2259 | }, 2260 | { 2261 | "type": "Feature", 2262 | "geometry": { 2263 | "type": "Point", 2264 | "coordinates": [-122.62051833333334, 45.53228166666667] 2265 | }, 2266 | "properties": { 2267 | "name": "0319 BIKETOWN", 2268 | "inside_area": true, 2269 | "address": "3901-4199 Northeast Senate Street, Portland" 2270 | } 2271 | }, 2272 | { 2273 | "type": "Feature", 2274 | "geometry": { 2275 | "type": "Point", 2276 | "coordinates": [-122.61810166666666, 45.50345166666666] 2277 | }, 2278 | "properties": { 2279 | "name": "0485 BIKETOWN", 2280 | "inside_area": true, 2281 | "address": "2631 Southeast 43rd Avenue, Portland" 2282 | } 2283 | }, 2284 | { 2285 | "type": "Feature", 2286 | "geometry": { 2287 | "type": "Point", 2288 | "coordinates": [-122.66370333333333, 45.54089333333334] 2289 | }, 2290 | "properties": { 2291 | "name": "0273 BIKETOWN", 2292 | "inside_area": true, 2293 | "address": "116 Northeast Russell Street, Portland" 2294 | } 2295 | }, 2296 | { 2297 | "type": "Feature", 2298 | "geometry": { 2299 | "type": "Point", 2300 | "coordinates": [-122.67390166666667, 45.51139666666667] 2301 | }, 2302 | "properties": { 2303 | "name": "1028 AIR SAFARI", 2304 | "inside_area": true, 2305 | "address": "1510 Southwest Harbor Way, Portland" 2306 | } 2307 | }, 2308 | { 2309 | "type": "Feature", 2310 | "geometry": { 2311 | "type": "Point", 2312 | "coordinates": [-122.67649666666667, 45.518613333333334] 2313 | }, 2314 | "properties": { 2315 | "name": "0712 BIKETOWN", 2316 | "inside_area": true, 2317 | "address": "600-698 Southwest 4th Avenue, Portland" 2318 | } 2319 | }, 2320 | { 2321 | "type": "Feature", 2322 | "geometry": { 2323 | "type": "Point", 2324 | "coordinates": [-122.65501333333333, 45.50729333333334] 2325 | }, 2326 | "properties": { 2327 | "name": "0890 BIKETOWN", 2328 | "inside_area": true, 2329 | "address": "Portland" 2330 | } 2331 | }, 2332 | { 2333 | "type": "Feature", 2334 | "geometry": { 2335 | "type": "Point", 2336 | "coordinates": [-122.67650166666667, 45.52319833333333] 2337 | }, 2338 | "properties": { 2339 | "name": "0079 BIKETOWN", 2340 | "inside_area": true, 2341 | "address": "Saint André Bessette, 601, West Burnside Street, Pearl District, Portland, Oregon" 2342 | } 2343 | }, 2344 | { 2345 | "type": "Feature", 2346 | "geometry": { 2347 | "type": "Point", 2348 | "coordinates": [-122.69178, 45.52708833333333] 2349 | }, 2350 | "properties": { 2351 | "name": "0924 BIKETOWN", 2352 | "inside_area": true, 2353 | "address": "1955 Northwest Hoyt Street, Portland" 2354 | } 2355 | }, 2356 | { 2357 | "type": "Feature", 2358 | "geometry": { 2359 | "type": "Point", 2360 | "coordinates": [-122.67336, 45.55985166666667] 2361 | }, 2362 | "properties": { 2363 | "name": "0141 BIKETOWN ", 2364 | "inside_area": true, 2365 | "address": "615 North Webster Street, Portland" 2366 | } 2367 | }, 2368 | { 2369 | "type": "Feature", 2370 | "geometry": { 2371 | "type": "Point", 2372 | "coordinates": [-122.65976, 45.522815] 2373 | }, 2374 | "properties": { 2375 | "name": "0617 BIKETOWN", 2376 | "inside_area": true, 2377 | "address": "Machus, East Burnside Street, Ladd's Addition, Lloyd District, Portland, Oregon" 2378 | } 2379 | }, 2380 | { 2381 | "type": "Feature", 2382 | "geometry": { 2383 | "type": "Point", 2384 | "coordinates": [-122.67752, 45.51684] 2385 | }, 2386 | "properties": { 2387 | "name": "0541 BIKETOWN", 2388 | "inside_area": true, 2389 | "address": "901-999 Southwest 4th Avenue, Portland" 2390 | } 2391 | }, 2392 | { 2393 | "type": "Feature", 2394 | "geometry": { 2395 | "type": "Point", 2396 | "coordinates": [-122.66178666666667, 45.531005] 2397 | }, 2398 | "properties": { 2399 | "name": "0969 DESIGN BIKE, N PAUL BUNYAN", 2400 | "inside_area": true, 2401 | "address": "1135, Northeast Martin Luther King, Junior Boulevard, Lloyd District, Portland, Oregon" 2402 | } 2403 | }, 2404 | { 2405 | "type": "Feature", 2406 | "geometry": { 2407 | "type": "Point", 2408 | "coordinates": [-122.67632666666667, 45.51949333333334] 2409 | }, 2410 | "properties": { 2411 | "name": "0958 DESIGN BIKE, WATERFRONT WANDERER SW", 2412 | "inside_area": true, 2413 | "address": "529 Southwest 4th Avenue, Portland" 2414 | } 2415 | }, 2416 | { 2417 | "type": "Feature", 2418 | "geometry": { 2419 | "type": "Point", 2420 | "coordinates": [-122.673885, 45.51138] 2421 | }, 2422 | "properties": { 2423 | "name": "0662 BIKETOWN ", 2424 | "inside_area": true, 2425 | "address": "1510 Southwest Harbor Way, Portland" 2426 | } 2427 | }, 2428 | { 2429 | "type": "Feature", 2430 | "geometry": { 2431 | "type": "Point", 2432 | "coordinates": [-122.67721666666667, 45.519965] 2433 | }, 2434 | "properties": { 2435 | "name": "0352 BIKETOWN", 2436 | "inside_area": true, 2437 | "address": "500 Southwest Washington Street, Portland" 2438 | } 2439 | }, 2440 | { 2441 | "type": "Feature", 2442 | "geometry": { 2443 | "type": "Point", 2444 | "coordinates": [-122.67812166666667, 45.51732] 2445 | }, 2446 | "properties": { 2447 | "name": "0482 BIKETOWN", 2448 | "inside_area": true, 2449 | "address": "460-496 Southwest Taylor Street, Portland" 2450 | } 2451 | }, 2452 | { 2453 | "type": "Feature", 2454 | "geometry": { 2455 | "type": "Point", 2456 | "coordinates": [-122.67726, 45.51716166666667] 2457 | }, 2458 | "properties": { 2459 | "name": "0978 DESIGN BIKE, N PAUL BUNYAN", 2460 | "inside_area": true, 2461 | "address": "400-458 Southwest Taylor Street, Portland" 2462 | } 2463 | }, 2464 | { 2465 | "type": "Feature", 2466 | "geometry": { 2467 | "type": "Point", 2468 | "coordinates": [-122.60930166666667, 45.55854] 2469 | }, 2470 | "properties": { 2471 | "name": "0038 BIKETOWN", 2472 | "inside_area": true, 2473 | "address": "4830, Northeast 52nd Avenue, Alameda, Portland, Oregon" 2474 | } 2475 | }, 2476 | { 2477 | "type": "Feature", 2478 | "geometry": { 2479 | "type": "Point", 2480 | "coordinates": [-122.67632, 45.51703] 2481 | }, 2482 | "properties": { 2483 | "name": "1017 DESIGN BIKE, NE CYCLING LIFE", 2484 | "inside_area": true, 2485 | "address": "815-899 Southwest 3rd Avenue, Portland" 2486 | } 2487 | }, 2488 | { 2489 | "type": "Feature", 2490 | "geometry": { 2491 | "type": "Point", 2492 | "coordinates": [-122.68135, 45.517421666666664] 2493 | }, 2494 | "properties": { 2495 | "name": "0335 BIKETOWN", 2496 | "inside_area": true, 2497 | "address": "1111 Southwest Broadway, Portland" 2498 | } 2499 | }, 2500 | { 2501 | "type": "Feature", 2502 | "geometry": { 2503 | "type": "Point", 2504 | "coordinates": [-122.66564333333334, 45.51589166666667] 2505 | }, 2506 | "properties": { 2507 | "name": "0523 BIKETOWN", 2508 | "inside_area": true, 2509 | "address": "61 Southeast Yamhill Street, Portland" 2510 | } 2511 | }, 2512 | { 2513 | "type": "Feature", 2514 | "geometry": { 2515 | "type": "Point", 2516 | "coordinates": [-122.65593666666666, 45.52121666666667] 2517 | }, 2518 | "properties": { 2519 | "name": "0738 BIKETOWN", 2520 | "inside_area": true, 2521 | "address": "930 Southeast Sandy Boulevard, Portland" 2522 | } 2523 | } 2524 | ] 2525 | } 2526 | -------------------------------------------------------------------------------- /Public/geo/portland.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "properties": { "name": "Portland, OR" }, 4 | "geometry": { 5 | "type": "Polygon", 6 | "coordinates": [ 7 | [[-180, -90], [-180, 90], [180, 90], [180, -90], [-180, -90]], 8 | [ 9 | [-122.59583473205565, 45.56078885817948], 10 | [-122.60441780090333, 45.55105269929238], 11 | [-122.60433197021483, 45.548558288409254], 12 | [-122.6045036315918, 45.539932183126695], 13 | [-122.60879516601561, 45.539992299938355], 14 | [-122.60875225067139, 45.53389011571777], 15 | [-122.60471820831299, 45.53382999238198], 16 | [-122.60506153106691, 45.53025253821168], 17 | [-122.60733604431152, 45.53019241098712], 18 | [-122.60767936706544, 45.53037279246796], 19 | [-122.60866641998291, 45.53040285599187], 20 | [-122.60879516601561, 45.51536908938483], 21 | [-122.60836601257326, 45.515308946251544], 22 | [-122.60828018188475, 45.512061121601], 23 | [-122.60913848876953, 45.51200097493241], 24 | [-122.60862350463867, 45.50812137902919], 25 | [-122.60905265808105, 45.507850699568365], 26 | [-122.60879516601561, 45.50532429516629], 27 | [-122.60870933532715, 45.50225636595613], 28 | [-122.60888099670409, 45.49329224247349], 29 | [-122.6125717163086, 45.49329224247349], 30 | [-122.61866569519042, 45.493352409132655], 31 | [-122.61900901794434, 45.49299140821332], 32 | [-122.62407302856444, 45.4931117421102], 33 | [-122.6282787322998, 45.4931117421102], 34 | [-122.6344585418701, 45.493141825544264], 35 | [-122.64645338058472, 45.493141825544264], 36 | [-122.64638900756835, 45.489110502184104], 37 | [-122.64939308166504, 45.4890954593924], 38 | [-122.65209674835205, 45.48905033099323], 39 | [-122.65377044677736, 45.49025374259744], 40 | [-122.65570163726808, 45.49202872778195], 41 | [-122.65894174575806, 45.49724806348807], 42 | [-122.65930652618408, 45.498270816104856], 43 | [-122.65992879867552, 45.49975979038113], 44 | [-122.6599931716919, 45.50088777498285], 45 | [-122.6601219177246, 45.50189542211625], 46 | [-122.6601219177246, 45.50245187623652], 47 | [-122.66014337539673, 45.50409112802978], 48 | [-122.6611304283142, 45.50410616681612], 49 | [-122.66211748123169, 45.50413624437671], 50 | [-122.66297578811646, 45.50416632192122], 51 | [-122.66385555267334, 45.504256554458365], 52 | [-122.6643705368042, 45.50499344809821], 53 | [-122.66473531723022, 45.50564010191739], 54 | [-122.66499280929564, 45.50612132784567], 55 | [-122.66887664794923, 45.50370011817536], 56 | [-122.66754627227785, 45.50108329001585], 57 | [-122.66763210296631, 45.49669155793686], 58 | [-122.66887664794923, 45.4931117421102], 59 | [-122.67329692840575, 45.493051575193896], 60 | [-122.67325401306151, 45.49777448259619], 61 | [-122.6761293411255, 45.49786472537773], 62 | [-122.67926216125487, 45.49792488715174], 63 | [-122.67975568771362, 45.49894762747525], 64 | [-122.68057107925415, 45.50030122581018], 65 | [-122.6816439628601, 45.502331562298174], 66 | [-122.68192291259764, 45.502857933880314], 67 | [-122.68203020095825, 45.50345949537662], 68 | [-122.68198728561401, 45.5043016706727], 69 | [-122.68196582794188, 45.50580552379425], 70 | [-122.6859140396118, 45.50791085067212], 71 | [-122.68844604492186, 45.51079802806233], 72 | [-122.68977642059325, 45.51290316821198], 73 | [-122.69003391265869, 45.51473758327945], 74 | [-122.69123554229738, 45.51548937545859], 75 | [-122.69462585449219, 45.51642158381243], 76 | [-122.69659996032715, 45.51792511313277], 77 | [-122.69758701324461, 45.518436303950104], 78 | [-122.69818782806396, 45.51939853289016], 79 | [-122.69848823547365, 45.52102225691326], 80 | [-122.69857406616211, 45.52321721675087], 81 | [-122.70065546035765, 45.522315188826234], 82 | [-122.70324110984804, 45.521150048018576], 83 | [-122.70504355430602, 45.52133797558735], 84 | [-122.70504355430602, 45.522029543635064], 85 | [-122.70436763763429, 45.52237532447115], 86 | [-122.70437836647034, 45.52414929707939], 87 | [-122.70056962966918, 45.525487256362815], 88 | [-122.70260810852051, 45.528328435144076], 89 | [-122.71106243133545, 45.533123538371754], 90 | [-122.7112340927124, 45.538564508296595], 91 | [-122.7087879180908, 45.53912059987818], 92 | [-122.70586967468262, 45.54011253336884], 93 | [-122.70308017730714, 45.540743754660745], 94 | [-122.70024776458739, 45.54233680545707], 95 | [-122.69831657409667, 45.54401997989674], 96 | [-122.69484043121338, 45.543268568963], 97 | [-122.69351005554199, 45.54394483925532], 98 | [-122.68720149993895, 45.53863965612902], 99 | [-122.67561435699463, 45.53145506920469], 100 | [-122.67436981201172, 45.53184588624152], 101 | [-122.67286777496338, 45.532777823600874], 102 | [-122.67436981201172, 45.53521281284293], 103 | [-122.67509937286377, 45.5372569199354], 104 | [-122.67514228820801, 45.53894024645431], 105 | [-122.67917633056639, 45.540743754660745], 106 | [-122.67840385437012, 45.54438065357758], 107 | [-122.6813220977783, 45.54561293786127], 108 | [-122.6828670501709, 45.54639437243515], 109 | [-122.68604278564453, 45.548738610980244], 110 | [-122.6905918121338, 45.55192421434803], 111 | [-122.69265174865723, 45.55480913329005], 112 | [-122.69368171691893, 45.55763380625717], 113 | [-122.69599914550781, 45.56196068948594], 114 | [-122.69582748413087, 45.563042358229524], 115 | [-122.68896102905273, 45.563102450326866], 116 | [-122.68535614013672, 45.563102450326866], 117 | [-122.67703056335449, 45.563102450326866], 118 | [-122.67703056335449, 45.56538590239788], 119 | [-122.67136573791502, 45.565506081514776], 120 | [-122.67127990722655, 45.562741896778604], 121 | [-122.66149520874022, 45.562741896778604], 122 | [-122.66166687011719, 45.564815048081485], 123 | [-122.65630245208739, 45.564845093190115], 124 | [-122.64647483825682, 45.56442446020685], 125 | [-122.64647483825682, 45.566287239507794], 126 | [-122.64338493347168, 45.566167062062064], 127 | [-122.64338493347168, 45.564484550825846], 128 | [-122.63120770454408, 45.564409437542054], 129 | [-122.6312506198883, 45.56518309955508], 130 | [-122.6296305656433, 45.56517558832462], 131 | [-122.62967348098753, 45.56385359612053], 132 | [-122.63057470321655, 45.56383857330307], 133 | [-122.63059616088866, 45.56283203538259], 134 | [-122.62561798095703, 45.56283203538259], 135 | [-122.62385845184326, 45.56289212770492], 136 | [-122.62265682220458, 45.56292217384199], 137 | [-122.62141227722167, 45.56295221996297], 138 | [-122.62008190155028, 45.56295221996297], 139 | [-122.61712074279785, 45.56295221996297], 140 | [-122.6147174835205, 45.56292217384199], 141 | [-122.60961055755614, 45.5628620815518], 142 | [-122.6063919067383, 45.5628620815518], 143 | [-122.5996971130371, 45.56283203538259], 144 | [-122.59368896484374, 45.56283203538259], 145 | [-122.59583473205565, 45.56078885817948] 146 | ] 147 | ] 148 | } 149 | } 150 | -------------------------------------------------------------------------------- /Public/images/bike.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Public/scripts/application.js: -------------------------------------------------------------------------------- 1 | mapkit.init({ 2 | authorizationCallback: function(done) { 3 | fetch("/token") 4 | .then(res => res.text()) 5 | .then(token => done(token)) 6 | .catch(error => { 7 | console.error(error); 8 | }); 9 | } 10 | }); 11 | 12 | const center = new mapkit.Coordinate(45.51276032190637, -122.65946745872498), 13 | span = new mapkit.CoordinateSpan(0.025, 0.025), 14 | region = new mapkit.CoordinateRegion(center, span); 15 | 16 | let map = new mapkit.Map("map", { 17 | region: region, 18 | showsCompass: mapkit.FeatureVisibility.Hidden, 19 | showsZoomControl: false, 20 | showsMapTypeControl: false 21 | }); 22 | 23 | map.annotationForCluster = clusterAnnotation => { 24 | if (clusterAnnotation.clusteringIdentifier === "hub") { 25 | const currentBikes = clusterAnnotation.memberAnnotations.reduce( 26 | (total, memberAnnotation) => total + memberAnnotation.data.current_bikes, 27 | 0 28 | ); 29 | 30 | return new mapkit.MarkerAnnotation(clusterAnnotation.coordinate, { 31 | glyphText: `${currentBikes}`, 32 | color: currentBikes === 0 ? "#8e8e93" : "#4cd964", 33 | displayPriority: 750 34 | }); 35 | } 36 | 37 | if (clusterAnnotation.clusteringIdentifier === "bike") { 38 | return new mapkit.MarkerAnnotation(clusterAnnotation.coordinate, { 39 | glyphText: `${clusterAnnotation.memberAnnotations.length}`, 40 | color: "#007AFF", 41 | displayPriority: 500, 42 | titleVisibility: mapkit.FeatureVisibility.Hidden 43 | }); 44 | } 45 | }; 46 | 47 | fetch("/geo/portland.geojson") 48 | .then(res => res.json()) 49 | .then(geojson => { 50 | const feature = geojson; 51 | const polygon = feature.geometry; 52 | const overlay = new mapkit.PolygonOverlay( 53 | polygon.coordinates.map(coordinates => 54 | coordinates.map(point => new mapkit.Coordinate(point[1], point[0])) 55 | ), 56 | new mapkit.Style({ 57 | strokeColor: "#000", 58 | strokeOpacity: 0.8, 59 | lineWidth: 5, 60 | fillOpacity: 0.4, 61 | fillColor: "#CACACA" 62 | }) 63 | ); 64 | map.addOverlay(overlay); 65 | }) 66 | .catch(error => { 67 | console.error(error); 68 | }); 69 | 70 | fetch("/geo/hubs.geojson") 71 | .then(res => res.json()) 72 | .then(geojson => { 73 | let hubAnnotations = []; 74 | let hubOverlays = []; 75 | 76 | for (const feature of geojson["features"]) { 77 | const polygon = feature.geometry.geometries[0]; 78 | const point = feature.geometry.geometries[1]; 79 | 80 | const overlay = new mapkit.PolygonOverlay( 81 | polygon.coordinates[0].map( 82 | point => new mapkit.Coordinate(point[1], point[0]) 83 | ) 84 | ); 85 | hubOverlays.push(overlay); 86 | 87 | const annotation = new mapkit.MarkerAnnotation( 88 | new mapkit.Coordinate(point.coordinates[1], point.coordinates[0]), 89 | { 90 | title: feature.properties.name, 91 | subtitle: feature.properties.address, 92 | data: feature.properties, 93 | clusteringIdentifier: "hub", 94 | glyphText: `${feature.properties.current_bikes}`, 95 | color: feature.properties.current_bikes === 0 ? "#8e8e93" : "#4cd964", 96 | displayPriority: 100 + feature.properties.racks_amount, 97 | callout: {} 98 | } 99 | ); 100 | hubAnnotations.push(annotation); 101 | } 102 | 103 | map.addOverlays(hubOverlays); 104 | map.addAnnotations(hubAnnotations); 105 | }) 106 | .catch(error => { 107 | console.error(error); 108 | }); 109 | 110 | fetch("/geo/bikes.geojson") 111 | .then(res => res.json()) 112 | .then(geojson => { 113 | let bikeAnnotations = []; 114 | 115 | for (const feature of geojson["features"]) { 116 | const point = feature.geometry; 117 | 118 | const annotation = new mapkit.MarkerAnnotation( 119 | new mapkit.Coordinate(point.coordinates[1], point.coordinates[0]), 120 | { 121 | title: feature.properties.name, 122 | subtitle: feature.properties.address, 123 | clusteringIdentifier: "bike", 124 | glyphImage: { 1: "/images/bike.svg" }, 125 | color: "#007AFF", 126 | titleVisibility: mapkit.FeatureVisibility.Hidden, 127 | displayPriority: 100, 128 | callout: {} 129 | } 130 | ); 131 | bikeAnnotations.push(annotation); 132 | } 133 | 134 | map.addAnnotations(bikeAnnotations); 135 | }) 136 | .catch(error => { 137 | console.error(error); 138 | }); 139 | -------------------------------------------------------------------------------- /Public/styles/application.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | margin: 0; 4 | padding: 0; 5 | height: 100%; 6 | width: 100%; 7 | font-family: -apple-system, Roboto, "Helvetica Neue", sans-serif; 8 | } 9 | 10 | #map { 11 | height: 100%; 12 | width: 100%; 13 | } 14 | 15 | #attribution { 16 | position: absolute; 17 | background-color: white; 18 | bottom: 1.5em; 19 | left: 1.5em; 20 | padding: 0.5em; 21 | border-radius: 0.5em; 22 | line-height: 1.5em; 23 | } -------------------------------------------------------------------------------- /Resources/Views/map.leaf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | #get(title) 6 | 7 | 8 | 9 | 10 |
11 | 12 |
13 | BIKETOWN 14 |
15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Sources/App/Controllers/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NSHipster/MapKitJS-Demo/c9d4033b1a6c41123c3c7ce299856192cd14b92f/Sources/App/Controllers/.gitkeep -------------------------------------------------------------------------------- /Sources/App/Models/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NSHipster/MapKitJS-Demo/c9d4033b1a6c41123c3c7ce299856192cd14b92f/Sources/App/Models/.gitkeep -------------------------------------------------------------------------------- /Sources/App/Models/MapKitJSToken.swift: -------------------------------------------------------------------------------- 1 | import Vapor 2 | import SwiftJWT 3 | 4 | let keyID = Environment.get("MAPKIT_KEY_ID")! 5 | let teamID = Environment.get("MAPKIT_KEY_TEAM_ID")! 6 | let origin = Environment.get("MAPKIT_ORIGIN")! 7 | let key = """ 8 | -----BEGIN PRIVATE KEY----- 9 | \(Environment.get("MAPKIT_KEY")!) 10 | -----END PRIVATE KEY----- 11 | """.data(using: .utf8)! 12 | 13 | class MapKitJSClaims: Claims { 14 | public init( 15 | iss: String? = nil, 16 | exp: Date? = nil, 17 | iat: Date? = nil, 18 | origin: String? = nil 19 | ) { 20 | self.iss = iss 21 | self.exp = exp 22 | self.iat = iat 23 | self.origin = origin 24 | } 25 | 26 | /** 27 | The "iss" (issuer) claim identifies the principal that issued the 28 | JWT. The processing of this claim is generally application specific. 29 | The "iss" value is a case-sensitive. 30 | */ 31 | public var iss: String? 32 | 33 | /** 34 | The "exp" (expiration time) claim identifies the expiration time on 35 | or after which the JWT MUST NOT be accepted for processing. The 36 | processing of the "exp" claim requires that the current date/time 37 | MUST be before the expiration date/time listed in the "exp" claim. 38 | Implementers MAY provide for some small leeway, usually no more than 39 | a few minutes, to account for clock skew. 40 | */ 41 | public var exp: Date? 42 | 43 | /** 44 | The "iat" (issued at) claim identifies the time at which the JWT was 45 | issued. This claim can be used to determine the age of the JWT. 46 | */ 47 | public var iat: Date? 48 | 49 | /** 50 | 51 | */ 52 | public var origin: String? 53 | } 54 | 55 | public func generateSignedJWTToken() throws -> String { 56 | guard #available(OSX 10.13, *) else { 57 | fatalError() 58 | } 59 | 60 | let header = Header(typ: "JWT", kid: keyID) 61 | let claims = MapKitJSClaims( 62 | iss: teamID, 63 | exp: Date(timeIntervalSinceNow: 86400 * 10_000), 64 | iat: Date(), 65 | origin: origin 66 | ) 67 | 68 | var jwt = JWT(header: header, claims: claims) 69 | 70 | return try jwt.sign(using: .es256(privateKey: key)) 71 | } 72 | 73 | -------------------------------------------------------------------------------- /Sources/App/app.swift: -------------------------------------------------------------------------------- 1 | import Vapor 2 | 3 | /// Creates an instance of `Application`. This is called from `main.swift` in the run target. 4 | public func app(_ env: Environment) throws -> Application { 5 | var config = Config.default() 6 | var env = env 7 | var services = Services.default() 8 | try configure(&config, &env, &services) 9 | let app = try Application(config: config, environment: env, services: services) 10 | try boot(app) 11 | return app 12 | } 13 | -------------------------------------------------------------------------------- /Sources/App/boot.swift: -------------------------------------------------------------------------------- 1 | import Vapor 2 | 3 | /// Called after your application has initialized. 4 | public func boot(_ app: Application) throws { 5 | // Your code here 6 | } 7 | -------------------------------------------------------------------------------- /Sources/App/configure.swift: -------------------------------------------------------------------------------- 1 | import Leaf 2 | import Vapor 3 | 4 | /// Called before your application initializes. 5 | public func configure(_ config: inout Config, _ env: inout Environment, _ services: inout Services) throws { 6 | // Register providers first 7 | try services.register(LeafProvider()) 8 | 9 | // Register routes to the router 10 | let router = EngineRouter.default() 11 | try routes(router) 12 | services.register(router, as: Router.self) 13 | 14 | // Use Leaf for rendering views 15 | config.prefer(LeafRenderer.self, for: ViewRenderer.self) 16 | 17 | // Register middleware 18 | var middlewares = MiddlewareConfig() // Create _empty_ middleware config 19 | middlewares.use(FileMiddleware.self) // Serves files from `Public/` directory 20 | middlewares.use(ErrorMiddleware.self) // Catches errors and converts to HTTP response 21 | services.register(middlewares) 22 | } 23 | -------------------------------------------------------------------------------- /Sources/App/routes.swift: -------------------------------------------------------------------------------- 1 | import Vapor 2 | import SwiftJWT 3 | 4 | public func routes(_ router: Router) throws { 5 | router.get { req in 6 | return try req.view().render("map") 7 | } 8 | 9 | router.get("token") { req -> String in 10 | return try generateSignedJWTToken() 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Sources/Run/main.swift: -------------------------------------------------------------------------------- 1 | import App 2 | 3 | try app(.detect()).run() 4 | -------------------------------------------------------------------------------- /Tests/AppTests/AppTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | @testable import App 3 | 4 | class AppTests: XCTestCase { 5 | func testStub() throws { 6 | XCTAssert(true) 7 | } 8 | 9 | static let allTests = [ 10 | ("testStub", testStub), 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /Tests/LinuxMain.swift: -------------------------------------------------------------------------------- 1 | #if os(Linux) 2 | 3 | import XCTest 4 | @testable import AppTests 5 | 6 | XCTMain([ 7 | // AppTests 8 | testCase(AppTests.allTests), 9 | ]) 10 | 11 | #endif 12 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "biketown-maps", 3 | "scripts": {}, 4 | "env": {}, 5 | "formation": {}, 6 | "addons": [], 7 | "buildpacks": [ 8 | { 9 | "url": "https://github.com/kylef/heroku-buildpack-swift" 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /circle.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | 3 | jobs: 4 | linux: 5 | docker: 6 | - image: swift:4.1 7 | steps: 8 | - checkout 9 | - run: 10 | name: Compile code 11 | command: swift build 12 | - run: 13 | name: Run unit tests 14 | command: swift test 15 | 16 | linux-release: 17 | docker: 18 | - image: swift:4.1 19 | steps: 20 | - checkout 21 | - run: 22 | name: Compile code with optimizations 23 | command: swift build -c release 24 | 25 | workflows: 26 | version: 2 27 | tests: 28 | jobs: 29 | - linux 30 | - linux-release 31 | 32 | nightly: 33 | triggers: 34 | - schedule: 35 | cron: "0 0 * * *" 36 | filters: 37 | branches: 38 | only: 39 | - master 40 | jobs: 41 | - linux 42 | - linux-release 43 | -------------------------------------------------------------------------------- /web.Dockerfile: -------------------------------------------------------------------------------- 1 | # You can set the Swift version to what you need for your app. Versions can be found here: https://hub.docker.com/_/swift 2 | FROM swift:4.2 as builder 3 | 4 | # For local build, add `--build-arg env=docker` 5 | # In your application, you can use `Environment.custom(name: "docker")` to check if you're in this env 6 | ARG env 7 | 8 | RUN apt-get -qq update && apt-get -q -y install \ 9 | tzdata \ 10 | && rm -r /var/lib/apt/lists/* 11 | WORKDIR /app 12 | COPY . . 13 | RUN mkdir -p /build/lib && cp -R /usr/lib/swift/linux/*.so /build/lib 14 | RUN swift build -c release && mv `swift build -c release --show-bin-path` /build/bin 15 | 16 | # Production image 17 | FROM ubuntu:16.04 18 | ARG env 19 | RUN apt-get -qq update && apt-get install -y \ 20 | libicu55 libxml2 libbsd0 libcurl3 libatomic1 \ 21 | tzdata \ 22 | && rm -r /var/lib/apt/lists/* 23 | WORKDIR /app 24 | COPY --from=builder /build/bin/Run . 25 | COPY --from=builder /build/lib/* /usr/lib/ 26 | COPY --from=builder /app/Public ./Public 27 | COPY --from=builder /app/Resources ./Resources 28 | ENV ENVIRONMENT=$env 29 | 30 | ENTRYPOINT ./Run serve --env $ENVIRONMENT --hostname 0.0.0.0 --port 80 31 | --------------------------------------------------------------------------------