Skip to content

Instantly share code, notes, and snippets.

@slattery
Forked from danswick/README.md
Created March 14, 2019 20:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save slattery/acf6bf2c556cadb3f7553f09416466ae to your computer and use it in GitHub Desktop.
Save slattery/acf6bf2c556cadb3f7553f09416466ae to your computer and use it in GitHub Desktop.
CSV on a GL map!

Using @tmcw's csv2geojson to add points from a CSV to a Mapbox GL JS 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',
dataType: "text",
success: function(csvData) {makeGeoJSON(csvData);}
});
});
function makeGeoJSON(csvData) {
csv2geojson.csv2geojson(csvData, {
latfield: 'latitude',
lonfield: 'longitude',
delimiter: ','
}, function(err, data) {
map.on('load', function () {
map.addLayer({
'id': 'airports',
'type': 'symbol',
'source': {
'type': 'geojson',
'data': data
},
'layout': {
"icon-image": "marker-15"
},
'paint': {}
});
});
});
}
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment