Bezier spline¶
Takes a line and returns a curved version by applying a Bezier spline algorithm.
Example¶
import json
from geojson import LineString, Feature
from turfpy.transformation import bezier_spline
ls = LineString([(-76.091308, 18.427501),
(-76.695556, 18.729501),
(-76.552734, 19.40443),
(-74.61914, 19.134789),
(-73.652343, 20.07657),
(-73.157958, 20.210656)])
f = Feature(geometry=ls)
bs = bezier_spline(f)
print(json.dumps(bs, indent=2, sort_keys=True))
{
"geometry": {
"coordinates": [
[
-76.091308,
18.427501
],
[
-76.091346,
18.427508
],
[
-76.091459,
18.427529
],
[
-76.091647,
18.427565
],
[
-76.091908,
18.427614
],
[
-76.092243,
18.427678
],
[
-76.09265,
18.427756
],
[
-76.093129,
18.427849
],
[
-76.093679,
18.427955
],
[
-76.0943,
18.428076
],
[
-76.10558,
18.430352
],
[
-76.106992,
18.430645
],
[
-76.108466,
18.430953
],
[
-76.110001,
18.431275
],
[
-76.111596,
18.431612
],
[
-76.11325,
18.431963
],
[
-76.114963,
18.432328
],
[
-76.116735,
18.432709
],
[
-76.118563,
18.433103
],
[
-76.120449,
18.433513
],
[
-76.144737,
18.43898
],
[
-76.147249,
18.439565
],
[
-76.14981,
18.440164
],
[
-76.152418,
18.440779
],
[
-76.155072,
18.441408
],
[
-76.157771,
18.442052
],
[
-76.160516,
18.442711
],
[
-76.163306,
18.443385
],
[
-76.166139,
18.444074
],
[
-76.169015,
18.444777
],
[
-76.203294,
18.453497
],
[
-76.206632,
18.45438
],
[
-76.210005,
18.455277
],
[
-76.213411,
18.45619
],
[
-76.21685,
18.457117
],
[
-76.220321,
18.45806
],
[
-76.223823,
18.459018
],
[
-76.227356,
18.45999
],
[
-76.230919,
18.460978
],
[
-76.234512,
18.461981
],
[
-76.275764,
18.474017
],
[
-76.279654,
18.475203
],
[
-76.283565,
18.476403
],
[
-76.287496,
18.47762
],
[
-76.291445,
18.478851
],
[
-76.295413,
18.480098
],
[
-76.299398,
18.48136
],
[
-76.303401,
18.482638
],
[
-76.307419,
18.483931
],
[
-76.311453,
18.485239
],
[
-76.356662,
18.500652
],
[
-76.36083,
18.502146
],
[
-76.365004,
18.503656
],
[
-76.369185,
18.505182
],
[
-76.37337,
18.506723
],
[
-76.377561,
18.508279
],
[
-76.381755,
18.509852
],
[
-76.385952,
18.51144
],
[
-76.390152,
18.513043
],
[
-76.394354,
18.514663
],
[
-76.440502,
18.533515
],
[
-76.444673,
18.535324
],
[
-76.448836,
18.537148
],
[
-76.452992,
18.538988
],
[
-76.45714,
18.540845
],
[
-76.461278,
18.542717
],
[
-76.465407,
18.544605
],
[
-76.469525,
18.546509
],
[
-76.473632,
18.548429
],
[
-76.477728,
18.550365
],
[
-76.521797,
18.572719
],
[
-76.525697,
18.574847
],
[
-76.529575,
18.576992
],
[
-76.533433,
18.579153
],
[
-76.537268,
18.58133
],
[
-76.54108,
18.583523
],
[
-76.544869,
18.585733
],
[
-76.548634,
18.587959
],
[
-76.552374,
18.590201
],
[
-76.556088,
18.592459
],
[
-76.595062,
18.618376
],
[
-76.598416,
18.62083
],
[
-76.601735,
18.623301
],
[
-76.60502,
18.625788
],
[
-76.608268,
18.628291
],
[
-76.61148,
18.630811
],
[
-76.614655,
18.633348
],
[
-76.617792,
18.635901
],
[
-76.62089,
18.638471
],
[
-76.623949,
18.641057
],
[
-76.65481,
18.670599
],
[
-76.657344,
18.673384
],
[
-76.65983,
18.676187
],
[
-76.662268,
18.679006
],
[
-76.664655,
18.681841
],
[
-76.666992,
18.684694
],
[
-76.669279,
18.687563
],
[
-76.671514,
18.690449
],
[
-76.673696,
18.693352
],
[
-76.675825,
18.696272
],
[
-76.695556,
18.729501
],
[
-76.697034,
18.732628
],
[
-76.698528,
18.735781
],
[
-76.700035,
18.738958
],
[
-76.701556,
18.742161
],
[
-76.70309,
18.745389
],
[
-76.704637,
18.748641
],
[
-76.706196,
18.751917
],
[
-76.707766,
18.755216
],
[
-76.709347,
18.758539
],
[
-76.727297,
18.79652
],
[
-76.728965,
18.800094
],
[
-76.730637,
18.803686
],
[
-76.732312,
18.807297
],
[
-76.733989,
18.810926
],
[
-76.735669,
18.814573
],
[
-76.737349,
18.818236
],
[
-76.739031,
18.821917
],
[
-76.740713,
18.825614
],
[
-76.742394,
18.829327
],
[
-76.760714,
18.871143
],
[
-76.762348,
18.875023
],
[
-76.763976,
18.878915
],
[
-76.765595,
18.882819
],
[
-76.767205,
18.886733
],
[
-76.768807,
18.890658
],
[
-76.770398,
18.894593
],
[
-76.771979,
18.898537
],
[
-76.77355,
18.902492
],
[
-76.775108,
18.906455
],
[
-76.791342,
18.950559
],
[
-76.79272,
18.954605
],
[
-76.79408,
18.958656
],
[
-76.79542,
18.962711
],
[
-76.79674,
18.966769
],
[
-76.79804,
18.970832
],
[
-76.799319,
18.974898
],
[
-76.800577,
18.978966
],
[
-76.801813,
18.983037
],
[
-76.803026,
18.98711
],
[
-76.814718,
19.031954
],
[
-76.815617,
19.036026
],
[
-76.816485,
19.040095
],
[
-76.817323,
19.044161
],
[
-76.81813,
19.048224
],
[
-76.818906,
19.052283
],
[
-76.81965,
19.056339
],
[
-76.820361,
19.06039
],
[
-76.821038,
19.064437
],
[
-76.821682,
19.068479
],
[
-76.826379,
19.112518
],
[
-76.826575,
19.116474
],
[
-76.826729,
19.12042
],
[
-76.826842,
19.124357
],
[
-76.826913,
19.128284
],
[
-76.826941,
19.1322
],
[
-76.826926,
19.136105
],
[
-76.826867,
19.139998
],
[
-76.826764,
19.143881
],
[
-76.826615,
19.147751
],
[
-76.821862,
19.189438
],
[
-76.821131,
19.193137
],
[
-76.820348,
19.196821
],
[
-76.819513,
19.200487
],
[
-76.818624,
19.204137
],
[
-76.817681,
19.207769
],
[
-76.816684,
19.211382
],
[
-76.815632,
19.214978
],
[
-76.814525,
19.218555
],
[
-76.813361,
19.222113
],
[
-76.796702,
19.259901
],
[
-76.794822,
19.263204
],
[
-76.792879,
19.266484
],
[
-76.790871,
19.269739
],
[
-76.7888,
19.272971
],
[
-76.786663,
19.276178
],
[
-76.784461,
19.27936
],
[
-76.782193,
19.282517
],
[
-76.779858,
19.285648
],
[
-76.777456,
19.288753
],
[
-76.746436,
19.321095
],
[
-76.743184,
19.323861
],
[
-76.739857,
19.326597
],
[
-76.736455,
19.329301
],
[
-76.732978,
19.331974
],
[
-76.729424,
19.334616
],
[
-76.725794,
19.337226
],
[
-76.722086,
19.339803
],
[
-76.7183,
19.342348
],
[
-76.714437,
19.34486
],
[
-76.666601,
19.370209
],
[
-76.661753,
19.372297
],
[
-76.65682,
19.374348
],
[
-76.6518,
19.37636
],
[
-76.646693,
19.378335
],
[
-76.641499,
19.38027
],
[
-76.636218,
19.382167
],
[
-76.630847,
19.384024
],
[
-76.625388,
19.385842
],
[
-76.61984,
19.38762
],
[
-76.552734,
19.40443
],
[
-76.546083,
19.405678
],
[
-76.539367,
19.40684
],
[
-76.532587,
19.407915
],
[
-76.525744,
19.408906
],
[
-76.518837,
19.409812
],
[
-76.511867,
19.410635
],
[
-76.504836,
19.411377
],
[
-76.497743,
19.412037
],
[
-76.490589,
19.412616
],
[
-76.408013,
19.413952
],
[
-76.400167,
19.413639
],
[
-76.392267,
19.413258
],
[
-76.384313,
19.412809
],
[
-76.376306,
19.412293
],
[
-76.368245,
19.411713
],
[
-76.360133,
19.411067
],
[
-76.351969,
19.410357
],
[
-76.343754,
19.409585
],
[
-76.335488,
19.408751
],
[
-76.241373,
19.395747
],
[
-76.23254,
19.394241
],
[
-76.223663,
19.392685
],
[
-76.214743,
19.39108
],
[
-76.205781,
19.389427
],
[
-76.196776,
19.387726
],
[
-76.187729,
19.385979
],
[
-76.178641,
19.384187
],
[
-76.169512,
19.38235
],
[
-76.160343,
19.38047
],
[
-76.056979,
19.357173
],
[
-76.047368,
19.354842
],
[
-76.037723,
19.352479
],
[
-76.028046,
19.350085
],
[
-76.018336,
19.347662
],
[
-76.008594,
19.345209
],
[
-75.998821,
19.342729
],
[
-75.989017,
19.340222
],
[
-75.979183,
19.337688
],
[
-75.969319,
19.33513
],
[
-75.858998,
19.305587
],
[
-75.848817,
19.302798
],
[
-75.838613,
19.299996
],
[
-75.828386,
19.297181
],
[
-75.818138,
19.294355
],
[
-75.807868,
19.291519
],
[
-75.797577,
19.288673
],
[
-75.787266,
19.285819
],
[
-75.776935,
19.282957
],
[
-75.766584,
19.280088
],
[
-75.651598,
19.248345
],
[
-75.641055,
19.245466
],
[
-75.6305,
19.242593
],
[
-75.619933,
19.239725
],
[
-75.609354,
19.236865
],
[
-75.598764,
19.234013
],
[
-75.588164,
19.231169
],
[
-75.577553,
19.228335
],
[
-75.566933,
19.225512
],
[
-75.556304,
19.222701
],
[
-75.438944,
19.192804
],
[
-75.428249,
19.190203
],
[
-75.417551,
19.187627
],
[
-75.406851,
19.185074
],
[
-75.39615,
19.182547
],
[
-75.385449,
19.180047
],
[
-75.374747,
19.177573
],
[
-75.364046,
19.175128
],
[
-75.353346,
19.172712
],
[
-75.342647,
19.170326
],
[
-75.225205,
19.146321
],
[
-75.214564,
19.144367
],
[
-75.203932,
19.142454
],
[
-75.193308,
19.140584
],
[
-75.182694,
19.138759
],
[
-75.172089,
19.136978
],
[
-75.161495,
19.135242
],
[
-75.150911,
19.133553
],
[
-75.140339,
19.131912
],
[
-75.129778,
19.130319
],
[
-75.014547,
19.116253
],
[
-75.004169,
19.115312
],
[
-74.993811,
19.114432
],
[
-74.983471,
19.113613
],
[
-74.973152,
19.112857
],
[
-74.962852,
19.112163
],
[
-74.952573,
19.111533
],
[
-74.942315,
19.110969
],
[
-74.932079,
19.11047
],
[
-74.921866,
19.110038
],
[
-74.811136,
19.109957
],
[
-74.801231,
19.110398
],
[
-74.791354,
19.110918
],
[
-74.781507,
19.111517
],
[
-74.77169,
19.112197
],
[
-74.761904,
19.112959
],
[
-74.752149,
19.113803
],
[
-74.742426,
19.114731
],
[
-74.732735,
19.115742
],
[
-74.723076,
19.116839
],
[
-74.61914,
19.134789
],
[
-74.609938,
19.136963
],
[
-74.600822,
19.139201
],
[
-74.591791,
19.141502
],
[
-74.582845,
19.143866
],
[
-74.573982,
19.146291
],
[
-74.565203,
19.148777
],
[
-74.556507,
19.151324
],
[
-74.547892,
19.153931
],
[
-74.539359,
19.156598
],
[
-74.450684,
19.189694
],
[
-74.443078,
19.193029
],
[
-74.435545,
19.196417
],
[
-74.428085,
19.199856
],
[
-74.420696,
19.203347
],
[
-74.413378,
19.206887
],
[
-74.406131,
19.210477
],
[
-74.398954,
19.214116
],
[
-74.391847,
19.217804
],
[
-74.384808,
19.221539
],
[
-74.311729,
19.265633
],
[
-74.305465,
19.2699
],
[
-74.299261,
19.274206
],
[
-74.293116,
19.278553
],
[
-74.287031,
19.282939
],
[
-74.281005,
19.287364
],
[
-74.275036,
19.291827
],
[
-74.269124,
19.296327
],
[
-74.263269,
19.300865
],
[
-74.25747,
19.305439
],
[
-74.197194,
19.357992
],
[
-74.192017,
19.362958
],
[
-74.186888,
19.367953
],
[
-74.181805,
19.372977
],
[
-74.17677,
19.378028
],
[
-74.17178,
19.383107
],
[
-74.166835,
19.388212
],
[
-74.161935,
19.393343
],
[
-74.157079,
19.398499
],
[
-74.152266,
19.403681
],
[
-74.101996,
19.462155
],
[
-74.097652,
19.467591
],
[
-74.093344,
19.473043
],
[
-74.08907,
19.478513
],
[
-74.08483,
19.483998
],
[
-74.080623,
19.4895
],
[
-74.076448,
19.495016
],
[
-74.072305,
19.500547
],
[
-74.068193,
19.506092
],
[
-74.064112,
19.51165
],
[
-74.021055,
19.573508
],
[
-74.017291,
19.579181
],
[
-74.013549,
19.58486
],
[
-74.009829,
19.590545
],
[
-74.00613,
19.596234
],
[
-74.002451,
19.601928
],
[
-73.998792,
19.607625
],
[
-73.995153,
19.613325
],
[
-73.991532,
19.619027
],
[
-73.987928,
19.624732
],
[
-73.949288,
19.687433
],
[
-73.945849,
19.693115
],
[
-73.94242,
19.69879
],
[
-73.939,
19.704459
],
[
-73.935589,
19.710121
],
[
-73.932185,
19.715776
],
[
-73.928788,
19.721423
],
[
-73.925397,
19.727061
],
[
-73.922012,
19.732691
],
[
-73.918633,
19.73831
],
[
-73.881615,
19.799318
],
[
-73.878248,
19.804776
],
[
-73.874877,
19.810216
],
[
-73.871503,
19.815639
],
[
-73.868125,
19.821044
],
[
-73.864741,
19.826429
],
[
-73.861352,
19.831795
],
[
-73.857956,
19.837141
],
[
-73.854554,
19.842466
],
[
-73.851144,
19.84777
],
[
-73.812954,
19.904546
],
[
-73.809404,
19.90955
],
[
-73.805838,
19.914525
],
[
-73.802256,
19.91947
],
[
-73.798656,
19.924386
],
[
-73.795039,
19.929272
],
[
-73.791404,
19.934126
],
[
-73.787749,
19.938949
],
[
-73.784075,
19.943739
],
[
-73.780381,
19.948497
],
[
-73.738224,
19.998501
],
[
-73.734237,
20.002821
],
[
-73.730222,
20.007099
],
[
-73.726177,
20.011337
],
[
-73.722103,
20.015534
],
[
-73.717998,
20.019688
],
[
-73.713862,
20.0238
],
[
-73.709694,
20.027869
],
[
-73.705494,
20.031894
],
[
-73.701261,
20.035874
],
[
-73.652343,
20.07657
],
[
-73.647695,
20.079975
],
[
-73.643066,
20.083332
],
[
-73.638456,
20.086641
],
[
-73.633865,
20.089903
],
[
-73.629294,
20.093117
],
[
-73.624741,
20.096285
],
[
-73.620208,
20.099406
],
[
-73.615694,
20.10248
],
[
-73.6112,
20.105509
],
[
-73.563048,
20.135879
],
[
-73.558789,
20.138381
],
[
-73.55455,
20.140841
],
[
-73.550331,
20.143258
],
[
-73.546131,
20.145635
],
[
-73.541952,
20.147971
],
[
-73.537793,
20.150266
],
[
-73.533654,
20.152521
],
[
-73.529535,
20.154736
],
[
-73.525436,
20.156911
],
[
-73.481695,
20.178306
],
[
-73.477841,
20.180029
],
[
-73.474009,
20.181716
],
[
-73.470198,
20.183368
],
[
-73.466407,
20.184985
],
[
-73.462637,
20.186568
],
[
-73.458888,
20.188116
],
[
-73.45516,
20.18963
],
[
-73.451453,
20.19111
],
[
-73.447767,
20.192557
],
[
-73.408625,
20.206355
],
[
-73.405195,
20.207425
],
[
-73.401787,
20.208465
],
[
-73.3984,
20.209477
],
[
-73.395035,
20.21046
],
[
-73.391692,
20.211414
],
[
-73.388371,
20.212341
],
[
-73.385071,
20.213239
],
[
-73.381794,
20.21411
],
[
-73.378538,
20.214954
],
[
-73.344183,
20.222533
],
[
-73.341194,
20.223075
],
[
-73.338227,
20.223594
],
[
-73.335282,
20.224091
],
[
-73.33236,
20.224565
],
[
-73.329461,
20.225016
],
[
-73.326584,
20.225446
],
[
-73.32373,
20.225854
],
[
-73.320899,
20.226242
],
[
-73.318091,
20.226608
],
[
-73.288713,
20.229346
],
[
-73.286181,
20.229486
],
[
-73.283672,
20.229609
],
[
-73.281187,
20.229715
],
[
-73.278725,
20.229806
],
[
-73.276287,
20.22988
],
[
-73.273872,
20.229939
],
[
-73.271481,
20.229982
],
[
-73.269113,
20.230011
],
[
-73.266769,
20.230025
],
[
-73.242557,
20.229301
],
[
-73.2405,
20.229163
],
[
-73.238467,
20.229016
],
[
-73.236459,
20.228857
],
[
-73.234474,
20.228689
],
[
-73.232514,
20.228511
],
[
-73.230578,
20.228324
],
[
-73.228667,
20.228128
],
[
-73.22678,
20.227924
],
[
-73.224918,
20.22771
],
[
-73.20606,
20.224903
],
[
-73.204495,
20.224614
],
[
-73.202955,
20.22432
],
[
-73.20144,
20.224023
],
[
-73.19995,
20.223722
],
[
-73.198486,
20.223417
],
[
-73.197046,
20.22311
],
[
-73.195632,
20.222799
],
[
-73.194243,
20.222486
],
[
-73.19288,
20.222172
],
[
-73.179566,
20.218659
],
[
-73.17851,
20.218343
],
[
-73.17748,
20.218029
],
[
-73.176476,
20.217718
],
[
-73.175498,
20.217409
],
[
-73.174545,
20.217103
],
[
-73.173619,
20.2168
],
[
-73.172719,
20.216501
],
[
-73.171846,
20.216205
],
[
-73.170998,
20.215914
],
[
-73.163417,
20.213074
],
[
-73.162888,
20.212857
],
[
-73.162385,
20.212649
],
[
-73.161909,
20.212449
],
[
-73.161459,
20.212257
],
[
-73.161037,
20.212075
],
[
-73.160641,
20.211902
],
[
-73.160273,
20.21174
],
[
-73.159932,
20.211587
],
[
-73.159617,
20.211444
]
],
"type": "LineString"
},
"properties": {},
"type": "Feature"
}
Interactive Example¶
from geojson import LineString, Feature
from ipyleaflet import Map, GeoJSON
from turfpy.transformation import bezier_spline
ls = LineString([(-76.091308, 18.427501),
(-76.695556, 18.729501),
(-76.552734, 19.40443),
(-74.61914, 19.134789),
(-73.652343, 20.07657),
(-73.157958, 20.210656)])
f = Feature(geometry=ls)
geo_json = GeoJSON(data=f)
spline_geo_json = GeoJSON(data=bezier_spline(f), style={'color': 'red'})
m = Map(center=[19.318170089962457, -74.85710620880128], zoom=8)
m.add_layer(geo_json)
m.add_layer(spline_geo_json)
m