Skip to content

Instantly share code, notes, and snippets.

@justincy
Created February 27, 2014 15:22
Show Gist options
  • Save justincy/9252184 to your computer and use it in GitHub Desktop.
Save justincy/9252184 to your computer and use it in GitHub Desktop.
Mapshaper infinite loop bug
Display the source blob
Display the rendered blob
Raw
{
"type": "Polygon",
"coordinates": [
[
[
-3.3728184967442476,
51.76669033915902
],
[
-3.372450829956119,
51.76665686709262
],
[
-3.3715205726154114,
51.7666614313401
],
[
-3.3707364105456388,
51.766704747826786
],
[
-3.369953641155084,
51.766746244474035
],
[
-3.370020953700058,
51.766624070093144
],
[
-3.3699792116812533,
51.7664420223113
],
[
-3.369592988041278,
51.76660927559378
],
[
-3.369406207372449,
51.766662705335165
],
[
-3.369126110774298,
51.76669743974169
],
[
-3.3687725451979507,
51.76669886008676
],
[
-3.3683703648797487,
51.766626213099364
],
[
-3.368189864223243,
51.76655188371126
],
[
-3.367961511239705,
51.766428655880105
],
[
-3.36743031013672,
51.76611472763001
],
[
-3.3670911470796594,
51.76587319579386
],
[
-3.3668674548473847,
51.76571214592806
],
[
-3.366594400860183,
51.76554807283606
],
[
-3.3663788509981676,
51.76541660043709
],
[
-3.3661371617879996,
51.76533128983197
],
[
-3.3657888531325373,
51.7652184438237
],
[
-3.3646930330766605,
51.764921853011224
],
[
-3.363870371764921,
51.76469671491672
],
[
-3.363539199567167,
51.764527014863276
],
[
-3.363319290412533,
51.76439468827896
],
[
-3.3631980654144136,
51.76431516779579
],
[
-3.362939370748495,
51.76409786789801
],
[
-3.362711465495907,
51.76384424312407
],
[
-3.362487138134995,
51.763516843378824
],
[
-3.362339196384658,
51.76322362601425
],
[
-3.362288024917016,
51.76306416443621
],
[
-3.3622342022604146,
51.76281661356048
],
[
-3.3622304581096647,
51.76254780102845
],
[
-3.3623624431707664,
51.761733409100856
],
[
-3.362363828772587,
51.761490613395594
],
[
-3.362337869075901,
51.76120587299992
],
[
-3.362263405005783,
51.760898316000535
],
[
-3.362249140522654,
51.76071324943229
],
[
-3.362385119257772,
51.760320528262
],
[
-3.3624642239519877,
51.7600120903332
],
[
-3.362222799856903,
51.75998251810207
],
[
-3.362222071876551,
51.75870658418023
],
[
-3.3616763987492178,
51.75867783924302
],
[
-3.361669851252178,
51.758556525227064
],
[
-3.3620344964846227,
51.758492054674676
],
[
-3.362035458057727,
51.758475858213956
],
[
-3.362038354949596,
51.758475824642616
],
[
-3.362037408250711,
51.758444364163246
],
[
-3.362038072288462,
51.75841828012314
],
[
-3.362464024813396,
51.75832072710038
],
[
-3.362538600444414,
51.758247028632596
],
[
-3.362516401202523,
51.75818344389655
],
[
-3.3625035420092164,
51.75814133130472
],
[
-3.36256369980928,
51.75811815428509
],
[
-3.3627799235644624,
51.75803292238011
],
[
-3.3626832047381985,
51.75794862128603
],
[
-3.362634107717115,
51.757906029668845
],
[
-3.362908755356294,
51.75774009272591
],
[
-3.363071088475917,
51.75745316866912
],
[
-3.363307788952075,
51.757230123041396
],
[
-3.3635775703604076,
51.757047156426935
],
[
-3.3638983000546987,
51.75682403382046
],
[
-3.3641816936618607,
51.756612133906565
],
[
-3.3641596952605197,
51.756507184627274
],
[
-3.3642004630267626,
51.756321479362946
],
[
-3.3645257883069677,
51.75615495028444
],
[
-3.3648433695647335,
51.75601998169234
],
[
-3.365212222431282,
51.755855642750866
],
[
-3.3656202324198037,
51.75569264602489
],
[
-3.3661343699611423,
51.755445689267354
],
[
-3.3668407607692816,
51.75513624907722
],
[
-3.367732609054384,
51.75482734400719
],
[
-3.368090977402009,
51.754652327698025
],
[
-3.3683293774175986,
51.754486799764244
],
[
-3.3685368639660624,
51.75435310280133
],
[
-3.3684853307618075,
51.7543258281182
],
[
-3.368515163718433,
51.7542103849978
],
[
-3.368313755138279,
51.75396995000952
],
[
-3.368183579799706,
51.753929203801285
],
[
-3.368168200359123,
51.753899709719015
],
[
-3.368116187493283,
51.753808598288735
],
[
-3.368588156842135,
51.75370149520005
],
[
-3.3688080872038215,
51.75364408358864
],
[
-3.368845870769164,
51.753695796286756
],
[
-3.3693379971213995,
51.75363251549355
],
[
-3.3696668669223313,
51.753632279991905
],
[
-3.370066308850438,
51.753713945975214
],
[
-3.3703263897396387,
51.7537864453774
],
[
-3.370602928217336,
51.75358899655779
],
[
-3.370638618251242,
51.75357149580074
],
[
-3.3708998161951635,
51.75344166410654
],
[
-3.3712233429223426,
51.75331290299263
],
[
-3.371536370911448,
51.75322023093479
],
[
-3.3720614714280672,
51.7531457636415
],
[
-3.372076250200606,
51.753489979311894
],
[
-3.3720623763245334,
51.75370144996587
],
[
-3.372057972561334,
51.753747359856604
],
[
-3.3720463413058184,
51.75393722385788
],
[
-3.3722862113211987,
51.75425093668685
],
[
-3.3722859619247534,
51.754290503774115
],
[
-3.3722859305123896,
51.75433726180219
],
[
-3.372747248023614,
51.75445236527185
],
[
-3.3734025844116706,
51.75461105829663
],
[
-3.3737834861582665,
51.75470192021315
],
[
-3.3741845000323245,
51.75483480747749
],
[
-3.3746446502852185,
51.755006565892096
],
[
-3.374990960385478,
51.75515088047554
],
[
-3.3756410377702775,
51.75551733455312
],
[
-3.375824429697116,
51.75564017468077
],
[
-3.3761584782394767,
51.75590512029615
],
[
-3.3763759783508456,
51.75614895028014
],
[
-3.3765544568232575,
51.75639593446821
],
[
-3.3765820856062843,
51.756446864456514
],
[
-3.3763188371295683,
51.756461636941644
],
[
-3.375878367787117,
51.75646139912177
],
[
-3.3755533032481173,
51.75649217969786
],
[
-3.374564150140526,
51.75712688821441
],
[
-3.374826276618988,
51.7573135503801
],
[
-3.374793809716704,
51.757341804917246
],
[
-3.374781101704758,
51.75735274379466
],
[
-3.374957090421479,
51.75756559041596
],
[
-3.3752512227552227,
51.757756373132416
],
[
-3.3753304767889287,
51.757694301112416
],
[
-3.3756618060001546,
51.75786936137091
],
[
-3.375677574688616,
51.75786378168739
],
[
-3.3756976339885725,
51.757856353408705
],
[
-3.375749339459846,
51.757889018046974
],
[
-3.3758616870543405,
51.75796233530961
],
[
-3.375913338390796,
51.75794554530293
],
[
-3.3759321405342586,
51.75794442600081
],
[
-3.3760275176797028,
51.75793611589031
],
[
-3.376147326629342,
51.75792122533583
],
[
-3.3762974429743764,
51.757902383015036
],
[
-3.3763679235165602,
51.75788537231234
],
[
-3.3763310022665327,
51.75781476901819
],
[
-3.3763099316927585,
51.75774128254
],
[
-3.3764465199264317,
51.757754069940994
],
[
-3.376571986893317,
51.75792524411803
],
[
-3.3767025650349227,
51.75807387864944
],
[
-3.376721750546868,
51.75813300016796
],
[
-3.3768114722905676,
51.75822456527341
],
[
-3.3768234425084938,
51.758237013646095
],
[
-3.3768937334934255,
51.75830902422781
],
[
-3.3768679898383893,
51.758320116044956
],
[
-3.376823662627896,
51.75833951822763
],
[
-3.376802538324759,
51.75840720460901
],
[
-3.3768661608227935,
51.758450519384574
],
[
-3.3768987100077443,
51.75847261770725
],
[
-3.3769012521914674,
51.7585085553486
],
[
-3.3769138530077707,
51.75863699126426
],
[
-3.376928064794259,
51.758675489746786
],
[
-3.37704648444016,
51.75880538343779
],
[
-3.377055778656135,
51.758920370292714
],
[
-3.3770287503250374,
51.7589368723078
],
[
-3.377028859711657,
51.75894046776833
],
[
-3.3769447683069713,
51.75898641225535
],
[
-3.376917876618514,
51.75900740857115
],
[
-3.3769265408126103,
51.75905406471357
],
[
-3.376956658425232,
51.759091477660625
],
[
-3.3769658960760136,
51.759109353145156
],
[
-3.376937639562453,
51.75922837667378
],
[
-3.3769535734814036,
51.75927584682966
],
[
-3.376974700551565,
51.75935113089106
],
[
-3.3769669121747055,
51.75938089525845
],
[
-3.376930812392877,
51.75952788541764
],
[
-3.3769258131727273,
51.75964933401928
],
[
-3.3769251850572224,
51.75967631694063
],
[
-3.376921360014341,
51.75974110310236
],
[
-3.3767546236511503,
51.75992828854181
],
[
-3.376719614588827,
51.75996826278439
],
[
-3.376725818652787,
51.759981677892895
],
[
-3.3767505802616835,
51.76003354059297
],
[
-3.376589581426584,
51.760218860202414
],
[
-3.376576791984292,
51.76032241630748
],
[
-3.376430795196324,
51.76042933085553
],
[
-3.3763995298746385,
51.760497135896344
],
[
-3.3763228139391415,
51.760499832646396
],
[
-3.3762229219583815,
51.76050280072369
],
[
-3.376138635537907,
51.760542452592624
],
[
-3.376071867673676,
51.76058639522037
],
[
-3.375956123730818,
51.760639903034814
],
[
-3.3759081588258844,
51.76068272625443
],
[
-3.375824882799897,
51.76075563591755
],
[
-3.375745296293064,
51.76080692188943
],
[
-3.3755598867157497,
51.760809091998496
],
[
-3.375392542166265,
51.76083353004395
],
[
-3.3751513221895197,
51.76090648903573
],
[
-3.375121476882854,
51.760925721112685
],
[
-3.3750348378473545,
51.76098338340603
],
[
-3.374983728893455,
51.76101815035754
],
[
-3.3749997956317332,
51.761165428744505
],
[
-3.3750156986295603,
51.761307313931745
],
[
-3.3751346933938997,
51.76145608565735
],
[
-3.3754219903783067,
51.76175485011398
],
[
-3.375622788373076,
51.76202045726032
],
[
-3.3757315120603004,
51.76197422545542
],
[
-3.3757386455122087,
51.761970545218475
],
[
-3.375842229791777,
51.76208892431956
],
[
-3.375783549560034,
51.762112990018665
],
[
-3.3755616737757386,
51.76220280789145
],
[
-3.375585643002587,
51.76222860372845
],
[
-3.3758847006588026,
51.762484967716475
],
[
-3.375844578040472,
51.76249982435236
],
[
-3.3756010812444845,
51.7625934921162
],
[
-3.3756204864155097,
51.76261214788312
],
[
-3.3762602375612776,
51.76325476920033
],
[
-3.376614517842979,
51.76361119340476
],
[
-3.3765073217978228,
51.76366010566465
],
[
-3.3764954873608923,
51.76369980839324
],
[
-3.3766419902414495,
51.76389501403494
],
[
-3.3764688144357877,
51.764061593043145
],
[
-3.3762213206504246,
51.764309968614306
],
[
-3.376201887156796,
51.764290414094376
],
[
-3.3761525245167863,
51.76423973853081
],
[
-3.3760122268016906,
51.764296231362785
],
[
-3.3758468648427757,
51.764338630468174
],
[
-3.375479842317441,
51.76442115521482
],
[
-3.3753189337833382,
51.76451475497682
],
[
-3.375210639788753,
51.7646230250592
],
[
-3.3749598837015435,
51.764859746678084
],
[
-3.3748598690222003,
51.76500208858109
],
[
-3.3747849736638735,
51.76511266512967
],
[
-3.374529646683524,
51.765389902550965
],
[
-3.374214269863671,
51.76555094752808
],
[
-3.3742144336471385,
51.76555634071917
],
[
-3.3742150614842426,
51.76557701461826
],
[
-3.37366220183053,
51.765887401463345
],
[
-3.3731430362415638,
51.76620998060991
],
[
-3.372882726325248,
51.76637127779744
],
[
-3.372842926529993,
51.76639691981791
],
[
-3.3728184967442476,
51.76669033915902
]
]
]
}
var fs = require('fs'),
mapshaper = require('mapshaper'),
argv = require('optimist')
.default('i', 500)
.argv;
if(argv._.length !== 2){
console.log('Usage: node simplify.js <input.geojson> <output.geojson>');
process.exit();
}
var data = fs.readFileSync(argv._[0]),
geoJSON = JSON.parse(data);
fs.writeFileSync(argv._[1], JSON.stringify(simplfyGeometry(geoJSON, parseInt(argv.i))));
function simplfyGeometry(origGeom, interval) {
if(origGeom.type == 'Point') return origGeom;
var mapGeom = mapshaper.createTopology(mapshaper.importGeoJSON(origGeom));
mapshaper.simplifyPaths(mapGeom.arcs, 'vis');
mapGeom.arcs.setRetainedInterval(interval);
mapshaper.findAndRepairIntersections(mapGeom.arcs);
return mapshaper.exportGeoJSONObject(mapGeom.layers[0], mapGeom.arcs).geometries[0];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment