paulmach / orb

Types and utilities for working with 2d geometry in Golang
MIT License
886 stars 103 forks source link

Failed to parse wkt MultiPolygon #127

Closed lianzhao closed 1 year ago

lianzhao commented 1 year ago
str := "MULTIPOLYGON (((119.27816 34.75705, 119.27662 34.75114, 119.27458 34.74755, 119.26562 34.75093, 119.25297 34.75549, 119.24654 34.75663, 119.24193 34.75674, 119.2376 34.75615, 119.23337 34.75503, 119.2292 34.75295, 119.22621 34.75, 119.2176 34.731, 119.21664 34.72778, 119.21642 34.72392, 119.2168 34.71586, 119.21621 34.71135, 119.21471 34.70722, 119.2088 34.69811, 119.2023 34.68936, 119.19436 34.67688, 119.19393 34.67404, 119.19516 34.67193, 119.19923 34.67005, 119.19964 34.66891, 119.19868 34.66725, 119.1895 34.66406, 119.18811 34.66294, 119.18816 34.66154, 119.18902 34.65982, 119.19542 34.65233, 119.20498 34.64782, 119.20978 34.64573, 119.21288 34.64572, 119.21486 34.64899, 119.21638 34.65407, 119.21743 34.6564, 119.21913 34.65763, 119.22961 34.66227, 119.23196 34.6627, 119.23823 34.66229, 119.24165 34.66317, 119.24302 34.66391, 119.24786 34.66821, 119.25081 34.66885, 119.25231 34.66783, 119.25632 34.66783, 119.25986 34.6688, 119.26195 34.66756, 119.26351 34.66681, 119.26646 34.66687, 119.26839 34.6659, 119.2793 34.65922, 119.2892 34.6542, 119.29116 34.65401, 119.2954 34.64962, 119.29913 34.64559, 119.30057 34.64488, 119.30253 34.6468, 119.30397 34.64763, 119.31275 34.65047, 119.31497 34.65043, 119.31623 34.6499, 119.31678 34.64983, 119.31975 34.65068, 119.32385 34.65087, 119.32695 34.65052, 119.32784 34.65049, 119.32855 34.6507, 119.32938 34.65138, 119.33202 34.65561, 119.33223 34.65658, 119.33219 34.65918, 119.33231 34.6597, 119.33301 34.66092, 119.33329 34.66295, 119.33388 34.66372, 119.3344 34.6639, 119.33562 34.66381, 119.33698 34.66308, 119.33802 34.66225, 119.33906 34.66059, 119.34094 34.65905, 119.34477 34.65555, 119.34806 34.65328, 119.34859 34.65266, 119.34953 34.65249, 119.35196 34.65293, 119.35513 34.65417, 119.3559 34.65403, 119.35691 34.65256, 119.35761 34.65203, 119.35861 34.65179, 119.36088 34.65198, 119.36274 34.65256, 119.36502 34.65362, 119.36796 34.65473, 119.37013 34.65613, 119.37259 34.65805, 119.37572 34.65356, 119.37589 34.65307, 119.37509 34.65045, 119.38075 34.64823, 119.38445 34.64332, 119.38613 34.64145, 119.38962 34.64376, 119.38166 34.65123, 119.37689 34.65605, 119.38893 34.66476, 119.39957 34.655, 119.39437 34.6512, 119.3998 34.64491, 119.40454 34.63973, 119.41655 34.6447, 119.42043 34.64293, 119.42197 34.64196, 119.42854 34.63703, 119.42519 34.63665, 119.39506 34.61989, 119.38369 34.61358, 119.38322 34.61326, 119.38306 34.60991, 119.36415 34.59942, 119.37318 34.58382, 119.368 34.58103, 119.36427 34.57934, 119.36202 34.57989, 119.35722 34.584, 119.35475 34.58487, 119.3501 34.58528, 119.34506 34.57874, 119.3281 34.56417, 119.32632 34.56313, 119.32331 34.56223, 119.30826 34.56127, 119.30766 34.55846, 119.30185 34.53223, 119.30162 34.53104, 119.3044 34.52845, 119.30786 34.52556, 119.31275 34.52241, 119.31981 34.51749, 119.32674 34.51224, 119.32965 34.51055, 119.33294 34.50892, 119.34171 34.50617, 119.35046 34.50456, 119.35109 34.50825, 119.35393 34.512, 119.35632 34.51434, 119.35871 34.51293, 119.35297 34.50326, 119.35609 34.50027, 119.35922 34.49807, 119.36058 34.49408, 119.36235 34.49382, 119.36251 34.49309, 119.36564 34.49224, 119.36564 34.49185, 119.3703 34.49039, 119.37076 34.49039, 119.36922 34.48641, 119.36854 34.48363, 119.36877 34.48284, 119.37876 34.48116, 119.38773 34.47914, 119.40185 34.47513, 119.404 34.47286, 119.40667 34.47041, 119.40719 34.47081, 119.40924 34.46951, 119.40996 34.4677, 119.4165 34.46769, 119.41777 34.4678, 119.42624 34.4698, 119.42915 34.47059, 119.44131 34.47464, 119.44537 34.47608, 119.44822 34.47717, 119.45007 34.47766, 119.45662 34.48012, 119.45925 34.48121, 119.4618 34.48205, 119.46564 34.483, 119.46695 34.48322, 119.4699 34.4835, 119.47285 34.48413, 119.4772 34.4856, 119.48113 34.48678, 119.48455 34.48745, 119.48973 34.4881, 119.4965 34.48908, 119.50181 34.48979, 119.50725 34.49064, 119.51213 34.49131, 119.52033 34.4919, 119.52203 34.49208, 119.52491 34.49269, 119.5301 34.49582, 119.53196 34.49726, 119.53382 34.49806, 119.53413 34.49834, 119.53617 34.49892, 119.53894 34.49889, 119.54156 34.49826, 119.54918 34.49388, 119.5529 34.4911, 119.55676 34.48797, 119.55898 34.48736, 119.56189 34.48768, 119.56497 34.48841, 119.56763 34.48968, 119.56918 34.49004, 119.57043 34.48991, 119.57355 34.48937, 119.5769 34.48926, 119.5794 34.48879, 119.58232 34.48812, 119.58426 34.48792, 119.58848 34.48776, 119.59011 34.48756, 119.59443 34.48596, 119.59581 34.48572, 119.59709 34.48586, 119.60177 34.4881, 119.60381 34.48945, 119.60894 34.49338, 119.61068 34.49445, 119.6124 34.4947, 119.61369 34.49421, 119.61516 34.4929, 119.61753 34.48996, 119.61885 34.4893, 119.62037 34.48913, 119.62153 34.48973, 119.62275 34.49102, 119.62619 34.49634, 119.62782 34.49805, 119.63808 34.50358, 119.64601 34.50636, 119.64787 34.5074, 119.64931 34.50896, 119.65332 34.51709, 119.65811 34.5244, 119.6635 34.52923, 119.68032 34.53985, 119.69199 34.54963, 119.65089 34.56568, 119.6466 34.56778, 119.63046 34.5847, 119.61644 34.5917, 119.59011 34.60012, 119.57414 34.6142, 119.5716 34.62392, 119.56596 34.63035, 119.55142 34.63334, 119.54234 34.63265, 119.53299 34.63594, 119.52399 34.64257, 119.50337 34.65465, 119.49906 34.65721, 119.47372 34.6704, 119.47124 34.67198, 119.4706 34.67383, 119.47068 34.6756, 119.4714 34.67725, 119.47682 34.68318, 119.47786 34.68538, 119.47886 34.69069, 119.47941 34.69314, 119.48016 34.69517, 119.48125 34.6961, 119.48265 34.6968, 119.48552 34.69725, 119.48668 34.69717, 119.48777 34.69669, 119.48878 34.69543, 119.49039 34.69179, 119.49275 34.69256, 119.49476 34.69259, 119.49646 34.69343, 119.49731 34.6946, 119.49762 34.69593, 119.49762 34.69734, 119.49724 34.69899, 119.49592 34.70088, 119.4958 34.70246, 119.49631 34.70597, 119.49639 34.70761, 119.49677 34.70939, 119.49799 34.71065, 119.51339 34.71007, 119.51578 34.71187, 119.51756 34.71463, 119.51888 34.71703, 119.52353 34.71857, 119.52819 34.72132, 119.53022 34.72444, 119.53105 34.73227, 119.52879 34.73337, 119.51972 34.73017, 119.51387 34.72827, 119.50742 34.72903, 119.48905 34.73553, 119.46277 34.74736, 119.43534 34.74928, 119.43289 34.74964, 119.42567 34.74976, 119.41926 34.74938, 119.40364 34.74969, 119.40098 34.74987, 119.39333 34.75052, 119.38989 34.75094, 119.38874 34.75115, 119.38751 34.75171, 119.38478 34.75437, 119.38341 34.75594, 119.38163 34.75746, 119.38132 34.75817, 119.38163 34.75981, 119.38225 34.76029, 119.38399 34.76068, 119.38801 34.75906, 119.39693 34.75896, 119.40571 34.7551, 119.45 34.75769, 119.45574 34.75707, 119.46638 34.75329, 119.47321 34.7479, 119.47383 34.74737, 119.47536 34.74685, 119.47668 34.7469, 119.47855 34.74739, 119.48107 34.74758, 119.48262 34.74747, 119.48627 34.74633, 119.48981 34.74594, 119.49269 34.7464, 119.49393 34.747, 119.49469 34.74792, 119.49554 34.74968, 119.49762 34.75018, 119.4994 34.7514, 119.49981 34.75209, 119.49924 34.75323, 119.5002 34.75358, 119.50369 34.75271, 119.50513 34.7519, 119.50632 34.75189, 119.50751 34.75301, 119.5078 34.75429, 119.50768 34.75512, 119.50716 34.75589, 119.50565 34.75695, 119.50254 34.75856, 119.50023 34.75933, 119.4945 34.76111, 119.48892 34.76257, 119.48707 34.76295, 119.48597 34.76329, 119.48548 34.7637, 119.48499 34.76599, 119.48428 34.76752, 119.4827 34.76821, 119.48189 34.76822, 119.47985 34.76792, 119.47399 34.76779, 119.47146 34.76784, 119.46925 34.76828, 119.46622 34.76939, 119.46514 34.77034, 119.46431 34.77207, 119.46284 34.7756, 119.46225 34.77825, 119.46179 34.77908, 119.46067 34.77983, 119.45923 34.78049, 119.45833 34.7805, 119.45607 34.77957, 119.4553 34.77969, 119.45401 34.78032, 119.45191 34.78205, 119.45036 34.783, 119.44876 34.78359, 119.44689 34.78411, 119.44561 34.78419, 119.44464 34.78404, 119.44394 34.78357, 119.44371 34.78286, 119.44382 34.78184, 119.44635 34.76849, 119.43271 34.76778, 119.39916 34.76555, 119.3842 34.76382, 119.38298 34.76392, 119.38186 34.76441, 119.38129 34.76634, 119.38129 34.76817, 119.38084 34.77004, 119.37954 34.77121, 119.37657 34.77226, 119.36931 34.77377, 119.36523 34.77486, 119.36263 34.775, 119.36075 34.775, 119.35895 34.7746, 119.35589 34.77302, 119.35436 34.77341, 119.3533 34.77302, 119.35091 34.76958, 119.34961 34.7687, 119.34834 34.76848, 119.34105 34.76928, 119.33909 34.76943, 119.33696 34.76911, 119.33004 34.76961, 119.31844 34.77391, 119.29937 34.78475, 119.2908 34.7906, 119.27816 34.75705)), ((119.4975 34.69076, 119.49827 34.69032, 119.49892 34.69148, 119.49898 34.69231, 119.49868 34.69297, 119.49768 34.69329, 119.49723 34.69287, 119.49725 34.69192, 119.4975 34.69076)), ((119.39048 34.7558, 119.38916 34.75587, 119.38877 34.75547, 119.38883 34.7548, 119.3894 34.75462, 119.39078 34.7548, 119.39091 34.75525, 119.39048 34.7558)))"
geom, err := wkt.Unmarshal(str)
// err was 'strconv.ParseFloat: parsing "34.75705)": invalid syntax'

env:

    github.com/paulmach/orb v0.8.0
lianzhao commented 1 year ago

https://github.com/paulmach/orb/blob/master/encoding/wkt/unmarshal.go#L280

The wkt string above was splitted by )), ((, not)),((

paulmach commented 1 year ago

fixed in https://github.com/paulmach/orb/releases/tag/v0.9.1 by @m-pavel