Using @tmcw's csv2geojson to add points from a CSV to a Mapbox GL JS map.
forked from danswick's block: CSV on a GL map!
license: mit |
Using @tmcw's csv2geojson to add points from a CSV to a Mapbox GL JS map.
forked from danswick's block: CSV on a GL map!
iata | title | city | state | country | latitude | longitude | |
---|---|---|---|---|---|---|---|
00M | Thigpen | Bay Springs | MS | USA | 31.95376472 | -89.23450472 | |
00R | Livingston Municipal | Livingston | TX | USA | 30.68586111 | -95.01792778 | |
00V | Meadow Lake | Colorado Springs | CO | USA | 38.94574889 | -104.5698933 | |
01G | Perry-Warsaw | Perry | NY | USA | 42.74134667 | -78.05208056 | |
01J | Hilliard Airpark | Hilliard | FL | USA | 30.6880125 | -81.90594389 | |
01M | Tishomingo County | Belmont | MS | USA | 34.49166667 | -88.20111111 | |
02A | Gragg-Wade | Clanton | AL | USA | 32.85048667 | -86.61145333 | |
02C | Capitol | Brookfield | WI | USA | 43.08751 | -88.17786917 | |
02G | Columbiana County | East Liverpool | OH | USA | 40.67331278 | -80.64140639 | |
03D | Memphis Memorial | Memphis | MO | USA | 40.44725889 | -92.22696056 | |
04M | Calhoun County | Pittsboro | MS | USA | 33.93011222 | -89.34285194 | |
04Y | Hawley Municipal | Hawley | MN | USA | 46.88384889 | -96.35089861 | |
05C | Griffith-Merrillville | Griffith | IN | USA | 41.51961917 | -87.40109333 | |
05F | Gatesville - City/County | Gatesville | TX | USA | 31.42127556 | -97.79696778 | |
05U | Eureka | Eureka | NV | USA | 39.60416667 | -116.0050597 | |
06A | Moton Municipal | Tuskegee | AL | USA | 32.46047167 | -85.68003611 | |
06C | Schaumburg | Chicago/Schaumburg | IL | USA | 41.98934083 | -88.10124278 | |
06D | Rolla Municipal | Rolla | ND | USA | 48.88434111 | -99.62087694 | |
06M | Eupora Municipal | Eupora | MS | USA | 33.53456583 | -89.31256917 | |
06N | Randall | Middletown | NY | USA | 41.43156583 | -74.39191722 | |
06U | Jackpot/Hayden | Jackpot | NV | USA | 41.97602222 | -114.6580911 | |
07C | Dekalb County | Auburn | IN | USA | 41.30716667 | -85.06433333 | |
07F | Gladewater Municipal | Gladewater | TX | USA | 32.52883861 | -94.97174556 | |
07G | Fitch H Beach | Charlotte | MI | USA | 42.57450861 | -84.81143139 | |
07K | Central City Municipal | Central City | NE | USA | 41.11668056 | -98.05033639 | |
08A | Wetumpka Municipal | Wetumpka | AL | USA | 32.52943944 | -86.32822139 | |
08D | Stanley Municipal | Stanley | ND | USA | 48.30079861 | -102.4063514 | |
08K | Harvard State | Harvard | NE | USA | 40.65138528 | -98.07978667 | |
08M | Carthage-Leake County | Carthage | MS | USA | 32.76124611 | -89.53007139 | |
09A | Butler-Choctaw County | Butler | AL | USA | 32.11931306 | -88.1274625 | |
09J | Jekyll Island | Jekyll Island | GA | USA | 31.07447222 | -81.42777778 | |
09K | Sargent Municipal | Sargent | NE | USA | 41.63695083 | -99.34038139 | |
09M | Charleston Municipal | Charleston | MS | USA | 33.99150222 | -90.078145 | |
09W | South Capitol Street | Washington | DC | USA | 38.86872333 | -77.00747583 | |
0A3 | Smithville Municipal | Smithville | TN | USA | 35.98531194 | -85.80931806 | |
0A8 | Bibb County | Centreville | AL | USA | 32.93679056 | -87.08888306 | |
0A9 | Elizabethton Municipal | Elizabethton | TN | USA | 36.37094306 | -82.17374111 | |
0AK | Pilot Station | Pilot Station | AK | USA | 61.93396417 | -162.8929358 | |
0B1 | Col. Dyke | Bethel | ME | USA | 44.42506444 | -70.80784778 | |
0B4 | Hartington Municipal | Hartington | NE | USA | 42.60355556 | -97.25263889 | |
0B5 | Turners Falls | Montague | MA | USA | 42.59136361 | -72.52275472 | |
0B7 | Warren-Sugar Bush | Warren | VT | USA | 44.11672722 | -72.82705806 | |
0B8 | Elizabeth | Fishers Island | NY | USA | 41.25130806 | -72.03161139 | |
0C0 | Dacy | Chicago/Harvard | IL | USA | 42.40418556 | -88.63343222 | |
0C4 | Pender Municipal | Pender | NE | USA | 42.11388722 | -96.72892556 | |
0D1 | South Haven Municipal | South Haven | MI | USA | 42.35083333 | -86.25613889 | |
0D8 | Gettysburg Municipal | Gettysburg | SD | USA | 44.98730556 | -99.9535 | |
0E0 | Moriarty | Moriarty | NM | USA | 34.98560639 | -106.0094661 | |
0E8 | Crownpoint | Crownpoint | NM | USA | 35.71765889 | -108.2015961 | |
0F2 | Bowie Municipal | Bowie | TX | USA | 33.60166667 | -97.77556 | |
0F4 | Loup City Municipal | Loup City | NE | USA | 41.29028694 | -98.99064278 | |
0F7 | Fountainhead Lodge Airpark | Eufaula | OK | USA | 35.38898833 | -95.60165111 | |
0F8 | William R Pogue Municipal | Sand Springs | OK | USA | 36.17528 | -96.15181028 | |
0F9 | Tishomingo Airpark | Tishomingo | OK | USA | 34.19592833 | -96.67555694 | |
0G0 | North Buffalo Suburban | Lockport | NY | USA | 43.10318389 | -78.70334583 | |
0G3 | Tecumseh Municipal | Tecumseh | NE | USA | 40.39944417 | -96.17139694 | |
0G6 | Williams County | Bryan | OH | USA | 41.46736111 | -84.50655556 | |
0G7 | Finger Lakes Regional | Seneca Falls | NY | USA | 42.88062278 | -76.78162028 | |
0H1 | Trego Wakeeney | Wakeeney | KS | USA | 39.0044525 | -99.89289917 | |
0I8 | Cynthiana-Harrison County | Cynthiana | KY | USA | 38.36674167 | -84.28410056 | |
0J0 | Abbeville Municipal | Abbeville | AL | USA | 31.60016778 | -85.23882222 | |
0J4 | Florala Municipal | Florala | AL | USA | 31.04247361 | -86.31156111 | |
0J6 | Headland Municipal | Headland | AL | USA | 31.364895 | -85.30965556 | |
0K7 | Humboldt Municipal | Humboldt | IA | USA | 42.7360825 | -94.24524167 | |
0L5 | Goldfield | Goldfield | NV | USA | 37.71798833 | -117.2384119 | |
0L7 | Jean | Jean | NV | USA | 35.76827222 | -115.3296378 | |
0L9 | Echo Bay | Overton | NV | USA | 36.31108972 | -114.4638672 | |
0M0 | Dumas Municipal | Dumas | AR | USA | 33.8845475 | -91.53429111 | |
0M1 | Scott | Parsons | TN | USA | 35.63778 | -88.127995 | |
0M4 | Benton County | Camden | TN | USA | 36.01122694 | -88.12328833 | |
0M5 | Humphreys County | Waverly | TN | USA | 36.11659972 | -87.73815889 | |
0M6 | Panola County | Batesville | MS | USA | 34.36677444 | -89.90008917 | |
0M8 | Byerley | Lake Providence | LA | USA | 32.82587917 | -91.187665 | |
0O3 | Calaveras Co-Maury Rasmussen | San Andreas | CA | USA | 38.14611639 | -120.6481733 | |
0O4 | Corning Municipal | Corning | CA | USA | 39.94376806 | -122.1713781 | |
0O5 | University | Davis | CA | USA | 38.53146222 | -121.7864906 | |
0Q5 | Shelter Cove | Shelter Cove | CA | USA | 40.02764333 | -124.0733639 | |
0Q6 | Shingletown | Shingletown | CA | USA | 40.52210111 | -121.8177683 | |
0R0 | Columbia-Marion County | Columbia | MS | USA | 31.29700806 | -89.81282944 | |
0R1 | Atmore Municipal | Atmore | AL | USA | 31.01621528 | -87.44675972 | |
0R3 | Abbeville Chris Crusta Memorial | Abbeville | LA | USA | 29.97576083 | -92.08415167 | |
0R4 | Concordia Parish | Vidalia | LA | USA | 31.56683278 | -91.50011889 | |
0R5 | David G Joyce | Winnfield | LA | USA | 31.96366222 | -92.66026056 | |
0R7 | Red River | Coushatta | LA | USA | 31.99071694 | -93.30739306 | |
0S7 | Dorothy Scott | Oroville | WA | USA | 48.958965 | -119.4119622 | |
0S9 | Jefferson County International | Port Townsend | WA | USA | 48.04981361 | -122.8012792 | |
0V2 | Harriet Alexander | Salida | CO | USA | 38.53916389 | -106.0458483 | |
0V3 | Pioneer Village | Minden | NE | USA | 40.5149125 | -98.94565083 | |
0V4 | Brookneal/Campbell County | Brookneal | VA | USA | 37.14172222 | -79.01638889 | |
0V6 | Mission Sioux | Mission | SD | USA | 43.30694778 | -100.6281936 | |
0V7 | Kayenta | Kayenta | AZ | USA | 36.70972139 | -110.2367978 | |
10C | Galt | Chicago/Greenwood/Wonderlake | IL | USA | 42.40266472 | -88.37588917 | |
10D | Winsted Municipal | Winsted | MN | USA | 44.94996278 | -94.0669175 | |
10G | Holmes County | Millersburg | OH | USA | 40.53716667 | -81.95436111 | |
10N | Wallkill | Wallkill | NY | USA | 41.62787111 | -74.13375583 | |
10U | Owyhee | Owyhee | NV | USA | 41.95323306 | -116.1876014 | |
11A | Clayton Municipal | Clayton | AL | USA | 31.88329917 | -85.48491361 | |
11D | Clarion Cty | Clarion | PA | USA | 41.22581222 | -79.44098972 | |
11IS | Schaumburg Heliport | Chicago/Schaumburg | IL | USA | 42.04808278 | -88.05257194 | |
11J | Early County | Blakely | GA | USA | 31.39698611 | -84.89525694 | |
11R | Brenham Municipal | Brenham | TX | USA | 30.219 | -96.37427778 | |
12C | Rochelle Municipal | Rochelle | IL | USA | 41.89300139 | -89.07829 | |
12D | Tower Municipal | Tower | MN | USA | 47.81833333 | -92.29166667 | |
12J | Brewton Municipal | Brewton | AL | USA | 31.05126306 | -87.06796833 | |
12K | Superior Municipal | Superior | NE | USA | 40.04636111 | -98.06011111 | |
12Y | Le Sueur Municipal | Le Sueur | MN | USA | 44.43746472 | -93.91274083 | |
13C | Lakeview | Lakeview | MI | USA | 43.45213722 | -85.26480333 | |
13K | Eureka Municipal | Eureka | KS | USA | 37.8515825 | -96.29169806 | |
13N | Trinca | Andover | NJ | USA | 40.96676444 | -74.78016556 | |
14J | Carl Folsom | Elba | AL | USA | 31.40988861 | -86.08883583 | |
14M | Hollandale Municipal | Hollandale | MS | USA | 33.18262167 | -90.83065444 | |
14Y | Todd Field | Long Prairie | MN | USA | 45.89857556 | -94.87391 | |
15F | Haskell Municipal | Haskell | TX | USA | 33.19155556 | -99.71793056 | |
15J | Cook County | Adel | GA | USA | 31.13780556 | -83.45308333 | |
15M | Luka | Luka | MS | USA | 34.7723125 | -88.16587444 | |
15Z | McCarthy 2 | McCarthy | AK | USA | 61.43706083 | -142.9037372 | |
16A | Nunapitchuk | Nunapitchuk | AK | USA | 60.90582833 | -162.4391158 | |
16G | Seneca County | Tiffin | OH | USA | 41.09405556 | -83.2125 | |
16J | Dawson Municipal | Dawson | GA | USA | 31.74328472 | -84.419285 | |
16S | Myrtle Creek Municipal | Myrtle Creek | OR | USA | 42.99845056 | -123.3095092 | |
17G | Port Bucyrus-Crawford County | Bucyrus | OH | USA | 40.78141667 | -82.97469444 | |
17J | Donalsonville Municipal | Donalsonville | GA | USA | 31.00694444 | -84.87761111 | |
17K | Boise City | Boise City | OK | USA | 36.77430028 | -102.5104364 | |
17M | Magee Municipal | Magee | MS | USA | 31.86127139 | -89.80285361 | |
17N | Cross Keys | Cross Keys | NJ | USA | 39.70547583 | -75.03300306 | |
17Z | Manokotak | Manokotak | AK | USA | 58.98896583 | -159.0499739 | |
18A | Franklin County | Canon | GA | USA | 34.34010472 | -83.13348333 | |
18I | McCreary County | Pine Knot | KY | USA | 36.69591306 | -84.39160389 | |
19A | Jackson County | Jefferson | GA | USA | 34.17402472 | -83.56066528 | |
19M | C A Moore | Lexington | MS | USA | 33.12546111 | -90.02555694 | |
19N | Camden | Berlin | NJ | USA | 39.77842056 | -74.94780389 | |
19P | Port Protection SPB | Port Protection | AK | USA | 56.32880417 | -133.6100844 | |
1A3 | Martin Campbell | Copperhill | TN | USA | 35.01619111 | -84.34631083 | |
1A5 | Macon County | Franklin | NC | USA | 35.222595 | -83.41904389 | |
1A6 | Middlesboro-Bell County | Middlesboro | KY | USA | 36.6106375 | -83.73741611 | |
1A7 | Jackson County | Gainesboro | TN | USA | 36.39728139 | -85.64164278 | |
1A9 | Autauga County | Prattville | AL | USA | 32.438775 | -86.51044778 | |
1B0 | Dexter Regional | Dexter | ME | USA | 45.00839444 | -69.23976722 | |
1B1 | Columbia Cty | Hudson | NY | USA | 42.29130028 | -73.71031944 | |
1B3 | Fair Haven | Fair Haven | VT | USA | 43.61534389 | -73.27455556 | |
1B9 | Mansfield Municipal | Mansfield | MA | USA | 42.00013306 | -71.19677139 | |
1C5 | Clow | Chicago/Plainfield | IL | USA | 41.69597444 | -88.12923056 | |
1D1 | Milbank Municipal | Milbank | SD | USA | 45.23053806 | -96.56596556 | |
1D2 | Canton -Plymouth - Mettetal | Plymouth | MI | USA | 42.35003667 | -83.45826833 | |
1D3 | Platte Municipal | Platte | SD | USA | 43.40332833 | -98.82952972 | |
1D6 | Hector Municipal | Hector | MN | USA | 44.73107278 | -94.71471333 | |
1D7 | Webster Municipal | Webster | SD | USA | 45.29329111 | -97.51369889 | |
1D8 | Redfield Municipal | Redfield | SD | USA | 44.86247611 | -98.52953972 | |
1F0 | Downtown Ardmore | Ardmore | OK | USA | 34.14698917 | -97.12265194 | |
1F1 | Lake Murray State Park | Overbrook | OK | USA | 34.07509694 | -97.10667917 | |
1F4 | Madill Municipal | Madill | OK | USA | 34.14040194 | -96.81203222 | |
1F9 | Bridgeport Municipal | Bridgeport | TX | USA | 33.17533333 | -97.82838889 | |
1G0 | Wood County | Bowling Green | OH | USA | 41.391 | -83.63013889 | |
1G3 | Kent State University | Kent | OH | USA | 41.15186167 | -81.41658306 | |
1G4 | Grand Canyon West | Peach Springs | AZ | USA | 35.99221 | -113.8166164 | |
1G5 | Freedom | Medina | OH | USA | 41.13144444 | -81.76491667 | |
1G6 | Michael | Cicero | NY | USA | 43.18166667 | -76.12777778 | |
1H0 | Creve Coeur | St Louis | MO | USA | 38.72752 | -90.50830417 | |
1H2 | Effingham County Memorial | Effingham | IL | USA | 39.07045083 | -88.53351972 | |
1H3 | Linn State Tech. College | Linn | MO | USA | 38.47149444 | -91.81531667 | |
1H8 | Casey Municipal | Casey | IL | USA | 39.30250917 | -88.00406194 | |
1I5 | Freehold | Freehold | NY | USA | 42.36425 | -74.06596806 | |
1I9 | Delphi Municipal | Delphi | IN | USA | 40.54281417 | -86.68167194 | |
1J0 | Tri-County | Bonifay | FL | USA | 30.84577778 | -85.60138889 | |
1K2 | Lindsay Municipal | Lindsay | OK | USA | 34.85007333 | -97.58642028 | |
1K4 | David J. Perry | Goldsby | OK | USA | 35.1550675 | -97.47039389 | |
1K5 | Waynoka Municipal | Waynoka | OK | USA | 36.56670028 | -98.85231333 | |
1K9 | Satanta Municipal | Satanta | KS | USA | 37.45419111 | -100.9921119 | |
1L0 | St. John the Baptist Parish | Reserve | LA | USA | 30.08720833 | -90.58266528 | |
1L1 | Lincoln Co | Panaca | NV | USA | 37.78746444 | -114.4216567 | |
1L7 | Escalante Municipal | Escalante | UT | USA | 37.74532639 | -111.5701653 | |
1L9 | Parowan | Parowan | UT | USA | 37.85969694 | -112.816055 | |
1M1 | North Little Rock Municipal | No Lit Rock | AR | USA | 34.83398056 | -92.25792778 | |
1M2 | Belzoni Municipal | Belzoni | MS | USA | 33.14518056 | -90.51528472 | |
1M4 | Posey | Haleyville | AL | USA | 34.28034806 | -87.60044139 | |
1M5 | Portland Municipal | Portland | TN | USA | 36.59287528 | -86.47691028 | |
1M7 | Fulton | Fulton | KY | USA | 36.52589417 | -88.91561611 | |
1MO | Mountain Grove Memorial | Mountain Grove | MO | USA | 37.12071889 | -92.311245 | |
1N2 | Spadaro | East Moriches | NY | USA | 40.82787639 | -72.74871083 | |
1N4 | Woodbine Muni | Woodbine | NJ | USA | 39.21915 | -74.794765 | |
1N7 | Blairstown | Blairstown | NJ | USA | 40.97114556 | -74.99747556 | |
1N9 | Allentown Queen City Muni | Allentown | PA | USA | 40.57027778 | -75.48830556 | |
1ND3 | Hamry | Kindred | ND | USA | 46.6485775 | -97.00564306 | |
1O1 | Grandfield Municipal | Grandfield | OK | USA | 34.23758944 | -98.74200917 | |
1O2 | Lampson | Lakeport | CA | USA | 38.99017472 | -122.8997175 | |
1O3 | Lodi | Lodi | CA | USA | 38.20241667 | -121.2684167 | |
1O4 | Thomas Municipal | Thomas | OK | USA | 35.73338222 | -98.73063833 | |
1O6 | Dunsmuir Municipal-Mott | Dunsmuir | CA | USA | 41.26320889 | -122.2719528 | |
1R1 | Jena | Jena | LA | USA | 31.671005 | -92.15846722 | |
1R7 | Brookhaven-Lincoln County | Brookhaven | MS | USA | 31.6058475 | -90.40931583 | |
1R8 | Bay Minette Municipal | Bay Minette | AL | USA | 30.87046278 | -87.81738167 | |
1S0 | Pierce County | Puyallup | WA | USA | 47.10391667 | -122.2871944 | |
1S3 | Tillitt | Forsyth | MT | USA | 46.27110639 | -106.6239206 | |
1S5 | Sunnyside Municipal | Sunnyside | WA | USA | 46.32763139 | -119.9705964 | |
1S6 | Priest River Muni | Priest River | ID | USA | 48.19018611 | -116.9093644 | |
1U7 | Bear Lake County | Paris | ID | USA | 42.24714972 | -111.33826 | |
1V0 | Navajo State Park | Navajo Dam | NM | USA | 36.80833833 | -107.6514444 | |
1V2 | Grant County | Hyannis | NE | USA | 42.00942944 | -101.7693439 |
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var o;"undefined"!=typeof window?o=window:"undefined"!=typeof global?o=global:"undefined"!=typeof self&&(o=self),o.csv2geojson=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | |
var dsv = require('dsv'), | |
sexagesimal = require('sexagesimal'); | |
function isLat(f) { return !!f.match(/(Lat)(itude)?/gi); } | |
function isLon(f) { return !!f.match(/(L)(on|ng)(gitude)?/i); } | |
function keyCount(o) { | |
return (typeof o == 'object') ? Object.keys(o).length : 0; | |
} | |
function autoDelimiter(x) { | |
var delimiters = [',', ';', '\t', '|']; | |
var results = []; | |
delimiters.forEach(function(delimiter) { | |
var res = dsv(delimiter).parse(x); | |
if (res.length >= 1) { | |
var count = keyCount(res[0]); | |
for (var i = 0; i < res.length; i++) { | |
if (keyCount(res[i]) !== count) return; | |
} | |
results.push({ | |
delimiter: delimiter, | |
arity: Object.keys(res[0]).length, | |
}); | |
} | |
}); | |
if (results.length) { | |
return results.sort(function(a, b) { | |
return b.arity - a.arity; | |
})[0].delimiter; | |
} else { | |
return null; | |
} | |
} | |
function auto(x) { | |
var delimiter = autoDelimiter(x); | |
if (!delimiter) return null; | |
return dsv(delimiter).parse(x); | |
} | |
function csv2geojson(x, options, callback) { | |
if (!callback) { | |
callback = options; | |
options = {}; | |
} | |
options.delimiter = options.delimiter || ','; | |
var latfield = options.latfield || '', | |
lonfield = options.lonfield || '', | |
crs = options.crs || ''; | |
var features = [], | |
featurecollection = { type: 'FeatureCollection', features: features }; | |
if (crs !== '') { | |
featurecollection.crs = { type: 'name', properties: { name: crs } }; | |
} | |
if (options.delimiter === 'auto' && typeof x == 'string') { | |
options.delimiter = autoDelimiter(x); | |
if (!options.delimiter) return callback({ | |
type: 'Error', | |
message: 'Could not autodetect delimiter' | |
}); | |
} | |
var parsed = (typeof x == 'string') ? dsv(options.delimiter).parse(x) : x; | |
if (!parsed.length) return callback(null, featurecollection); | |
if (!latfield || !lonfield) { | |
for (var f in parsed[0]) { | |
if (!latfield && isLat(f)) latfield = f; | |
if (!lonfield && isLon(f)) lonfield = f; | |
} | |
if (!latfield || !lonfield) { | |
var fields = []; | |
for (var k in parsed[0]) fields.push(k); | |
return callback({ | |
type: 'Error', | |
message: 'Latitude and longitude fields not present', | |
data: parsed, | |
fields: fields | |
}); | |
} | |
} | |
var errors = []; | |
for (var i = 0; i < parsed.length; i++) { | |
if (parsed[i][lonfield] !== undefined && | |
parsed[i][lonfield] !== undefined) { | |
var lonk = parsed[i][lonfield], | |
latk = parsed[i][latfield], | |
lonf, latf, | |
a; | |
a = sexagesimal(lonk, 'EW'); | |
if (a) lonk = a; | |
a = sexagesimal(latk, 'NS'); | |
if (a) latk = a; | |
lonf = parseFloat(lonk); | |
latf = parseFloat(latk); | |
if (isNaN(lonf) || | |
isNaN(latf)) { | |
errors.push({ | |
message: 'A row contained an invalid value for latitude or longitude', | |
row: parsed[i] | |
}); | |
} else { | |
if (!options.includeLatLon) { | |
delete parsed[i][lonfield]; | |
delete parsed[i][latfield]; | |
} | |
features.push({ | |
type: 'Feature', | |
properties: parsed[i], | |
geometry: { | |
type: 'Point', | |
coordinates: [ | |
parseFloat(lonf), | |
parseFloat(latf) | |
] | |
} | |
}); | |
} | |
} | |
} | |
callback(errors.length ? errors: null, featurecollection); | |
} | |
function toLine(gj) { | |
var features = gj.features; | |
var line = { | |
type: 'Feature', | |
geometry: { | |
type: 'LineString', | |
coordinates: [] | |
} | |
}; | |
for (var i = 0; i < features.length; i++) { | |
line.geometry.coordinates.push(features[i].geometry.coordinates); | |
} | |
line.properties = features[0].properties; | |
return { | |
type: 'FeatureCollection', | |
features: [line] | |
}; | |
} | |
function toPolygon(gj) { | |
var features = gj.features; | |
var poly = { | |
type: 'Feature', | |
geometry: { | |
type: 'Polygon', | |
coordinates: [[]] | |
} | |
}; | |
for (var i = 0; i < features.length; i++) { | |
poly.geometry.coordinates[0].push(features[i].geometry.coordinates); | |
} | |
poly.properties = features[0].properties; | |
return { | |
type: 'FeatureCollection', | |
features: [poly] | |
}; | |
} | |
module.exports = { | |
isLon: isLon, | |
isLat: isLat, | |
csv: dsv.csv.parse, | |
tsv: dsv.tsv.parse, | |
dsv: dsv, | |
auto: auto, | |
csv2geojson: csv2geojson, | |
toLine: toLine, | |
toPolygon: toPolygon | |
}; | |
},{"dsv":2,"sexagesimal":3}],2:[function(require,module,exports){ | |
module.exports = new Function("dsv.version = \"0.0.3\";\n\ndsv.tsv = dsv(\"\\t\");\ndsv.csv = dsv(\",\");\n\nfunction dsv(delimiter) {\n var dsv = {},\n reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n]\"),\n delimiterCode = delimiter.charCodeAt(0);\n\n dsv.parse = function(text, f) {\n var o;\n return dsv.parseRows(text, function(row, i) {\n if (o) return o(row, i - 1);\n var a = new Function(\"d\", \"return {\" + row.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"]\";\n }).join(\",\") + \"}\");\n o = f ? function(row, i) { return f(a(row), i); } : a;\n });\n };\n\n dsv.parseRows = function(text, f) {\n var EOL = {}, // sentinel value for end-of-line\n EOF = {}, // sentinel value for end-of-file\n rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // the current line number\n t, // the current token\n eol; // is the current token followed by EOL?\n\n function token() {\n if (I >= N) return EOF; // special case: end of file\n if (eol) return eol = false, EOL; // special case: end of line\n\n // special case: quotes\n var j = I;\n if (text.charCodeAt(j) === 34) {\n var i = j;\n while (i++ < N) {\n if (text.charCodeAt(i) === 34) {\n if (text.charCodeAt(i + 1) !== 34) break;\n ++i;\n }\n }\n I = i + 2;\n var c = text.charCodeAt(i + 1);\n if (c === 13) {\n eol = true;\n if (text.charCodeAt(i + 2) === 10) ++I;\n } else if (c === 10) {\n eol = true;\n }\n return text.substring(j + 1, i).replace(/\"\"/g, \"\\\"\");\n }\n\n // common case: find next delimiter or newline\n while (I < N) {\n var c = text.charCodeAt(I++), k = 1;\n if (c === 10) eol = true; // \\n\n else if (c === 13) { eol = true; if (text.charCodeAt(I) === 10) ++I, ++k; } // \\r|\\r\\n\n else if (c !== delimiterCode) continue;\n return text.substring(j, I - k);\n }\n\n // special case: last token before EOF\n return text.substring(j);\n }\n\n while ((t = token()) !== EOF) {\n var a = [];\n while (t !== EOL && t !== EOF) {\n a.push(t);\n t = token();\n }\n if (f && !(a = f(a, n++))) continue;\n rows.push(a);\n }\n\n return rows;\n };\n\n dsv.format = function(rows) {\n if (Array.isArray(rows[0])) return dsv.formatRows(rows); // deprecated; use formatRows\n var fieldSet = {}, fields = [];\n\n // Compute unique fields in order of discovery.\n rows.forEach(function(row) {\n for (var field in row) {\n if (!(field in fieldSet)) {\n fields.push(fieldSet[field] = field);\n }\n }\n });\n\n return [fields.map(formatValue).join(delimiter)].concat(rows.map(function(row) {\n return fields.map(function(field) {\n return formatValue(row[field]);\n }).join(delimiter);\n })).join(\"\\n\");\n };\n\n dsv.formatRows = function(rows) {\n return rows.map(formatRow).join(\"\\n\");\n };\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(text) {\n return reFormat.test(text) ? \"\\\"\" + text.replace(/\\\"/g, \"\\\"\\\"\") + \"\\\"\" : text;\n }\n\n return dsv;\n}\n" + ";return dsv")(); | |
},{}],3:[function(require,module,exports){ | |
module.exports = element; | |
module.exports.pair = pair; | |
module.exports.format = format; | |
module.exports.formatPair = formatPair; | |
function element(x, dims) { | |
return search(x, dims).val; | |
} | |
function formatPair(x) { | |
return format(x.lat, 'lat') + ' ' + format(x.lon, 'lon'); | |
} | |
// Is 0 North or South? | |
function format(x, dim) { | |
var dirs = { | |
lat: ['N', 'S'], | |
lon: ['E', 'W'] | |
}[dim] || '', | |
dir = dirs[x >= 0 ? 0 : 1], | |
abs = Math.abs(x), | |
whole = Math.floor(abs), | |
fraction = abs - whole, | |
fractionMinutes = fraction * 60, | |
minutes = Math.floor(fractionMinutes), | |
seconds = Math.floor((fractionMinutes - minutes) * 60); | |
return whole + '° ' + | |
(minutes ? minutes + "' " : '') + | |
(seconds ? seconds + '" ' : '') + dir; | |
} | |
function search(x, dims, r) { | |
if (!dims) dims = 'NSEW'; | |
if (typeof x !== 'string') return { val: null, regex: r }; | |
r = r || /[\s\,]*([\-|\—|\―]?[0-9.]+)°? *(?:([0-9.]+)['’′‘] *)?(?:([0-9.]+)(?:''|"|”|″) *)?([NSEW])?/gi; | |
var m = r.exec(x); | |
if (!m) return { val: null, regex: r }; | |
else if (m[4] && dims.indexOf(m[4]) === -1) return { val: null, regex: r }; | |
else return { | |
val: (((m[1]) ? parseFloat(m[1]) : 0) + | |
((m[2] ? parseFloat(m[2]) / 60 : 0)) + | |
((m[3] ? parseFloat(m[3]) / 3600 : 0))) * | |
((m[4] && m[4] === 'S' || m[4] === 'W') ? -1 : 1), | |
regex: r, | |
raw: m[0], | |
dim: m[4] | |
}; | |
} | |
function pair(x, dims) { | |
x = x.trim(); | |
var one = search(x, dims); | |
if (one.val === null) return null; | |
var two = search(x, dims, one.regex); | |
if (two.val === null) return null; | |
// null if one/two are not contiguous. | |
if (one.raw + two.raw !== x) return null; | |
if (one.dim) return swapdim(one.val, two.val, one.dim); | |
else return [one.val, two.val]; | |
} | |
function swapdim(a, b, dim) { | |
if (dim == 'N' || dim == 'S') return [a, b]; | |
if (dim == 'W' || dim == 'E') return [b, a]; | |
} | |
},{}]},{},[1])(1) | |
}); |
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset='utf-8' /> | |
<title></title> | |
<meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' /> | |
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> | |
<script src='https://api.tiles.mapbox.com/mapbox-gl-js/v0.38.0/mapbox-gl.js'></script> | |
<link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.38.0/mapbox-gl.css' rel='stylesheet' /> | |
<script src='csv2geojson.js'></script> | |
<style> | |
body { margin:0; padding:0; } | |
#map { position:absolute; top:0; bottom:0; width:100%; } | |
</style> | |
</head> | |
<body> | |
<div id='map'></div> | |
<script> | |
mapboxgl.accessToken = 'pk.eyJ1IjoiZGFuc3dpY2siLCJhIjoiY2l1dTUzcmgxMDJ0djJ0b2VhY2sxNXBiMyJ9.25Qs4HNEkHubd4_Awbd8Og'; | |
var map = new mapboxgl.Map({ | |
container: 'map', // container id | |
style: 'mapbox://styles/mapbox/streets-v8', //stylesheet location | |
center: [ -89.89709901792442, 41.29146740952274], // starting position | |
zoom: 3 // starting zoom | |
}); | |
$(document).ready(function() { | |
$.ajax({ | |
type: "GET", | |
url: /*'./airports.csv'*/'https://youthmap-chapter-mapproxy.herokuapp.com/docs.google.com/spreadsheets/d/13yswnN49P0dsO5BS2FJYaVUIjsnuWbzA3UxvhcLUsYI/export?format=csv&id=13yswnN49P0dsO5BS2FJYaVUIjsnuWbzA3UxvhcLUsYI', | |
dataType: "text", | |
success: function(csvData) {makeGeoJSON(csvData);}, | |
error: function(jqXHR) { console.log('⚠️ csv error!'); console.log(jqXHR); } | |
}); | |
}); | |
function makeGeoJSON(csvData) { | |
csv2geojson.csv2geojson(csvData, { | |
latfield: 'latitude', | |
lonfield: 'longitude', | |
delimiter: ',' | |
}, function(err, data) { | |
if(err || data.features.length === 0) { | |
console.log('⚠️ csv error!'); | |
console.log(data); | |
} else { | |
map.on('load', function () { | |
map.addLayer({ | |
'id': 'airports', | |
'type': 'symbol', | |
'source': { | |
'type': 'geojson', | |
'data': data | |
}, | |
'layout': { | |
"icon-image": "marker-15" | |
}, | |
'paint': {} | |
}); | |
}); | |
} | |
}); | |
} | |
</script> | |
</body> | |
</html> |