diff --git a/02.需求调研/功能清单.rar b/02.需求调研/功能清单.rar new file mode 100644 index 0000000..dfea3a0 Binary files /dev/null and b/02.需求调研/功能清单.rar differ diff --git a/04.系统编码/App/App.csproj b/04.系统编码/App/App.csproj index 081427a..d3cd032 100644 --- a/04.系统编码/App/App.csproj +++ b/04.系统编码/App/App.csproj @@ -317,6 +317,7 @@ + @@ -344,7 +345,6 @@ - @@ -356,6 +356,12 @@ + + + + + + diff --git a/04.系统编码/App/Content/json/beijing/history/202107091551331.json b/04.系统编码/App/Content/json/beijing/history/202107091551331.json new file mode 100644 index 0000000..16fdbbf --- /dev/null +++ b/04.系统编码/App/Content/json/beijing/history/202107091551331.json @@ -0,0 +1,66 @@ +{ + "backward":{ + "points": [ +[116.369, 39.908, 215,"20210709_155000"] + ], + "average": [ +[116.360, 39.900, 53.62418], +[116.370, 39.900, 1.51337], +[116.370, 39.900, 1.51337] + ], + "details": [ + [ +[116.360, 39.900, 53.62418], +[116.370, 39.900, 1.51337], +[116.370, 39.900, 1.51337] + ] + ] + }, + "forward":{ + "points": [ +[116.364, 39.910, 473,"20210709_155600"], +[116.360, 39.912, 591,"20210709_160100"] + ], + "average": [ +[116.340, 39.900, 0.04624], +[116.340, 39.910, 0.14809], +[116.340, 39.920, 0.00317], +[116.350, 39.890, 0.00300], +[116.350, 39.900, 6.31277], +[116.350, 39.910, 13.21819], +[116.350, 39.920, 0.13875], +[116.360, 39.900, 61.00248], +[116.360, 39.910, 41.12775], +[116.360, 39.920, 0.11299], +[116.370, 39.900, 0.29535], +[116.370, 39.910, 0.43539], +[116.370, 39.910, 0.43539] + ], + "details": [ + [ +[116.350, 39.900, 0.52751], +[116.350, 39.910, 0.50885], +[116.360, 39.900, 92.09400], +[116.360, 39.910, 28.49172], +[116.370, 39.900, 0.27214], +[116.370, 39.910, 0.18750], +[116.340, 39.900, 0.09247 ] + ], + [ +[116.340, 39.900, 0.09247], +[116.340, 39.910, 0.29618], +[116.340, 39.920, 0.00635], +[116.350, 39.890, 0.00600], +[116.350, 39.900, 12.09802], +[116.350, 39.910, 25.92754], +[116.350, 39.920, 0.27750], +[116.360, 39.900, 29.91097], +[116.360, 39.910, 53.76380], +[116.360, 39.920, 0.22598], +[116.370, 39.900, 0.31856], +[116.370, 39.910, 0.68328], +[116.370, 39.910, 0.68328] + ] + ] + } + } diff --git a/04.系统编码/App/Content/json/beijing/history/202107151920657.json b/04.系统编码/App/Content/json/beijing/history/202107151920657.json new file mode 100644 index 0000000..377c862 --- /dev/null +++ b/04.系统编码/App/Content/json/beijing/history/202107151920657.json @@ -0,0 +1,251 @@ +{ + "backward":{ + "points": [ +[116.440, 39.881, 600,"20210715_191500"] + ], + "average": [ +[116.420, 39.870, 0.03726], +[116.420, 39.880, 106.55774], +[116.430, 39.870, 14.26173], +[116.430, 39.880, 135.51360], +[116.440, 39.870, 7.02340], +[116.440, 39.880, 15.97356], +[116.450, 39.870, 0.00932], +[116.450, 39.870, 0.00932] + ], + "details": [ + [ +[116.420, 39.870, 0.03726], +[116.420, 39.880, 106.55775], +[116.430, 39.870, 14.26173], +[116.430, 39.880, 135.51361], +[116.440, 39.870, 7.02340], +[116.440, 39.880, 15.97356], +[116.450, 39.870, 0.00932], +[116.450, 39.870, 0.00932] + ] + ] + }, + "forward":{ + "points": [ +[116.405, 39.889, 624,"20210715_192500"], +[116.386, 39.893, 616,"20210715_193000"], +[116.367, 39.897, 611,"20210715_193500"], +[116.344, 39.901, 612,"20210715_194000"], +[116.321, 39.904, 631,"20210715_194500"], +[116.298, 39.907, 666,"20210715_195000"] + ], + "average": [ +[116.270, 39.900, 0.00477], +[116.270, 39.910, 0.00376], +[116.280, 39.890, 0.01631], +[116.280, 39.900, 0.20133], +[116.280, 39.910, 0.13867], +[116.280, 39.920, 0.00890], +[116.290, 39.880, 0.00102], +[116.290, 39.890, 0.22348], +[116.290, 39.900, 1.82017], +[116.290, 39.910, 0.97581], +[116.290, 39.920, 0.03250], +[116.300, 39.880, 0.01018], +[116.300, 39.890, 0.79956], +[116.300, 39.900, 4.61286], +[116.300, 39.910, 1.77560], +[116.300, 39.920, 0.03008], +[116.310, 39.880, 0.02780], +[116.310, 39.890, 1.33336], +[116.310, 39.900, 5.73182], +[116.310, 39.910, 1.41731], +[116.310, 39.920, 0.01740], +[116.320, 39.880, 0.03524], +[116.320, 39.890, 1.80046], +[116.320, 39.900, 6.02707], +[116.320, 39.910, 0.86746], +[116.320, 39.920, 0.00546], +[116.330, 39.880, 0.04942], +[116.330, 39.890, 2.58672], +[116.330, 39.900, 5.79739], +[116.330, 39.910, 0.39977], +[116.330, 39.920, 0.00205], +[116.340, 39.880, 0.08055], +[116.340, 39.890, 3.72718], +[116.340, 39.900, 4.90489], +[116.340, 39.910, 0.15633], +[116.350, 39.880, 0.14160], +[116.350, 39.890, 5.35072], +[116.350, 39.900, 3.65362], +[116.350, 39.910, 0.04215], +[116.360, 39.880, 0.30090], +[116.360, 39.890, 7.15562], +[116.360, 39.900, 2.12420], +[116.360, 39.910, 0.00953], +[116.370, 39.880, 0.66041], +[116.370, 39.890, 8.49391], +[116.370, 39.900, 0.89092], +[116.370, 39.910, 0.00204], +[116.380, 39.880, 1.58139], +[116.380, 39.890, 8.64241], +[116.380, 39.900, 0.23682], +[116.390, 39.880, 3.72337], +[116.390, 39.890, 6.95276], +[116.390, 39.900, 0.02039], +[116.400, 39.880, 7.37731], +[116.400, 39.890, 3.53683], +[116.400, 39.900, 0.00068], +[116.410, 39.880, 10.66767], +[116.410, 39.890, 0.49442], +[116.420, 39.880, 4.51128], +[116.420, 39.890, 0.00204], +[116.420, 39.890, 0.00204] + ], + "details": [ + [ +[116.390, 39.880, 0.33831], +[116.390, 39.890, 0.29747], +[116.400, 39.880, 22.90642], +[116.400, 39.890, 6.22961], +[116.410, 39.880, 62.90426], +[116.410, 39.890, 2.62430], +[116.420, 39.880, 27.06768], +[116.420, 39.890, 0.01225], +[116.360, 39.890, 0.00611 ] + ], + [ +[116.360, 39.890, 0.00611], +[116.370, 39.880, 0.15477], +[116.370, 39.890, 1.10570], +[116.370, 39.900, 0.00814], +[116.380, 39.880, 4.71534], +[116.380, 39.890, 19.40578], +[116.380, 39.900, 0.16480], +[116.390, 39.880, 21.10302], +[116.390, 39.890, 37.63776], +[116.390, 39.900, 0.07335], +[116.400, 39.880, 21.34727], +[116.400, 39.890, 14.98324], +[116.400, 39.900, 0.00409], +[116.410, 39.880, 1.10176], +[116.410, 39.890, 0.34221], +[116.340, 39.890, 0.01832 ] + ], + [ +[116.340, 39.890, 0.01832], +[116.340, 39.900, 0.00816], +[116.350, 39.880, 0.04680], +[116.350, 39.890, 1.33700], +[116.350, 39.900, 0.49916], +[116.360, 39.880, 0.84824], +[116.360, 39.890, 18.84108], +[116.360, 39.900, 4.04046], +[116.370, 39.880, 3.60664], +[116.370, 39.890, 45.32563], +[116.370, 39.900, 4.34053], +[116.370, 39.910, 0.00204], +[116.380, 39.880, 4.76695], +[116.380, 39.890, 32.40399], +[116.380, 39.900, 1.25000], +[116.390, 39.880, 0.89889], +[116.390, 39.890, 3.78132], +[116.390, 39.900, 0.04897], +[116.400, 39.880, 0.01015], +[116.400, 39.890, 0.00814], +[116.320, 39.890, 0.03051 ] + ], + [ +[116.320, 39.890, 0.03051], +[116.320, 39.900, 0.09577], +[116.330, 39.890, 1.57621], +[116.330, 39.900, 2.80221], +[116.330, 39.910, 0.10406], +[116.340, 39.880, 0.24179], +[116.340, 39.890, 12.83724], +[116.340, 39.900, 14.89832], +[116.340, 39.910, 0.29378], +[116.350, 39.880, 0.76218], +[116.350, 39.890, 28.95889], +[116.350, 39.900, 19.70082], +[116.350, 39.910, 0.18966], +[116.360, 39.880, 0.95715], +[116.360, 39.890, 24.04803], +[116.360, 39.900, 8.69456], +[116.360, 39.910, 0.05716], +[116.370, 39.880, 0.20107], +[116.370, 39.890, 4.53214], +[116.370, 39.900, 0.99686], +[116.370, 39.910, 0.01022], +[116.380, 39.880, 0.00607], +[116.380, 39.890, 0.04468], +[116.380, 39.900, 0.00611], +[116.290, 39.900, 0.00612 ] + ], + [ +[116.290, 39.900, 0.00612], +[116.290, 39.910, 0.00205], +[116.300, 39.890, 0.03460], +[116.300, 39.900, 0.39980], +[116.300, 39.910, 0.09204], +[116.310, 39.880, 0.00204], +[116.310, 39.890, 1.42216], +[116.310, 39.900, 6.90293], +[116.310, 39.910, 1.48698], +[116.310, 39.920, 0.01025], +[116.320, 39.880, 0.10168], +[116.320, 39.890, 7.24075], +[116.320, 39.900, 25.49714], +[116.320, 39.910, 3.31247], +[116.320, 39.920, 0.02252], +[116.330, 39.880, 0.28230], +[116.330, 39.890, 13.43844], +[116.330, 39.900, 31.06486], +[116.330, 39.910, 2.19667], +[116.330, 39.920, 0.01227], +[116.340, 39.880, 0.24154], +[116.340, 39.890, 9.48720], +[116.340, 39.900, 14.52084], +[116.340, 39.910, 0.64422], +[116.350, 39.880, 0.04059], +[116.350, 39.890, 1.80845], +[116.350, 39.900, 1.72174], +[116.350, 39.910, 0.06321], +[116.360, 39.890, 0.03850], +[116.360, 39.900, 0.01016], +[116.270, 39.900, 0.02863 ] + ], + [ +[116.270, 39.900, 0.02863], +[116.270, 39.910, 0.02256], +[116.280, 39.890, 0.09788], +[116.280, 39.900, 1.20800], +[116.280, 39.910, 0.83202], +[116.280, 39.920, 0.05340], +[116.290, 39.880, 0.00611], +[116.290, 39.890, 1.34089], +[116.290, 39.900, 10.91492], +[116.290, 39.910, 5.85281], +[116.290, 39.920, 0.19498], +[116.300, 39.880, 0.06106], +[116.300, 39.890, 4.76275], +[116.300, 39.900, 27.27734], +[116.300, 39.910, 10.56156], +[116.300, 39.920, 0.18048], +[116.310, 39.880, 0.16477], +[116.310, 39.890, 6.57797], +[116.310, 39.900, 27.48800], +[116.310, 39.910, 7.01690], +[116.310, 39.920, 0.09417], +[116.320, 39.880, 0.10973], +[116.320, 39.890, 3.53153], +[116.320, 39.900, 10.56950], +[116.320, 39.910, 1.89227], +[116.320, 39.920, 0.01023], +[116.330, 39.880, 0.01422], +[116.330, 39.890, 0.50569], +[116.330, 39.900, 0.91728], +[116.330, 39.910, 0.09792], +[116.340, 39.890, 0.02030], +[116.340, 39.900, 0.00203], +[116.340, 39.900, 0.00203] + ] + ] + } + } diff --git a/04.系统编码/App/Content/json/beijing/history/202111060851610.json b/04.系统编码/App/Content/json/beijing/history/202111060851610.json new file mode 100644 index 0000000..82800ac --- /dev/null +++ b/04.系统编码/App/Content/json/beijing/history/202111060851610.json @@ -0,0 +1,808 @@ +{ + "backward":{ + "points": [ +[116.444, 39.778,1000,"20211106_075100"], +[116.440, 39.791,1000,"20211106_075600"], +[116.436, 39.804,1000,"20211106_080100"], +[116.432, 39.816,1000,"20211106_080600"], +[116.427, 39.827,1000,"20211106_081100"], +[116.422, 39.839,1000,"20211106_081600"], +[116.418, 39.850,1000,"20211106_082100"], +[116.414, 39.862,1000,"20211106_082600"], +[116.411, 39.873,1000,"20211106_083100"], +[116.408, 39.884,1000,"20211106_083600"], +[116.406, 39.895,1000,"20211106_084100"], +[116.405, 39.906,1000,"20211106_084600"] + ], + "average": [ +[116.390, 39.830, 0.00680], +[116.390, 39.840, 0.02420], +[116.390, 39.850, 0.05439], +[116.390, 39.860, 0.12223], +[116.390, 39.870, 0.31130], +[116.390, 39.880, 0.43974], +[116.390, 39.890, 0.56959], +[116.390, 39.900, 0.28202], +[116.390, 39.910, 0.00451], +[116.400, 39.770, 0.00075], +[116.400, 39.780, 0.00829], +[116.400, 39.790, 0.01206], +[116.400, 39.800, 0.01359], +[116.400, 39.810, 0.03249], +[116.400, 39.820, 0.08698], +[116.400, 39.830, 0.33819], +[116.400, 39.840, 1.01816], +[116.400, 39.850, 2.69103], +[116.400, 39.860, 5.51839], +[116.400, 39.870, 9.34593], +[116.400, 39.880, 13.56894], +[116.400, 39.890, 17.20927], +[116.400, 39.900, 20.01233], +[116.400, 39.910, 15.05456], +[116.410, 39.760, 0.00113], +[116.410, 39.770, 0.00941], +[116.410, 39.780, 0.01921], +[116.410, 39.790, 0.05578], +[116.410, 39.800, 0.22943], +[116.410, 39.810, 0.90431], +[116.410, 39.820, 2.30620], +[116.410, 39.830, 5.11000], +[116.410, 39.840, 8.73605], +[116.410, 39.850, 11.82291], +[116.410, 39.860, 12.33086], +[116.410, 39.870, 9.93114], +[116.410, 39.880, 6.20060], +[116.410, 39.890, 2.64248], +[116.410, 39.900, 0.42495], +[116.410, 39.910, 0.00150], +[116.420, 39.760, 0.00788], +[116.420, 39.770, 0.14058], +[116.420, 39.780, 0.68245], +[116.420, 39.790, 1.72201], +[116.420, 39.800, 3.55009], +[116.420, 39.810, 6.27482], +[116.420, 39.820, 9.38922], +[116.420, 39.830, 10.52123], +[116.420, 39.840, 8.86959], +[116.420, 39.850, 5.26540], +[116.420, 39.860, 2.16576], +[116.420, 39.870, 0.53234], +[116.420, 39.880, 0.04373], +[116.420, 39.890, 0.00226], +[116.430, 39.750, 0.00412], +[116.430, 39.760, 0.17803], +[116.430, 39.770, 1.55559], +[116.430, 39.780, 4.83329], +[116.430, 39.790, 7.92853], +[116.430, 39.800, 9.68592], +[116.430, 39.810, 9.35127], +[116.430, 39.820, 6.76134], +[116.430, 39.830, 3.50846], +[116.430, 39.840, 1.26674], +[116.430, 39.850, 0.28668], +[116.430, 39.860, 0.02193], +[116.440, 39.750, 0.01197], +[116.440, 39.760, 0.41219], +[116.440, 39.770, 3.03035], +[116.440, 39.780, 7.12537], +[116.440, 39.790, 7.07946], +[116.440, 39.800, 4.67049], +[116.440, 39.810, 2.24906], +[116.440, 39.820, 0.75379], +[116.440, 39.830, 0.17964], +[116.440, 39.840, 0.01965], +[116.450, 39.750, 0.00523], +[116.450, 39.760, 0.12338], +[116.450, 39.770, 0.85952], +[116.450, 39.780, 1.38500], +[116.450, 39.790, 0.91575], +[116.450, 39.800, 0.35063], +[116.450, 39.810, 0.06615], +[116.450, 39.820, 0.01883], +[116.450, 39.830, 0.00452], +[116.460, 39.750, 0.00112], +[116.460, 39.760, 0.00410], +[116.460, 39.770, 0.03400], +[116.460, 39.780, 0.04675], +[116.460, 39.790, 0.01047], +[116.460, 39.790, 0.01047] + ], + "details": [ + [ +[116.400, 39.770, 0.00903], +[116.400, 39.780, 0.06776], +[116.410, 39.760, 0.01355], +[116.410, 39.770, 0.11293], +[116.410, 39.780, 0.14910], +[116.410, 39.790, 0.10396], +[116.420, 39.760, 0.09461], +[116.420, 39.770, 1.66887], +[116.420, 39.780, 5.27219], +[116.420, 39.790, 3.15886], +[116.420, 39.800, 0.39805], +[116.430, 39.750, 0.04941], +[116.430, 39.760, 2.10935], +[116.430, 39.770, 17.47343], +[116.430, 39.780, 39.62396], +[116.430, 39.790, 22.44813], +[116.430, 39.800, 2.34984], +[116.430, 39.810, 0.04077], +[116.440, 39.750, 0.14363], +[116.440, 39.760, 4.93729], +[116.440, 39.770, 35.19880], +[116.440, 39.780, 68.39570], +[116.440, 39.790, 30.94241], +[116.440, 39.800, 2.44676], +[116.440, 39.810, 0.01355], +[116.450, 39.750, 0.06278], +[116.450, 39.760, 1.48053], +[116.450, 39.770, 10.23337], +[116.450, 39.780, 14.39922], +[116.450, 39.790, 5.40013], +[116.450, 39.800, 0.43689], +[116.460, 39.750, 0.01341], +[116.460, 39.760, 0.04921], +[116.460, 39.770, 0.39462], +[116.460, 39.780, 0.48919], +[116.460, 39.790, 0.06732], +[116.400, 39.780, 0.03166 ] + ], + [ +[116.400, 39.780, 0.03166], +[116.400, 39.790, 0.09498], +[116.400, 39.800, 0.01357], +[116.410, 39.780, 0.08139], +[116.410, 39.790, 0.44774], +[116.410, 39.800, 0.42113], +[116.410, 39.810, 0.07704], +[116.420, 39.770, 0.01806], +[116.420, 39.780, 2.82679], +[116.420, 39.790, 13.60010], +[116.420, 39.800, 10.98453], +[116.420, 39.810, 1.77062], +[116.420, 39.820, 0.00453], +[116.430, 39.760, 0.02698], +[116.430, 39.770, 1.19370], +[116.430, 39.780, 18.10045], +[116.430, 39.790, 60.05314], +[116.430, 39.800, 44.83704], +[116.430, 39.810, 5.51482], +[116.430, 39.820, 0.07699], +[116.440, 39.760, 0.00899], +[116.440, 39.770, 1.16536], +[116.440, 39.780, 16.96010], +[116.440, 39.790, 49.52965], +[116.440, 39.800, 29.42800], +[116.440, 39.810, 2.91374], +[116.440, 39.820, 0.04069], +[116.450, 39.770, 0.08086], +[116.450, 39.780, 2.22080], +[116.450, 39.790, 5.37735], +[116.450, 39.800, 2.58108], +[116.450, 39.810, 0.16674], +[116.460, 39.770, 0.01344], +[116.460, 39.780, 0.07176], +[116.460, 39.790, 0.05834], +[116.400, 39.790, 0.04980 ] + ], + [ +[116.400, 39.790, 0.04980], +[116.400, 39.800, 0.12680], +[116.400, 39.810, 0.06794], +[116.410, 39.790, 0.11762], +[116.410, 39.800, 1.97430], +[116.410, 39.810, 3.06864], +[116.410, 39.820, 0.56258], +[116.410, 39.830, 0.00908], +[116.420, 39.780, 0.09037], +[116.420, 39.790, 3.82831], +[116.420, 39.800, 27.29090], +[116.420, 39.810, 30.46864], +[116.420, 39.820, 5.75252], +[116.420, 39.830, 0.04542], +[116.430, 39.780, 0.27512], +[116.430, 39.790, 12.58695], +[116.430, 39.800, 64.13537], +[116.430, 39.810, 61.82219], +[116.430, 39.820, 8.90749], +[116.430, 39.830, 0.08618], +[116.440, 39.780, 0.14868], +[116.440, 39.790, 4.48150], +[116.440, 39.800, 23.60695], +[116.440, 39.810, 17.50586], +[116.440, 39.820, 2.23848], +[116.440, 39.830, 0.00452], +[116.450, 39.790, 0.21150], +[116.450, 39.800, 1.18961], +[116.450, 39.810, 0.55936], +[116.450, 39.820, 0.07676], +[116.400, 39.800, 0.02266 ] + ], + [ +[116.400, 39.800, 0.02266], +[116.400, 39.810, 0.30834], +[116.400, 39.820, 0.34493], +[116.400, 39.830, 0.14536], +[116.410, 39.800, 0.35773], +[116.410, 39.810, 7.09416], +[116.410, 39.820, 12.16867], +[116.410, 39.830, 3.07884], +[116.410, 39.840, 0.10451], +[116.420, 39.790, 0.07683], +[116.420, 39.800, 3.92303], +[116.420, 39.810, 40.70835], +[116.420, 39.820, 63.37795], +[116.420, 39.830, 13.06271], +[116.420, 39.840, 0.16809], +[116.430, 39.790, 0.05421], +[116.430, 39.800, 4.90881], +[116.430, 39.810, 43.95961], +[116.430, 39.820, 54.28350], +[116.430, 39.830, 9.14224], +[116.430, 39.840, 0.03175], +[116.440, 39.800, 0.56422], +[116.440, 39.810, 6.52392], +[116.440, 39.820, 5.93404], +[116.440, 39.830, 1.15488], +[116.450, 39.810, 0.06770], +[116.450, 39.820, 0.14914], +[116.450, 39.830, 0.05429], +[116.390, 39.830, 0.02266 ] + ], + [ +[116.390, 39.830, 0.02266], +[116.390, 39.840, 0.00909], +[116.400, 39.810, 0.01361], +[116.400, 39.820, 0.68066], +[116.400, 39.830, 1.84791], +[116.400, 39.840, 0.48135], +[116.400, 39.850, 0.00454], +[116.410, 39.810, 0.61188], +[116.410, 39.820, 14.47622], +[116.410, 39.830, 36.26697], +[116.410, 39.840, 10.01163], +[116.410, 39.850, 0.21823], +[116.420, 39.800, 0.00453], +[116.420, 39.810, 2.35022], +[116.420, 39.820, 42.79692], +[116.420, 39.830, 85.60197], +[116.420, 39.840, 20.82382], +[116.420, 39.850, 0.10905], +[116.430, 39.810, 0.87790], +[116.430, 39.820, 17.82288], +[116.430, 39.830, 29.23033], +[116.430, 39.840, 5.75149], +[116.430, 39.850, 0.07715], +[116.440, 39.810, 0.03161], +[116.440, 39.820, 0.83222], +[116.440, 39.830, 0.99172], +[116.440, 39.840, 0.18137], +[116.390, 39.830, 0.05896 ] + ], + [ +[116.390, 39.830, 0.05896], +[116.390, 39.840, 0.19963], +[116.390, 39.850, 0.12257], +[116.400, 39.820, 0.01815], +[116.400, 39.830, 2.06500], +[116.400, 39.840, 7.55833], +[116.400, 39.850, 2.66550], +[116.400, 39.860, 0.07265], +[116.410, 39.820, 0.46691], +[116.410, 39.830, 21.83812], +[116.410, 39.840, 72.99649], +[116.410, 39.850, 24.89663], +[116.410, 39.860, 0.26351], +[116.420, 39.820, 0.73874], +[116.420, 39.830, 27.44943], +[116.420, 39.840, 75.46250], +[116.420, 39.850, 20.43181], +[116.420, 39.860, 0.17713], +[116.430, 39.820, 0.04524], +[116.430, 39.830, 3.64281], +[116.430, 39.840, 8.95987], +[116.430, 39.850, 2.09267], +[116.430, 39.860, 0.01817], +[116.440, 39.830, 0.00453], +[116.440, 39.840, 0.05437], +[116.390, 39.840, 0.08162 ] + ], + [ +[116.390, 39.840, 0.08162], +[116.390, 39.850, 0.45313], +[116.390, 39.860, 0.23574], +[116.400, 39.840, 4.17829], +[116.400, 39.850, 23.36917], +[116.400, 39.860, 10.37605], +[116.400, 39.870, 0.10432], +[116.410, 39.830, 0.12698], +[116.410, 39.840, 21.66557], +[116.410, 39.850, 103.44196], +[116.410, 39.860, 41.43662], +[116.410, 39.870, 0.46277], +[116.420, 39.830, 0.09528], +[116.420, 39.840, 9.98071], +[116.420, 39.850, 40.70818], +[116.420, 39.860, 13.36804], +[116.420, 39.870, 0.20870], +[116.430, 39.840, 0.45783], +[116.430, 39.850, 1.27035], +[116.430, 39.860, 0.21333], +[116.390, 39.850, 0.07697 ] + ], + [ +[116.390, 39.850, 0.07697], +[116.390, 39.860, 1.06815], +[116.390, 39.870, 0.81023], +[116.390, 39.880, 0.01358], +[116.400, 39.850, 6.25318], +[116.400, 39.860, 50.20708], +[116.400, 39.870, 29.17543], +[116.400, 39.880, 0.45734], +[116.410, 39.840, 0.05440], +[116.410, 39.850, 13.31356], +[116.410, 39.860, 101.30472], +[116.410, 39.870, 49.63237], +[116.410, 39.880, 0.76981], +[116.420, 39.850, 1.93577], +[116.420, 39.860, 12.32168], +[116.420, 39.870, 4.40058], +[116.420, 39.880, 0.01813], +[116.430, 39.860, 0.03172], +[116.390, 39.860, 0.16282 ] + ], + [ +[116.390, 39.860, 0.16282], +[116.390, 39.870, 2.74913], +[116.390, 39.880, 1.80821], +[116.390, 39.890, 0.03166], +[116.400, 39.860, 5.56495], +[116.400, 39.870, 80.04750], +[116.400, 39.880, 61.18533], +[116.400, 39.890, 0.65995], +[116.410, 39.850, 0.00453], +[116.410, 39.860, 4.96548], +[116.410, 39.870, 68.22433], +[116.410, 39.880, 42.91570], +[116.410, 39.890, 0.70525], +[116.420, 39.860, 0.12220], +[116.420, 39.870, 1.76530], +[116.420, 39.880, 0.47051], +[116.390, 39.870, 0.17622 ] + ], + [ +[116.390, 39.870, 0.17622], +[116.390, 39.880, 3.42796], +[116.390, 39.890, 3.23307], +[116.390, 39.900, 0.00903], +[116.400, 39.870, 2.82397], +[116.400, 39.880, 100.62031], +[116.400, 39.890, 104.54179], +[116.400, 39.900, 1.02511], +[116.410, 39.870, 0.85426], +[116.410, 39.880, 30.67657], +[116.410, 39.890, 23.33086], +[116.410, 39.900, 0.19869], +[116.420, 39.870, 0.01355], +[116.420, 39.880, 0.03614], +[116.420, 39.890, 0.02709], +[116.390, 39.880, 0.02709 ] + ], + [ +[116.390, 39.880, 0.02709], +[116.390, 39.890, 3.57033], +[116.390, 39.900, 2.79781], +[116.390, 39.910, 0.00903], +[116.400, 39.880, 0.56432], +[116.400, 39.890, 101.30502], +[116.400, 39.900, 149.68806], +[116.400, 39.910, 0.40157], +[116.410, 39.880, 0.04515], +[116.410, 39.890, 7.67362], +[116.410, 39.900, 4.68878], +[116.390, 39.900, 0.57737 ] + ], + [ +[116.390, 39.900, 0.57737], +[116.390, 39.910, 0.04509], +[116.400, 39.890, 0.00451], +[116.400, 39.900, 89.43481], +[116.400, 39.910, 180.25311], +[116.410, 39.900, 0.21196], +[116.410, 39.910, 0.01804], +[116.410, 39.910, 0.01804] + ] + ] + }, + "forward":{ + "points": [ +[116.404, 39.928,1051,"20211106_085600"], +[116.404, 39.939,1044,"20211106_090100"], +[116.404, 39.950,1042,"20211106_090600"], +[116.404, 39.960,1045,"20211106_091100"], +[116.404, 39.971,1054,"20211106_091600"], +[116.404, 39.981,1064,"20211106_092100"], +[116.404, 39.992,1075,"20211106_092600"], +[116.404, 40.002,1085,"20211106_093100"], +[116.404, 40.012,1096,"20211106_093600"], +[116.404, 40.021,1107,"20211106_094100"], +[116.403, 40.031,1117,"20211106_094600"], +[116.402, 40.041,1124,"20211106_095100"] + ], + "average": [ +[116.370, 40.010, 0.00299], +[116.370, 40.020, 0.01115], +[116.370, 40.030, 0.01196], +[116.370, 40.040, 0.00365], +[116.380, 39.930, 0.00198], +[116.380, 39.940, 0.00627], +[116.380, 39.950, 0.01023], +[116.380, 39.960, 0.02050], +[116.380, 39.970, 0.05428], +[116.380, 39.980, 0.07125], +[116.380, 39.990, 0.11474], +[116.380, 40.000, 0.18424], +[116.380, 40.010, 0.29010], +[116.380, 40.020, 0.43060], +[116.380, 40.030, 0.35109], +[116.380, 40.040, 0.05644], +[116.380, 40.050, 0.00249], +[116.390, 39.910, 0.01254], +[116.390, 39.920, 0.55217], +[116.390, 39.930, 1.23545], +[116.390, 39.940, 1.58791], +[116.390, 39.950, 1.85050], +[116.390, 39.960, 2.03122], +[116.390, 39.970, 2.07324], +[116.390, 39.980, 2.16874], +[116.390, 39.990, 2.23481], +[116.390, 40.000, 2.40763], +[116.390, 40.010, 2.52542], +[116.390, 40.020, 2.78886], +[116.390, 40.030, 2.14838], +[116.390, 40.040, 0.64280], +[116.390, 40.050, 0.04049], +[116.400, 39.910, 2.99119], +[116.400, 39.920, 8.46665], +[116.400, 39.930, 7.65626], +[116.400, 39.940, 7.03482], +[116.400, 39.950, 6.53152], +[116.400, 39.960, 6.21451], +[116.400, 39.970, 6.08809], +[116.400, 39.980, 5.96492], +[116.400, 39.990, 5.80212], +[116.400, 40.000, 5.62231], +[116.400, 40.010, 5.39771], +[116.400, 40.020, 5.16505], +[116.400, 40.030, 4.02941], +[116.400, 40.040, 1.37962], +[116.400, 40.050, 0.09892], +[116.400, 40.060, 0.00232], +[116.410, 39.920, 0.05211], +[116.410, 39.930, 0.23334], +[116.410, 39.940, 0.50183], +[116.410, 39.950, 0.78781], +[116.410, 39.960, 1.02142], +[116.410, 39.970, 1.20877], +[116.410, 39.980, 1.42880], +[116.410, 39.990, 1.61499], +[116.410, 40.000, 1.77193], +[116.410, 40.010, 1.80007], +[116.410, 40.020, 1.66219], +[116.410, 40.030, 1.41353], +[116.410, 40.040, 0.58604], +[116.410, 40.050, 0.06239], +[116.410, 40.060, 0.00017], +[116.420, 39.960, 0.00593], +[116.420, 39.970, 0.01252], +[116.420, 39.980, 0.01880], +[116.420, 39.990, 0.03433], +[116.420, 40.000, 0.05887], +[116.420, 40.010, 0.09143], +[116.420, 40.020, 0.11872], +[116.420, 40.030, 0.11006], +[116.420, 40.040, 0.07073], +[116.420, 40.050, 0.01212], +[116.430, 40.020, 0.00033], +[116.430, 40.030, 0.00199], +[116.430, 40.040, 0.00432], +[116.430, 40.040, 0.00432] + ], + "details": [ + [ +[116.390, 39.910, 0.15048], +[116.390, 39.920, 2.87407], +[116.390, 39.930, 0.10290], +[116.400, 39.910, 35.88236], +[116.400, 39.920, 76.81207], +[116.400, 39.930, 2.61978], +[116.410, 39.920, 0.29091], +[116.410, 39.930, 0.05343], +[116.380, 39.930, 0.02177 ] + ], + [ +[116.380, 39.930, 0.02177], +[116.390, 39.920, 3.73610], +[116.390, 39.930, 9.57700], +[116.390, 39.940, 0.78745], +[116.400, 39.910, 0.01187], +[116.400, 39.920, 24.68685], +[116.400, 39.930, 70.10870], +[116.400, 39.940, 6.90034], +[116.400, 39.950, 0.00593], +[116.410, 39.920, 0.33436], +[116.410, 39.930, 2.08051], +[116.410, 39.940, 0.43508], +[116.380, 39.930, 0.00198 ] + ], + [ +[116.380, 39.930, 0.00198], +[116.380, 39.940, 0.04950], +[116.380, 39.950, 0.00198], +[116.390, 39.920, 0.01584], +[116.390, 39.930, 5.10795], +[116.390, 39.940, 12.89401], +[116.390, 39.950, 1.57832], +[116.390, 39.960, 0.00791], +[116.400, 39.920, 0.10088], +[116.400, 39.930, 19.00427], +[116.400, 39.940, 62.26414], +[116.400, 39.950, 10.71739], +[116.400, 39.960, 0.02769], +[116.410, 39.930, 0.66421], +[116.410, 39.940, 4.71498], +[116.410, 39.950, 1.49573], +[116.410, 39.960, 0.00989], +[116.380, 39.940, 0.02576 ] + ], + [ +[116.380, 39.940, 0.02576], +[116.380, 39.950, 0.10691], +[116.390, 39.930, 0.03761], +[116.390, 39.940, 5.31803], +[116.390, 39.950, 15.39509], +[116.390, 39.960, 2.92844], +[116.390, 39.970, 0.03561], +[116.400, 39.930, 0.14239], +[116.400, 39.940, 15.03168], +[116.400, 39.950, 55.47228], +[116.400, 39.960, 13.67784], +[116.400, 39.970, 0.17399], +[116.410, 39.930, 0.00198], +[116.410, 39.940, 0.86595], +[116.410, 39.950, 6.69655], +[116.410, 39.960, 2.72277], +[116.410, 39.970, 0.03360], +[116.380, 39.950, 0.01386 ] + ], + [ +[116.380, 39.950, 0.01386], +[116.380, 39.960, 0.14081], +[116.380, 39.970, 0.01786], +[116.390, 39.940, 0.05547], +[116.390, 39.950, 5.14339], +[116.390, 39.960, 16.46704], +[116.390, 39.970, 3.89617], +[116.390, 39.980, 0.05150], +[116.400, 39.940, 0.22170], +[116.400, 39.950, 12.00041], +[116.400, 39.960, 50.25078], +[116.400, 39.970, 16.52846], +[116.400, 39.980, 0.36402], +[116.410, 39.940, 0.00593], +[116.410, 39.950, 1.24753], +[116.410, 39.960, 8.17363], +[116.410, 39.970, 4.01175], +[116.410, 39.980, 0.13051], +[116.420, 39.960, 0.04944], +[116.420, 39.970, 0.00198], +[116.380, 39.960, 0.10523 ] + ], + [ +[116.380, 39.960, 0.10523], +[116.380, 39.970, 0.35733], +[116.380, 39.980, 0.04762], +[116.390, 39.950, 0.08924], +[116.390, 39.960, 4.87584], +[116.390, 39.970, 15.90381], +[116.390, 39.980, 4.85214], +[116.390, 39.990, 0.09904], +[116.400, 39.950, 0.18223], +[116.400, 39.960, 10.44113], +[116.400, 39.970, 46.79035], +[116.400, 39.980, 18.22394], +[116.400, 39.990, 0.60368], +[116.410, 39.950, 0.01386], +[116.410, 39.960, 1.32103], +[116.410, 39.970, 9.01097], +[116.410, 39.980, 5.53388], +[116.410, 39.990, 0.20771], +[116.420, 39.960, 0.02175], +[116.420, 39.970, 0.13644], +[116.420, 39.980, 0.04351], +[116.420, 39.990, 0.01780], +[116.380, 39.970, 0.26427 ] + ], + [ +[116.380, 39.970, 0.26427], +[116.380, 39.980, 0.45914], +[116.380, 39.990, 0.10132], +[116.390, 39.960, 0.09542], +[116.390, 39.970, 4.94182], +[116.390, 39.980, 15.65139], +[116.390, 39.990, 4.97187], +[116.390, 40.000, 0.12688], +[116.400, 39.960, 0.17667], +[116.400, 39.970, 9.34770], +[116.400, 39.980, 43.63518], +[116.400, 39.990, 19.23077], +[116.400, 40.000, 0.73530], +[116.400, 40.010, 0.00198], +[116.410, 39.960, 0.02975], +[116.410, 39.970, 1.43102], +[116.410, 39.980, 9.96457], +[116.410, 39.990, 7.06867], +[116.410, 40.000, 0.47132], +[116.420, 39.970, 0.01187], +[116.420, 39.980, 0.18211], +[116.420, 39.990, 0.10291], +[116.380, 39.970, 0.01193 ] + ], + [ +[116.380, 39.970, 0.01193], +[116.380, 39.980, 0.31642], +[116.380, 39.990, 0.68401], +[116.380, 40.000, 0.13529], +[116.390, 39.970, 0.10146], +[116.390, 39.980, 5.31236], +[116.390, 39.990, 15.51048], +[116.390, 40.000, 5.80475], +[116.390, 40.010, 0.18871], +[116.400, 39.970, 0.21660], +[116.400, 39.980, 9.14883], +[116.400, 39.990, 40.44434], +[116.400, 40.000, 19.11412], +[116.400, 40.010, 0.83186], +[116.400, 40.020, 0.00595], +[116.410, 39.970, 0.01787], +[116.410, 39.980, 1.48479], +[116.410, 39.990, 10.51504], +[116.410, 40.000, 8.14744], +[116.410, 40.010, 0.63678], +[116.420, 39.990, 0.26348], +[116.420, 40.000, 0.21808], +[116.420, 40.010, 0.01587], +[116.380, 39.980, 0.03188 ] + ], + [ +[116.380, 39.980, 0.03188], +[116.380, 39.990, 0.53970], +[116.380, 40.000, 1.18244], +[116.380, 40.010, 0.32255], +[116.380, 40.020, 0.00199], +[116.390, 39.980, 0.15746], +[116.390, 39.990, 5.99112], +[116.390, 40.000, 15.76567], +[116.390, 40.010, 5.65253], +[116.390, 40.020, 0.23453], +[116.400, 39.980, 0.20703], +[116.400, 39.990, 9.06970], +[116.400, 40.000, 38.13342], +[116.400, 40.010, 18.61567], +[116.400, 40.020, 1.10079], +[116.400, 40.030, 0.00199], +[116.410, 39.980, 0.03184], +[116.410, 39.990, 1.53863], +[116.410, 40.000, 10.85846], +[116.410, 40.010, 8.14192], +[116.410, 40.020, 0.67900], +[116.410, 40.030, 0.00198], +[116.420, 39.990, 0.02777], +[116.420, 40.000, 0.45452], +[116.420, 40.010, 0.50241], +[116.420, 40.020, 0.06549], +[116.380, 39.990, 0.05185 ] + ], + [ +[116.380, 39.990, 0.05185], +[116.380, 40.000, 0.80331], +[116.380, 40.010, 1.75175], +[116.380, 40.020, 0.52580], +[116.380, 40.030, 0.01790], +[116.390, 39.990, 0.24525], +[116.390, 40.000, 6.80292], +[116.390, 40.010, 16.04390], +[116.390, 40.020, 5.69864], +[116.390, 40.030, 0.25257], +[116.400, 39.990, 0.27699], +[116.400, 40.000, 9.17161], +[116.400, 40.010, 35.63338], +[116.400, 40.020, 18.74620], +[116.400, 40.030, 1.19308], +[116.400, 40.040, 0.00596], +[116.410, 39.990, 0.04980], +[116.410, 40.000, 1.71811], +[116.410, 40.010, 10.95712], +[116.410, 40.020, 7.41102], +[116.410, 40.030, 0.71936], +[116.410, 40.040, 0.00398], +[116.420, 40.000, 0.03380], +[116.420, 40.010, 0.54105], +[116.420, 40.020, 0.73363], +[116.420, 40.030, 0.08348], +[116.370, 40.010, 0.02596 ] + ], + [ +[116.370, 40.010, 0.02596], +[116.370, 40.020, 0.00799], +[116.370, 40.030, 0.00199], +[116.380, 40.000, 0.08978], +[116.380, 40.010, 1.25115], +[116.380, 40.020, 2.53182], +[116.380, 40.030, 0.57166], +[116.380, 40.040, 0.01789], +[116.390, 40.000, 0.39131], +[116.390, 40.010, 7.87217], +[116.390, 40.020, 17.80838], +[116.390, 40.030, 6.00883], +[116.390, 40.040, 0.39402], +[116.400, 40.000, 0.31324], +[116.400, 40.010, 9.32974], +[116.400, 40.020, 33.01525], +[116.400, 40.030, 17.22431], +[116.400, 40.040, 1.17390], +[116.400, 40.050, 0.01590], +[116.410, 40.000, 0.06188], +[116.410, 40.010, 1.81899], +[116.410, 40.020, 10.14317], +[116.410, 40.030, 7.25091], +[116.410, 40.040, 0.74992], +[116.410, 40.050, 0.00199], +[116.420, 40.010, 0.03786], +[116.420, 40.020, 0.59759], +[116.420, 40.030, 0.74061], +[116.420, 40.040, 0.13531], +[116.430, 40.020, 0.00398], +[116.430, 40.030, 0.01395], +[116.430, 40.040, 0.00200], +[116.370, 40.010, 0.00998 ] + ], + [ +[116.370, 40.010, 0.00998], +[116.370, 40.020, 0.12578], +[116.370, 40.030, 0.14153], +[116.370, 40.040, 0.04382], +[116.380, 40.010, 0.15576], +[116.380, 40.020, 2.10763], +[116.380, 40.030, 3.62351], +[116.380, 40.040, 0.65935], +[116.380, 40.050, 0.02984], +[116.390, 40.010, 0.54773], +[116.390, 40.020, 9.72472], +[116.390, 40.030, 19.51917], +[116.390, 40.040, 7.31959], +[116.390, 40.050, 0.48591], +[116.400, 40.010, 0.35990], +[116.400, 40.020, 9.11246], +[116.400, 40.030, 29.93361], +[116.400, 40.040, 15.37557], +[116.400, 40.050, 1.17109], +[116.400, 40.060, 0.02786], +[116.410, 40.000, 0.00599], +[116.410, 40.010, 0.04600], +[116.410, 40.020, 1.71309], +[116.410, 40.030, 8.99006], +[116.410, 40.040, 6.27864], +[116.410, 40.050, 0.74668], +[116.410, 40.060, 0.00199], +[116.420, 40.020, 0.02792], +[116.420, 40.030, 0.49659], +[116.420, 40.040, 0.71348], +[116.420, 40.050, 0.14544], +[116.430, 40.030, 0.00996], +[116.430, 40.040, 0.04986], +[116.430, 40.040, 0.04986] + ] + ] + } + } diff --git a/04.系统编码/App/Content/json/beijing/history/202111221646814.json b/04.系统编码/App/Content/json/beijing/history/202111221646814.json new file mode 100644 index 0000000..bfb9cb5 --- /dev/null +++ b/04.系统编码/App/Content/json/beijing/history/202111221646814.json @@ -0,0 +1,1278 @@ +{ + "backward":{ + "points": [ +[116.591, 40.185,2000,"20211122_154600"], +[116.615, 40.165,2000,"20211122_155100"], +[116.641, 40.144,2000,"20211122_155600"], +[116.670, 40.122,2000,"20211122_160100"], +[116.700, 40.100,2000,"20211122_160600"], +[116.733, 40.078,2000,"20211122_161100"], +[116.767, 40.055,2000,"20211122_161600"], +[116.803, 40.032,2000,"20211122_162100"], +[116.840, 40.009,2000,"20211122_162600"], +[116.880, 39.985,2000,"20211122_163100"], +[116.920, 39.962,2000,"20211122_163600"], +[116.960, 39.939,2000,"20211122_164100"] + ], + "average": [ +[116.560, 40.170, 0.00039], +[116.570, 40.160, 0.00388], +[116.570, 40.170, 0.02028], +[116.570, 40.180, 0.03747], +[116.570, 40.190, 0.00822], +[116.580, 40.150, 0.00311], +[116.580, 40.160, 0.04099], +[116.580, 40.170, 0.63172], +[116.580, 40.180, 0.97277], +[116.580, 40.190, 0.11541], +[116.580, 40.200, 0.00078], +[116.590, 40.140, 0.00156], +[116.590, 40.150, 0.01956], +[116.590, 40.160, 0.62538], +[116.590, 40.170, 3.38934], +[116.590, 40.180, 3.06986], +[116.590, 40.190, 0.33632], +[116.590, 40.200, 0.00157], +[116.600, 40.130, 0.00078], +[116.600, 40.140, 0.00391], +[116.600, 40.150, 0.33832], +[116.600, 40.160, 2.88415], +[116.600, 40.170, 4.51240], +[116.600, 40.180, 1.59221], +[116.600, 40.190, 0.10970], +[116.610, 40.130, 0.00313], +[116.610, 40.140, 0.15535], +[116.610, 40.150, 2.14025], +[116.610, 40.160, 4.63488], +[116.610, 40.170, 2.12895], +[116.610, 40.180, 0.22961], +[116.610, 40.190, 0.00274], +[116.620, 40.120, 0.00235], +[116.620, 40.130, 0.06524], +[116.620, 40.140, 1.42158], +[116.620, 40.150, 4.55725], +[116.620, 40.160, 2.66916], +[116.620, 40.170, 0.35152], +[116.620, 40.180, 0.00941], +[116.630, 40.110, 0.00078], +[116.630, 40.120, 0.02362], +[116.630, 40.130, 0.81098], +[116.630, 40.140, 4.08547], +[116.630, 40.150, 3.32813], +[116.630, 40.160, 0.53550], +[116.630, 40.170, 0.01255], +[116.640, 40.110, 0.00788], +[116.640, 40.120, 0.38912], +[116.640, 40.130, 3.31923], +[116.640, 40.140, 3.98544], +[116.640, 40.150, 0.85131], +[116.640, 40.160, 0.02904], +[116.650, 40.100, 0.00157], +[116.650, 40.110, 0.15773], +[116.650, 40.120, 2.39582], +[116.650, 40.130, 4.45564], +[116.650, 40.140, 1.31526], +[116.650, 40.150, 0.06210], +[116.660, 40.090, 0.00079], +[116.660, 40.100, 0.05522], +[116.660, 40.110, 1.48493], +[116.660, 40.120, 4.48643], +[116.660, 40.130, 1.97106], +[116.660, 40.140, 0.13932], +[116.660, 40.150, 0.00078], +[116.670, 40.090, 0.01813], +[116.670, 40.100, 0.72190], +[116.670, 40.110, 4.04586], +[116.670, 40.120, 2.84657], +[116.670, 40.130, 0.29950], +[116.670, 40.140, 0.00393], +[116.680, 40.080, 0.00394], +[116.680, 40.090, 0.26328], +[116.680, 40.100, 3.15802], +[116.680, 40.110, 3.72486], +[116.680, 40.120, 0.60960], +[116.680, 40.130, 0.01025], +[116.690, 40.080, 0.07709], +[116.690, 40.090, 1.95721], +[116.690, 40.100, 4.37337], +[116.690, 40.110, 1.13945], +[116.690, 40.120, 0.02996], +[116.700, 40.070, 0.01099], +[116.700, 40.080, 0.92965], +[116.700, 40.090, 4.34274], +[116.700, 40.100, 1.98665], +[116.700, 40.110, 0.11663], +[116.710, 40.060, 0.00078], +[116.710, 40.070, 0.32153], +[116.710, 40.080, 3.47910], +[116.710, 40.090, 3.10698], +[116.710, 40.100, 0.31144], +[116.710, 40.110, 0.00315], +[116.720, 40.060, 0.07360], +[116.720, 40.070, 2.14622], +[116.720, 40.080, 4.17152], +[116.720, 40.090, 0.73062], +[116.720, 40.100, 0.01257], +[116.730, 40.050, 0.00548], +[116.730, 40.060, 0.92571], +[116.730, 40.070, 4.42780], +[116.730, 40.080, 1.56911], +[116.730, 40.090, 0.05018], +[116.730, 40.100, 0.00078], +[116.740, 40.050, 0.26586], +[116.740, 40.060, 3.56214], +[116.740, 40.070, 2.83266], +[116.740, 40.080, 0.19175], +[116.740, 40.090, 0.00313], +[116.750, 40.040, 0.03676], +[116.750, 40.050, 2.05607], +[116.750, 40.060, 4.09186], +[116.750, 40.070, 0.57438], +[116.750, 40.080, 0.00391], +[116.760, 40.030, 0.00313], +[116.760, 40.040, 0.75359], +[116.760, 40.050, 4.40749], +[116.760, 40.060, 1.49785], +[116.760, 40.070, 0.02578], +[116.770, 40.030, 0.15679], +[116.770, 40.040, 3.33034], +[116.770, 40.050, 2.96722], +[116.770, 40.060, 0.15474], +[116.770, 40.070, 0.00078], +[116.780, 40.020, 0.01335], +[116.780, 40.030, 1.66128], +[116.780, 40.040, 4.26065], +[116.780, 40.050, 0.59464], +[116.780, 40.060, 0.00156], +[116.790, 40.010, 0.00079], +[116.790, 40.020, 0.46228], +[116.790, 40.030, 4.33258], +[116.790, 40.040, 1.69023], +[116.790, 40.050, 0.02113], +[116.800, 40.010, 0.06067], +[116.800, 40.020, 2.85334], +[116.800, 40.030, 3.32684], +[116.800, 40.040, 0.17105], +[116.810, 40.000, 0.00158], +[116.810, 40.010, 1.05468], +[116.810, 40.020, 4.52339], +[116.810, 40.030, 0.74320], +[116.810, 40.040, 0.00236], +[116.820, 40.000, 0.18717], +[116.820, 40.010, 3.92738], +[116.820, 40.020, 2.14497], +[116.820, 40.030, 0.03385], +[116.830, 39.990, 0.00949], +[116.830, 40.000, 1.96658], +[116.830, 40.010, 4.01724], +[116.830, 40.020, 0.24608], +[116.830, 40.030, 0.00079], +[116.840, 39.980, 0.00079], +[116.840, 39.990, 0.47075], +[116.840, 40.000, 4.56002], +[116.840, 40.010, 1.08783], +[116.840, 40.020, 0.00316], +[116.850, 39.980, 0.04436], +[116.850, 39.990, 2.99372], +[116.850, 40.000, 2.99192], +[116.850, 40.010, 0.05139], +[116.860, 39.970, 0.00238], +[116.860, 39.980, 0.92954], +[116.860, 39.990, 4.71259], +[116.860, 40.000, 0.40372], +[116.860, 40.010, 0.00079], +[116.870, 39.970, 0.08966], +[116.870, 39.980, 4.02930], +[116.870, 39.990, 1.84985], +[116.870, 40.000, 0.00792], +[116.880, 39.960, 0.00238], +[116.880, 39.970, 1.62466], +[116.880, 39.980, 4.24839], +[116.880, 39.990, 0.11028], +[116.890, 39.960, 0.18978], +[116.890, 39.970, 4.77750], +[116.890, 39.980, 0.92570], +[116.900, 39.950, 0.00397], +[116.900, 39.960, 2.60572], +[116.900, 39.970, 3.33650], +[116.900, 39.980, 0.02383], +[116.910, 39.950, 0.37241], +[116.910, 39.960, 5.17571], +[116.910, 39.970, 0.31932], +[116.920, 39.940, 0.00555], +[116.920, 39.950, 3.63728], +[116.920, 39.960, 2.23398], +[116.920, 39.970, 0.00238], +[116.930, 39.940, 0.70940], +[116.930, 39.950, 5.05625], +[116.930, 39.960, 0.08974], +[116.940, 39.930, 0.00793], +[116.940, 39.940, 4.66771], +[116.940, 39.950, 1.22358], +[116.950, 39.930, 1.26144], +[116.950, 39.940, 4.59270], +[116.950, 39.950, 0.00317], +[116.960, 39.920, 0.00237], +[116.960, 39.930, 5.48726], +[116.960, 39.940, 0.46902], +[116.970, 39.920, 2.05361], +[116.970, 39.930, 3.86280], +[116.980, 39.920, 6.03125], +[116.980, 39.930, 0.03717], +[116.990, 39.910, 3.53256], +[116.990, 39.920, 2.45629], +[116.990, 39.920, 2.45629] + ], + "details": [ + [ +[116.560, 40.170, 0.00465], +[116.570, 40.160, 0.04658], +[116.570, 40.170, 0.24335], +[116.570, 40.180, 0.44961], +[116.570, 40.190, 0.09858], +[116.580, 40.150, 0.03729], +[116.580, 40.160, 0.49194], +[116.580, 40.170, 7.58062], +[116.580, 40.180, 11.67323], +[116.580, 40.190, 1.38495], +[116.580, 40.200, 0.00941], +[116.590, 40.150, 0.21597], +[116.590, 40.160, 7.47166], +[116.590, 40.170, 40.66740], +[116.590, 40.180, 36.83827], +[116.590, 40.190, 4.03583], +[116.590, 40.200, 0.01880], +[116.600, 40.150, 2.43312], +[116.600, 40.160, 31.30296], +[116.600, 40.170, 53.74403], +[116.600, 40.180, 19.10652], +[116.600, 40.190, 1.31635], +[116.610, 40.140, 0.02348], +[116.610, 40.150, 3.78567], +[116.610, 40.160, 27.67992], +[116.610, 40.170, 22.62811], +[116.610, 40.180, 2.75061], +[116.610, 40.190, 0.03284], +[116.620, 40.150, 0.40459], +[116.620, 40.160, 3.17623], +[116.620, 40.170, 1.96227], +[116.620, 40.180, 0.10346], +[116.630, 40.160, 0.03291], +[116.630, 40.170, 0.03290], +[116.590, 40.140, 0.01869 ] + ], + [ +[116.590, 40.140, 0.01869], +[116.590, 40.150, 0.01873], +[116.590, 40.160, 0.03290], +[116.590, 40.170, 0.00471], +[116.600, 40.130, 0.00937], +[116.600, 40.140, 0.04694], +[116.600, 40.150, 1.62668], +[116.600, 40.160, 3.30682], +[116.600, 40.170, 0.40478], +[116.610, 40.130, 0.03757], +[116.610, 40.140, 1.84072], +[116.610, 40.150, 21.89737], +[116.610, 40.160, 27.93860], +[116.610, 40.170, 2.91923], +[116.610, 40.180, 0.00470], +[116.620, 40.130, 0.65086], +[116.620, 40.140, 16.87010], +[116.620, 40.150, 54.27771], +[116.620, 40.160, 28.85370], +[116.620, 40.170, 2.25593], +[116.620, 40.180, 0.00940], +[116.630, 40.120, 0.02829], +[116.630, 40.130, 4.25564], +[116.630, 40.140, 40.30414], +[116.630, 40.150, 39.31935], +[116.630, 40.160, 6.39314], +[116.630, 40.170, 0.11769], +[116.640, 40.120, 0.01888], +[116.640, 40.130, 2.72842], +[116.640, 40.140, 16.80786], +[116.640, 40.150, 8.21023], +[116.640, 40.160, 0.34851], +[116.650, 40.130, 0.11331], +[116.650, 40.140, 0.81161], +[116.650, 40.150, 0.22168], +[116.620, 40.120, 0.02819 ] + ], + [ +[116.620, 40.120, 0.02819], +[116.620, 40.130, 0.13205], +[116.620, 40.140, 0.18884], +[116.620, 40.150, 0.00471], +[116.630, 40.110, 0.00942], +[116.630, 40.120, 0.25518], +[116.630, 40.130, 5.47615], +[116.630, 40.140, 8.72146], +[116.630, 40.150, 0.61823], +[116.640, 40.110, 0.08982], +[116.640, 40.120, 4.65053], +[116.640, 40.130, 37.10236], +[116.640, 40.140, 31.01741], +[116.640, 40.150, 2.00544], +[116.650, 40.110, 1.67980], +[116.650, 40.120, 28.44674], +[116.650, 40.130, 53.34013], +[116.650, 40.140, 14.97153], +[116.650, 40.150, 0.52354], +[116.660, 40.100, 0.05671], +[116.660, 40.110, 7.58660], +[116.660, 40.120, 43.71700], +[116.660, 40.130, 23.18400], +[116.660, 40.140, 1.67186], +[116.660, 40.150, 0.00939], +[116.670, 40.110, 2.91999], +[116.670, 40.120, 11.67230], +[116.670, 40.130, 2.95545], +[116.670, 40.140, 0.04720], +[116.680, 40.110, 0.06621], +[116.680, 40.120, 0.37360], +[116.680, 40.130, 0.08045], +[116.640, 40.110, 0.00472 ] + ], + [ +[116.640, 40.110, 0.00472], +[116.650, 40.100, 0.01889], +[116.650, 40.110, 0.21297], +[116.650, 40.120, 0.30306], +[116.650, 40.130, 0.01419], +[116.660, 40.090, 0.00944], +[116.660, 40.100, 0.60594], +[116.660, 40.110, 10.23256], +[116.660, 40.120, 10.12017], +[116.660, 40.130, 0.46866], +[116.670, 40.090, 0.21755], +[116.670, 40.100, 8.66284], +[116.670, 40.110, 45.63029], +[116.670, 40.120, 22.48658], +[116.670, 40.130, 0.63857], +[116.680, 40.080, 0.01893], +[116.680, 40.090, 2.99380], +[116.680, 40.100, 37.74949], +[116.680, 40.110, 44.63213], +[116.680, 40.120, 6.94154], +[116.680, 40.130, 0.04250], +[116.690, 40.080, 0.09433], +[116.690, 40.090, 12.50407], +[116.690, 40.100, 46.38478], +[116.690, 40.110, 13.60712], +[116.690, 40.120, 0.35956], +[116.700, 40.080, 0.07078], +[116.700, 40.090, 5.89664], +[116.700, 40.100, 11.16002], +[116.700, 40.110, 1.29547], +[116.710, 40.090, 0.15081], +[116.710, 40.100, 0.33523], +[116.710, 40.110, 0.01891], +[116.680, 40.080, 0.02831 ] + ], + [ +[116.680, 40.080, 0.02831], +[116.680, 40.090, 0.16552], +[116.680, 40.100, 0.14677], +[116.690, 40.080, 0.83079], +[116.690, 40.090, 10.98251], +[116.690, 40.100, 6.09564], +[116.690, 40.110, 0.06631], +[116.700, 40.070, 0.13186], +[116.700, 40.080, 11.08502], +[116.700, 40.090, 46.21622], +[116.700, 40.100, 12.67974], +[116.700, 40.110, 0.10405], +[116.710, 40.060, 0.00942], +[116.710, 40.070, 3.81127], +[116.710, 40.080, 41.73038], +[116.710, 40.090, 37.13299], +[116.710, 40.100, 3.40210], +[116.710, 40.110, 0.01888], +[116.720, 40.060, 0.24893], +[116.720, 40.070, 19.96489], +[116.720, 40.080, 48.51444], +[116.720, 40.090, 8.76747], +[116.720, 40.100, 0.15087], +[116.730, 40.060, 0.38029], +[116.730, 40.070, 14.44271], +[116.730, 40.080, 13.57343], +[116.730, 40.090, 0.60215], +[116.730, 40.100, 0.00941], +[116.740, 40.060, 0.01408], +[116.740, 40.070, 0.72726], +[116.740, 40.080, 0.57296], +[116.740, 40.090, 0.03292], +[116.750, 40.070, 0.00468], +[116.710, 40.070, 0.04710 ] + ], + [ +[116.710, 40.070, 0.04710], +[116.710, 40.080, 0.01886], +[116.720, 40.060, 0.63430], +[116.720, 40.070, 5.78970], +[116.720, 40.080, 1.54375], +[116.730, 40.050, 0.06571], +[116.730, 40.060, 10.72819], +[116.730, 40.070, 38.69088], +[116.730, 40.080, 5.25590], +[116.740, 40.050, 3.18568], +[116.740, 40.060, 42.73158], +[116.740, 40.070, 33.26466], +[116.740, 40.080, 1.72808], +[116.740, 40.090, 0.00470], +[116.750, 40.040, 0.26753], +[116.750, 40.050, 23.63521], +[116.750, 40.060, 49.01319], +[116.750, 40.070, 6.88785], +[116.750, 40.080, 0.04696], +[116.760, 40.040, 1.61421], +[116.760, 40.050, 32.44144], +[116.760, 40.060, 17.01246], +[116.760, 40.070, 0.30937], +[116.770, 40.040, 0.31912], +[116.770, 40.050, 5.02201], +[116.770, 40.060, 1.20974], +[116.770, 40.070, 0.00938], +[116.780, 40.040, 0.00470], +[116.780, 40.050, 0.03753], +[116.740, 40.050, 0.00470 ] + ], + [ +[116.740, 40.050, 0.00470], +[116.750, 40.040, 0.17362], +[116.750, 40.050, 1.03768], +[116.750, 40.060, 0.08919], +[116.760, 40.030, 0.03757], +[116.760, 40.040, 7.42885], +[116.760, 40.050, 20.44842], +[116.760, 40.060, 0.96175], +[116.770, 40.030, 1.88151], +[116.770, 40.040, 39.64496], +[116.770, 40.050, 30.58465], +[116.770, 40.060, 0.64712], +[116.780, 40.020, 0.15080], +[116.780, 40.030, 19.91647], +[116.780, 40.040, 51.12305], +[116.780, 40.050, 7.09818], +[116.780, 40.060, 0.01877], +[116.790, 40.020, 3.34362], +[116.790, 40.030, 48.59142], +[116.790, 40.040, 20.24982], +[116.790, 40.050, 0.25361], +[116.800, 40.020, 4.16535], +[116.800, 40.030, 21.28305], +[116.800, 40.040, 1.96310], +[116.810, 40.020, 0.20759], +[116.810, 40.030, 0.80173], +[116.810, 40.040, 0.01414], +[116.780, 40.020, 0.00942 ] + ], + [ +[116.780, 40.020, 0.00942], +[116.780, 40.030, 0.01887], +[116.790, 40.010, 0.00945], +[116.790, 40.020, 2.20374], +[116.790, 40.030, 3.39953], +[116.790, 40.040, 0.03299], +[116.800, 40.010, 0.72807], +[116.800, 40.020, 30.07475], +[116.800, 40.030, 18.63905], +[116.800, 40.040, 0.08949], +[116.810, 40.000, 0.01898], +[116.810, 40.010, 12.65613], +[116.810, 40.020, 54.07306], +[116.810, 40.030, 8.11668], +[116.810, 40.040, 0.01414], +[116.820, 40.000, 2.19387], +[116.820, 40.010, 47.10017], +[116.820, 40.020, 25.73964], +[116.820, 40.030, 0.40623], +[116.830, 39.990, 0.00474], +[116.830, 40.000, 15.06875], +[116.830, 40.010, 45.61463], +[116.830, 40.020, 2.95300], +[116.830, 40.030, 0.00946], +[116.840, 39.990, 0.01897], +[116.840, 40.000, 6.89922], +[116.840, 40.010, 7.44120], +[116.840, 40.020, 0.03317], +[116.850, 40.000, 0.11388], +[116.850, 40.010, 0.04741], +[116.820, 40.000, 0.05213 ] + ], + [ +[116.820, 40.000, 0.05213], +[116.820, 40.010, 0.02841], +[116.830, 39.990, 0.10913], +[116.830, 40.000, 8.53021], +[116.830, 40.010, 2.59227], +[116.840, 39.980, 0.00950], +[116.840, 39.990, 5.62998], +[116.840, 40.000, 47.82104], +[116.840, 40.010, 5.61275], +[116.840, 40.020, 0.00474], +[116.850, 39.980, 0.53226], +[116.850, 39.990, 35.92460], +[116.850, 40.000, 35.78919], +[116.850, 40.010, 0.56928], +[116.860, 39.970, 0.02376], +[116.860, 39.980, 11.11644], +[116.860, 39.990, 56.54637], +[116.860, 40.000, 4.84462], +[116.860, 40.010, 0.00950], +[116.870, 39.970, 0.25705], +[116.870, 39.980, 37.02525], +[116.870, 39.990, 21.95550], +[116.870, 40.000, 0.09505], +[116.880, 39.970, 0.10956], +[116.880, 39.980, 8.81723], +[116.880, 39.990, 0.99485], +[116.890, 39.980, 0.01429], +[116.860, 39.970, 0.00476 ] + ], + [ +[116.860, 39.970, 0.00476], +[116.860, 39.980, 0.03804], +[116.860, 39.990, 0.00476], +[116.870, 39.970, 0.81883], +[116.870, 39.980, 11.32638], +[116.870, 39.990, 0.24264], +[116.880, 39.960, 0.02856], +[116.880, 39.970, 19.38637], +[116.880, 39.980, 42.16345], +[116.880, 39.990, 0.32845], +[116.890, 39.960, 2.27741], +[116.890, 39.970, 57.33006], +[116.890, 39.980, 11.09412], +[116.900, 39.950, 0.04762], +[116.900, 39.960, 31.26390], +[116.900, 39.970, 40.03796], +[116.900, 39.980, 0.28591], +[116.910, 39.950, 1.82503], +[116.910, 39.960, 54.57705], +[116.910, 39.970, 3.83184], +[116.920, 39.950, 1.13431], +[116.920, 39.960, 7.75441], +[116.920, 39.970, 0.02860], +[116.900, 39.960, 0.00475 ] + ], + [ +[116.900, 39.960, 0.00475], +[116.910, 39.950, 2.64385], +[116.910, 39.960, 7.53150], +[116.920, 39.940, 0.06663], +[116.920, 39.950, 42.51306], +[116.920, 39.960, 19.05340], +[116.930, 39.940, 8.51275], +[116.930, 39.950, 60.67501], +[116.930, 39.960, 1.07694], +[116.940, 39.930, 0.09512], +[116.940, 39.940, 56.01252], +[116.940, 39.950, 14.68300], +[116.950, 39.930, 10.23183], +[116.950, 39.940, 53.45834], +[116.950, 39.950, 0.03810], +[116.960, 39.930, 5.91851], +[116.960, 39.940, 3.10431], +[116.950, 39.930, 4.90551 ] + ], + [ +[116.950, 39.930, 4.90551], +[116.950, 39.940, 1.65404], +[116.960, 39.920, 0.02849], +[116.960, 39.930, 59.92866], +[116.960, 39.940, 2.52397], +[116.970, 39.920, 24.64330], +[116.970, 39.930, 46.35365], +[116.980, 39.920, 72.37495], +[116.980, 39.930, 0.44609], +[116.990, 39.910, 42.39068], +[116.990, 39.920, 29.47552], +[116.990, 39.920, 29.47552] + ] + ] + }, + "forward":{ + "points": [ +[117.039, 39.896,1986,"20211122_165100"], +[117.077, 39.875,1991,"20211122_165600"], +[117.115, 39.853,2025,"20211122_170100"], +[117.155, 39.832,2074,"20211122_170600"], +[117.195, 39.809,2119,"20211122_171100"], +[117.236, 39.786,2143,"20211122_171600"], +[117.277, 39.763,2148,"20211122_172100"], +[117.317, 39.739,2151,"20211122_172600"], +[117.354, 39.716,2152,"20211122_173100"], +[117.390, 39.694,2157,"20211122_173600"], +[117.423, 39.672,2160,"20211122_174100"], +[117.455, 39.651,2154,"20211122_174600"] + ], + "average": [ +[116.990, 39.910, 0.52075], +[117.000, 39.900, 0.02565], +[117.000, 39.910, 2.12665], +[117.010, 39.890, 0.00035], +[117.010, 39.900, 1.92647], +[117.010, 39.910, 0.75387], +[117.020, 39.890, 0.26674], +[117.020, 39.900, 2.43125], +[117.020, 39.910, 0.00069], +[117.030, 39.880, 0.00520], +[117.030, 39.890, 2.18302], +[117.030, 39.900, 0.50218], +[117.040, 39.880, 0.60890], +[117.040, 39.890, 2.09817], +[117.040, 39.900, 0.00312], +[117.050, 39.870, 0.04748], +[117.050, 39.880, 2.32622], +[117.050, 39.890, 0.34518], +[117.060, 39.860, 0.00139], +[117.060, 39.870, 0.98926], +[117.060, 39.880, 1.74305], +[117.060, 39.890, 0.00519], +[117.070, 39.860, 0.14364], +[117.070, 39.870, 2.31582], +[117.070, 39.880, 0.24742], +[117.080, 39.850, 0.00938], +[117.080, 39.860, 1.34584], +[117.080, 39.870, 1.36694], +[117.080, 39.880, 0.00416], +[117.090, 39.840, 0.00035], +[117.090, 39.850, 0.29633], +[117.090, 39.860, 2.23171], +[117.090, 39.870, 0.18647], +[117.100, 39.840, 0.03235], +[117.100, 39.850, 1.60628], +[117.100, 39.860, 1.06323], +[117.100, 39.870, 0.00416], +[117.110, 39.830, 0.00139], +[117.110, 39.840, 0.51939], +[117.110, 39.850, 2.04709], +[117.110, 39.860, 0.13203], +[117.120, 39.830, 0.07813], +[117.120, 39.840, 1.79133], +[117.120, 39.850, 0.80593], +[117.120, 39.860, 0.00348], +[117.130, 39.820, 0.00698], +[117.130, 39.830, 0.75809], +[117.130, 39.840, 1.79747], +[117.130, 39.850, 0.09433], +[117.140, 39.820, 0.16108], +[117.140, 39.830, 1.86232], +[117.140, 39.840, 0.62001], +[117.140, 39.850, 0.00453], +[117.150, 39.810, 0.02065], +[117.150, 39.820, 1.00906], +[117.150, 39.830, 1.54924], +[117.150, 39.840, 0.05959], +[117.160, 39.800, 0.00210], +[117.160, 39.810, 0.27959], +[117.160, 39.820, 1.86341], +[117.160, 39.830, 0.46177], +[117.160, 39.840, 0.00139], +[117.170, 39.800, 0.04942], +[117.170, 39.810, 1.20726], +[117.170, 39.820, 1.30204], +[117.170, 39.830, 0.04158], +[117.180, 39.790, 0.00386], +[117.180, 39.800, 0.42943], +[117.180, 39.810, 1.80436], +[117.180, 39.820, 0.33486], +[117.180, 39.830, 0.00140], +[117.190, 39.790, 0.09101], +[117.190, 39.800, 1.39160], +[117.190, 39.810, 1.05533], +[117.190, 39.820, 0.02485], +[117.200, 39.780, 0.01090], +[117.200, 39.790, 0.61661], +[117.200, 39.800, 1.70248], +[117.200, 39.810, 0.23964], +[117.200, 39.820, 0.00070], +[117.210, 39.770, 0.00105], +[117.210, 39.780, 0.16734], +[117.210, 39.790, 1.53658], +[117.210, 39.800, 0.85069], +[117.210, 39.810, 0.01822], +[117.220, 39.770, 0.02986], +[117.220, 39.780, 0.81900], +[117.220, 39.790, 1.54163], +[117.220, 39.800, 0.16804], +[117.220, 39.810, 0.00140], +[117.230, 39.760, 0.00211], +[117.230, 39.770, 0.27146], +[117.230, 39.780, 1.62256], +[117.230, 39.790, 0.64559], +[117.230, 39.800, 0.00948], +[117.240, 39.750, 0.00070], +[117.240, 39.760, 0.06223], +[117.240, 39.770, 1.02878], +[117.240, 39.780, 1.36285], +[117.240, 39.790, 0.10860], +[117.240, 39.800, 0.00070], +[117.250, 39.750, 0.00915], +[117.250, 39.760, 0.42002], +[117.250, 39.770, 1.67573], +[117.250, 39.780, 0.47664], +[117.250, 39.790, 0.00668], +[117.260, 39.740, 0.00070], +[117.260, 39.750, 0.12001], +[117.260, 39.760, 1.26516], +[117.260, 39.770, 1.12716], +[117.260, 39.780, 0.06995], +[117.270, 39.730, 0.00035], +[117.270, 39.740, 0.02532], +[117.270, 39.750, 0.62626], +[117.270, 39.760, 1.61211], +[117.270, 39.770, 0.34177], +[117.270, 39.780, 0.00316], +[117.280, 39.730, 0.00176], +[117.280, 39.740, 0.21976], +[117.280, 39.750, 1.46766], +[117.280, 39.760, 0.89938], +[117.280, 39.770, 0.04216], +[117.290, 39.720, 0.00035], +[117.290, 39.730, 0.06295], +[117.290, 39.740, 0.89224], +[117.290, 39.750, 1.46765], +[117.290, 39.760, 0.22781], +[117.290, 39.770, 0.00176], +[117.300, 39.720, 0.00950], +[117.300, 39.730, 0.38431], +[117.300, 39.740, 1.59179], +[117.300, 39.750, 0.67120], +[117.300, 39.760, 0.02110], +[117.310, 39.710, 0.00070], +[117.310, 39.720, 0.12704], +[117.310, 39.730, 1.16378], +[117.310, 39.740, 1.26488], +[117.310, 39.750, 0.13615], +[117.310, 39.760, 0.00106], +[117.320, 39.710, 0.03557], +[117.320, 39.720, 0.64706], +[117.320, 39.730, 1.62445], +[117.320, 39.740, 0.45879], +[117.320, 39.750, 0.01161], +[117.330, 39.700, 0.00422], +[117.330, 39.710, 0.27777], +[117.330, 39.720, 1.42790], +[117.330, 39.730, 0.99934], +[117.330, 39.740, 0.07841], +[117.330, 39.750, 0.00070], +[117.340, 39.690, 0.00070], +[117.340, 39.700, 0.09567], +[117.340, 39.710, 0.93398], +[117.340, 39.720, 1.50577], +[117.340, 39.730, 0.28661], +[117.340, 39.740, 0.00633], +[117.350, 39.690, 0.02287], +[117.350, 39.700, 0.49068], +[117.350, 39.710, 1.61355], +[117.350, 39.720, 0.71722], +[117.350, 39.730, 0.04361], +[117.360, 39.680, 0.00458], +[117.360, 39.690, 0.21636], +[117.360, 39.700, 1.29942], +[117.360, 39.710, 1.25740], +[117.360, 39.720, 0.16614], +[117.360, 39.730, 0.00246], +[117.370, 39.670, 0.00106], +[117.370, 39.680, 0.07889], +[117.370, 39.690, 0.82318], +[117.370, 39.700, 1.65209], +[117.370, 39.710, 0.44833], +[117.370, 39.720, 0.01584], +[117.380, 39.670, 0.02253], +[117.380, 39.680, 0.45141], +[117.380, 39.690, 1.58673], +[117.380, 39.700, 0.91345], +[117.380, 39.710, 0.07573], +[117.380, 39.720, 0.00106], +[117.390, 39.660, 0.00564], +[117.390, 39.670, 0.20516], +[117.390, 39.680, 1.25468], +[117.390, 39.690, 1.42828], +[117.390, 39.700, 0.24319], +[117.390, 39.710, 0.00810], +[117.400, 39.650, 0.00141], +[117.400, 39.660, 0.08660], +[117.400, 39.670, 0.82135], +[117.400, 39.680, 1.65520], +[117.400, 39.690, 0.57299], +[117.400, 39.700, 0.03098], +[117.400, 39.710, 0.00035], +[117.410, 39.650, 0.02922], +[117.410, 39.660, 0.47061], +[117.410, 39.670, 1.56825], +[117.410, 39.680, 1.03092], +[117.410, 39.690, 0.11335], +[117.410, 39.700, 0.00247], +[117.420, 39.640, 0.01020], +[117.420, 39.650, 0.22526], +[117.420, 39.660, 1.23430], +[117.420, 39.670, 1.43450], +[117.420, 39.680, 0.29973], +[117.420, 39.690, 0.01232], +[117.420, 39.700, 0.00035], +[117.430, 39.630, 0.00123], +[117.430, 39.640, 0.09776], +[117.430, 39.650, 0.85817], +[117.430, 39.660, 1.61873], +[117.430, 39.670, 0.64784], +[117.430, 39.680, 0.04332], +[117.430, 39.690, 0.00106], +[117.440, 39.630, 0.01460], +[117.440, 39.640, 0.38891], +[117.440, 39.650, 1.43368], +[117.440, 39.660, 1.07223], +[117.440, 39.670, 0.13302], +[117.440, 39.680, 0.00317], +[117.450, 39.620, 0.00018], +[117.450, 39.630, 0.02180], +[117.450, 39.640, 0.40060], +[117.450, 39.650, 0.95450], +[117.450, 39.660, 0.28986], +[117.450, 39.670, 0.01549], +[117.450, 39.680, 0.00035], +[117.460, 39.630, 0.00492], +[117.460, 39.640, 0.08737], +[117.460, 39.650, 0.14692], +[117.460, 39.660, 0.03274], +[117.460, 39.670, 0.00106], +[117.470, 39.630, 0.00053], +[117.470, 39.640, 0.00211], +[117.470, 39.650, 0.00598], +[117.470, 39.660, 0.00141], +[117.480, 39.660, 0.00018], +[117.480, 39.660, 0.00018] + ], + "details": [ + [ +[116.990, 39.910, 6.24898], +[117.000, 39.900, 0.30781], +[117.000, 39.910, 25.51980], +[117.010, 39.890, 0.00416], +[117.010, 39.900, 23.11768], +[117.010, 39.910, 9.04647], +[117.020, 39.890, 3.19879], +[117.020, 39.900, 29.17504], +[117.020, 39.910, 0.00833], +[117.030, 39.880, 0.00208], +[117.030, 39.890, 20.16197], +[117.030, 39.900, 5.98674], +[117.040, 39.880, 0.00208], +[117.040, 39.890, 1.98037], +[117.040, 39.900, 0.02702], +[117.020, 39.890, 0.00208 ] + ], + [ +[117.020, 39.890, 0.00208], +[117.030, 39.880, 0.06031], +[117.030, 39.890, 6.03421], +[117.030, 39.900, 0.03945], +[117.040, 39.880, 7.30473], +[117.040, 39.890, 23.19770], +[117.040, 39.900, 0.01038], +[117.050, 39.870, 0.56973], +[117.050, 39.880, 27.91462], +[117.050, 39.890, 4.14218], +[117.060, 39.860, 0.01042], +[117.060, 39.870, 11.76924], +[117.060, 39.880, 20.91657], +[117.060, 39.890, 0.06232], +[117.070, 39.860, 0.21443], +[117.070, 39.870, 18.37465], +[117.070, 39.880, 2.88801], +[117.080, 39.860, 0.04162], +[117.080, 39.870, 1.14156], +[117.080, 39.880, 0.03118], +[117.060, 39.860, 0.00625 ] + ], + [ +[117.060, 39.860, 0.00625], +[117.060, 39.870, 0.10186], +[117.070, 39.860, 1.50928], +[117.070, 39.870, 9.41521], +[117.070, 39.880, 0.08105], +[117.080, 39.850, 0.11258], +[117.080, 39.860, 16.10847], +[117.080, 39.870, 15.26176], +[117.080, 39.880, 0.01870], +[117.090, 39.840, 0.00417], +[117.090, 39.850, 3.55595], +[117.090, 39.860, 26.78049], +[117.090, 39.870, 2.23765], +[117.100, 39.840, 0.26717], +[117.100, 39.850, 18.83288], +[117.100, 39.860, 12.75670], +[117.100, 39.870, 0.04995], +[117.110, 39.840, 0.98085], +[117.110, 39.850, 14.56747], +[117.110, 39.860, 1.47805], +[117.120, 39.840, 0.11059], +[117.120, 39.850, 0.72840], +[117.120, 39.860, 0.01043], +[117.100, 39.840, 0.12108 ] + ], + [ +[117.100, 39.840, 0.12108], +[117.100, 39.850, 0.44250], +[117.100, 39.860, 0.00209], +[117.110, 39.830, 0.01673], +[117.110, 39.840, 5.25183], +[117.110, 39.850, 9.99760], +[117.110, 39.860, 0.10633], +[117.120, 39.830, 0.93758], +[117.120, 39.840, 21.38534], +[117.120, 39.850, 8.94277], +[117.120, 39.860, 0.03130], +[117.130, 39.820, 0.08172], +[117.130, 39.830, 9.09504], +[117.130, 39.840, 21.56969], +[117.130, 39.850, 1.13197], +[117.140, 39.820, 1.44856], +[117.140, 39.830, 21.62911], +[117.140, 39.840, 7.42969], +[117.140, 39.850, 0.05433], +[117.150, 39.810, 0.01258], +[117.150, 39.820, 2.75263], +[117.150, 39.830, 11.47629], +[117.150, 39.840, 0.64393], +[117.160, 39.820, 0.27878], +[117.160, 39.830, 0.59488], +[117.160, 39.840, 0.00837], +[117.130, 39.820, 0.00210 ] + ], + [ +[117.130, 39.820, 0.00210], +[117.130, 39.830, 0.00210], +[117.140, 39.820, 0.48439], +[117.140, 39.830, 0.71870], +[117.140, 39.840, 0.01045], +[117.150, 39.810, 0.23516], +[117.150, 39.820, 9.35607], +[117.150, 39.830, 7.11458], +[117.150, 39.840, 0.07113], +[117.160, 39.800, 0.02522], +[117.160, 39.810, 3.35507], +[117.160, 39.820, 22.08217], +[117.160, 39.830, 4.94633], +[117.160, 39.840, 0.00836], +[117.170, 39.800, 0.58887], +[117.170, 39.810, 14.48717], +[117.170, 39.820, 15.62450], +[117.170, 39.830, 0.49898], +[117.180, 39.790, 0.01897], +[117.180, 39.800, 4.29888], +[117.180, 39.810, 21.21709], +[117.180, 39.820, 4.01416], +[117.180, 39.830, 0.01677], +[117.190, 39.790, 0.09697], +[117.190, 39.800, 5.97279], +[117.190, 39.810, 9.11322], +[117.190, 39.820, 0.28143], +[117.200, 39.790, 0.01475], +[117.200, 39.800, 0.72547], +[117.200, 39.810, 0.57160], +[117.200, 39.820, 0.00420], +[117.210, 39.800, 0.00631], +[117.170, 39.800, 0.00421 ] + ], + [ +[117.170, 39.800, 0.00421], +[117.180, 39.790, 0.02740], +[117.180, 39.800, 0.85424], +[117.180, 39.810, 0.43518], +[117.180, 39.820, 0.00420], +[117.190, 39.790, 0.99512], +[117.190, 39.800, 10.72647], +[117.190, 39.810, 3.55073], +[117.190, 39.820, 0.01681], +[117.200, 39.780, 0.13080], +[117.200, 39.790, 7.38455], +[117.200, 39.800, 19.70432], +[117.200, 39.810, 2.30407], +[117.200, 39.820, 0.00419], +[117.210, 39.770, 0.01265], +[117.210, 39.780, 2.00179], +[117.210, 39.790, 18.43901], +[117.210, 39.800, 10.20196], +[117.210, 39.810, 0.21860], +[117.220, 39.770, 0.23189], +[117.220, 39.780, 9.05791], +[117.220, 39.790, 18.32239], +[117.220, 39.800, 2.01442], +[117.220, 39.810, 0.01683], +[117.230, 39.760, 0.00211], +[117.230, 39.770, 0.57727], +[117.230, 39.780, 10.29747], +[117.230, 39.790, 6.48156], +[117.230, 39.800, 0.11162], +[117.240, 39.760, 0.00211], +[117.240, 39.770, 0.20007], +[117.240, 39.780, 1.58754], +[117.240, 39.790, 0.45542], +[117.240, 39.800, 0.00842], +[117.250, 39.770, 0.00210], +[117.250, 39.780, 0.01896], +[117.250, 39.790, 0.00211], +[117.210, 39.780, 0.00633 ] + ], + [ +[117.210, 39.780, 0.00633], +[117.220, 39.770, 0.12645], +[117.220, 39.780, 0.77013], +[117.220, 39.790, 0.17714], +[117.220, 39.800, 0.00210], +[117.230, 39.760, 0.02322], +[117.230, 39.770, 2.68023], +[117.230, 39.780, 9.17322], +[117.230, 39.790, 1.26552], +[117.230, 39.800, 0.00210], +[117.240, 39.750, 0.00844], +[117.240, 39.760, 0.74463], +[117.240, 39.770, 12.14524], +[117.240, 39.780, 14.76660], +[117.240, 39.790, 0.84778], +[117.250, 39.750, 0.10561], +[117.250, 39.760, 5.03604], +[117.250, 39.770, 20.10660], +[117.250, 39.780, 5.70069], +[117.250, 39.790, 0.07806], +[117.260, 39.740, 0.00633], +[117.260, 39.750, 1.15293], +[117.260, 39.760, 14.66054], +[117.260, 39.770, 13.46907], +[117.260, 39.780, 0.83945], +[117.270, 39.740, 0.02745], +[117.270, 39.750, 2.52873], +[117.270, 39.760, 13.08947], +[117.270, 39.770, 3.71122], +[117.270, 39.780, 0.03797], +[117.280, 39.740, 0.01476], +[117.280, 39.750, 0.82516], +[117.280, 39.760, 2.05000], +[117.280, 39.770, 0.26559], +[117.290, 39.750, 0.02109], +[117.290, 39.760, 0.02951], +[117.250, 39.750, 0.00421 ] + ], + [ +[117.250, 39.750, 0.00421], +[117.250, 39.760, 0.00422], +[117.260, 39.740, 0.00211], +[117.260, 39.750, 0.28719], +[117.260, 39.760, 0.52132], +[117.260, 39.770, 0.05689], +[117.270, 39.730, 0.00422], +[117.270, 39.740, 0.27645], +[117.270, 39.750, 4.98641], +[117.270, 39.760, 6.25590], +[117.270, 39.770, 0.39004], +[117.280, 39.730, 0.02112], +[117.280, 39.740, 2.62241], +[117.280, 39.750, 16.78675], +[117.280, 39.760, 8.74252], +[117.280, 39.770, 0.24032], +[117.290, 39.720, 0.00422], +[117.290, 39.730, 0.74489], +[117.290, 39.740, 10.70694], +[117.290, 39.750, 17.59075], +[117.290, 39.760, 2.70426], +[117.290, 39.770, 0.02111], +[117.300, 39.720, 0.05492], +[117.300, 39.730, 3.95775], +[117.300, 39.740, 18.63948], +[117.300, 39.750, 8.04179], +[117.300, 39.760, 0.25317], +[117.310, 39.720, 0.22167], +[117.310, 39.730, 6.14895], +[117.310, 39.740, 11.44055], +[117.310, 39.750, 1.53877], +[117.310, 39.760, 0.01266], +[117.320, 39.720, 0.08655], +[117.320, 39.730, 1.57757], +[117.320, 39.740, 1.50154], +[117.320, 39.750, 0.09288], +[117.330, 39.730, 0.02741], +[117.330, 39.740, 0.02742], +[117.290, 39.730, 0.01054 ] + ], + [ +[117.290, 39.730, 0.01054], +[117.300, 39.720, 0.05912], +[117.300, 39.730, 0.65402], +[117.300, 39.740, 0.46205], +[117.300, 39.750, 0.01265], +[117.310, 39.710, 0.00845], +[117.310, 39.720, 1.30280], +[117.310, 39.730, 7.81639], +[117.310, 39.740, 3.73801], +[117.310, 39.750, 0.09502], +[117.320, 39.710, 0.42680], +[117.320, 39.720, 7.67820], +[117.320, 39.730, 17.91580], +[117.320, 39.740, 4.00389], +[117.320, 39.750, 0.04648], +[117.330, 39.700, 0.04436], +[117.330, 39.710, 3.29732], +[117.330, 39.720, 17.12003], +[117.330, 39.730, 11.96465], +[117.330, 39.740, 0.91346], +[117.330, 39.750, 0.00846], +[117.340, 39.700, 0.65216], +[117.340, 39.710, 9.55357], +[117.340, 39.720, 17.60890], +[117.340, 39.730, 3.43506], +[117.340, 39.740, 0.07599], +[117.350, 39.690, 0.00422], +[117.350, 39.700, 0.81460], +[117.350, 39.710, 8.26121], +[117.350, 39.720, 6.35979], +[117.350, 39.730, 0.50006], +[117.360, 39.700, 0.16878], +[117.360, 39.710, 1.05387], +[117.360, 39.720, 0.55111], +[117.360, 39.730, 0.01478], +[117.370, 39.710, 0.00845], +[117.370, 39.720, 0.00846], +[117.330, 39.700, 0.00632 ] + ], + [ +[117.330, 39.700, 0.00632], +[117.330, 39.710, 0.03592], +[117.330, 39.720, 0.01477], +[117.340, 39.690, 0.00845], +[117.340, 39.700, 0.49594], +[117.340, 39.710, 1.65418], +[117.340, 39.720, 0.46033], +[117.340, 39.730, 0.00421], +[117.350, 39.690, 0.27024], +[117.350, 39.700, 5.07358], +[117.350, 39.710, 11.10142], +[117.350, 39.720, 2.24689], +[117.350, 39.730, 0.02325], +[117.360, 39.680, 0.05497], +[117.360, 39.690, 2.59627], +[117.360, 39.700, 15.42425], +[117.360, 39.710, 14.03489], +[117.360, 39.720, 1.44259], +[117.360, 39.730, 0.01480], +[117.370, 39.670, 0.00845], +[117.370, 39.680, 0.82835], +[117.370, 39.690, 9.60994], +[117.370, 39.700, 19.77652], +[117.370, 39.710, 5.37154], +[117.370, 39.720, 0.18160], +[117.380, 39.670, 0.02746], +[117.380, 39.680, 2.16749], +[117.380, 39.690, 14.38816], +[117.380, 39.700, 10.32181], +[117.380, 39.710, 0.90878], +[117.380, 39.720, 0.01270], +[117.390, 39.670, 0.01899], +[117.390, 39.680, 1.07756], +[117.390, 39.690, 4.84320], +[117.390, 39.700, 1.74831], +[117.390, 39.710, 0.08879], +[117.400, 39.670, 0.00211], +[117.400, 39.680, 0.05495], +[117.400, 39.690, 0.20477], +[117.400, 39.700, 0.06970], +[117.400, 39.710, 0.00424], +[117.410, 39.690, 0.00212], +[117.410, 39.700, 0.00635], +[117.370, 39.670, 0.00423 ] + ], + [ +[117.370, 39.670, 0.00423], +[117.370, 39.680, 0.11828], +[117.370, 39.690, 0.26818], +[117.370, 39.700, 0.04853], +[117.380, 39.670, 0.24295], +[117.380, 39.680, 3.24949], +[117.380, 39.690, 4.65264], +[117.380, 39.700, 0.63961], +[117.390, 39.660, 0.06765], +[117.390, 39.670, 2.44296], +[117.390, 39.680, 13.97865], +[117.390, 39.690, 12.29621], +[117.390, 39.700, 1.16994], +[117.390, 39.710, 0.00846], +[117.400, 39.650, 0.01267], +[117.400, 39.660, 0.99698], +[117.400, 39.670, 9.79079], +[117.400, 39.680, 19.80107], +[117.400, 39.690, 6.67112], +[117.400, 39.700, 0.30200], +[117.410, 39.650, 0.09721], +[117.410, 39.660, 3.53751], +[117.410, 39.670, 16.84953], +[117.410, 39.680, 12.16621], +[117.410, 39.690, 1.35807], +[117.410, 39.700, 0.02323], +[117.420, 39.650, 0.08452], +[117.420, 39.660, 2.75587], +[117.420, 39.670, 8.68796], +[117.420, 39.680, 2.82976], +[117.420, 39.690, 0.14569], +[117.420, 39.700, 0.00424], +[117.430, 39.650, 0.02111], +[117.430, 39.660, 0.35276], +[117.430, 39.670, 0.80440], +[117.430, 39.680, 0.19862], +[117.430, 39.690, 0.01271], +[117.440, 39.660, 0.00421], +[117.440, 39.670, 0.01477], +[117.440, 39.680, 0.01482], +[117.400, 39.650, 0.00424 ] + ], + [ +[117.400, 39.650, 0.00424], +[117.400, 39.660, 0.04225], +[117.400, 39.670, 0.06333], +[117.400, 39.680, 0.00633], +[117.410, 39.650, 0.25346], +[117.410, 39.660, 2.10981], +[117.410, 39.670, 1.96943], +[117.410, 39.680, 0.20484], +[117.420, 39.640, 0.12245], +[117.420, 39.650, 2.61864], +[117.420, 39.660, 12.05575], +[117.420, 39.670, 8.52602], +[117.420, 39.680, 0.76706], +[117.420, 39.690, 0.00211], +[117.430, 39.630, 0.01479], +[117.430, 39.640, 1.17315], +[117.430, 39.650, 10.27698], +[117.430, 39.660, 19.07203], +[117.430, 39.670, 6.96971], +[117.430, 39.680, 0.32126], +[117.440, 39.630, 0.17516], +[117.440, 39.640, 4.66688], +[117.440, 39.650, 17.20418], +[117.440, 39.660, 12.86261], +[117.440, 39.670, 1.58148], +[117.440, 39.680, 0.02322], +[117.450, 39.620, 0.00211], +[117.450, 39.630, 0.26163], +[117.450, 39.640, 4.80723], +[117.450, 39.650, 11.45400], +[117.450, 39.660, 3.47826], +[117.450, 39.670, 0.18584], +[117.450, 39.680, 0.00424], +[117.460, 39.630, 0.05906], +[117.460, 39.640, 1.04843], +[117.460, 39.650, 1.76301], +[117.460, 39.660, 0.39287], +[117.460, 39.670, 0.01269], +[117.470, 39.630, 0.00632], +[117.470, 39.640, 0.02528], +[117.470, 39.650, 0.07179], +[117.470, 39.660, 0.01694], +[117.480, 39.660, 0.00212], +[117.480, 39.660, 0.00212] + ] + ] + } + } diff --git a/04.系统编码/App/Content/json/beijing/history/202111241646948.json b/04.系统编码/App/Content/json/beijing/history/202111241646948.json new file mode 100644 index 0000000..987176b --- /dev/null +++ b/04.系统编码/App/Content/json/beijing/history/202111241646948.json @@ -0,0 +1,2123 @@ +{ + "backward":{ + "points": [ +[115.844, 40.242,1000,"20211124_154600"], +[115.902, 40.214,1000,"20211124_155100"], +[115.962, 40.183,1000,"20211124_155600"], +[116.014, 40.156,1000,"20211124_160100"], +[116.061, 40.131,1000,"20211124_160600"], +[116.108, 40.102,1000,"20211124_161100"], +[116.154, 40.071,1000,"20211124_161600"], +[116.197, 40.043,1000,"20211124_162100"], +[116.238, 40.016,1000,"20211124_162600"], +[116.280, 39.989,1000,"20211124_163100"], +[116.321, 39.962,1000,"20211124_163600"], +[116.363, 39.939,1000,"20211124_164100"] + ], + "average": [ +[115.790, 40.260, 0.00040], +[115.800, 40.250, 0.01083], +[115.800, 40.260, 0.01167], +[115.800, 40.270, 0.00080], +[115.810, 40.240, 0.02540], +[115.810, 40.250, 0.13127], +[115.810, 40.260, 0.06211], +[115.810, 40.270, 0.00445], +[115.820, 40.230, 0.01347], +[115.820, 40.240, 0.27367], +[115.820, 40.250, 0.51469], +[115.820, 40.260, 0.13119], +[115.820, 40.270, 0.00485], +[115.830, 40.220, 0.00629], +[115.830, 40.230, 0.19877], +[115.830, 40.240, 0.88962], +[115.830, 40.250, 0.78230], +[115.830, 40.260, 0.13451], +[115.830, 40.270, 0.00443], +[115.840, 40.210, 0.00040], +[115.840, 40.220, 0.09402], +[115.840, 40.230, 0.65107], +[115.840, 40.240, 1.29986], +[115.840, 40.250, 0.67947], +[115.840, 40.260, 0.07749], +[115.840, 40.270, 0.00282], +[115.850, 40.210, 0.03112], +[115.850, 40.220, 0.36975], +[115.850, 40.230, 1.14287], +[115.850, 40.240, 1.24480], +[115.850, 40.250, 0.35714], +[115.850, 40.260, 0.04193], +[115.850, 40.270, 0.00040], +[115.860, 40.200, 0.00390], +[115.860, 40.210, 0.19759], +[115.860, 40.220, 0.78513], +[115.860, 40.230, 1.39624], +[115.860, 40.240, 0.84667], +[115.860, 40.250, 0.13995], +[115.860, 40.260, 0.01442], +[115.870, 40.190, 0.00077], +[115.870, 40.200, 0.06103], +[115.870, 40.210, 0.51160], +[115.870, 40.220, 1.18181], +[115.870, 40.230, 1.27943], +[115.870, 40.240, 0.40292], +[115.870, 40.250, 0.04857], +[115.870, 40.260, 0.00158], +[115.880, 40.180, 0.00038], +[115.880, 40.190, 0.01231], +[115.880, 40.200, 0.27346], +[115.880, 40.210, 0.82964], +[115.880, 40.220, 1.36740], +[115.880, 40.230, 0.84201], +[115.880, 40.240, 0.13504], +[115.880, 40.250, 0.01841], +[115.890, 40.180, 0.00152], +[115.890, 40.190, 0.11045], +[115.890, 40.200, 0.54724], +[115.890, 40.210, 1.15791], +[115.890, 40.220, 1.24924], +[115.890, 40.230, 0.39933], +[115.890, 40.240, 0.04707], +[115.890, 40.250, 0.00315], +[115.900, 40.170, 0.00076], +[115.900, 40.180, 0.01977], +[115.900, 40.190, 0.32407], +[115.900, 40.200, 0.78447], +[115.900, 40.210, 1.35245], +[115.900, 40.220, 0.80036], +[115.900, 40.230, 0.13208], +[115.900, 40.240, 0.01270], +[115.910, 40.170, 0.00339], +[115.910, 40.180, 0.13438], +[115.910, 40.190, 0.57188], +[115.910, 40.200, 1.14982], +[115.910, 40.210, 1.17645], +[115.910, 40.220, 0.37814], +[115.910, 40.230, 0.04014], +[115.910, 40.240, 0.00391], +[115.920, 40.160, 0.00075], +[115.920, 40.170, 0.03037], +[115.920, 40.180, 0.34571], +[115.920, 40.190, 0.83118], +[115.920, 40.200, 1.35873], +[115.920, 40.210, 0.78586], +[115.920, 40.220, 0.12861], +[115.920, 40.230, 0.00939], +[115.930, 40.140, 0.00075], +[115.930, 40.150, 0.00074], +[115.930, 40.160, 0.00742], +[115.930, 40.170, 0.15636], +[115.930, 40.180, 0.59587], +[115.930, 40.190, 1.19599], +[115.930, 40.200, 1.19224], +[115.930, 40.210, 0.33871], +[115.930, 40.220, 0.03580], +[115.930, 40.230, 0.00311], +[115.940, 40.130, 0.00037], +[115.940, 40.140, 0.00224], +[115.940, 40.150, 0.00442], +[115.940, 40.160, 0.04685], +[115.940, 40.170, 0.40682], +[115.940, 40.180, 0.88146], +[115.940, 40.190, 1.41568], +[115.940, 40.200, 0.74978], +[115.940, 40.210, 0.11267], +[115.940, 40.220, 0.00774], +[115.950, 40.120, 0.00074], +[115.950, 40.130, 0.00074], +[115.950, 40.140, 0.00958], +[115.950, 40.150, 0.02193], +[115.950, 40.160, 0.20054], +[115.950, 40.170, 0.63643], +[115.950, 40.180, 1.29585], +[115.950, 40.190, 1.23609], +[115.950, 40.200, 0.30029], +[115.950, 40.210, 0.02541], +[115.960, 40.120, 0.00224], +[115.960, 40.130, 0.01024], +[115.960, 40.140, 0.02218], +[115.960, 40.150, 0.08690], +[115.960, 40.160, 0.44975], +[115.960, 40.170, 0.97439], +[115.960, 40.180, 1.48381], +[115.960, 40.190, 0.73010], +[115.960, 40.200, 0.09374], +[115.960, 40.210, 0.00463], +[115.970, 40.110, 0.00108], +[115.970, 40.120, 0.00515], +[115.970, 40.130, 0.02478], +[115.970, 40.140, 0.07102], +[115.970, 40.150, 0.25777], +[115.970, 40.160, 0.73643], +[115.970, 40.170, 1.44585], +[115.970, 40.180, 1.29241], +[115.970, 40.190, 0.25490], +[115.970, 40.200, 0.01524], +[115.980, 40.110, 0.01619], +[115.980, 40.120, 0.01992], +[115.980, 40.130, 0.06197], +[115.980, 40.140, 0.14075], +[115.980, 40.150, 0.51916], +[115.980, 40.160, 1.16533], +[115.980, 40.170, 1.65892], +[115.980, 40.180, 0.67057], +[115.980, 40.190, 0.06875], +[115.980, 40.200, 0.00077], +[115.990, 40.110, 0.01836], +[115.990, 40.120, 0.06896], +[115.990, 40.130, 0.12951], +[115.990, 40.140, 0.33287], +[115.990, 40.150, 0.85319], +[115.990, 40.160, 1.67559], +[115.990, 40.170, 1.28202], +[115.990, 40.180, 0.21900], +[115.990, 40.190, 0.00905], +[116.000, 40.110, 0.04296], +[116.000, 40.120, 0.10632], +[116.000, 40.130, 0.17869], +[116.000, 40.140, 0.59982], +[116.000, 40.150, 1.34540], +[116.000, 40.160, 1.77483], +[116.000, 40.170, 0.64772], +[116.000, 40.180, 0.04862], +[116.010, 40.100, 0.00288], +[116.010, 40.110, 0.08531], +[116.010, 40.120, 0.16028], +[116.010, 40.130, 0.36799], +[116.010, 40.140, 0.93166], +[116.010, 40.150, 1.83927], +[116.010, 40.160, 1.31133], +[116.010, 40.170, 0.17418], +[116.010, 40.180, 0.00299], +[116.020, 40.100, 0.01437], +[116.020, 40.110, 0.07403], +[116.020, 40.120, 0.24130], +[116.020, 40.130, 0.65447], +[116.020, 40.140, 1.45210], +[116.020, 40.150, 1.89873], +[116.020, 40.160, 0.58371], +[116.020, 40.170, 0.03128], +[116.030, 40.100, 0.02734], +[116.030, 40.110, 0.07778], +[116.030, 40.120, 0.42341], +[116.030, 40.130, 1.07724], +[116.030, 40.140, 1.97220], +[116.030, 40.150, 1.30153], +[116.030, 40.160, 0.13224], +[116.030, 40.170, 0.00075], +[116.040, 40.090, 0.00144], +[116.040, 40.100, 0.03894], +[116.040, 40.110, 0.12280], +[116.040, 40.120, 0.75347], +[116.040, 40.130, 1.62408], +[116.040, 40.140, 1.95628], +[116.040, 40.150, 0.50029], +[116.040, 40.160, 0.01640], +[116.050, 40.090, 0.00507], +[116.050, 40.100, 0.05141], +[116.050, 40.110, 0.32887], +[116.050, 40.120, 1.23643], +[116.050, 40.130, 2.08745], +[116.050, 40.140, 1.16945], +[116.050, 40.150, 0.09070], +[116.060, 40.090, 0.01723], +[116.060, 40.100, 0.12028], +[116.060, 40.110, 0.72561], +[116.060, 40.120, 1.84822], +[116.060, 40.130, 1.79620], +[116.060, 40.140, 0.35640], +[116.060, 40.150, 0.00824], +[116.070, 40.080, 0.00142], +[116.070, 40.090, 0.04218], +[116.070, 40.100, 0.33169], +[116.070, 40.110, 1.39445], +[116.070, 40.120, 2.12614], +[116.070, 40.130, 0.86686], +[116.070, 40.140, 0.05040], +[116.080, 40.080, 0.00993], +[116.080, 40.090, 0.12344], +[116.080, 40.100, 0.82984], +[116.080, 40.110, 2.06500], +[116.080, 40.120, 1.47505], +[116.080, 40.130, 0.17611], +[116.080, 40.140, 0.00150], +[116.090, 40.070, 0.00070], +[116.090, 40.080, 0.03175], +[116.090, 40.090, 0.40542], +[116.090, 40.100, 1.62066], +[116.090, 40.110, 2.00860], +[116.090, 40.120, 0.48835], +[116.090, 40.130, 0.01264], +[116.100, 40.070, 0.00561], +[116.100, 40.080, 0.16178], +[116.100, 40.090, 1.09916], +[116.100, 40.100, 2.23702], +[116.100, 40.110, 0.97893], +[116.100, 40.120, 0.05838], +[116.110, 40.060, 0.00070], +[116.110, 40.070, 0.03377], +[116.110, 40.080, 0.60584], +[116.110, 40.090, 2.12069], +[116.110, 40.100, 1.61649], +[116.110, 40.110, 0.18056], +[116.110, 40.120, 0.00147], +[116.120, 40.060, 0.00770], +[116.120, 40.070, 0.28012], +[116.120, 40.080, 1.63247], +[116.120, 40.090, 2.22021], +[116.120, 40.100, 0.44849], +[116.120, 40.110, 0.01315], +[116.130, 40.050, 0.00141], +[116.130, 40.060, 0.07086], +[116.130, 40.070, 1.09339], +[116.130, 40.080, 2.57311], +[116.130, 40.090, 0.92068], +[116.130, 40.100, 0.04354], +[116.140, 40.050, 0.01201], +[116.140, 40.060, 0.57362], +[116.140, 40.070, 2.40554], +[116.140, 40.080, 1.64763], +[116.140, 40.090, 0.13053], +[116.150, 40.040, 0.00213], +[116.150, 40.050, 0.19919], +[116.150, 40.060, 1.95465], +[116.150, 40.070, 2.42170], +[116.150, 40.080, 0.33768], +[116.150, 40.090, 0.00509], +[116.160, 40.040, 0.04488], +[116.160, 40.050, 1.19018], +[116.160, 40.060, 2.93585], +[116.160, 40.070, 0.80034], +[116.160, 40.080, 0.02037], +[116.170, 40.030, 0.00509], +[116.170, 40.040, 0.53111], +[116.170, 40.050, 2.97826], +[116.170, 40.060, 1.56068], +[116.170, 40.070, 0.08099], +[116.180, 40.030, 0.14142], +[116.180, 40.040, 2.25768], +[116.180, 40.050, 2.58657], +[116.180, 40.060, 0.23703], +[116.180, 40.070, 0.00146], +[116.190, 40.020, 0.02280], +[116.190, 40.030, 1.20123], +[116.190, 40.040, 3.37852], +[116.190, 40.050, 0.70428], +[116.190, 40.060, 0.01100], +[116.200, 40.020, 0.44276], +[116.200, 40.030, 3.26790], +[116.200, 40.040, 1.60904], +[116.200, 40.050, 0.05739], +[116.210, 40.010, 0.10065], +[116.210, 40.020, 2.21962], +[116.210, 40.030, 2.82490], +[116.210, 40.040, 0.22844], +[116.210, 40.050, 0.00074], +[116.220, 40.000, 0.00882], +[116.220, 40.010, 1.05411], +[116.220, 40.020, 3.59997], +[116.220, 40.030, 0.73112], +[116.220, 40.040, 0.00738], +[116.230, 39.990, 0.00074], +[116.230, 40.000, 0.35009], +[116.230, 40.010, 3.26637], +[116.230, 40.020, 1.73600], +[116.230, 40.030, 0.05007], +[116.240, 39.990, 0.08029], +[116.240, 40.000, 2.03343], +[116.240, 40.010, 2.97500], +[116.240, 40.020, 0.22260], +[116.240, 40.030, 0.00074], +[116.250, 39.980, 0.01025], +[116.250, 39.990, 0.92190], +[116.250, 40.000, 3.60442], +[116.250, 40.010, 0.74393], +[116.250, 40.020, 0.00805], +[116.260, 39.980, 0.29151], +[116.260, 39.990, 3.05806], +[116.260, 40.000, 1.79716], +[116.260, 40.010, 0.03711], +[116.270, 39.970, 0.05491], +[116.270, 39.980, 1.86697], +[116.270, 39.990, 3.02413], +[116.270, 40.000, 0.20364], +[116.280, 39.960, 0.00665], +[116.280, 39.970, 0.76321], +[116.280, 39.980, 3.62192], +[116.280, 39.990, 0.79149], +[116.280, 40.000, 0.00507], +[116.290, 39.960, 0.19619], +[116.290, 39.970, 2.95944], +[116.290, 39.980, 1.99385], +[116.290, 39.990, 0.03838], +[116.300, 39.950, 0.01564], +[116.300, 39.960, 1.65657], +[116.300, 39.970, 3.36259], +[116.300, 39.980, 0.24428], +[116.310, 39.950, 0.43308], +[116.310, 39.960, 3.83379], +[116.310, 39.970, 1.01301], +[116.310, 39.980, 0.00437], +[116.320, 39.940, 0.02253], +[116.320, 39.950, 2.63399], +[116.320, 39.960, 2.62866], +[116.320, 39.970, 0.04037], +[116.330, 39.940, 0.60832], +[116.330, 39.950, 4.31371], +[116.330, 39.960, 0.40745], +[116.330, 39.970, 0.00073], +[116.340, 39.930, 0.00983], +[116.340, 39.940, 3.26224], +[116.340, 39.950, 2.10717], +[116.340, 39.960, 0.00445], +[116.350, 39.930, 0.55866], +[116.350, 39.940, 4.69789], +[116.350, 39.950, 0.11715], +[116.360, 39.920, 0.00075], +[116.360, 39.930, 3.85223], +[116.360, 39.940, 1.58571], +[116.370, 39.920, 0.51706], +[116.370, 39.930, 5.00120], +[116.370, 39.940, 0.01719], +[116.380, 39.920, 4.56896], +[116.380, 39.930, 0.82693], +[116.390, 39.910, 1.34036], +[116.390, 39.920, 4.46615], +[116.400, 39.910, 2.00436], +[116.400, 39.910, 2.00436] + ], + "details": [ + [ +[115.790, 40.260, 0.00481], +[115.800, 40.250, 0.13001], +[115.800, 40.260, 0.14003], +[115.800, 40.270, 0.00965], +[115.810, 40.240, 0.30483], +[115.810, 40.250, 1.57528], +[115.810, 40.260, 0.74529], +[115.810, 40.270, 0.05340], +[115.820, 40.230, 0.16159], +[115.820, 40.240, 3.28401], +[115.820, 40.250, 6.17630], +[115.820, 40.260, 1.57426], +[115.820, 40.270, 0.05819], +[115.830, 40.220, 0.07546], +[115.830, 40.230, 2.38525], +[115.830, 40.240, 10.67540], +[115.830, 40.250, 9.38754], +[115.830, 40.260, 1.61406], +[115.830, 40.270, 0.05316], +[115.840, 40.210, 0.00479], +[115.840, 40.220, 1.12821], +[115.840, 40.230, 7.81282], +[115.840, 40.240, 15.59836], +[115.840, 40.250, 8.15361], +[115.840, 40.260, 0.92992], +[115.840, 40.270, 0.03380], +[115.850, 40.210, 0.37346], +[115.850, 40.220, 4.43706], +[115.850, 40.230, 13.71450], +[115.850, 40.240, 14.93754], +[115.850, 40.250, 4.28568], +[115.850, 40.260, 0.50321], +[115.850, 40.270, 0.00479], +[115.860, 40.200, 0.04674], +[115.860, 40.210, 2.37110], +[115.860, 40.220, 9.37412], +[115.860, 40.230, 16.69312], +[115.860, 40.240, 10.16001], +[115.860, 40.250, 1.67941], +[115.860, 40.260, 0.17307], +[115.870, 40.190, 0.00918], +[115.870, 40.200, 0.73238], +[115.870, 40.210, 5.99270], +[115.870, 40.220, 13.25810], +[115.870, 40.230, 14.82460], +[115.870, 40.240, 4.81580], +[115.870, 40.250, 0.58279], +[115.870, 40.260, 0.01897], +[115.880, 40.180, 0.00458], +[115.880, 40.190, 0.14769], +[115.880, 40.200, 3.20667], +[115.880, 40.210, 7.64445], +[115.880, 40.220, 11.56506], +[115.880, 40.230, 8.87047], +[115.880, 40.240, 1.57239], +[115.880, 40.250, 0.22095], +[115.890, 40.180, 0.01824], +[115.890, 40.190, 1.29280], +[115.890, 40.200, 4.82412], +[115.890, 40.210, 4.30174], +[115.890, 40.220, 6.79696], +[115.890, 40.230, 3.42531], +[115.890, 40.240, 0.51710], +[115.890, 40.250, 0.03781], +[115.900, 40.170, 0.00911], +[115.900, 40.180, 0.23727], +[115.900, 40.190, 2.84483], +[115.900, 40.200, 2.64630], +[115.900, 40.210, 1.31593], +[115.900, 40.220, 2.43389], +[115.900, 40.230, 0.86226], +[115.900, 40.240, 0.13819], +[115.910, 40.170, 0.04073], +[115.910, 40.180, 1.35003], +[115.910, 40.190, 2.34609], +[115.910, 40.200, 0.48963], +[115.910, 40.210, 0.34855], +[115.910, 40.220, 0.68862], +[115.910, 40.230, 0.18922], +[115.910, 40.240, 0.03285], +[115.920, 40.160, 0.00904], +[115.920, 40.170, 0.31843], +[115.920, 40.180, 1.98739], +[115.920, 40.190, 0.53470], +[115.920, 40.200, 0.02239], +[115.920, 40.210, 0.08267], +[115.920, 40.220, 0.14906], +[115.920, 40.230, 0.02813], +[115.930, 40.140, 0.00902], +[115.930, 40.150, 0.00894], +[115.930, 40.160, 0.08909], +[115.930, 40.170, 1.22365], +[115.930, 40.180, 0.91941], +[115.930, 40.190, 0.01792], +[115.930, 40.210, 0.01828], +[115.930, 40.220, 0.02803], +[115.940, 40.130, 0.00445], +[115.940, 40.140, 0.02689], +[115.940, 40.150, 0.04409], +[115.940, 40.160, 0.39172], +[115.940, 40.170, 1.43933], +[115.940, 40.180, 0.09776], +[115.940, 40.210, 0.00463], +[115.950, 40.120, 0.00894], +[115.950, 40.130, 0.00892], +[115.950, 40.140, 0.11498], +[115.950, 40.150, 0.23180], +[115.950, 40.160, 0.99461], +[115.950, 40.170, 0.46081], +[115.960, 40.120, 0.02689], +[115.960, 40.130, 0.12291], +[115.960, 40.140, 0.25724], +[115.960, 40.150, 0.71884], +[115.960, 40.160, 0.58817], +[115.960, 40.170, 0.04354], +[115.970, 40.110, 0.01290], +[115.970, 40.120, 0.06179], +[115.970, 40.130, 0.27524], +[115.970, 40.140, 0.68965], +[115.970, 40.150, 0.73579], +[115.970, 40.160, 0.10362], +[115.980, 40.110, 0.18983], +[115.980, 40.120, 0.19048], +[115.980, 40.130, 0.57726], +[115.980, 40.140, 0.71204], +[115.980, 40.150, 0.19215], +[115.980, 40.160, 0.00854], +[115.990, 40.110, 0.15934], +[115.990, 40.120, 0.50957], +[115.990, 40.130, 0.79807], +[115.990, 40.140, 0.61652], +[116.000, 40.110, 0.20781], +[116.000, 40.120, 0.47402], +[116.000, 40.130, 0.54483], +[116.000, 40.140, 0.12136], +[116.010, 40.110, 0.38023], +[116.010, 40.120, 0.54064], +[116.010, 40.130, 0.22563], +[116.020, 40.110, 0.02527], +[116.020, 40.120, 0.10075], +[116.020, 40.130, 0.00416], +[115.860, 40.220, 0.04748 ] + ], + [ +[115.860, 40.220, 0.04748], +[115.860, 40.230, 0.06172], +[115.870, 40.210, 0.14652], +[115.870, 40.220, 0.92363], +[115.870, 40.230, 0.52858], +[115.870, 40.240, 0.01919], +[115.880, 40.200, 0.07487], +[115.880, 40.210, 2.31126], +[115.880, 40.220, 4.84372], +[115.880, 40.230, 1.23369], +[115.880, 40.240, 0.04803], +[115.890, 40.190, 0.03256], +[115.890, 40.200, 1.74276], +[115.890, 40.210, 9.59317], +[115.890, 40.220, 8.19392], +[115.890, 40.230, 1.36671], +[115.890, 40.240, 0.04775], +[115.900, 40.190, 1.04406], +[115.900, 40.200, 6.76734], +[115.900, 40.210, 14.91350], +[115.900, 40.220, 7.17044], +[115.900, 40.230, 0.72265], +[115.900, 40.240, 0.01425], +[115.910, 40.180, 0.26252], +[115.910, 40.190, 4.51646], +[115.910, 40.200, 13.30821], +[115.910, 40.210, 13.76886], +[115.910, 40.220, 3.84904], +[115.910, 40.230, 0.29250], +[115.910, 40.240, 0.01409], +[115.920, 40.170, 0.04600], +[115.920, 40.180, 2.16110], +[115.920, 40.190, 9.43478], +[115.920, 40.200, 16.27312], +[115.920, 40.210, 9.34762], +[115.920, 40.220, 1.39423], +[115.920, 40.230, 0.08460], +[115.930, 40.170, 0.65265], +[115.930, 40.180, 6.17070], +[115.930, 40.190, 14.05311], +[115.930, 40.200, 14.23306], +[115.930, 40.210, 4.04624], +[115.930, 40.220, 0.40159], +[115.930, 40.230, 0.03734], +[115.940, 40.150, 0.00899], +[115.940, 40.160, 0.17053], +[115.940, 40.170, 3.36893], +[115.940, 40.180, 8.95669], +[115.940, 40.190, 14.39907], +[115.940, 40.200, 8.63813], +[115.940, 40.210, 1.33822], +[115.940, 40.220, 0.09291], +[115.950, 40.150, 0.03133], +[115.950, 40.160, 1.36622], +[115.950, 40.170, 5.59150], +[115.950, 40.180, 6.27459], +[115.950, 40.190, 9.11956], +[115.950, 40.200, 3.23131], +[115.950, 40.210, 0.30489], +[115.960, 40.140, 0.00897], +[115.960, 40.150, 0.31011], +[115.960, 40.160, 3.68210], +[115.960, 40.170, 3.38672], +[115.960, 40.180, 2.05427], +[115.960, 40.190, 3.59727], +[115.960, 40.200, 0.83248], +[115.960, 40.210, 0.05553], +[115.970, 40.130, 0.02210], +[115.970, 40.140, 0.15346], +[115.970, 40.150, 1.85905], +[115.970, 40.160, 2.80477], +[115.970, 40.170, 0.48431], +[115.970, 40.180, 0.71689], +[115.970, 40.190, 0.86799], +[115.970, 40.200, 0.09603], +[115.980, 40.110, 0.00441], +[115.980, 40.120, 0.04852], +[115.980, 40.130, 0.16194], +[115.980, 40.140, 0.86056], +[115.980, 40.150, 2.51135], +[115.980, 40.160, 0.61052], +[115.980, 40.170, 0.01802], +[115.980, 40.180, 0.14540], +[115.980, 40.190, 0.12331], +[115.980, 40.200, 0.00459], +[115.990, 40.110, 0.06097], +[115.990, 40.120, 0.31794], +[115.990, 40.130, 0.68117], +[115.990, 40.140, 1.77360], +[115.990, 40.150, 1.06529], +[115.990, 40.160, 0.02996], +[115.990, 40.180, 0.02725], +[115.990, 40.190, 0.00452], +[116.000, 40.110, 0.30769], +[116.000, 40.120, 0.72731], +[116.000, 40.130, 0.97203], +[116.000, 40.140, 1.14677], +[116.000, 40.150, 0.05098], +[116.000, 40.170, 0.00451], +[116.010, 40.100, 0.01286], +[116.010, 40.110, 0.44320], +[116.010, 40.120, 0.78330], +[116.010, 40.130, 0.87398], +[116.010, 40.140, 0.06772], +[116.020, 40.100, 0.00427], +[116.020, 40.110, 0.17881], +[116.020, 40.120, 1.04891], +[116.020, 40.130, 0.13835], +[116.030, 40.120, 0.10900], +[115.920, 40.190, 0.00465 ] + ], + [ +[115.920, 40.190, 0.00465], +[115.920, 40.200, 0.00922], +[115.930, 40.180, 0.06032], +[115.930, 40.190, 0.28089], +[115.930, 40.200, 0.07378], +[115.940, 40.170, 0.07355], +[115.940, 40.180, 1.52311], +[115.940, 40.190, 2.58903], +[115.940, 40.200, 0.35929], +[115.940, 40.210, 0.00925], +[115.950, 40.160, 0.04562], +[115.950, 40.170, 1.58483], +[115.950, 40.180, 9.27558], +[115.950, 40.190, 5.71349], +[115.950, 40.200, 0.37218], +[115.960, 40.150, 0.01379], +[115.960, 40.160, 1.12675], +[115.960, 40.170, 8.26245], +[115.960, 40.180, 15.75143], +[115.960, 40.190, 5.16390], +[115.960, 40.200, 0.29239], +[115.970, 40.140, 0.00914], +[115.970, 40.150, 0.49841], +[115.970, 40.160, 5.92879], +[115.970, 40.170, 16.86594], +[115.970, 40.180, 14.79201], +[115.970, 40.190, 2.19081], +[115.970, 40.200, 0.08686], +[115.980, 40.130, 0.00446], +[115.980, 40.140, 0.11637], +[115.980, 40.150, 3.52187], +[115.980, 40.160, 13.36040], +[115.980, 40.170, 19.88458], +[115.980, 40.180, 7.90148], +[115.980, 40.190, 0.70173], +[115.980, 40.200, 0.00459], +[115.990, 40.130, 0.07486], +[115.990, 40.140, 1.59538], +[115.990, 40.150, 9.02319], +[115.990, 40.160, 19.66747], +[115.990, 40.170, 15.32136], +[115.990, 40.180, 2.60073], +[115.990, 40.190, 0.10413], +[116.000, 40.120, 0.07451], +[116.000, 40.130, 0.62745], +[116.000, 40.140, 5.52520], +[116.000, 40.150, 11.95328], +[116.000, 40.160, 17.22021], +[116.000, 40.170, 7.54429], +[116.000, 40.180, 0.57901], +[116.010, 40.100, 0.02168], +[116.010, 40.110, 0.20027], +[116.010, 40.120, 0.59938], +[116.010, 40.130, 2.81907], +[116.010, 40.140, 5.43732], +[116.010, 40.150, 5.33463], +[116.010, 40.160, 8.32648], +[116.010, 40.170, 1.85389], +[116.010, 40.180, 0.03583], +[116.020, 40.100, 0.16814], +[116.020, 40.110, 0.66657], +[116.020, 40.120, 1.40558], +[116.020, 40.130, 3.12786], +[116.020, 40.140, 1.03498], +[116.020, 40.150, 1.37030], +[116.020, 40.160, 2.21847], +[116.020, 40.170, 0.27279], +[116.030, 40.100, 0.26327], +[116.030, 40.110, 0.55155], +[116.030, 40.120, 1.63377], +[116.030, 40.130, 0.58976], +[116.030, 40.140, 0.04316], +[116.030, 40.150, 0.29063], +[116.030, 40.160, 0.23865], +[116.030, 40.170, 0.00448], +[116.040, 40.100, 0.07775], +[116.040, 40.110, 0.09908], +[116.040, 40.120, 0.35276], +[116.040, 40.130, 0.01260], +[116.040, 40.140, 0.00459], +[116.040, 40.150, 0.03634], +[116.050, 40.100, 0.00434], +[116.050, 40.120, 0.01265], +[116.050, 40.150, 0.00458], +[115.980, 40.150, 0.00456 ] + ], + [ +[115.980, 40.150, 0.00456], +[115.980, 40.160, 0.00453], +[115.980, 40.170, 0.00447], +[115.990, 40.140, 0.00896], +[115.990, 40.150, 0.14978], +[115.990, 40.160, 0.40965], +[115.990, 40.170, 0.06287], +[116.000, 40.140, 0.40453], +[116.000, 40.150, 4.14052], +[116.000, 40.160, 4.07777], +[116.000, 40.170, 0.22380], +[116.000, 40.180, 0.00443], +[116.010, 40.130, 0.49721], +[116.010, 40.140, 5.67486], +[116.010, 40.150, 16.73665], +[116.010, 40.160, 7.40944], +[116.010, 40.170, 0.23623], +[116.020, 40.110, 0.01768], +[116.020, 40.120, 0.34036], +[116.020, 40.130, 4.58327], +[116.020, 40.140, 16.39021], +[116.020, 40.150, 21.41449], +[116.020, 40.160, 4.78606], +[116.020, 40.170, 0.10258], +[116.030, 40.100, 0.06476], +[116.030, 40.110, 0.38182], +[116.030, 40.120, 3.33815], +[116.030, 40.130, 12.33716], +[116.030, 40.140, 23.62319], +[116.030, 40.150, 15.32771], +[116.030, 40.160, 1.34822], +[116.030, 40.170, 0.00448], +[116.040, 40.090, 0.01732], +[116.040, 40.100, 0.38953], +[116.040, 40.110, 1.37011], +[116.040, 40.120, 8.42416], +[116.040, 40.130, 18.88791], +[116.040, 40.140, 23.34520], +[116.040, 40.150, 5.96717], +[116.040, 40.160, 0.19678], +[116.050, 40.090, 0.06084], +[116.050, 40.100, 0.59932], +[116.050, 40.110, 2.71270], +[116.050, 40.120, 8.30559], +[116.050, 40.130, 18.14580], +[116.050, 40.140, 13.49778], +[116.050, 40.150, 1.07937], +[116.060, 40.090, 0.18091], +[116.060, 40.100, 0.52128], +[116.060, 40.110, 1.00088], +[116.060, 40.120, 2.29484], +[116.060, 40.130, 9.33571], +[116.060, 40.140, 3.74974], +[116.060, 40.150, 0.09887], +[116.070, 40.080, 0.00424], +[116.070, 40.090, 0.18829], +[116.070, 40.100, 0.09923], +[116.070, 40.110, 0.07912], +[116.070, 40.120, 0.72542], +[116.070, 40.130, 2.69929], +[116.070, 40.140, 0.41562], +[116.080, 40.080, 0.00427], +[116.080, 40.090, 0.02979], +[116.080, 40.110, 0.00455], +[116.080, 40.120, 0.20852], +[116.080, 40.130, 0.29839], +[116.080, 40.140, 0.00450], +[116.090, 40.120, 0.03168], +[116.040, 40.110, 0.00441 ] + ], + [ +[116.040, 40.110, 0.00441], +[116.040, 40.120, 0.26471], +[116.040, 40.130, 0.58842], +[116.040, 40.140, 0.12561], +[116.050, 40.100, 0.01321], +[116.050, 40.110, 1.23371], +[116.050, 40.120, 6.51887], +[116.050, 40.130, 6.90356], +[116.050, 40.140, 0.53566], +[116.050, 40.150, 0.00445], +[116.060, 40.090, 0.02591], +[116.060, 40.100, 0.92205], +[116.060, 40.110, 7.70639], +[116.060, 40.120, 19.88381], +[116.060, 40.130, 12.21874], +[116.060, 40.140, 0.52704], +[116.070, 40.080, 0.01282], +[116.070, 40.090, 0.31787], +[116.070, 40.100, 3.88103], +[116.070, 40.110, 16.65434], +[116.070, 40.120, 24.78827], +[116.070, 40.130, 7.70298], +[116.070, 40.140, 0.18916], +[116.080, 40.080, 0.11486], +[116.080, 40.090, 1.44713], +[116.080, 40.100, 9.93613], +[116.080, 40.110, 24.77104], +[116.080, 40.120, 17.49209], +[116.080, 40.130, 1.81498], +[116.080, 40.140, 0.01345], +[116.090, 40.070, 0.00846], +[116.090, 40.080, 0.37665], +[116.090, 40.090, 4.14962], +[116.090, 40.100, 17.81620], +[116.090, 40.110, 23.85298], +[116.090, 40.120, 5.82852], +[116.090, 40.130, 0.15173], +[116.100, 40.070, 0.05462], +[116.100, 40.080, 0.85913], +[116.100, 40.090, 4.13299], +[116.100, 40.100, 16.92361], +[116.100, 40.110, 11.00612], +[116.100, 40.120, 0.69616], +[116.110, 40.070, 0.10018], +[116.110, 40.080, 0.37058], +[116.110, 40.090, 1.82147], +[116.110, 40.100, 7.39458], +[116.110, 40.110, 1.81596], +[116.110, 40.120, 0.01761], +[116.120, 40.060, 0.00415], +[116.120, 40.070, 0.05005], +[116.120, 40.080, 0.04851], +[116.120, 40.090, 0.72122], +[116.120, 40.100, 1.03212], +[116.120, 40.110, 0.09650], +[116.130, 40.070, 0.00412], +[116.130, 40.090, 0.09233], +[116.130, 40.100, 0.04380], +[116.140, 40.090, 0.00442], +[116.080, 40.090, 0.00437 ] + ], + [ +[116.080, 40.090, 0.00437], +[116.080, 40.100, 0.02196], +[116.080, 40.110, 0.00441], +[116.090, 40.080, 0.00429], +[116.090, 40.090, 0.71538], +[116.090, 40.100, 1.63173], +[116.090, 40.110, 0.25023], +[116.100, 40.070, 0.01274], +[116.100, 40.080, 1.08222], +[116.100, 40.090, 9.05691], +[116.100, 40.100, 9.92068], +[116.100, 40.110, 0.74099], +[116.100, 40.120, 0.00439], +[116.110, 40.060, 0.00838], +[116.110, 40.070, 0.30505], +[116.110, 40.080, 6.89951], +[116.110, 40.090, 23.62681], +[116.110, 40.100, 12.00334], +[116.110, 40.110, 0.35075], +[116.120, 40.060, 0.08830], +[116.120, 40.070, 3.31136], +[116.120, 40.080, 19.54117], +[116.120, 40.090, 25.92133], +[116.120, 40.100, 4.34973], +[116.120, 40.110, 0.06131], +[116.130, 40.050, 0.01691], +[116.130, 40.060, 0.84599], +[116.130, 40.070, 13.08641], +[116.130, 40.080, 30.87738], +[116.130, 40.090, 10.95588], +[116.130, 40.100, 0.47870], +[116.140, 40.050, 0.11845], +[116.140, 40.060, 4.81084], +[116.140, 40.070, 25.70743], +[116.140, 40.080, 19.59877], +[116.140, 40.090, 1.56192], +[116.150, 40.050, 0.35381], +[116.150, 40.060, 5.37154], +[116.150, 40.070, 17.27154], +[116.150, 40.080, 3.83086], +[116.150, 40.090, 0.06103], +[116.160, 40.040, 0.00448], +[116.160, 40.050, 0.16209], +[116.160, 40.060, 1.79729], +[116.160, 40.070, 2.60723], +[116.160, 40.080, 0.17475], +[116.170, 40.050, 0.00444], +[116.170, 40.060, 0.19933], +[116.170, 40.070, 0.07025], +[116.130, 40.060, 0.00428 ] + ], + [ +[116.130, 40.060, 0.00428], +[116.130, 40.070, 0.03015], +[116.140, 40.050, 0.02567], +[116.140, 40.060, 2.07261], +[116.140, 40.070, 3.15900], +[116.140, 40.080, 0.17281], +[116.150, 40.040, 0.02553], +[116.150, 40.050, 2.03652], +[116.150, 40.060, 18.08431], +[116.150, 40.070, 11.78892], +[116.150, 40.080, 0.22134], +[116.160, 40.040, 0.53412], +[116.160, 40.050, 14.12001], +[116.160, 40.060, 33.43297], +[116.160, 40.070, 6.99680], +[116.160, 40.080, 0.06973], +[116.170, 40.030, 0.06105], +[116.170, 40.040, 6.36897], +[116.170, 40.050, 35.73468], +[116.170, 40.060, 18.52887], +[116.170, 40.070, 0.90168], +[116.180, 40.030, 1.40376], +[116.180, 40.040, 25.97401], +[116.180, 40.050, 30.97777], +[116.180, 40.060, 2.84436], +[116.180, 40.070, 0.01758], +[116.190, 40.020, 0.02236], +[116.190, 40.030, 4.29109], +[116.190, 40.040, 26.90148], +[116.190, 40.050, 8.08759], +[116.190, 40.060, 0.13205], +[116.200, 40.020, 0.03156], +[116.200, 40.030, 1.61038], +[116.200, 40.040, 4.92615], +[116.200, 40.050, 0.50822], +[116.210, 40.030, 0.12110], +[116.210, 40.040, 0.14251], +[116.210, 40.050, 0.00444], +[116.170, 40.040, 0.00435 ] + ], + [ +[116.170, 40.040, 0.00435], +[116.180, 40.030, 0.29329], +[116.180, 40.040, 1.11821], +[116.180, 40.050, 0.06106], +[116.190, 40.020, 0.25130], +[116.190, 40.030, 10.12363], +[116.190, 40.040, 13.64079], +[116.190, 40.050, 0.36373], +[116.200, 40.020, 5.28160], +[116.200, 40.030, 37.60445], +[116.200, 40.040, 14.38238], +[116.200, 40.050, 0.18044], +[116.210, 40.010, 1.20781], +[116.210, 40.020, 26.63547], +[116.210, 40.030, 33.77769], +[116.210, 40.040, 2.59879], +[116.210, 40.050, 0.00444], +[116.220, 40.000, 0.07930], +[116.220, 40.010, 12.23433], +[116.220, 40.020, 43.09479], +[116.220, 40.030, 8.77347], +[116.220, 40.040, 0.08855], +[116.230, 40.000, 1.00953], +[116.230, 40.010, 23.93056], +[116.230, 40.020, 19.26036], +[116.230, 40.030, 0.60082], +[116.240, 40.000, 0.33130], +[116.240, 40.010, 5.38038], +[116.240, 40.020, 1.54617], +[116.240, 40.030, 0.00886], +[116.250, 40.000, 0.01325], +[116.250, 40.010, 0.09717], +[116.250, 40.020, 0.00878], +[116.220, 40.000, 0.02658 ] + ], + [ +[116.220, 40.000, 0.02658], +[116.220, 40.010, 0.41501], +[116.220, 40.020, 0.10480], +[116.230, 39.990, 0.00891], +[116.230, 40.000, 3.19158], +[116.230, 40.010, 15.26584], +[116.230, 40.020, 1.57167], +[116.240, 39.990, 0.96344], +[116.240, 40.000, 24.06990], +[116.240, 40.010, 30.31960], +[116.240, 40.020, 1.12507], +[116.250, 39.980, 0.12305], +[116.250, 39.990, 11.06281], +[116.250, 40.000, 43.23974], +[116.250, 40.010, 8.82995], +[116.250, 40.020, 0.08781], +[116.260, 39.980, 3.43714], +[116.260, 39.990, 36.65312], +[116.260, 40.000, 21.56588], +[116.260, 40.010, 0.44533], +[116.270, 39.970, 0.10974], +[116.270, 39.980, 14.13754], +[116.270, 39.990, 33.01924], +[116.270, 40.000, 2.44369], +[116.280, 39.970, 0.09675], +[116.280, 39.980, 4.80010], +[116.280, 39.990, 4.35123], +[116.280, 40.000, 0.06084], +[116.290, 39.980, 0.03939], +[116.290, 39.990, 0.03482], +[116.260, 39.980, 0.06103 ] + ], + [ +[116.260, 39.980, 0.06103], +[116.260, 39.990, 0.04362], +[116.270, 39.970, 0.54918], +[116.270, 39.980, 8.26605], +[116.270, 39.990, 3.27037], +[116.280, 39.960, 0.07975], +[116.280, 39.970, 9.06173], +[116.280, 39.980, 38.66290], +[116.280, 39.990, 5.14669], +[116.290, 39.960, 2.35433], +[116.290, 39.970, 35.51325], +[116.290, 39.980, 23.88679], +[116.290, 39.990, 0.42572], +[116.300, 39.950, 0.18770], +[116.300, 39.960, 19.87889], +[116.300, 39.970, 40.35109], +[116.300, 39.980, 2.93135], +[116.310, 39.950, 3.28775], +[116.310, 39.960, 42.36019], +[116.310, 39.970, 12.14298], +[116.310, 39.980, 0.05245], +[116.320, 39.950, 2.33340], +[116.320, 39.960, 12.21437], +[116.320, 39.970, 0.44922], +[116.330, 39.950, 0.01342], +[116.330, 39.960, 0.06215], +[116.330, 39.970, 0.00440], +[116.310, 39.950, 1.90915 ] + ], + [ +[116.310, 39.950, 1.90915], +[116.310, 39.960, 3.64530], +[116.310, 39.970, 0.01319], +[116.320, 39.940, 0.27038], +[116.320, 39.950, 29.27447], +[116.320, 39.960, 19.32954], +[116.320, 39.970, 0.03523], +[116.330, 39.940, 7.29981], +[116.330, 39.950, 51.75109], +[116.330, 39.960, 4.82721], +[116.330, 39.970, 0.00440], +[116.340, 39.930, 0.11795], +[116.340, 39.940, 39.14691], +[116.340, 39.950, 25.28605], +[116.340, 39.960, 0.05343], +[116.350, 39.930, 5.99707], +[116.350, 39.940, 56.08255], +[116.350, 39.950, 1.40586], +[116.360, 39.930, 9.32498], +[116.360, 39.940, 13.15813], +[116.370, 39.930, 0.01789], +[116.370, 39.940, 0.00450], +[116.350, 39.930, 0.70680 ] + ], + [ +[116.350, 39.930, 0.70680], +[116.350, 39.940, 0.29216], +[116.360, 39.920, 0.00903], +[116.360, 39.930, 36.90173], +[116.360, 39.940, 5.87042], +[116.370, 39.920, 6.20476], +[116.370, 39.930, 59.99649], +[116.370, 39.940, 0.20176], +[116.380, 39.920, 54.82758], +[116.380, 39.930, 9.92312], +[116.390, 39.910, 16.08430], +[116.390, 39.920, 53.59381], +[116.400, 39.910, 24.05235], +[116.400, 39.910, 24.05235] + ] + ] + }, + "forward":{ + "points": [ +[116.446, 39.894,1103,"20211124_165100"], +[116.489, 39.871,1158,"20211124_165600"], +[116.531, 39.849,1142,"20211124_170100"], +[116.572, 39.828,1137,"20211124_170600"], +[116.613, 39.807,1156,"20211124_171100"], +[116.654, 39.786,1153,"20211124_171600"], +[116.694, 39.765,1140,"20211124_172100"], +[116.732, 39.745,1137,"20211124_172600"], +[116.770, 39.724,1151,"20211124_173100"], +[116.808, 39.704,1180,"20211124_173600"], +[116.845, 39.685,1210,"20211124_174100"], +[116.882, 39.665,1229,"20211124_174600"] + ], + "average": [ +[116.400, 39.900, 0.00098], +[116.400, 39.910, 1.49292], +[116.410, 39.900, 0.86650], +[116.410, 39.910, 1.43788], +[116.420, 39.890, 0.09937], +[116.420, 39.900, 2.18576], +[116.420, 39.910, 0.05525], +[116.430, 39.880, 0.00753], +[116.430, 39.890, 1.29954], +[116.430, 39.900, 1.01651], +[116.440, 39.880, 0.32790], +[116.440, 39.890, 1.89930], +[116.440, 39.900, 0.08950], +[116.450, 39.870, 0.03904], +[116.450, 39.880, 1.42610], +[116.450, 39.890, 0.81020], +[116.450, 39.900, 0.00197], +[116.460, 39.860, 0.00295], +[116.460, 39.870, 0.49557], +[116.460, 39.880, 1.69099], +[116.460, 39.890, 0.10209], +[116.470, 39.860, 0.08992], +[116.470, 39.870, 1.45461], +[116.470, 39.880, 0.75555], +[116.470, 39.890, 0.00730], +[116.480, 39.850, 0.00819], +[116.480, 39.860, 0.60510], +[116.480, 39.870, 1.55005], +[116.480, 39.880, 0.13360], +[116.480, 39.890, 0.00033], +[116.490, 39.840, 0.00032], +[116.490, 39.850, 0.14349], +[116.490, 39.860, 1.42217], +[116.490, 39.870, 0.73629], +[116.490, 39.880, 0.01196], +[116.500, 39.840, 0.02416], +[116.500, 39.850, 0.68757], +[116.500, 39.860, 1.47134], +[116.500, 39.870, 0.16908], +[116.500, 39.880, 0.00166], +[116.510, 39.830, 0.00195], +[116.510, 39.840, 0.20584], +[116.510, 39.850, 1.39209], +[116.510, 39.860, 0.74393], +[116.510, 39.870, 0.02159], +[116.520, 39.820, 0.00032], +[116.520, 39.830, 0.04627], +[116.520, 39.840, 0.75804], +[116.520, 39.850, 1.36763], +[116.520, 39.860, 0.18865], +[116.520, 39.870, 0.00300], +[116.530, 39.820, 0.00778], +[116.530, 39.830, 0.28213], +[116.530, 39.840, 1.32877], +[116.530, 39.850, 0.74190], +[116.530, 39.860, 0.03351], +[116.540, 39.810, 0.00129], +[116.540, 39.820, 0.07874], +[116.540, 39.830, 0.79137], +[116.540, 39.840, 1.30227], +[116.540, 39.850, 0.21790], +[116.540, 39.860, 0.00532], +[116.550, 39.810, 0.01784], +[116.550, 39.820, 0.34279], +[116.550, 39.830, 1.27598], +[116.550, 39.840, 0.71982], +[116.550, 39.850, 0.04274], +[116.560, 39.800, 0.00388], +[116.560, 39.810, 0.11850], +[116.560, 39.820, 0.81302], +[116.560, 39.830, 1.21408], +[116.560, 39.840, 0.23778], +[116.560, 39.850, 0.00697], +[116.570, 39.790, 0.00065], +[116.570, 39.800, 0.03411], +[116.570, 39.810, 0.38370], +[116.570, 39.820, 1.20753], +[116.570, 39.830, 0.72217], +[116.570, 39.840, 0.05330], +[116.570, 39.850, 0.00033], +[116.580, 39.790, 0.00941], +[116.580, 39.800, 0.14700], +[116.580, 39.810, 0.82423], +[116.580, 39.820, 1.15395], +[116.580, 39.830, 0.25761], +[116.580, 39.840, 0.00962], +[116.590, 39.780, 0.00097], +[116.590, 39.790, 0.05893], +[116.590, 39.800, 0.42080], +[116.590, 39.810, 1.12670], +[116.590, 39.820, 0.71444], +[116.590, 39.830, 0.06364], +[116.590, 39.840, 0.00067], +[116.600, 39.780, 0.01787], +[116.600, 39.790, 0.18973], +[116.600, 39.800, 0.80711], +[116.600, 39.810, 1.08996], +[116.600, 39.820, 0.28254], +[116.600, 39.830, 0.01327], +[116.610, 39.770, 0.00324], +[116.610, 39.780, 0.07423], +[116.610, 39.790, 0.45461], +[116.610, 39.800, 1.06123], +[116.610, 39.810, 0.71763], +[116.610, 39.820, 0.07297], +[116.610, 39.830, 0.00133], +[116.620, 39.770, 0.02920], +[116.620, 39.780, 0.22363], +[116.620, 39.790, 0.79639], +[116.620, 39.800, 1.05547], +[116.620, 39.810, 0.30278], +[116.620, 39.820, 0.01693], +[116.630, 39.760, 0.00875], +[116.630, 39.770, 0.09526], +[116.630, 39.780, 0.48035], +[116.630, 39.790, 1.01149], +[116.630, 39.800, 0.70881], +[116.630, 39.810, 0.08320], +[116.630, 39.820, 0.00398], +[116.640, 39.750, 0.00162], +[116.640, 39.760, 0.03730], +[116.640, 39.770, 0.25625], +[116.640, 39.780, 0.78205], +[116.640, 39.790, 1.01340], +[116.640, 39.800, 0.32065], +[116.640, 39.810, 0.01827], +[116.640, 39.820, 0.00033], +[116.650, 39.750, 0.01392], +[116.650, 39.760, 0.12290], +[116.650, 39.770, 0.50135], +[116.650, 39.780, 0.98510], +[116.650, 39.790, 0.70474], +[116.650, 39.800, 0.09979], +[116.650, 39.810, 0.00431], +[116.660, 39.740, 0.00420], +[116.660, 39.750, 0.05154], +[116.660, 39.760, 0.29937], +[116.660, 39.770, 0.76360], +[116.660, 39.780, 0.98921], +[116.660, 39.790, 0.33511], +[116.660, 39.800, 0.02093], +[116.660, 39.810, 0.00066], +[116.670, 39.730, 0.00032], +[116.670, 39.740, 0.02391], +[116.670, 39.750, 0.15478], +[116.670, 39.760, 0.52661], +[116.670, 39.770, 0.96401], +[116.670, 39.780, 0.69544], +[116.670, 39.790, 0.11475], +[116.670, 39.800, 0.00465], +[116.680, 39.730, 0.00807], +[116.680, 39.740, 0.08097], +[116.680, 39.750, 0.33289], +[116.680, 39.760, 0.76344], +[116.680, 39.770, 0.93991], +[116.680, 39.780, 0.34576], +[116.680, 39.790, 0.02923], +[116.680, 39.800, 0.00033], +[116.690, 39.720, 0.00323], +[116.690, 39.730, 0.03846], +[116.690, 39.740, 0.18845], +[116.690, 39.750, 0.54534], +[116.690, 39.760, 0.95130], +[116.690, 39.770, 0.68586], +[116.690, 39.780, 0.11564], +[116.690, 39.790, 0.00365], +[116.700, 39.710, 0.00097], +[116.700, 39.720, 0.01777], +[116.700, 39.730, 0.10891], +[116.700, 39.740, 0.36127], +[116.700, 39.750, 0.75903], +[116.700, 39.760, 0.91256], +[116.700, 39.770, 0.34607], +[116.700, 39.780, 0.03318], +[116.710, 39.710, 0.00613], +[116.710, 39.720, 0.05857], +[116.710, 39.730, 0.21258], +[116.710, 39.740, 0.56619], +[116.710, 39.750, 0.92344], +[116.710, 39.760, 0.66312], +[116.710, 39.770, 0.12100], +[116.710, 39.780, 0.00464], +[116.720, 39.700, 0.00322], +[116.720, 39.710, 0.03138], +[116.720, 39.720, 0.13150], +[116.720, 39.730, 0.38560], +[116.720, 39.740, 0.76710], +[116.720, 39.750, 0.88003], +[116.720, 39.760, 0.35586], +[116.720, 39.770, 0.03081], +[116.730, 39.690, 0.00097], +[116.730, 39.700, 0.01453], +[116.730, 39.710, 0.07326], +[116.730, 39.720, 0.25205], +[116.730, 39.730, 0.57677], +[116.730, 39.740, 0.88865], +[116.730, 39.750, 0.64819], +[116.730, 39.760, 0.11444], +[116.730, 39.770, 0.00564], +[116.740, 39.690, 0.00548], +[116.740, 39.700, 0.04432], +[116.740, 39.710, 0.15809], +[116.740, 39.720, 0.40748], +[116.740, 39.730, 0.75331], +[116.740, 39.740, 0.85438], +[116.740, 39.750, 0.33990], +[116.740, 39.760, 0.03050], +[116.750, 39.680, 0.00226], +[116.750, 39.690, 0.02263], +[116.750, 39.700, 0.09085], +[116.750, 39.710, 0.27623], +[116.750, 39.720, 0.58421], +[116.750, 39.730, 0.87591], +[116.750, 39.740, 0.63278], +[116.750, 39.750, 0.12213], +[116.750, 39.760, 0.00696], +[116.760, 39.670, 0.00032], +[116.760, 39.680, 0.00905], +[116.760, 39.690, 0.05508], +[116.760, 39.700, 0.17799], +[116.760, 39.710, 0.42325], +[116.760, 39.720, 0.75026], +[116.760, 39.730, 0.83878], +[116.760, 39.740, 0.31925], +[116.760, 39.750, 0.03183], +[116.770, 39.670, 0.00420], +[116.770, 39.680, 0.03274], +[116.770, 39.690, 0.10564], +[116.770, 39.700, 0.30055], +[116.770, 39.710, 0.59081], +[116.770, 39.720, 0.85113], +[116.770, 39.730, 0.61370], +[116.770, 39.740, 0.11580], +[116.770, 39.750, 0.00664], +[116.780, 39.660, 0.00097], +[116.780, 39.670, 0.01522], +[116.780, 39.680, 0.06336], +[116.780, 39.690, 0.19332], +[116.780, 39.700, 0.42811], +[116.780, 39.710, 0.74608], +[116.780, 39.720, 0.82050], +[116.780, 39.730, 0.31294], +[116.780, 39.740, 0.02884], +[116.780, 39.750, 0.00033], +[116.790, 39.660, 0.00551], +[116.790, 39.670, 0.04121], +[116.790, 39.680, 0.11473], +[116.790, 39.690, 0.30915], +[116.790, 39.700, 0.59773], +[116.790, 39.710, 0.84079], +[116.790, 39.720, 0.59563], +[116.790, 39.730, 0.10534], +[116.790, 39.740, 0.00828], +[116.800, 39.650, 0.00097], +[116.800, 39.660, 0.02206], +[116.800, 39.670, 0.07225], +[116.800, 39.680, 0.20095], +[116.800, 39.690, 0.45402], +[116.800, 39.700, 0.73803], +[116.800, 39.710, 0.80969], +[116.800, 39.720, 0.29954], +[116.800, 39.730, 0.02555], +[116.800, 39.740, 0.00066], +[116.810, 39.650, 0.01071], +[116.810, 39.660, 0.04714], +[116.810, 39.670, 0.12857], +[116.810, 39.680, 0.32280], +[116.810, 39.690, 0.59501], +[116.810, 39.700, 0.83543], +[116.810, 39.710, 0.58335], +[116.810, 39.720, 0.10024], +[116.810, 39.730, 0.00862], +[116.820, 39.640, 0.00389], +[116.820, 39.650, 0.02827], +[116.820, 39.660, 0.07632], +[116.820, 39.670, 0.21322], +[116.820, 39.680, 0.45404], +[116.820, 39.690, 0.74681], +[116.820, 39.700, 0.79045], +[116.820, 39.710, 0.27619], +[116.820, 39.720, 0.02824], +[116.820, 39.730, 0.00033], +[116.830, 39.630, 0.00065], +[116.830, 39.640, 0.01688], +[116.830, 39.650, 0.04788], +[116.830, 39.660, 0.14185], +[116.830, 39.670, 0.32494], +[116.830, 39.680, 0.62274], +[116.830, 39.690, 0.83608], +[116.830, 39.700, 0.55666], +[116.830, 39.710, 0.09308], +[116.830, 39.720, 0.00698], +[116.840, 39.630, 0.00763], +[116.840, 39.640, 0.03122], +[116.840, 39.650, 0.08197], +[116.840, 39.660, 0.22603], +[116.840, 39.670, 0.47435], +[116.840, 39.680, 0.76749], +[116.840, 39.690, 0.78558], +[116.840, 39.700, 0.26617], +[116.840, 39.710, 0.02862], +[116.840, 39.720, 0.00100], +[116.850, 39.620, 0.00130], +[116.850, 39.630, 0.01592], +[116.850, 39.640, 0.05490], +[116.850, 39.650, 0.15935], +[116.850, 39.660, 0.34417], +[116.850, 39.670, 0.64586], +[116.850, 39.680, 0.84610], +[116.850, 39.690, 0.53390], +[116.850, 39.700, 0.07943], +[116.850, 39.710, 0.00698], +[116.860, 39.620, 0.00276], +[116.860, 39.630, 0.02818], +[116.860, 39.640, 0.09181], +[116.860, 39.650, 0.23330], +[116.860, 39.660, 0.49500], +[116.860, 39.670, 0.79735], +[116.860, 39.680, 0.77409], +[116.860, 39.690, 0.23897], +[116.860, 39.700, 0.02330], +[116.860, 39.710, 0.00033], +[116.870, 39.620, 0.00211], +[116.870, 39.630, 0.02383], +[116.870, 39.640, 0.10052], +[116.870, 39.650, 0.29274], +[116.870, 39.660, 0.59920], +[116.870, 39.670, 0.76221], +[116.870, 39.680, 0.44610], +[116.870, 39.690, 0.06418], +[116.870, 39.700, 0.00432], +[116.880, 39.620, 0.00033], +[116.880, 39.630, 0.01049], +[116.880, 39.640, 0.04838], +[116.880, 39.650, 0.16102], +[116.880, 39.660, 0.31754], +[116.880, 39.670, 0.31201], +[116.880, 39.680, 0.07779], +[116.880, 39.690, 0.01014], +[116.890, 39.630, 0.00214], +[116.890, 39.640, 0.00675], +[116.890, 39.650, 0.02228], +[116.890, 39.660, 0.03910], +[116.890, 39.670, 0.02356], +[116.890, 39.680, 0.00432], +[116.890, 39.690, 0.00066], +[116.900, 39.620, 0.00016], +[116.900, 39.630, 0.00033], +[116.900, 39.640, 0.00016], +[116.900, 39.650, 0.00082], +[116.900, 39.670, 0.00017], +[116.900, 39.670, 0.00017] + ], + "details": [ + [ +[116.400, 39.900, 0.01176], +[116.400, 39.910, 17.91506], +[116.410, 39.900, 10.39803], +[116.410, 39.910, 17.25451], +[116.420, 39.890, 1.19243], +[116.420, 39.900, 26.22914], +[116.420, 39.910, 0.66303], +[116.430, 39.880, 0.07071], +[116.430, 39.890, 15.45292], +[116.430, 39.900, 12.19816], +[116.440, 39.880, 0.58807], +[116.440, 39.890, 14.14520], +[116.440, 39.900, 1.03459], +[116.450, 39.880, 0.03742], +[116.450, 39.890, 0.50015], +[116.450, 39.900, 0.01381], +[116.430, 39.880, 0.01963 ] + ], + [ +[116.430, 39.880, 0.01963], +[116.430, 39.890, 0.14150], +[116.440, 39.880, 3.34679], +[116.440, 39.890, 8.64641], +[116.440, 39.900, 0.03938], +[116.450, 39.870, 0.46846], +[116.450, 39.880, 17.07579], +[116.450, 39.890, 9.22224], +[116.450, 39.900, 0.00987], +[116.460, 39.860, 0.03539], +[116.460, 39.870, 5.94685], +[116.460, 39.880, 20.29189], +[116.460, 39.890, 1.22513], +[116.470, 39.860, 1.01399], +[116.470, 39.870, 17.40003], +[116.470, 39.880, 9.06654], +[116.470, 39.890, 0.08756], +[116.480, 39.850, 0.00985], +[116.480, 39.860, 3.55459], +[116.480, 39.870, 15.75482], +[116.480, 39.880, 1.58331], +[116.480, 39.890, 0.00395], +[116.490, 39.850, 0.00591], +[116.490, 39.860, 0.97593], +[116.490, 39.870, 2.35493], +[116.490, 39.880, 0.09963], +[116.500, 39.860, 0.00392], +[116.500, 39.870, 0.01195], +[116.500, 39.880, 0.00199], +[116.470, 39.860, 0.06502 ] + ], + [ +[116.470, 39.860, 0.06502], +[116.470, 39.870, 0.05523], +[116.480, 39.850, 0.08848], +[116.480, 39.860, 3.70663], +[116.480, 39.870, 2.84580], +[116.480, 39.880, 0.01987], +[116.490, 39.840, 0.00388], +[116.490, 39.850, 1.71597], +[116.490, 39.860, 16.09012], +[116.490, 39.870, 6.48052], +[116.490, 39.880, 0.04392], +[116.500, 39.840, 0.28988], +[116.500, 39.850, 8.25080], +[116.500, 39.860, 17.65212], +[116.500, 39.870, 2.01699], +[116.500, 39.880, 0.01797], +[116.510, 39.830, 0.01369], +[116.510, 39.840, 2.41135], +[116.510, 39.850, 16.69127], +[116.510, 39.860, 8.92715], +[116.510, 39.870, 0.25908], +[116.520, 39.830, 0.12530], +[116.520, 39.840, 6.23960], +[116.520, 39.850, 15.15830], +[116.520, 39.860, 2.24987], +[116.520, 39.870, 0.03599], +[116.530, 39.830, 0.05880], +[116.530, 39.840, 2.52297], +[116.530, 39.850, 3.99746], +[116.530, 39.860, 0.32838], +[116.540, 39.830, 0.00194], +[116.540, 39.840, 0.05321], +[116.540, 39.850, 0.09930], +[116.540, 39.860, 0.01397], +[116.510, 39.830, 0.00975 ] + ], + [ +[116.510, 39.830, 0.00975], +[116.510, 39.840, 0.05875], +[116.510, 39.850, 0.01378], +[116.520, 39.820, 0.00387], +[116.520, 39.830, 0.42990], +[116.520, 39.840, 2.85689], +[116.520, 39.850, 1.25327], +[116.520, 39.860, 0.01391], +[116.530, 39.820, 0.09340], +[116.530, 39.830, 3.32674], +[116.530, 39.840, 13.42226], +[116.530, 39.850, 4.90537], +[116.530, 39.860, 0.07371], +[116.540, 39.810, 0.01355], +[116.540, 39.820, 0.94487], +[116.540, 39.830, 9.49445], +[116.540, 39.840, 15.57404], +[116.540, 39.850, 2.51551], +[116.540, 39.860, 0.04983], +[116.550, 39.810, 0.18105], +[116.550, 39.820, 4.04692], +[116.550, 39.830, 15.30586], +[116.550, 39.840, 8.63787], +[116.550, 39.850, 0.51292], +[116.560, 39.800, 0.00585], +[116.560, 39.810, 0.53382], +[116.560, 39.820, 7.50158], +[116.560, 39.830, 13.76498], +[116.560, 39.840, 2.83762], +[116.560, 39.850, 0.08363], +[116.570, 39.800, 0.00587], +[116.570, 39.810, 0.25307], +[116.570, 39.820, 3.84742], +[116.570, 39.830, 4.68924], +[116.570, 39.840, 0.51642], +[116.570, 39.850, 0.00402], +[116.580, 39.810, 0.01176], +[116.580, 39.820, 0.22717], +[116.580, 39.830, 0.21846], +[116.580, 39.840, 0.02192], +[116.540, 39.810, 0.00193 ] + ], + [ +[116.540, 39.810, 0.00193], +[116.550, 39.810, 0.03300], +[116.550, 39.820, 0.06654], +[116.550, 39.830, 0.00591], +[116.560, 39.800, 0.04075], +[116.560, 39.810, 0.88812], +[116.560, 39.820, 2.25466], +[116.560, 39.830, 0.80400], +[116.560, 39.840, 0.01579], +[116.570, 39.790, 0.00775], +[116.570, 39.800, 0.40342], +[116.570, 39.810, 4.35134], +[116.570, 39.820, 10.64297], +[116.570, 39.830, 3.97677], +[116.570, 39.840, 0.12316], +[116.580, 39.790, 0.11104], +[116.580, 39.800, 1.76395], +[116.580, 39.810, 9.87905], +[116.580, 39.820, 13.62022], +[116.580, 39.830, 2.87283], +[116.580, 39.840, 0.09355], +[116.590, 39.780, 0.00195], +[116.590, 39.790, 0.63885], +[116.590, 39.800, 5.00262], +[116.590, 39.810, 13.51254], +[116.590, 39.820, 8.57325], +[116.590, 39.830, 0.76367], +[116.590, 39.840, 0.00799], +[116.600, 39.780, 0.02735], +[116.600, 39.790, 1.25064], +[116.600, 39.800, 8.23892], +[116.600, 39.810, 12.51982], +[116.600, 39.820, 3.36658], +[116.600, 39.830, 0.15929], +[116.610, 39.780, 0.02156], +[116.610, 39.790, 0.63897], +[116.610, 39.800, 4.76866], +[116.610, 39.810, 5.15588], +[116.610, 39.820, 0.73828], +[116.610, 39.830, 0.01599], +[116.620, 39.780, 0.00196], +[116.620, 39.790, 0.05720], +[116.620, 39.800, 0.46281], +[116.620, 39.810, 0.40528], +[116.620, 39.820, 0.05776], +[116.630, 39.810, 0.00398], +[116.580, 39.790, 0.00194 ] + ], + [ +[116.580, 39.790, 0.00194], +[116.590, 39.780, 0.00970], +[116.590, 39.790, 0.06835], +[116.590, 39.800, 0.04702], +[116.590, 39.810, 0.00787], +[116.600, 39.780, 0.18705], +[116.600, 39.790, 1.02615], +[116.600, 39.800, 1.44640], +[116.600, 39.810, 0.55970], +[116.600, 39.820, 0.02388], +[116.610, 39.770, 0.03883], +[116.610, 39.780, 0.86922], +[116.610, 39.790, 4.81639], +[116.610, 39.800, 7.96615], +[116.610, 39.810, 3.45570], +[116.610, 39.820, 0.13739], +[116.620, 39.770, 0.34843], +[116.620, 39.780, 2.68164], +[116.620, 39.790, 9.49942], +[116.620, 39.800, 12.20279], +[116.620, 39.810, 3.22805], +[116.620, 39.820, 0.14542], +[116.630, 39.760, 0.06419], +[116.630, 39.770, 1.06528], +[116.630, 39.780, 5.72101], +[116.630, 39.790, 12.13589], +[116.630, 39.800, 8.50569], +[116.630, 39.810, 0.99448], +[116.630, 39.820, 0.04780], +[116.640, 39.760, 0.12076], +[116.640, 39.770, 1.99556], +[116.640, 39.780, 8.41146], +[116.640, 39.790, 11.74094], +[116.640, 39.800, 3.81608], +[116.640, 39.810, 0.21919], +[116.640, 39.820, 0.00398], +[116.650, 39.760, 0.09383], +[116.650, 39.770, 1.11212], +[116.650, 39.780, 5.43293], +[116.650, 39.790, 5.56248], +[116.650, 39.800, 0.98257], +[116.650, 39.810, 0.05170], +[116.660, 39.760, 0.00392], +[116.660, 39.770, 0.15154], +[116.660, 39.780, 0.79413], +[116.660, 39.790, 0.60032], +[116.660, 39.800, 0.06976], +[116.660, 39.810, 0.00795], +[116.670, 39.770, 0.00587], +[116.670, 39.780, 0.00395], +[116.670, 39.790, 0.00396], +[116.620, 39.770, 0.00194 ] + ], + [ +[116.620, 39.770, 0.00194], +[116.630, 39.760, 0.04075], +[116.630, 39.770, 0.07789], +[116.630, 39.780, 0.04317], +[116.630, 39.790, 0.00199], +[116.640, 39.750, 0.01939], +[116.640, 39.760, 0.32685], +[116.640, 39.770, 1.07945], +[116.640, 39.780, 0.97315], +[116.640, 39.790, 0.41991], +[116.640, 39.800, 0.03177], +[116.650, 39.750, 0.16701], +[116.650, 39.760, 1.38094], +[116.650, 39.770, 4.90407], +[116.650, 39.780, 6.38829], +[116.650, 39.790, 2.89446], +[116.650, 39.800, 0.21490], +[116.660, 39.740, 0.04843], +[116.660, 39.750, 0.61849], +[116.660, 39.760, 3.58854], +[116.660, 39.770, 9.01161], +[116.660, 39.780, 11.07642], +[116.660, 39.790, 3.42096], +[116.660, 39.800, 0.18135], +[116.670, 39.740, 0.22500], +[116.670, 39.750, 1.76392], +[116.670, 39.760, 6.28206], +[116.670, 39.770, 11.56033], +[116.670, 39.780, 8.33935], +[116.670, 39.790, 1.37306], +[116.670, 39.800, 0.05576], +[116.680, 39.730, 0.00194], +[116.680, 39.740, 0.34018], +[116.680, 39.750, 2.72330], +[116.680, 39.760, 8.21695], +[116.680, 39.770, 10.85786], +[116.680, 39.780, 4.10542], +[116.680, 39.790, 0.35081], +[116.680, 39.800, 0.00398], +[116.690, 39.730, 0.00390], +[116.690, 39.740, 0.17370], +[116.690, 39.750, 1.50281], +[116.690, 39.760, 5.31359], +[116.690, 39.770, 5.35446], +[116.690, 39.780, 1.11333], +[116.690, 39.790, 0.04178], +[116.700, 39.740, 0.00984], +[116.700, 39.750, 0.18304], +[116.700, 39.760, 0.73361], +[116.700, 39.770, 0.67190], +[116.700, 39.780, 0.09165], +[116.710, 39.750, 0.00196], +[116.710, 39.760, 0.01382], +[116.710, 39.770, 0.00198], +[116.660, 39.740, 0.00193 ] + ], + [ +[116.660, 39.740, 0.00193], +[116.670, 39.730, 0.00386], +[116.670, 39.740, 0.06194], +[116.670, 39.750, 0.09343], +[116.670, 39.760, 0.03723], +[116.670, 39.770, 0.00197], +[116.670, 39.780, 0.00197], +[116.680, 39.730, 0.09485], +[116.680, 39.740, 0.63146], +[116.680, 39.750, 1.27135], +[116.680, 39.760, 0.94429], +[116.680, 39.770, 0.42107], +[116.680, 39.780, 0.04366], +[116.690, 39.720, 0.03873], +[116.690, 39.730, 0.45762], +[116.690, 39.740, 2.08770], +[116.690, 39.750, 5.04121], +[116.690, 39.760, 6.10200], +[116.690, 39.770, 2.87583], +[116.690, 39.780, 0.27432], +[116.690, 39.790, 0.00199], +[116.700, 39.710, 0.00581], +[116.700, 39.720, 0.20555], +[116.700, 39.730, 1.30300], +[116.700, 39.740, 4.32537], +[116.700, 39.750, 8.92532], +[116.700, 39.760, 10.21710], +[116.700, 39.770, 3.48092], +[116.700, 39.780, 0.30655], +[116.710, 39.710, 0.01356], +[116.710, 39.720, 0.54566], +[116.710, 39.730, 2.41260], +[116.710, 39.740, 6.74132], +[116.710, 39.750, 11.05753], +[116.710, 39.760, 7.94161], +[116.710, 39.770, 1.45008], +[116.710, 39.780, 0.05573], +[116.720, 39.710, 0.03696], +[116.720, 39.720, 0.59631], +[116.720, 39.730, 3.10968], +[116.720, 39.740, 7.97047], +[116.720, 39.750, 9.87586], +[116.720, 39.760, 4.13346], +[116.720, 39.770, 0.36971], +[116.730, 39.710, 0.01360], +[116.730, 39.720, 0.21499], +[116.730, 39.730, 1.38123], +[116.730, 39.740, 4.34026], +[116.730, 39.750, 4.37884], +[116.730, 39.760, 0.99419], +[116.730, 39.770, 0.05172], +[116.740, 39.710, 0.00196], +[116.740, 39.720, 0.01177], +[116.740, 39.730, 0.16339], +[116.740, 39.740, 0.51786], +[116.740, 39.750, 0.46627], +[116.740, 39.760, 0.08154], +[116.750, 39.740, 0.00396], +[116.750, 39.750, 0.00396], +[116.700, 39.710, 0.00579 ] + ], + [ +[116.700, 39.710, 0.00579], +[116.700, 39.720, 0.00774], +[116.700, 39.730, 0.00389], +[116.710, 39.710, 0.06001], +[116.710, 39.720, 0.15723], +[116.710, 39.730, 0.13838], +[116.710, 39.740, 0.05291], +[116.710, 39.750, 0.02176], +[116.710, 39.760, 0.00197], +[116.720, 39.700, 0.03866], +[116.720, 39.710, 0.33966], +[116.720, 39.720, 0.98165], +[116.720, 39.730, 1.51757], +[116.720, 39.740, 1.23470], +[116.720, 39.750, 0.68452], +[116.720, 39.760, 0.13682], +[116.730, 39.690, 0.00965], +[116.730, 39.700, 0.17241], +[116.730, 39.710, 0.86552], +[116.730, 39.720, 2.80963], +[116.730, 39.730, 5.54001], +[116.730, 39.740, 6.32360], +[116.730, 39.750, 3.39949], +[116.730, 39.760, 0.37913], +[116.730, 39.770, 0.01593], +[116.740, 39.690, 0.04067], +[116.740, 39.700, 0.51248], +[116.740, 39.710, 1.88335], +[116.740, 39.720, 4.87796], +[116.740, 39.730, 8.87639], +[116.740, 39.740, 9.73476], +[116.740, 39.750, 3.61258], +[116.740, 39.760, 0.28447], +[116.750, 39.690, 0.11453], +[116.750, 39.700, 0.84097], +[116.750, 39.710, 3.10542], +[116.750, 39.720, 6.88079], +[116.750, 39.730, 10.43171], +[116.750, 39.740, 7.56564], +[116.750, 39.750, 1.46165], +[116.750, 39.760, 0.08355], +[116.760, 39.680, 0.00195], +[116.760, 39.690, 0.08750], +[116.760, 39.700, 0.72859], +[116.760, 39.710, 3.01219], +[116.760, 39.720, 7.10079], +[116.760, 39.730, 8.95690], +[116.760, 39.740, 3.57315], +[116.760, 39.750, 0.37595], +[116.770, 39.690, 0.01757], +[116.770, 39.700, 0.21145], +[116.770, 39.710, 1.17458], +[116.770, 39.720, 3.14937], +[116.770, 39.730, 3.16251], +[116.770, 39.740, 0.76402], +[116.770, 39.750, 0.03974], +[116.780, 39.690, 0.00196], +[116.780, 39.700, 0.01376], +[116.780, 39.710, 0.11653], +[116.780, 39.720, 0.27932], +[116.780, 39.730, 0.21617], +[116.780, 39.740, 0.04566], +[116.790, 39.730, 0.00198], +[116.730, 39.690, 0.00193 ] + ], + [ +[116.730, 39.690, 0.00193], +[116.730, 39.700, 0.00194], +[116.740, 39.690, 0.02513], +[116.740, 39.700, 0.01938], +[116.740, 39.710, 0.01173], +[116.750, 39.680, 0.02711], +[116.750, 39.690, 0.15704], +[116.750, 39.700, 0.24926], +[116.750, 39.710, 0.20929], +[116.750, 39.720, 0.12977], +[116.750, 39.730, 0.07926], +[116.750, 39.740, 0.02375], +[116.760, 39.670, 0.00387], +[116.760, 39.680, 0.10669], +[116.760, 39.690, 0.57349], +[116.760, 39.700, 1.40733], +[116.760, 39.710, 2.06681], +[116.760, 39.720, 1.90231], +[116.760, 39.730, 1.10846], +[116.760, 39.740, 0.25788], +[116.760, 39.750, 0.00597], +[116.770, 39.670, 0.04460], +[116.770, 39.680, 0.39095], +[116.770, 39.690, 1.25006], +[116.770, 39.700, 3.39515], +[116.770, 39.710, 5.91515], +[116.770, 39.720, 7.06413], +[116.770, 39.730, 4.20184], +[116.770, 39.740, 0.62557], +[116.770, 39.750, 0.03988], +[116.780, 39.660, 0.00194], +[116.780, 39.670, 0.13213], +[116.780, 39.680, 0.72521], +[116.780, 39.690, 2.30221], +[116.780, 39.700, 5.12156], +[116.780, 39.710, 8.83643], +[116.780, 39.720, 9.56472], +[116.780, 39.730, 3.53914], +[116.780, 39.740, 0.30040], +[116.780, 39.750, 0.00399], +[116.790, 39.670, 0.23754], +[116.790, 39.680, 0.97407], +[116.790, 39.690, 3.41376], +[116.790, 39.700, 6.88716], +[116.790, 39.710, 9.88715], +[116.790, 39.720, 7.07996], +[116.790, 39.730, 1.26015], +[116.790, 39.740, 0.09937], +[116.800, 39.660, 0.00780], +[116.800, 39.670, 0.11735], +[116.800, 39.680, 0.75307], +[116.800, 39.690, 2.76748], +[116.800, 39.700, 6.10690], +[116.800, 39.710, 7.65636], +[116.800, 39.720, 3.02178], +[116.800, 39.730, 0.27064], +[116.800, 39.740, 0.00794], +[116.810, 39.670, 0.01964], +[116.810, 39.680, 0.16326], +[116.810, 39.690, 0.82814], +[116.810, 39.700, 2.25335], +[116.810, 39.710, 1.98833], +[116.810, 39.720, 0.41779], +[116.810, 39.730, 0.05369], +[116.820, 39.670, 0.00197], +[116.820, 39.680, 0.01184], +[116.820, 39.690, 0.07897], +[116.820, 39.700, 0.14488], +[116.820, 39.710, 0.12125], +[116.820, 39.720, 0.02188], +[116.770, 39.670, 0.00581 ] + ], + [ +[116.770, 39.670, 0.00581], +[116.770, 39.680, 0.00194], +[116.780, 39.660, 0.00970], +[116.780, 39.670, 0.05047], +[116.780, 39.680, 0.03510], +[116.780, 39.690, 0.01565], +[116.780, 39.700, 0.00195], +[116.780, 39.720, 0.00197], +[116.790, 39.660, 0.06609], +[116.790, 39.670, 0.25695], +[116.790, 39.680, 0.40268], +[116.790, 39.690, 0.29609], +[116.790, 39.700, 0.28555], +[116.790, 39.710, 0.20239], +[116.790, 39.720, 0.06760], +[116.790, 39.730, 0.00199], +[116.800, 39.650, 0.01165], +[116.800, 39.660, 0.25698], +[116.800, 39.670, 0.74970], +[116.800, 39.680, 1.65830], +[116.800, 39.690, 2.68073], +[116.800, 39.700, 2.74942], +[116.800, 39.710, 2.05995], +[116.800, 39.720, 0.57266], +[116.800, 39.730, 0.03595], +[116.810, 39.650, 0.11293], +[116.810, 39.660, 0.56373], +[116.810, 39.670, 1.52317], +[116.810, 39.680, 3.71032], +[116.810, 39.690, 6.31197], +[116.810, 39.700, 7.77179], +[116.810, 39.710, 5.01187], +[116.810, 39.720, 0.78504], +[116.810, 39.730, 0.04978], +[116.820, 39.640, 0.00973], +[116.820, 39.650, 0.27099], +[116.820, 39.660, 0.86506], +[116.820, 39.670, 2.52719], +[116.820, 39.680, 5.43074], +[116.820, 39.690, 8.87281], +[116.820, 39.700, 9.32857], +[116.820, 39.710, 3.19306], +[116.820, 39.720, 0.31705], +[116.820, 39.730, 0.00398], +[116.830, 39.640, 0.02727], +[116.830, 39.650, 0.26205], +[116.830, 39.660, 1.11805], +[116.830, 39.670, 3.42331], +[116.830, 39.680, 6.92529], +[116.830, 39.690, 9.55387], +[116.830, 39.700, 6.41707], +[116.830, 39.710, 1.09892], +[116.830, 39.720, 0.08374], +[116.840, 39.640, 0.00781], +[116.840, 39.650, 0.10790], +[116.840, 39.660, 0.72951], +[116.840, 39.670, 2.45735], +[116.840, 39.680, 5.33770], +[116.840, 39.690, 6.06020], +[116.840, 39.700, 2.17394], +[116.840, 39.710, 0.24946], +[116.840, 39.720, 0.00996], +[116.850, 39.650, 0.03151], +[116.850, 39.660, 0.15182], +[116.850, 39.670, 0.59116], +[116.850, 39.680, 1.38062], +[116.850, 39.690, 1.09209], +[116.850, 39.700, 0.14730], +[116.850, 39.710, 0.03189], +[116.860, 39.640, 0.00197], +[116.860, 39.660, 0.00393], +[116.860, 39.670, 0.03960], +[116.860, 39.680, 0.03578], +[116.860, 39.690, 0.03177], +[116.860, 39.700, 0.00995], +[116.810, 39.650, 0.01556 ] + ], + [ +[116.810, 39.650, 0.01556], +[116.810, 39.660, 0.00195], +[116.820, 39.640, 0.03696], +[116.820, 39.650, 0.06822], +[116.820, 39.660, 0.05078], +[116.820, 39.670, 0.02945], +[116.820, 39.680, 0.00591], +[116.820, 39.690, 0.00990], +[116.820, 39.700, 0.01192], +[116.830, 39.630, 0.00778], +[116.830, 39.640, 0.17532], +[116.830, 39.650, 0.31247], +[116.830, 39.660, 0.58414], +[116.830, 39.670, 0.47600], +[116.830, 39.680, 0.54754], +[116.830, 39.690, 0.47913], +[116.830, 39.700, 0.26288], +[116.830, 39.710, 0.01800], +[116.840, 39.630, 0.09153], +[116.840, 39.640, 0.36684], +[116.840, 39.650, 0.87570], +[116.840, 39.660, 1.98284], +[116.840, 39.670, 3.23488], +[116.840, 39.680, 3.87216], +[116.840, 39.690, 3.36681], +[116.840, 39.700, 1.02013], +[116.840, 39.710, 0.09400], +[116.840, 39.720, 0.00199], +[116.850, 39.620, 0.01558], +[116.850, 39.630, 0.19107], +[116.850, 39.640, 0.65883], +[116.850, 39.650, 1.88069], +[116.850, 39.660, 3.97822], +[116.850, 39.670, 7.15922], +[116.850, 39.680, 8.77261], +[116.850, 39.690, 5.31470], +[116.850, 39.700, 0.80586], +[116.850, 39.710, 0.05192], +[116.860, 39.620, 0.03310], +[116.860, 39.630, 0.33814], +[116.860, 39.640, 1.09976], +[116.860, 39.650, 2.79961], +[116.860, 39.660, 5.93604], +[116.860, 39.670, 9.52859], +[116.860, 39.680, 9.25328], +[116.860, 39.690, 2.83581], +[116.860, 39.700, 0.26960], +[116.860, 39.710, 0.00400], +[116.870, 39.620, 0.02534], +[116.870, 39.630, 0.28602], +[116.870, 39.640, 1.20627], +[116.870, 39.650, 3.51290], +[116.870, 39.660, 7.19040], +[116.870, 39.670, 9.14658], +[116.870, 39.680, 5.35322], +[116.870, 39.690, 0.77016], +[116.870, 39.700, 0.05187], +[116.880, 39.620, 0.00392], +[116.880, 39.630, 0.12587], +[116.880, 39.640, 0.58062], +[116.880, 39.650, 1.93222], +[116.880, 39.660, 3.81051], +[116.880, 39.670, 3.74407], +[116.880, 39.680, 0.93347], +[116.880, 39.690, 0.12172], +[116.890, 39.630, 0.02566], +[116.890, 39.640, 0.08099], +[116.890, 39.650, 0.26742], +[116.890, 39.660, 0.46914], +[116.890, 39.670, 0.28267], +[116.890, 39.680, 0.05185], +[116.890, 39.690, 0.00797], +[116.900, 39.620, 0.00197], +[116.900, 39.630, 0.00394], +[116.900, 39.640, 0.00196], +[116.900, 39.650, 0.00990], +[116.900, 39.670, 0.00199], +[116.900, 39.670, 0.00199] + ] + ] + } + } diff --git a/04.系统编码/App/Content/scripts/beijing/history-panel.js b/04.系统编码/App/Content/scripts/beijing/history-panel.js index 425be5f..7159c40 100644 --- a/04.系统编码/App/Content/scripts/beijing/history-panel.js +++ b/04.系统编码/App/Content/scripts/beijing/history-panel.js @@ -59,7 +59,7 @@ }; this.OnTaskSelected = function (index, task) { - this.LoadData(task); + this.LoadData(index, task); var selections = $('#task-grid').datagrid('getSelections'); if (selections.length > 1) { @@ -71,6 +71,7 @@ this.OnTaskUnselected = function (index, row) { // Remove data layer this.Parent.Map.RemoveLayer(row.Id); + this.Parent.Map.RemoveLayer('history-layer' + row.Id); // Reset result list if no task selected var selections = $('#task-grid').datagrid('getSelections'); @@ -84,13 +85,33 @@ this.ResultList.ResizeMask(); }; - this.LoadData = function (task) { - $.getJSON("http://{0}/bj/getresult/{1}.json".format(Config.ApiRoot, task.Id), function (data) { + this.LoadData = function (index, task) { + $.getJSON(this.getJsonUrl(index, task.Id), function (data) { this.Parent.Map.LoadAverageData(task.Id, task, data); + this.Parent.Map.CreateIntersect(task, data, 'history-layer' + task.Id); this.ResultList.SetData(task.Id, [task.Latitude, task.Longitude], data); }.bind(this)); }; + this.getJsonUrl = function (index, taskId) { + var name = null; + if (index === 0) + name = '202107091551331'; + else if (index === 1) + name = '202107151920657'; + else if (index === 2) + name = '202111060851610'; + else if (index === 3) + name = '202111221646814'; + else if (index === 4) + name = '202111241646948'; + + if (Config.InProductionMode) + return "http://{0}/bj/getresult/{1}.json".format(Config.ApiRoot, taskId); + else + return '/Content/json/beijing/history/{0}.json'.format(name); + }; + this.OnQueryButtonClick = function () { this.ReloadAllLabels(); this.ReloadDataGrid(); diff --git a/04.系统编码/App/Content/scripts/beijing/lat-lng-switch.js b/04.系统编码/App/Content/scripts/beijing/lat-lng-switch.js index f51ec19..fff5b6d 100644 --- a/04.系统编码/App/Content/scripts/beijing/lat-lng-switch.js +++ b/04.系统编码/App/Content/scripts/beijing/lat-lng-switch.js @@ -129,7 +129,7 @@ var degree = text[0]; var temp = "0." + text[1]; - var temp = String(temp * 60); + temp = String(temp * 60); var str = temp.split("."); var minute = str[0]; diff --git a/04.系统编码/App/Content/scripts/beijing/map.js b/04.系统编码/App/Content/scripts/beijing/map.js index 183228d..ea2badf 100644 --- a/04.系统编码/App/Content/scripts/beijing/map.js +++ b/04.系统编码/App/Content/scripts/beijing/map.js @@ -70,6 +70,7 @@ var Map = function (parent) { exportSelected: false }; + this.targetPolygon = null; this.ForecastPoints = null; this.ForecastBackwardPoints = null; this.ForecastForwardPoints = null; @@ -135,7 +136,7 @@ var Map = function (parent) { this.getLatLng = function (value) { value = value.toString(); - let index = value.indexOf('.'); + var index = value.indexOf('.'); if (index !== -1) { value = value.substring(0, 6 + index + 1); } else { @@ -193,12 +194,12 @@ var Map = function (parent) { this.showTimeTags = !this.showTimeTags; if (this.showTimeTags) { - $('.point').show(); - $('.time-label').show(); + //$('.point').show(); + $('.time-label-content').show(); $(event.target).removeClass('default-text'); } else { - $('.point').hide(); - $('.time-label').hide(); + //$('.point').hide(); + $('.time-label-content').hide(); $(event.target).addClass('default-text'); } }; @@ -309,6 +310,60 @@ var Map = function (parent) { this.BindCloseButtons(); }; + this.GetTargetPolygon = function (result) { + this.targetPolygon = result; + }; + + this.GetIntersect = function (result) { + var backwardData = result.backward.average; + var forwardData = result.forward.average; + backwardData.push.apply(backwardData, forwardData); + + var polygons = null; + for (var i = 0, len = backwardData.length; i < len; i++) { + var temp = backwardData[i]; + if (i === 0) { + polygons = turf.polygon([[ + [temp[0] - 0.005, temp[1] + 0.005], + [temp[0] + 0.005, temp[1] + 0.005], + [temp[0] + 0.005, temp[1] - 0.005], + [temp[0] - 0.005, temp[1] - 0.005], + [temp[0] - 0.005, temp[1] + 0.005] + ]]); + } else { + var tempPolygon = turf.polygon([[ + [temp[0] - 0.005, temp[1] + 0.005], + [temp[0] + 0.005, temp[1] + 0.005], + [temp[0] + 0.005, temp[1] - 0.005], + [temp[0] - 0.005, temp[1] - 0.005], + [temp[0] - 0.005, temp[1] + 0.005] + ]]); + polygons = turf.union(polygons, tempPolygon); + } + } + + return polygons; + }; + + this.CreateIntersect = function (param, result, name) { + if (this.targetPolygon === null) + return; + + var firstData = this.GetIntersect(this.targetPolygon); + var secondData = this.GetIntersect(result); + var intersection = turf.intersect(firstData, secondData); + var style = { + fillColor: "#ff0000", + color: "#ff0000", + opacity: 1, + weight: 0.5, + fillOpacity: 0.8 + }; + let layer = L.geoJson(intersection, { style: style }); + layer.name = name; + this.map.addLayer(layer); + }; + this.ClearLiveLayer = function (name) { if (this.MultiLayers) this.RemoveLayer(name); @@ -396,6 +451,7 @@ var Map = function (parent) { this.AddLabels(features, result.backward.points, 'actual'); this.AddLabels(features, result.forward.points, 'actual'); + return features; }; @@ -489,12 +545,12 @@ var Map = function (parent) { }; this.GroundDistancePolyline = function (features) { - let from = { + var from = { longitude: this.ForecastPoints.backward.points[0][0], latitude: this.ForecastPoints.backward.points[0][1] }; - let to = { + var to = { longitude: this.RealTimeData[0][0], latitude: this.RealTimeData[0][1] }; @@ -590,7 +646,7 @@ var Map = function (parent) { this.CalcDistance = function (forecastPoint, realtimePoint) { var from = L.latLng(forecastPoint.Latitude, forecastPoint.Longitude); var to = L.latLng(realtimePoint.Latitude, realtimePoint.Longitude); - let distance = from.distanceTo(to); + var distance = from.distanceTo(to); return distance / 1000; }; @@ -656,13 +712,13 @@ var Map = function (parent) { this.GetCenterLabel = function (param) { var pattern = '

经度:{0}

纬度:{1}

高度:{2}米

释放时间:{3}

'; - return pattern.format(param.Longitude, param.Latitude, param.Height, moment(param.ReleaseTime).format("MM/DD HH:mm")); - }; + return pattern.format(param.Longitude, param.Latitude, param.Height, moment(param.ReleaseTime, 'YYYY/MM/DD HH:mm').format("MM/DD HH:mm")); + }; this.NormalizeTime = function (lat, lng, time) { var attr = lng.toString().split(".").join(""); var value = moment(time, "YYYYMMDD_HHmmss"); - return '

经度:{1}

纬度: {2}

时间: {3}

'.format(attr, lat, lng, value.format("MM/DD HH:mm")); + return '

经度:{2}

纬度: {3}

时间: {4}

'.format(this.showTimeTags ? "block" : "none", attr, lat, lng, value.format("MM/DD HH:mm")); }; this.ShowWindLayer = function (data) { @@ -769,7 +825,7 @@ var Map = function (parent) { }; this.AddInfoPoint = function (point, title, icon, id) { - let label = '

{1}

'.format(id, title, id, icon.slice(0, 1)); + var label = '

{1}

'.format(id, title, id, icon.slice(0, 1)); L.marker([point.lat, point.lng], { icon: L.divIcon({ className: 'info-point-content', diff --git a/04.系统编码/App/Content/scripts/beijing/realtime-panel.js b/04.系统编码/App/Content/scripts/beijing/realtime-panel.js index 965ed1c..506e4fe 100644 --- a/04.系统编码/App/Content/scripts/beijing/realtime-panel.js +++ b/04.系统编码/App/Content/scripts/beijing/realtime-panel.js @@ -98,6 +98,8 @@ pullGroundData.push([point.Longitude, point.Latitude, point.Height, moment(point.DateTime).format("YYYYMMDD_HHmmss")]); }.bind(this)); + console.log(pullGroundData); + this.PullGroundData = pullGroundData; var value = this.PullGroundData[this.PullGroundData.length - 1]; var time = moment(value[3], "YYYYMMDD_HHmmss"); @@ -243,7 +245,8 @@ Latitude: param.latitude, Height: param.height }, data); - + + this.Parent.Map.GetTargetPolygon(data); this.Parent.Map.SetForecastData(data); this.ResultList.SetData('realtime-layer', [param.latitude, param.longitude], data); }.bind(this)); @@ -320,7 +323,7 @@ var degree = text[0]; var temp = "0." + text[1]; - var temp = String(temp * 60); + temp = String(temp * 60); var str = temp.split("."); var minute = str[0]; @@ -331,7 +334,7 @@ degree: degree, minute: minute, second: second - } + }; }; this.GetTaskParams = function (taskId) { @@ -359,7 +362,7 @@ this.GetReleaseTime = function () { var time = $('#release-date').datetimebox('getValue'); - return moment(time).format('YYYY-MM-DD-HH-mm'); + return moment(time, 'YYYY/MM/DD HH:mm').format('YYYY-MM-DD-HH-mm'); }; this.SubmitTask = function (taskId) { diff --git a/04.系统编码/App/Content/scripts/menggu/history-panel.js b/04.系统编码/App/Content/scripts/menggu/history-panel.js index 6f51869..e49fc44 100644 --- a/04.系统编码/App/Content/scripts/menggu/history-panel.js +++ b/04.系统编码/App/Content/scripts/menggu/history-panel.js @@ -71,6 +71,7 @@ this.OnTaskUnselected = function (index, row) { // Remove data layer this.Parent.Map.RemoveLayer(row.Id); + this.Parent.Map.RemoveLayer('history-layer' + row.Id); // Reset result list if no task selected var selections = $('#task-grid').datagrid('getSelections'); @@ -85,12 +86,26 @@ }; this.LoadData = function (task) { - $.getJSON("http://{0}/mg/getresult/{1}.json".format(Config.ApiRoot, task.Id), function (data) { + //$.getJSON("http://{0}/mg/getresult/{1}.json".format(Config.ApiRoot, task.Id), function (data) { + // this.Parent.Map.LoadAverageData(task.Id, task, data); + // this.Parent.Map.CreateIntersect(task, data, 'history-layer' + task.Id); + // this.ResultList.SetData(task.Id, [task.Latitude, task.Longitude], data); + //}.bind(this)); + + $.getJSON(this.getJsonUrl(task.Id), function (data) { this.Parent.Map.LoadAverageData(task.Id, task, data); + this.Parent.Map.CreateIntersect(task, data, 'history-layer' + task.Id); this.ResultList.SetData(task.Id, [task.Latitude, task.Longitude], data); }.bind(this)); }; + this.getJsonUrl = function (taskId) { + if (Config.InProductionMode) + return "http://{0}/mg/getresult/{1}.json".format(Config.ApiRoot, taskId); + else + return '/Content/json/menggu/202111242105788.json'; + }; + this.OnQueryButtonClick = function () { this.ReloadAllLabel(); this.ReloadDataGrid(); diff --git a/04.系统编码/App/Content/scripts/menggu/map.js b/04.系统编码/App/Content/scripts/menggu/map.js index cdca0f8..4a4f106 100644 --- a/04.系统编码/App/Content/scripts/menggu/map.js +++ b/04.系统编码/App/Content/scripts/menggu/map.js @@ -22,6 +22,7 @@ var Map = function (parent) { this.Parent = parent; this.WindTemplate = null; this.MultiLayers = false; + this.targetPolygon = null; this.isMark = false; this.isSwitch = false; this.isSelected = false; @@ -103,7 +104,6 @@ var Map = function (parent) { dataType: 'json', url: '/Config/All', success: function (result) { - console.log() this.lineColor = result.find(function (item) { return item.Id === 'line-color'; }).Value; @@ -147,12 +147,12 @@ var Map = function (parent) { this.showTimeTags = !this.showTimeTags; if (this.showTimeTags) { - $('.point').show(); - $('.time-label').show(); + //$('.point').show(); + $('.time-label-content').show(); $(event.target).removeClass('default-text'); } else { - $('.point').hide(); - $('.time-label').hide(); + //$('.point').hide(); + $('.time-label-content').hide(); $(event.target).addClass('default-text'); } }; @@ -271,6 +271,60 @@ var Map = function (parent) { this.map.addLayer(layer); }; + this.GetTargetPolygon = function (result) { + this.targetPolygon = result; + }; + + this.GetIntersect = function (result) { + var backwardData = result.backward.average; + var forwardData = result.forward.average; + backwardData.push.apply(backwardData, forwardData); + + var polygons = null; + for (var i = 0, len = backwardData.length; i < len; i++) { + var temp = backwardData[i]; + if (i === 0) { + polygons = turf.polygon([[ + [temp[0] - 0.01, temp[1] + 0.01], + [temp[0] + 0.01, temp[1] + 0.01], + [temp[0] + 0.01, temp[1] - 0.01], + [temp[0] - 0.01, temp[1] - 0.01], + [temp[0] - 0.01, temp[1] + 0.01] + ]]); + } else { + var tempPolygon = turf.polygon([[ + [temp[0] - 0.01, temp[1] + 0.01], + [temp[0] + 0.01, temp[1] + 0.01], + [temp[0] + 0.01, temp[1] - 0.01], + [temp[0] - 0.01, temp[1] - 0.01], + [temp[0] - 0.01, temp[1] + 0.01] + ]]); + polygons = turf.union(polygons, tempPolygon); + } + } + + return polygons; + }; + + this.CreateIntersect = function (param, result, name) { + if (this.targetPolygon === null) + return; + + var firstData = this.GetIntersect(this.targetPolygon); + var secondData = this.GetIntersect(result); + var intersection = turf.intersect(firstData, secondData); + var style = { + fillColor: "#ff0000", + color: "#ff0000", + opacity: 1, + weight: 0.5, + fillOpacity: 0.8 + }; + let layer = L.geoJson(intersection, { style: style }); + layer.name = name; + this.map.addLayer(layer); + }; + this.CreateDetailLayer = function (name, values) { var features = new L.FeatureGroup(); features.name = name; @@ -375,7 +429,7 @@ var Map = function (parent) { this.NormalizeTime = function (lat, lng, time) { var attr = lng.toString().split(".").join(""); var value = moment(time, "YYYYMMDD_HHmmss"); - return '

经度:{1}

纬度: {2}

时间: {3}

'.format(attr, lat, lng, value.format("MM/DD HH:mm")); + return '

经度:{2}

纬度: {3}

时间: {4}

'.format(this.showTimeTags ? "block" : "none", attr, lat, lng, value.format("MM/DD HH:mm")); }; this.ShowWindLayer = function (data) { diff --git a/04.系统编码/App/Content/scripts/menggu/realtime-panel.js b/04.系统编码/App/Content/scripts/menggu/realtime-panel.js index b60899f..86cddde 100644 --- a/04.系统编码/App/Content/scripts/menggu/realtime-panel.js +++ b/04.系统编码/App/Content/scripts/menggu/realtime-panel.js @@ -119,6 +119,7 @@ Latitude: param.latitude, Height: param.height }, data); + this.Parent.Map.GetTargetPolygon(data); this.ResultList.SetData('realtime-layer', [param.latitude, param.longitude], data); }.bind(this)); }; diff --git a/04.系统编码/App/Content/styles/common.css b/04.系统编码/App/Content/styles/common.css index 2ce3f7e..773613f 100644 --- a/04.系统编码/App/Content/styles/common.css +++ b/04.系统编码/App/Content/styles/common.css @@ -268,7 +268,7 @@ .manage-table .l-btn-plain:hover { border-color: #00d5f6; - background-color: #e8f3f5; + background-color: transparent; } .manage-table .pagination-first { diff --git a/04.系统编码/App/Content/styles/index.css b/04.系统编码/App/Content/styles/index.css index d67563b..a63c7a6 100644 --- a/04.系统编码/App/Content/styles/index.css +++ b/04.系统编码/App/Content/styles/index.css @@ -1202,14 +1202,10 @@ .time-label { height: 56px !important; width: 120px !important; - padding-left: 5px; margin-left: 5px !important; margin-top: -28px !important; - color: #777 !important; - background-color: #fff; - border: solid 1px #aaa; - border-radius: 3px; - cursor: default; + cursor: -webkit-grab; + cursor: grab; } .time-label a.close-button { @@ -1221,6 +1217,24 @@ background: url(../images/clear-gray.png) no-repeat center/cover; } +.time-label-content { + padding: 2px 5px; + color: #777; + background-color: #fff; + border: solid 1px #aaa; + border-radius: 3px; + cursor: default; +} + +.time-label-show { + cursor: default; +} + +.time-label-hide { + cursor: -webkit-grab; + cursor: grab; +} + .compare-time-label { border: 1px solid blue; background: blue; @@ -1310,12 +1324,12 @@ } .info-point-content .info-point-top .remove-info-point span { - width: 10px; - height: 10px; + width: 8px; + height: 8px; display: block; - margin: 10px auto 0 auto; + margin: 11px auto 0 auto; cursor: pointer; - background: url("../images/close-dialog.png") no-repeat center/cover; + background: url("../images/clear-gray.png") no-repeat center/cover; } .info-point-content .icon { diff --git a/04.系统编码/App/Content/thirds/turf.min.js b/04.系统编码/App/Content/thirds/turf.min.js new file mode 100644 index 0000000..4d8f8b9 --- /dev/null +++ b/04.系统编码/App/Content/thirds/turf.min.js @@ -0,0 +1,83 @@ +!function (t) { if ("object" == typeof exports && "undefined" != typeof module) module.exports = t(); else if ("function" == typeof define && define.amd) define([], t); else { var e; e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this, e.turf = t() } }(function () { + var t; return function e(t, n, i) { function r(o, a) { if (!n[o]) { if (!t[o]) { var u = "function" == typeof require && require; if (!a && u) return u(o, !0); if (s) return s(o, !0); var l = new Error("Cannot find module '" + o + "'"); throw l.code = "MODULE_NOT_FOUND", l } var h = n[o] = { exports: {} }; t[o][0].call(h.exports, function (e) { var n = t[o][1][e]; return r(n ? n : e) }, h, h.exports, e, t, n, i) } return n[o].exports } for (var s = "function" == typeof require && require, o = 0; o < i.length; o++)r(i[o]); return r }({ + 1: [function (t, e, n) { e.exports = { isolines: t("turf-isolines"), convex: t("turf-convex"), within: t("turf-within"), concave: t("turf-concave"), difference: t("turf-difference"), collect: t("turf-collect"), flip: t("turf-flip"), simplify: t("turf-simplify"), bezier: t("turf-bezier"), tag: t("turf-tag"), sample: t("turf-sample"), envelope: t("turf-envelope"), square: t("turf-square"), midpoint: t("turf-midpoint"), buffer: t("turf-buffer"), center: t("turf-center"), centroid: t("turf-centroid"), combine: t("turf-combine"), distance: t("turf-distance"), explode: t("turf-explode"), bbox: t("turf-bbox"), tesselate: t("turf-tesselate"), bboxPolygon: t("turf-bbox-polygon"), inside: t("turf-inside"), intersect: t("turf-intersect"), nearest: t("turf-nearest"), planepoint: t("turf-planepoint"), random: t("turf-random"), tin: t("turf-tin"), union: t("turf-union"), bearing: t("turf-bearing"), destination: t("turf-destination"), kinks: t("turf-kinks"), pointOnSurface: t("turf-point-on-surface"), area: t("turf-area"), along: t("turf-along"), lineDistance: t("turf-line-distance"), lineSlice: t("turf-line-slice"), pointOnLine: t("turf-point-on-line"), pointGrid: t("turf-point-grid"), squareGrid: t("turf-square-grid"), triangleGrid: t("turf-triangle-grid"), hexGrid: t("turf-hex-grid") }; var i = t("turf-helpers"); e.exports.point = i.point, e.exports.polygon = i.polygon, e.exports.lineString = i.lineString, e.exports.multiPoint = i.multiPoint, e.exports.multiPolygon = i.multiPolygon, e.exports.multiLineString = i.multiLineString, e.exports.feature = i.feature, e.exports.featureCollection = i.featureCollection, e.exports.geometryCollection = i.geometryCollection }, { "turf-along": 2, "turf-area": 3, "turf-bbox": 7, "turf-bbox-polygon": 6, "turf-bearing": 8, "turf-bezier": 10, "turf-buffer": 12, "turf-center": 15, "turf-centroid": 16, "turf-collect": 17, "turf-combine": 18, "turf-concave": 19, "turf-convex": 20, "turf-destination": 49, "turf-difference": 51, "turf-distance": 53, "turf-envelope": 55, "turf-explode": 56, "turf-flip": 57, "turf-helpers": 58, "turf-hex-grid": 59, "turf-inside": 60, "turf-intersect": 62, "turf-isolines": 65, "turf-kinks": 68, "turf-line-distance": 69, "turf-line-slice": 70, "turf-midpoint": 72, "turf-nearest": 73, "turf-planepoint": 74, "turf-point-grid": 75, "turf-point-on-line": 76, "turf-point-on-surface": 77, "turf-random": 78, "turf-sample": 80, "turf-simplify": 81, "turf-square": 84, "turf-square-grid": 83, "turf-tag": 85, "turf-tesselate": 86, "turf-tin": 88, "turf-triangle-grid": 89, "turf-union": 90, "turf-within": 92 }], 2: [function (t, e, n) { var i = t("turf-distance"), r = t("turf-helpers").point, s = t("turf-bearing"), o = t("turf-destination"); e.exports = function (t, e, n) { var a; if ("Feature" === t.type) a = t.geometry.coordinates; else { if ("LineString" !== t.type) throw new Error("input must be a LineString Feature or Geometry"); a = t.coordinates } for (var u = 0, l = 0; l < a.length && !(e >= u && l === a.length - 1); l++) { if (u >= e) { var h = e - u; if (h) { var c = s(a[l], a[l - 1]) - 180, g = o(a[l], h, c, n); return g } return r(a[l]) } u += i(a[l], a[l + 1], n) } return r(a[a.length - 1]) } }, { "turf-bearing": 8, "turf-destination": 49, "turf-distance": 53, "turf-helpers": 58 }], 3: [function (t, e, n) { function i(t) { if ("FeatureCollection" === t.type) { for (var e = 0, n = 0; e < t.features.length; e++)t.features[e].geometry && (n += r(t.features[e].geometry)); return n } return r("Feature" === t.type ? t.geometry : t) } var r = t("geojson-area").geometry; e.exports = i }, { "geojson-area": 4 }], 4: [function (t, e, n) { function r(t) { var e, n = 0; switch (t.type) { case "Polygon": return s(t.coordinates); case "MultiPolygon": for (e = 0; e < t.coordinates.length; e++)n += s(t.coordinates[e]); return n; case "Point": case "MultiPoint": case "LineString": case "MultiLineString": return 0; case "GeometryCollection": for (e = 0; e < t.geometries.length; e++)n += r(t.geometries[e]); return n } } function s(t) { var e = 0; if (t && t.length > 0) { e += Math.abs(o(t[0])); for (var n = 1; n < t.length; n++)e -= Math.abs(o(t[n])) } return e } function o(t) { var e, n, r, s, o, l, h = 0, c = t.length; if (c > 2) { for (i = 0; i < c; i++)i === c - 2 ? (s = c - 2, o = c - 1, l = 0) : i === c - 1 ? (s = c - 1, o = 0, l = 1) : (s = i, o = i + 1, l = i + 2), e = t[s], n = t[o], r = t[l], h += (a(r[0]) - a(e[0])) * Math.sin(a(n[1])); h = h * u.RADIUS * u.RADIUS / 2 } return h } function a(t) { return t * Math.PI / 180 } var u = t("wgs84"); e.exports.geometry = r, e.exports.ring = o }, { wgs84: 5 }], 5: [function (t, e, n) { e.exports.RADIUS = 6378137, e.exports.FLATTENING = 1 / 298.257223563, e.exports.POLAR_RADIUS = 6356752.3142 }, {}], 6: [function (t, e, n) { var i = t("turf-helpers").polygon; e.exports = function (t) { var e = [t[0], t[1]], n = [t[0], t[3]], r = [t[2], t[3]], s = [t[2], t[1]]; return i([[e, s, r, n, e]]) } }, { "turf-helpers": 58 }], 7: [function (t, e, n) { var i = t("turf-meta").coordEach; e.exports = function (t) { var e = [1 / 0, 1 / 0, -(1 / 0), -(1 / 0)]; return i(t, function (t) { e[0] > t[0] && (e[0] = t[0]), e[1] > t[1] && (e[1] = t[1]), e[2] < t[0] && (e[2] = t[0]), e[3] < t[1] && (e[3] = t[1]) }), e } }, { "turf-meta": 71 }], 8: [function (t, e, n) { var i = t("turf-invariant").getCoord; e.exports = function (t, e) { var n = Math.PI / 180, r = 180 / Math.PI, s = i(t), o = i(e), a = n * s[0], u = n * o[0], l = n * s[1], h = n * o[1], c = Math.sin(u - a) * Math.cos(h), g = Math.cos(l) * Math.sin(h) - Math.sin(l) * Math.cos(h) * Math.cos(u - a), f = r * Math.atan2(c, g); return f } }, { "turf-invariant": 9 }], 9: [function (t, e, n) { function i(t) { if (Array.isArray(t) && "number" == typeof t[0] && "number" == typeof t[1]) return t; if (t) { if ("Feature" === t.type && t.geometry && "Point" === t.geometry.type && Array.isArray(t.geometry.coordinates)) return t.geometry.coordinates; if ("Point" === t.type && Array.isArray(t.coordinates)) return t.coordinates } throw new Error("A coordinate, feature, or point geometry is required") } function r(t, e, n) { if (!e || !n) throw new Error("type and name required"); if (!t || t.type !== e) throw new Error("Invalid input to " + n + ": must be a " + e + ", given " + t.type) } function s(t, e, n) { if (!n) throw new Error(".featureOf() requires a name"); if (!t || "Feature" !== t.type || !t.geometry) throw new Error("Invalid input to " + n + ", Feature with geometry required"); if (!t.geometry || t.geometry.type !== e) throw new Error("Invalid input to " + n + ": must be a " + e + ", given " + t.geometry.type) } function o(t, e, n) { if (!n) throw new Error(".collectionOf() requires a name"); if (!t || "FeatureCollection" !== t.type) throw new Error("Invalid input to " + n + ", FeatureCollection required"); for (var i = 0; i < t.features.length; i++) { var r = t.features[i]; if (!r || "Feature" !== r.type || !r.geometry) throw new Error("Invalid input to " + n + ", Feature with geometry required"); if (!r.geometry || r.geometry.type !== e) throw new Error("Invalid input to " + n + ": must be a " + e + ", given " + r.geometry.type) } } e.exports.geojsonType = r, e.exports.collectionOf = o, e.exports.featureOf = s, e.exports.getCoord = i }, {}], 10: [function (t, e, n) { var i = t("turf-helpers").lineString, r = t("./spline.js"); e.exports = function (t, e, n) { var s = i([]); s.properties = t.properties; for (var o = new r({ points: t.geometry.coordinates.map(function (t) { return { x: t[0], y: t[1] } }), duration: e, sharpness: n }), a = 0; a < o.duration; a += 10) { var u = o.pos(a); Math.floor(a / 100) % 2 === 0 && s.geometry.coordinates.push([u.x, u.y]) } return s } }, { "./spline.js": 11, "turf-helpers": 58 }], 11: [function (t, e, n) { var i = function (t) { this.points = t.points || [], this.duration = t.duration || 1e4, this.sharpness = t.sharpness || .85, this.centers = [], this.controls = [], this.stepLength = t.stepLength || 60, this.length = this.points.length, this.delay = 0; for (var e = 0; e < this.length; e++)this.points[e].z = this.points[e].z || 0; for (var e = 0; e < this.length - 1; e++) { var n = this.points[e], i = this.points[e + 1]; this.centers.push({ x: (n.x + i.x) / 2, y: (n.y + i.y) / 2, z: (n.z + i.z) / 2 }) } this.controls.push([this.points[0], this.points[0]]); for (var e = 0; e < this.centers.length - 1; e++) { var n = this.centers[e], i = this.centers[e + 1], r = this.points[e + 1].x - (this.centers[e].x + this.centers[e + 1].x) / 2, s = this.points[e + 1].y - (this.centers[e].y + this.centers[e + 1].y) / 2, o = this.points[e + 1].z - (this.centers[e].y + this.centers[e + 1].z) / 2; this.controls.push([{ x: (1 - this.sharpness) * this.points[e + 1].x + this.sharpness * (this.centers[e].x + r), y: (1 - this.sharpness) * this.points[e + 1].y + this.sharpness * (this.centers[e].y + s), z: (1 - this.sharpness) * this.points[e + 1].z + this.sharpness * (this.centers[e].z + o) }, { x: (1 - this.sharpness) * this.points[e + 1].x + this.sharpness * (this.centers[e + 1].x + r), y: (1 - this.sharpness) * this.points[e + 1].y + this.sharpness * (this.centers[e + 1].y + s), z: (1 - this.sharpness) * this.points[e + 1].z + this.sharpness * (this.centers[e + 1].z + o) }]) } return this.controls.push([this.points[this.length - 1], this.points[this.length - 1]]), this.steps = this.cacheSteps(this.stepLength), this }; i.prototype.cacheSteps = function (t) { var e = [], n = this.pos(0); e.push(0); for (var i = 0; i < this.duration; i += 10) { var r = this.pos(i), s = Math.sqrt((r.x - n.x) * (r.x - n.x) + (r.y - n.y) * (r.y - n.y) + (r.z - n.z) * (r.z - n.z)); s > t && (e.push(i), n = r) } return e }, i.prototype.vector = function (t) { var e = this.pos(t + 10), n = this.pos(t - 10); return { angle: 180 * Math.atan2(e.y - n.y, e.x - n.x) / 3.14, speed: Math.sqrt((n.x - e.x) * (n.x - e.x) + (n.y - e.y) * (n.y - e.y) + (n.z - e.z) * (n.z - e.z)) } }, i.prototype.pos = function (t) { function e(t, e, n, i, r) { var s = function (t) { var e = t * t, n = e * t; return [n, 3 * e * (1 - t), 3 * t * (1 - t) * (1 - t), (1 - t) * (1 - t) * (1 - t)] }, o = s(t), a = { x: r.x * o[0] + i.x * o[1] + n.x * o[2] + e.x * o[3], y: r.y * o[0] + i.y * o[1] + n.y * o[2] + e.y * o[3], z: r.z * o[0] + i.z * o[1] + n.z * o[2] + e.z * o[3] }; return a } var n = t - this.delay; 0 > n && (n = 0), n > this.duration && (n = this.duration - 1); var i = n / this.duration; if (i >= 1) return this.points[this.length - 1]; var r = Math.floor((this.points.length - 1) * i), s = (this.length - 1) * i - r; return e(s, this.points[r], this.controls[r][1], this.controls[r + 1][0], this.points[r + 1]) }, e.exports = i }, {}], 12: [function (t, e, n) { function i(t, e) { var n = new o.io.GeoJSONReader, i = n.read(t.geometry), r = i.buffer(e), s = new o.io.GeoJSONWriter; return r = s.write(r), { type: "Feature", geometry: r, properties: {} } } var r = t("turf-helpers"), s = r.featureCollection, o = t("jsts"), a = t("geojson-normalize"); e.exports = function (t, e, n) { var o = r.distanceToDegrees(e, n), u = a(t), l = a(s(u.features.map(function (t) { return i(t, o) }))); return l.features.length > 1 ? l : 1 === l.features.length ? l.features[0] : void 0 } }, { "geojson-normalize": 13, jsts: 14, "turf-helpers": 58 }], 13: [function (t, e, n) { function i(t) { if (!t || !t.type) return null; var e = r[t.type]; return e ? "geometry" === e ? { type: "FeatureCollection", features: [{ type: "Feature", properties: {}, geometry: t }] } : "feature" === e ? { type: "FeatureCollection", features: [t] } : "featurecollection" === e ? t : void 0 : null } e.exports = i; var r = { Point: "geometry", MultiPoint: "geometry", LineString: "geometry", MultiLineString: "geometry", Polygon: "geometry", MultiPolygon: "geometry", GeometryCollection: "geometry", Feature: "feature", FeatureCollection: "featurecollection" } }, {}], 14: [function (e, n, i) { + !function (e, r) { "object" == typeof i && "undefined" != typeof n ? r(i) : "function" == typeof t && t.amd ? t(["exports"], r) : r(e.jsts = e.jsts || {}) }(this, function (t) { + "use strict"; function e(t, e) { for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]) } function n() { } function i() { } function r() { } function s() { } function o() { } function a() { } function u() { } function l(t) { this.message = t } function h(t, e) { t.prototype = Object.create(e.prototype), t.prototype.constructor = t } function c() { if (0 === arguments.length) l.call(this); else if (1 === arguments.length) { var t = arguments[0]; l.call(this, t) } } function g() { } function f() { if (this.x = null, this.y = null, this.z = null, 0 === arguments.length) f.call(this, 0, 0); else if (1 === arguments.length) { var t = arguments[0]; f.call(this, t.x, t.y, t.z) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; f.call(this, e, n, f.NULL_ORDINATE) } else if (3 === arguments.length) { var i = arguments[0], r = arguments[1], s = arguments[2]; this.x = i, this.y = r, this.z = s } } function d() { if (this.dimensionsToTest = 2, 0 === arguments.length) d.call(this, 2); else if (1 === arguments.length) { var t = arguments[0]; if (2 !== t && 3 !== t) throw new i("only 2 or 3 dimensions may be specified"); this.dimensionsToTest = t } } function m() { } function p() { } function v(t) { this.message = t || "" } function y() { } function x(t) { this.message = t || "" } function E(t) { this.message = t || "" } function I() { this.array_ = [], arguments[0] instanceof p && this.addAll(arguments[0]) } function N() { if (I.apply(this), 0 === arguments.length); else if (1 === arguments.length) { var t = arguments[0]; this.ensureCapacity(t.length), this.add(t, !0) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.ensureCapacity(e.length), this.add(e, n) } } function C() { if (this.minx = null, this.maxx = null, this.miny = null, this.maxy = null, 0 === arguments.length) this.init(); else if (1 === arguments.length) { if (arguments[0] instanceof f) { var t = arguments[0]; this.init(t.x, t.x, t.y, t.y) } else if (arguments[0] instanceof C) { var e = arguments[0]; this.init(e) } } else if (2 === arguments.length) { var n = arguments[0], i = arguments[1]; this.init(n.x, i.x, n.y, i.y) } else if (4 === arguments.length) { var r = arguments[0], s = arguments[1], o = arguments[2], a = arguments[3]; this.init(r, s, o, a) } } function w() { } function S() { w.call(this, "Projective point not representable on the Cartesian plane.") } function L() { } function R(t, e) { return t.interfaces_ && t.interfaces_().indexOf(e) > -1 } function b() { } function T(t) { this.str = t } function P(t) { this.value = t } function O() { } function M() { if (this.hi = 0, this.lo = 0, 0 === arguments.length) this.init(0); else if (1 === arguments.length) { if ("number" == typeof arguments[0]) { var t = arguments[0]; this.init(t) } else if (arguments[0] instanceof M) { var e = arguments[0]; this.init(e) } else if ("string" == typeof arguments[0]) { var n = arguments[0]; M.call(this, M.parse(n)) } } else if (2 === arguments.length) { var i = arguments[0], r = arguments[1]; this.init(i, r) } } function _() { } function A() { } function D() { } function F() { if (this.x = null, this.y = null, this.w = null, 0 === arguments.length) this.x = 0, this.y = 0, this.w = 1; else if (1 === arguments.length) { var t = arguments[0]; this.x = t.x, this.y = t.y, this.w = 1 } else if (2 === arguments.length) { if ("number" == typeof arguments[0] && "number" == typeof arguments[1]) { var e = arguments[0], n = arguments[1]; this.x = e, this.y = n, this.w = 1 } else if (arguments[0] instanceof F && arguments[1] instanceof F) { var i = arguments[0], r = arguments[1]; this.x = i.y * r.w - r.y * i.w, this.y = r.x * i.w - i.x * r.w, this.w = i.x * r.y - r.x * i.y } else if (arguments[0] instanceof f && arguments[1] instanceof f) { var s = arguments[0], o = arguments[1]; this.x = s.y - o.y, this.y = o.x - s.x, this.w = s.x * o.y - o.x * s.y } } else if (3 === arguments.length) { var a = arguments[0], u = arguments[1], l = arguments[2]; this.x = a, this.y = u, this.w = l } else if (4 === arguments.length) { var h = arguments[0], c = arguments[1], g = arguments[2], d = arguments[3], m = h.y - c.y, p = c.x - h.x, v = h.x * c.y - c.x * h.y, y = g.y - d.y, x = d.x - g.x, E = g.x * d.y - d.x * g.y; this.x = p * E - x * v, this.y = y * v - m * E, this.w = m * x - y * p } } function G() { } function q() { } function B() { this.envelope = null, this.factory = null, this.SRID = null, this.userData = null; var t = arguments[0]; this.factory = t, this.SRID = t.getSRID() } function z() { } function V() { } function k() { } function U() { } function Y() { } function X() { } function H() { } function W() { } function j() { } function Z() { } function J() { } function K() { } function Q() { this.array_ = [], arguments[0] instanceof p && this.addAll(arguments[0]) } function $(t) { return null == t ? $s : t.color } function tt(t) { return null == t ? null : t.parent } function et(t, e) { null !== t && (t.color = e) } function nt(t) { return null == t ? null : t.left } function it(t) { return null == t ? null : t.right } function rt() { this.root_ = null, this.size_ = 0 } function st() { } function ot() { } function at() { this.array_ = [], arguments[0] instanceof p && this.addAll(arguments[0]) } function ut() { } function lt() { } function ht() { } function ct() { } function gt() { this.geometries = null; var t = arguments[0], e = arguments[1]; if (B.call(this, e), null === t && (t = []), B.hasNullElements(t)) throw new i("geometries must not contain null elements"); this.geometries = t } function ft() { var t = arguments[0], e = arguments[1]; gt.call(this, t, e) } function dt() { if (this.geom = null, this.geomFact = null, this.bnRule = null, this.endpointMap = null, 1 === arguments.length) { var t = arguments[0]; dt.call(this, t, V.MOD2_BOUNDARY_RULE) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.geom = e, this.geomFact = e.getFactory(), this.bnRule = n } } function mt() { this.count = null } function pt() { } function vt() { } function yt() { } function xt() { } function Et() { } function It() { } function Nt() { } function Ct() { } function wt() { this.points = null; var t = arguments[0], e = arguments[1]; B.call(this, e), this.init(t) } function St() { } function Lt() { this.coordinates = null; var t = arguments[0], e = arguments[1]; B.call(this, e), this.init(t) } function Rt() { } function bt() { this.shell = null, this.holes = null; var t = arguments[0], e = arguments[1], n = arguments[2]; if (B.call(this, n), null === t && (t = this.getFactory().createLinearRing()), null === e && (e = []), B.hasNullElements(e)) throw new i("holes must not contain null elements"); if (t.isEmpty() && B.hasNonEmptyElements(e)) throw new i("shell is empty but holes are not"); this.shell = t, this.holes = e } function Tt() { var t = arguments[0], e = arguments[1]; gt.call(this, t, e) } function Pt() { if (arguments[0] instanceof f && arguments[1] instanceof ie) { var t = arguments[0], e = arguments[1]; Pt.call(this, e.getCoordinateSequenceFactory().create(t), e) } else if (R(arguments[0], A) && arguments[1] instanceof ie) { var n = arguments[0], i = arguments[1]; wt.call(this, n, i), this.validateConstruction() } } function Ot() { var t = arguments[0], e = arguments[1]; gt.call(this, t, e) } function Mt() { if (this.factory = null, this.isUserDataCopied = !1, 0 === arguments.length); else if (1 === arguments.length) { var t = arguments[0]; this.factory = t } } function _t() { } function At() { } function Dt() { } function Ft() { } function Gt() { if (this.dimension = 3, this.coordinates = null, 1 === arguments.length) { if (arguments[0] instanceof Array) { var t = arguments[0]; Gt.call(this, t, 3) } else if (Number.isInteger(arguments[0])) { var e = arguments[0]; this.coordinates = new Array(e).fill(null); for (var n = 0; e > n; n++)this.coordinates[n] = new f } else if (R(arguments[0], A)) { var i = arguments[0]; if (null === i) return this.coordinates = new Array(0).fill(null), null; this.dimension = i.getDimension(), this.coordinates = new Array(i.size()).fill(null); for (var n = 0; n < this.coordinates.length; n++)this.coordinates[n] = i.getCoordinateCopy(n) } } else if (2 === arguments.length) if (arguments[0] instanceof Array && Number.isInteger(arguments[1])) { var r = arguments[0], s = arguments[1]; this.coordinates = r, this.dimension = s, null === r && (this.coordinates = new Array(0).fill(null)) } else if (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1])) { var o = arguments[0], a = arguments[1]; this.coordinates = new Array(o).fill(null), this.dimension = a; for (var n = 0; o > n; n++)this.coordinates[n] = new f } } function qt() { } function Bt(t, e) { return t === e || t !== t && e !== e } function zt(t, e) { function n(t) { return this && this.constructor === n ? (this._keys = [], this._values = [], this._itp = [], this.objectOnly = e, void (t && Vt.call(this, t))) : new n(t) } return e || io(t, "size", { get: Qt }), t.constructor = n, n.prototype = t, n } function Vt(t) { this.add ? t.forEach(this.add, this) : t.forEach(function (t) { this.set(t[0], t[1]) }, this) } function kt(t) { return this.has(t) && (this._keys.splice(no, 1), this._values.splice(no, 1), this._itp.forEach(function (t) { no < t[0] && t[0]-- })), no > -1 } function Ut(t) { return this.has(t) ? this._values[no] : void 0 } function Yt(t, e) { if (this.objectOnly && e !== Object(e)) throw new TypeError("Invalid value used as weak collection key"); if (e !== e || 0 === e) for (no = t.length; no-- && !Bt(t[no], e);); else no = t.indexOf(e); return no > -1 } function Xt(t) { return Yt.call(this, this._keys, t) } function Ht(t, e) { return this.has(t) ? this._values[no] = e : this._values[this._keys.push(t) - 1] = e, this } function Wt() { (this._keys || 0).length = this._values.length = 0 } function jt() { return Kt(this._itp, this._keys) } function Zt() { return Kt(this._itp, this._values) } function Jt() { return Kt(this._itp, this._keys, this._values) } function Kt(t, e, n) { var i = [0], r = !1; return t.push(i), { next: function () { var s, o = i[0]; return !r && o < e.length ? (s = n ? [e[o], n[o]] : e[o], i[0]++) : (r = !0, t.splice(t.indexOf(i), 1)), { done: r, value: s } } } } function Qt() { return this._values.length } function $t(t, e) { for (var n = this.entries(); ;) { var i = n.next(); if (i.done) break; t.call(e, i.value[1], i.value[0], this) } } function te() { this.map_ = new so } function ee() { if (this.modelType = null, this.scale = null, 0 === arguments.length) this.modelType = ee.FLOATING; else if (1 === arguments.length) if (arguments[0] instanceof ne) { var t = arguments[0]; this.modelType = t, t === ee.FIXED && this.setScale(1) } else if ("number" == typeof arguments[0]) { var e = arguments[0]; this.modelType = ee.FIXED, this.setScale(e) } else if (arguments[0] instanceof ee) { var n = arguments[0]; this.modelType = n.modelType, this.scale = n.scale } } function ne() { this.name = null; var t = arguments[0]; this.name = t, ne.nameToTypeMap.put(t, this) } function ie() { if (this.precisionModel = null, this.coordinateSequenceFactory = null, this.SRID = null, 0 === arguments.length) ie.call(this, new ee, 0); else if (1 === arguments.length) { if (R(arguments[0], G)) { var t = arguments[0]; ie.call(this, new ee, 0, t) } else if (arguments[0] instanceof ee) { var e = arguments[0]; ie.call(this, e, 0, ie.getDefaultCoordinateSequenceFactory()) } } else if (2 === arguments.length) { var n = arguments[0], i = arguments[1]; ie.call(this, n, i, ie.getDefaultCoordinateSequenceFactory()) } else if (3 === arguments.length) { var r = arguments[0], s = arguments[1], o = arguments[2]; this.precisionModel = r, this.coordinateSequenceFactory = o, this.SRID = s } } function re(t) { this.geometryFactory = t || new ie } function se(t) { this.parser = new re(t) } function oe() { this.result = null, this.inputLines = Array(2).fill().map(function () { return Array(2) }), this.intPt = new Array(2).fill(null), this.intLineIndex = null, this._isProper = null, this.pa = null, this.pb = null, this.precisionModel = null, this.intPt[0] = new f, this.intPt[1] = new f, this.pa = this.intPt[0], this.pb = this.intPt[1], this.result = 0 } function ae() { oe.apply(this) } function ue() { } function le() { this.p = null, this.crossingCount = 0, this.isPointOnSegment = !1; var t = arguments[0]; this.p = t } function he() { } function ce() { if (this.p0 = null, this.p1 = null, 0 === arguments.length) ce.call(this, new f, new f); else if (1 === arguments.length) { var t = arguments[0]; ce.call(this, t.p0, t.p1) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.p0 = e, this.p1 = n } else if (4 === arguments.length) { var i = arguments[0], r = arguments[1], s = arguments[2], o = arguments[3]; ce.call(this, new f(i, r), new f(s, o)) } } function ge() { if (this.matrix = null, 0 === arguments.length) this.matrix = Array(3).fill().map(function () { return Array(3) }), this.setAll(lt.FALSE); else if (1 === arguments.length) if ("string" == typeof arguments[0]) { var t = arguments[0]; ge.call(this), this.set(t) } else if (arguments[0] instanceof ge) { var e = arguments[0]; ge.call(this), this.matrix[L.INTERIOR][L.INTERIOR] = e.matrix[L.INTERIOR][L.INTERIOR], this.matrix[L.INTERIOR][L.BOUNDARY] = e.matrix[L.INTERIOR][L.BOUNDARY], this.matrix[L.INTERIOR][L.EXTERIOR] = e.matrix[L.INTERIOR][L.EXTERIOR], this.matrix[L.BOUNDARY][L.INTERIOR] = e.matrix[L.BOUNDARY][L.INTERIOR], this.matrix[L.BOUNDARY][L.BOUNDARY] = e.matrix[L.BOUNDARY][L.BOUNDARY], this.matrix[L.BOUNDARY][L.EXTERIOR] = e.matrix[L.BOUNDARY][L.EXTERIOR], this.matrix[L.EXTERIOR][L.INTERIOR] = e.matrix[L.EXTERIOR][L.INTERIOR], this.matrix[L.EXTERIOR][L.BOUNDARY] = e.matrix[L.EXTERIOR][L.BOUNDARY], this.matrix[L.EXTERIOR][L.EXTERIOR] = e.matrix[L.EXTERIOR][L.EXTERIOR] } } function fe() { this.areaBasePt = null, this.triangleCent3 = new f, this.areasum2 = 0, this.cg3 = new f, this.lineCentSum = new f, this.totalLength = 0, this.ptCount = 0, this.ptCentSum = new f; var t = arguments[0]; this.areaBasePt = null, this.add(t) } function de(t) { this.message = t || "" } function me() { this.array_ = [] } function pe() { this.treeSet = new at, this.list = new I } function ve() { if (this.geomFactory = null, this.inputPts = null, 1 === arguments.length) { var t = arguments[0]; ve.call(this, ve.extractCoordinates(t), t.getFactory()) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.inputPts = pe.filterCoordinates(e), this.geomFactory = n } } function ye() { this.origin = null; var t = arguments[0]; this.origin = t } function xe() { this.inputGeom = null, this.factory = null, this.pruneEmptyGeometry = !0, this.preserveGeometryCollectionType = !0, this.preserveCollections = !1, this.preserveType = !1 } function Ee() { if (this.snapTolerance = 0, this.srcPts = null, this.seg = new ce, this.allowSnappingToSourceVertices = !1, this._isClosed = !1, arguments[0] instanceof wt && "number" == typeof arguments[1]) { var t = arguments[0], e = arguments[1]; Ee.call(this, t.getCoordinates(), e) } else if (arguments[0] instanceof Array && "number" == typeof arguments[1]) { var n = arguments[0], i = arguments[1]; this.srcPts = n, this._isClosed = Ee.isClosed(n), this.snapTolerance = i } } function Ie() { this.srcGeom = null; var t = arguments[0]; this.srcGeom = t } function Ne() { if (xe.apply(this), this.snapTolerance = null, this.snapPts = null, this.isSelfSnap = !1, 2 === arguments.length) { var t = arguments[0], e = arguments[1]; this.snapTolerance = t, this.snapPts = e } else if (3 === arguments.length) { var n = arguments[0], i = arguments[1], r = arguments[2]; this.snapTolerance = n, this.snapPts = i, this.isSelfSnap = r } } function Ce() { this.isFirst = !0, this.commonMantissaBitsCount = 53, this.commonBits = 0, this.commonSignExp = null } function we() { this.commonCoord = null, this.ccFilter = new Se } function Se() { this.commonBitsX = new Ce, this.commonBitsY = new Ce } function Le() { this.trans = null; var t = arguments[0]; this.trans = t } function Re() { this.parent = null, this.atStart = null, this.max = null, this.index = null, this.subcollectionIterator = null; var t = arguments[0]; this.parent = t, this.atStart = !0, this.index = 0, this.max = t.getNumGeometries() } function be() { if (this.boundaryRule = V.OGC_SFS_BOUNDARY_RULE, this.isIn = null, this.numBoundaries = null, 0 === arguments.length); else if (1 === arguments.length) { var t = arguments[0]; if (null === t) throw new i("Rule must be non-null"); this.boundaryRule = t } } function Te() { } function Pe() { } function Oe() { this.pts = null, this.data = null; var t = arguments[0], e = arguments[1]; this.pts = t, this.data = e } function Me() { } function _e() { this.bounds = null, this.item = null; var t = arguments[0], e = arguments[1]; this.bounds = t, this.item = e } function Ae() { this._size = null, this.items = null, this._size = 0, this.items = new I, this.items.add(null) } function De() { } function Fe() { } function Ge() { if (this.childBoundables = new I, this.bounds = null, this.level = null, 0 === arguments.length); else if (1 === arguments.length) { var t = arguments[0]; this.level = t } } function qe() { this.boundable1 = null, this.boundable2 = null, this._distance = null, this.itemDistance = null; var t = arguments[0], e = arguments[1], n = arguments[2]; this.boundable1 = t, this.boundable2 = e, this.itemDistance = n, this._distance = this.distance() } function Be() { if (this.root = null, this.built = !1, this.itemBoundables = new I, this.nodeCapacity = null, 0 === arguments.length) Be.call(this, Be.DEFAULT_NODE_CAPACITY); else if (1 === arguments.length) { var t = arguments[0]; g.isTrue(t > 1, "Node capacity must be greater than 1"), this.nodeCapacity = t } } function ze() { } function Ve() { } function ke() { if (0 === arguments.length) ke.call(this, ke.DEFAULT_NODE_CAPACITY); else if (1 === arguments.length) { var t = arguments[0]; Be.call(this, t) } } function Ue() { var t = arguments[0]; Ge.call(this, t) } function Ye() { } function Xe() { this.segString = null, this.coord = null, this.segmentIndex = null, this.segmentOctant = null, this._isInterior = null; var t = arguments[0], e = arguments[1], n = arguments[2], i = arguments[3]; this.segString = t, this.coord = new f(e), this.segmentIndex = n, this.segmentOctant = i, this._isInterior = !e.equals2D(t.getCoordinate(n)) } function He() { this.nodeMap = new rt, this.edge = null; var t = arguments[0]; this.edge = t } function We() { this.nodeList = null, this.edge = null, this.nodeIt = null, this.currNode = null, this.nextNode = null, this.currSegIndex = 0; var t = arguments[0]; this.nodeList = t, this.edge = t.getEdge(), this.nodeIt = t.iterator(), this.readNextNode() } function je() { } function Ze() { this.nodeList = new He(this), this.pts = null, this.data = null; var t = arguments[0], e = arguments[1]; this.pts = t, this.data = e } function Je() { this.tempEnv1 = new C, this.tempEnv2 = new C, this.overlapSeg1 = new ce, this.overlapSeg2 = new ce } function Ke() { this.pts = null, this.start = null, this.end = null, this.env = null, this.context = null, this.id = null; var t = arguments[0], e = arguments[1], n = arguments[2], i = arguments[3]; this.pts = t, this.start = e, this.end = n, this.context = i } function Qe() { } function $e() { } function tn() { } function en() { if (this.segInt = null, 0 === arguments.length); else if (1 === arguments.length) { var t = arguments[0]; this.setSegmentIntersector(t) } } function nn() { if (this.monoChains = new I, this.index = new ke, this.idCounter = 0, this.nodedSegStrings = null, this.nOverlaps = 0, 0 === arguments.length); else if (1 === arguments.length) { var t = arguments[0]; en.call(this, t) } } function rn() { Je.apply(this), this.si = null; var t = arguments[0]; this.si = t } function sn() { if (this.pt = null, 1 === arguments.length) { var t = arguments[0]; l.call(this, t) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; l.call(this, sn.msgWithCoord(e, n)), this.pt = new f(n) } } function on() { } function an() { this.findAllIntersections = !1, this.isCheckEndSegmentsOnly = !1, this.li = null, this.interiorIntersection = null, this.intSegments = null, this.intersections = new I, this.intersectionCount = 0, this.keepIntersections = !0; var t = arguments[0]; this.li = t, this.interiorIntersection = null } function un() { this.li = new ae, this.segStrings = null, this.findAllIntersections = !1, this.segInt = null, this._isValid = !0; var t = arguments[0]; this.segStrings = t } function ln() { this.nv = null; var t = arguments[0]; this.nv = new un(ln.toSegmentStrings(t)) } function hn() { this.mapOp = null; var t = arguments[0]; this.mapOp = t } function cn() { } function gn() { if (this.location = null, 1 === arguments.length) { if (arguments[0] instanceof Array) { var t = arguments[0]; this.init(t.length) } else if (Number.isInteger(arguments[0])) { var e = arguments[0]; this.init(1), this.location[cn.ON] = e } else if (arguments[0] instanceof gn) { var n = arguments[0]; if (this.init(n.location.length), null !== n) for (var i = 0; i < this.location.length; i++)this.location[i] = n.location[i] } } else if (3 === arguments.length) { var r = arguments[0], s = arguments[1], o = arguments[2]; this.init(3), this.location[cn.ON] = r, this.location[cn.LEFT] = s, this.location[cn.RIGHT] = o } } function fn() { if (this.elt = new Array(2).fill(null), 1 === arguments.length) { if (Number.isInteger(arguments[0])) { var t = arguments[0]; this.elt[0] = new gn(t), this.elt[1] = new gn(t) } else if (arguments[0] instanceof fn) { var e = arguments[0]; this.elt[0] = new gn(e.elt[0]), this.elt[1] = new gn(e.elt[1]) } } else if (2 === arguments.length) { var n = arguments[0], i = arguments[1]; this.elt[0] = new gn(L.NONE), this.elt[1] = new gn(L.NONE), this.elt[n].setLocation(i) } else if (3 === arguments.length) { var r = arguments[0], s = arguments[1], o = arguments[2]; this.elt[0] = new gn(r, s, o), this.elt[1] = new gn(r, s, o) } else if (4 === arguments.length) { var a = arguments[0], u = arguments[1], l = arguments[2], h = arguments[3]; this.elt[0] = new gn(L.NONE, L.NONE, L.NONE), this.elt[1] = new gn(L.NONE, L.NONE, L.NONE), this.elt[a].setLocations(u, l, h) } } function dn() { this.startDe = null, this.maxNodeDegree = -1, this.edges = new I, this.pts = new I, this.label = new fn(L.NONE), this.ring = null, this._isHole = null, this.shell = null, this.holes = new I, this.geometryFactory = null; var t = arguments[0], e = arguments[1]; this.geometryFactory = e, this.computePoints(t), this.computeRing() } function mn() { var t = arguments[0], e = arguments[1]; dn.call(this, t, e) } function pn() { var t = arguments[0], e = arguments[1]; dn.call(this, t, e) } function vn() { if (this.label = null, this._isInResult = !1, this._isCovered = !1, this._isCoveredSet = !1, this._isVisited = !1, 0 === arguments.length); else if (1 === arguments.length) { var t = arguments[0]; this.label = t } } function yn() { vn.apply(this), this.coord = null, this.edges = null; var t = arguments[0], e = arguments[1]; this.coord = t, this.edges = e, this.label = new fn(0, L.NONE) } function xn() { this.nodeMap = new rt, this.nodeFact = null; var t = arguments[0]; this.nodeFact = t } function En() { if (this.edge = null, this.label = null, this.node = null, this.p0 = null, this.p1 = null, this.dx = null, this.dy = null, this.quadrant = null, 1 === arguments.length) { var t = arguments[0]; this.edge = t } else if (3 === arguments.length) { var e = arguments[0], n = arguments[1], i = arguments[2]; En.call(this, e, n, i, null) } else if (4 === arguments.length) { var r = arguments[0], s = arguments[1], o = arguments[2], a = arguments[3]; En.call(this, r), this.init(s, o), this.label = a } } function In() { this._isForward = null, this._isInResult = !1, this._isVisited = !1, this.sym = null, this.next = null, this.nextMin = null, this.edgeRing = null, this.minEdgeRing = null, this.depth = [0, -999, -999]; var t = arguments[0], e = arguments[1]; if (En.call(this, t), this._isForward = e, e) this.init(t.getCoordinate(0), t.getCoordinate(1)); else { var n = t.getNumPoints() - 1; this.init(t.getCoordinate(n), t.getCoordinate(n - 1)) } this.computeDirectedLabel() } function Nn() { } + function Cn() { if (this.edges = new I, this.nodes = null, this.edgeEndList = new I, 0 === arguments.length) this.nodes = new xn(new Nn); else if (1 === arguments.length) { var t = arguments[0]; this.nodes = new xn(t) } } function wn() { this.geometryFactory = null, this.shellList = new I; var t = arguments[0]; this.geometryFactory = t } function Sn() { this.op = null, this.geometryFactory = null, this.ptLocator = null, this.lineEdgesList = new I, this.resultLineList = new I; var t = arguments[0], e = arguments[1], n = arguments[2]; this.op = t, this.geometryFactory = e, this.ptLocator = n } function Ln() { this.op = null, this.geometryFactory = null, this.resultPointList = new I; var t = arguments[0], e = arguments[1]; arguments[2], this.op = t, this.geometryFactory = e } function Rn() { } function bn() { this.geom = null; var t = arguments[0]; this.geom = t } function Tn() { this.edgeMap = new rt, this.edgeList = null, this.ptInAreaLocation = [L.NONE, L.NONE] } function Pn() { Tn.apply(this), this.resultAreaEdgeList = null, this.label = null, this.SCANNING_FOR_INCOMING = 1, this.LINKING_TO_OUTGOING = 2 } function On() { Nn.apply(this) } function Mn() { this.mce = null, this.chainIndex = null; var t = arguments[0], e = arguments[1]; this.mce = t, this.chainIndex = e } function _n() { if (this.label = null, this.xValue = null, this.eventType = null, this.insertEvent = null, this.deleteEventIndex = null, this.obj = null, 2 === arguments.length) { var t = arguments[0], e = arguments[1]; this.eventType = _n.DELETE, this.xValue = t, this.insertEvent = e } else if (3 === arguments.length) { var n = arguments[0], i = arguments[1], r = arguments[2]; this.eventType = _n.INSERT, this.label = n, this.xValue = i, this.obj = r } } function An() { } function Dn() { this._hasIntersection = !1, this.hasProper = !1, this.hasProperInterior = !1, this.properIntersectionPoint = null, this.li = null, this.includeProper = null, this.recordIsolated = null, this.isSelfIntersection = null, this.numIntersections = 0, this.numTests = 0, this.bdyNodes = null, this._isDone = !1, this.isDoneWhenProperInt = !1; var t = arguments[0], e = arguments[1], n = arguments[2]; this.li = t, this.includeProper = e, this.recordIsolated = n } function Fn() { An.apply(this), this.events = new I, this.nOverlaps = null } function Gn() { this.min = r.POSITIVE_INFINITY, this.max = r.NEGATIVE_INFINITY } function qn() { } function Bn() { Gn.apply(this), this.item = null; var t = arguments[0], e = arguments[1], n = arguments[2]; this.min = t, this.max = e, this.item = n } function zn() { Gn.apply(this), this.node1 = null, this.node2 = null; var t = arguments[0], e = arguments[1]; this.node1 = t, this.node2 = e, this.buildExtent(this.node1, this.node2) } function Vn() { this.leaves = new I, this.root = null, this.level = 0 } function kn() { if (this.lines = null, this.isForcedToLineString = !1, 1 === arguments.length) { var t = arguments[0]; this.lines = t } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.lines = e, this.isForcedToLineString = n } } function Un() { this.items = new I } function Yn() { this.index = null; var t = arguments[0]; if (!R(t, Rt)) throw new i("Argument must be Polygonal"); this.index = new Hn(t) } function Xn() { this.counter = null; var t = arguments[0]; this.counter = t } function Hn() { this.index = new Vn; var t = arguments[0]; this.init(t) } function Wn() { this.coord = null, this.segmentIndex = null, this.dist = null; var t = arguments[0], e = arguments[1], n = arguments[2]; this.coord = new f(t), this.segmentIndex = e, this.dist = n } function jn() { this.nodeMap = new rt, this.edge = null; var t = arguments[0]; this.edge = t } function Zn() { } function Jn() { this.e = null, this.pts = null, this.startIndex = null, this.env1 = new C, this.env2 = new C; var t = arguments[0]; this.e = t, this.pts = t.getCoordinates(); var e = new Zn; this.startIndex = e.getChainStartIndices(this.pts) } function Kn() { this.depth = Array(2).fill().map(function () { return Array(3) }); for (var t = 0; 2 > t; t++)for (var e = 0; 3 > e; e++)this.depth[t][e] = Kn.NULL_VALUE } function Qn() { if (vn.apply(this), this.pts = null, this.env = null, this.eiList = new jn(this), this.name = null, this.mce = null, this._isIsolated = !0, this.depth = new Kn, this.depthDelta = 0, 1 === arguments.length) { var t = arguments[0]; Qn.call(this, t, null) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.pts = e, this.label = n } } function $n() { if (Cn.apply(this), this.parentGeom = null, this.lineEdgeMap = new te, this.boundaryNodeRule = null, this.useBoundaryDeterminationRule = !0, this.argIndex = null, this.boundaryNodes = null, this._hasTooFewPoints = !1, this.invalidPoint = null, this.areaPtLocator = null, this.ptLocator = new be, 2 === arguments.length) { var t = arguments[0], e = arguments[1]; $n.call(this, t, e, V.OGC_SFS_BOUNDARY_RULE) } else if (3 === arguments.length) { var n = arguments[0], i = arguments[1], r = arguments[2]; this.argIndex = n, this.parentGeom = i, this.boundaryNodeRule = r, null !== i && this.add(i) } } function ti() { if (this.li = new ae, this.resultPrecisionModel = null, this.arg = null, 1 === arguments.length) { var t = arguments[0]; this.setComputationPrecision(t.getPrecisionModel()), this.arg = new Array(1).fill(null), this.arg[0] = new $n(0, t) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; ti.call(this, e, n, V.OGC_SFS_BOUNDARY_RULE) } else if (3 === arguments.length) { var i = arguments[0], r = arguments[1], s = arguments[2]; i.getPrecisionModel().compareTo(r.getPrecisionModel()) >= 0 ? this.setComputationPrecision(i.getPrecisionModel()) : this.setComputationPrecision(r.getPrecisionModel()), this.arg = new Array(2).fill(null), this.arg[0] = new $n(0, i, s), this.arg[1] = new $n(1, r, s) } } function ei() { this.pts = null, this._orientation = null; var t = arguments[0]; this.pts = t, this._orientation = ei.orientation(t) } function ni() { this.edges = new I, this.ocaMap = new rt } function ii() { this.ptLocator = new be, this.geomFact = null, this.resultGeom = null, this.graph = null, this.edgeList = new ni, this.resultPolyList = new I, this.resultLineList = new I, this.resultPointList = new I; var t = arguments[0], e = arguments[1]; ti.call(this, t, e), this.graph = new Cn(new On), this.geomFact = t.getFactory() } function ri() { this.geom = new Array(2).fill(null), this.snapTolerance = null, this.cbr = null; var t = arguments[0], e = arguments[1]; this.geom[0] = t, this.geom[1] = e, this.computeSnapTolerance() } function si() { this.geom = new Array(2).fill(null); var t = arguments[0], e = arguments[1]; this.geom[0] = t, this.geom[1] = e } function oi() { this.factory = null, this.interiorPoint = null, this.maxWidth = 0; var t = arguments[0]; this.factory = t.getFactory(), this.add(t) } function ai() { this.poly = null, this.centreY = null, this.hiY = r.MAX_VALUE, this.loY = -r.MAX_VALUE; var t = arguments[0]; this.poly = t, this.hiY = t.getEnvelopeInternal().getMaxY(), this.loY = t.getEnvelopeInternal().getMinY(), this.centreY = oi.avg(this.loY, this.hiY) } function ui() { this.centroid = null, this.minDistance = r.MAX_VALUE, this.interiorPoint = null; var t = arguments[0]; this.centroid = t.getCentroid().getCoordinate(), this.addInterior(t), null === this.interiorPoint && this.addEndpoints(t) } function li() { this.centroid = null, this.minDistance = r.MAX_VALUE, this.interiorPoint = null; var t = arguments[0]; this.centroid = t.getCentroid().getCoordinate(), this.add(t) } function hi() { } function ci() { this.p0 = null, this.p1 = null, this.p2 = null; var t = arguments[0], e = arguments[1], n = arguments[2]; this.p0 = t, this.p1 = e, this.p2 = n } function gi() { this.input = null, this.extremalPts = null, this.centre = null, this.radius = 0; var t = arguments[0]; this.input = t } function fi() { if (this.inputGeom = null, this.isConvex = null, this.convexHullPts = null, this.minBaseSeg = new ce, this.minWidthPt = null, this.minPtIndex = null, this.minWidth = 0, 1 === arguments.length) { var t = arguments[0]; fi.call(this, t, !1) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.inputGeom = e, this.isConvex = n } } function di() { this.inputGeom = null, this.distanceTolerance = null; var t = arguments[0]; this.inputGeom = t } function mi() { xe.apply(this), this.distanceTolerance = null; var t = arguments[0]; this.distanceTolerance = t } function pi() { this._orig = null, this._sym = null, this._next = null; var t = arguments[0]; this._orig = t } function vi() { this._isMarked = !1; var t = arguments[0]; pi.call(this, t) } function yi() { this.vertexMap = new te } function xi() { this._isStart = !1; var t = arguments[0]; vi.call(this, t) } function Ei() { yi.apply(this) } function Ii() { this.result = null, this.factory = null, this.graph = null, this.lines = new I, this.nodeEdgeStack = new me, this.ringStartEdge = null, this.graph = new Ei } function Ni() { this.items = new I, this.subnode = new Array(4).fill(null) } function Ci() { } function wi(t, e) { var n, i, r, s, o = { 32: { d: 127, c: 128, b: 0, a: 0 }, 64: { d: 32752, c: 0, b: 0, a: 0 } }, a = { 32: 8, 64: 11 }[t]; if (s || (n = 0 > e || 0 > 1 / e, isFinite(e) || (s = o[t], n && (s.d += 1 << t / 4 - 1), i = Math.pow(2, a) - 1, r = 0)), !s) { for (i = { 32: 127, 64: 1023 }[t], r = Math.abs(e); r >= 2;)i++ , r /= 2; for (; 1 > r && i > 0;)i-- , r *= 2; 0 >= i && (r /= 2), 32 === t && i > 254 && (s = { d: n ? 255 : 127, c: 128, b: 0, a: 0 }, i = Math.pow(2, a) - 1, r = 0) } return i } function Si() { this.pt = new f, this.level = 0, this.env = null; var t = arguments[0]; this.computeKey(t) } function Li() { Ni.apply(this), this.env = null, this.centrex = null, this.centrey = null, this.level = null; var t = arguments[0], e = arguments[1]; this.env = t, this.level = e, this.centrex = (t.getMinX() + t.getMaxX()) / 2, this.centrey = (t.getMinY() + t.getMaxY()) / 2 } function Ri() { } function bi() { Ni.apply(this) } function Ti() { this.root = null, this.minExtent = 1, this.root = new bi } function Pi(t) { this.geometryFactory = t || new ie } function Oi(t) { this.geometryFactory = t || new ie, this.precisionModel = this.geometryFactory.getPrecisionModel(), this.parser = new Pi(this.geometryFactory) } function Mi() { this.parser = new Pi(this.geometryFactory) } function _i(t) { this.geometryFactory = t || new ie, this.precisionModel = this.geometryFactory.getPrecisionModel(), this.parser = new re(this.geometryFactory) } function Ai(t) { return [t.x, t.y] } function Di(t) { this.geometryFactory = t || new ie } function Fi() { if (this.noder = null, this.scaleFactor = null, this.offsetX = null, this.offsetY = null, this.isScaled = !1, 2 === arguments.length) { var t = arguments[0], e = arguments[1]; Fi.call(this, t, e, 0, 0) } else if (4 === arguments.length) { var n = arguments[0], i = arguments[1]; arguments[2], arguments[3], this.noder = n, this.scaleFactor = i, this.isScaled = !this.isIntegerPrecision() } } function Gi() { if (this.inputGeom = null, this.isClosedEndpointsInInterior = !0, this.nonSimpleLocation = null, 1 === arguments.length) { var t = arguments[0]; this.inputGeom = t } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.inputGeom = e, this.isClosedEndpointsInInterior = !n.isInBoundary(2) } } function qi() { this.pt = null, this.isClosed = null, this.degree = null; var t = arguments[0]; this.pt = t, this.isClosed = !1, this.degree = 0 } function Bi() { if (this.quadrantSegments = Bi.DEFAULT_QUADRANT_SEGMENTS, this.endCapStyle = Bi.CAP_ROUND, this.joinStyle = Bi.JOIN_ROUND, this.mitreLimit = Bi.DEFAULT_MITRE_LIMIT, this._isSingleSided = !1, this.simplifyFactor = Bi.DEFAULT_SIMPLIFY_FACTOR, 0 === arguments.length); else if (1 === arguments.length) { var t = arguments[0]; this.setQuadrantSegments(t) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.setQuadrantSegments(e), this.setEndCapStyle(n) } else if (4 === arguments.length) { var i = arguments[0], r = arguments[1], s = arguments[2], o = arguments[3]; this.setQuadrantSegments(i), this.setEndCapStyle(r), this.setJoinStyle(s), this.setMitreLimit(o) } } function zi() { this.minIndex = -1, this.minCoord = null, this.minDe = null, this.orientedDe = null } function Vi() { this.array_ = [] } function ki() { this.finder = null, this.dirEdgeList = new I, this.nodes = new I, this.rightMostCoord = null, this.env = null, this.finder = new zi } function Ui() { this.inputLine = null, this.distanceTol = null, this.isDeleted = null, this.angleOrientation = he.COUNTERCLOCKWISE; var t = arguments[0]; this.inputLine = t } function Yi() { this.ptList = null, this.precisionModel = null, this.minimimVertexDistance = 0, this.ptList = new I } function Xi() { this.maxCurveSegmentError = 0, this.filletAngleQuantum = null, this.closingSegLengthFactor = 1, this.segList = null, this.distance = 0, this.precisionModel = null, this.bufParams = null, this.li = null, this.s0 = null, this.s1 = null, this.s2 = null, this.seg0 = new ce, this.seg1 = new ce, this.offset0 = new ce, this.offset1 = new ce, this.side = 0, this._hasNarrowConcaveAngle = !1; var t = arguments[0], e = arguments[1], n = arguments[2]; this.precisionModel = t, this.bufParams = e, this.li = new ae, this.filletAngleQuantum = Math.PI / 2 / e.getQuadrantSegments(), e.getQuadrantSegments() >= 8 && e.getJoinStyle() === Bi.JOIN_ROUND && (this.closingSegLengthFactor = Xi.MAX_CLOSING_SEG_LEN_FACTOR), this.init(n) } function Hi() { this.distance = 0, this.precisionModel = null, this.bufParams = null; var t = arguments[0], e = arguments[1]; this.precisionModel = t, this.bufParams = e } function Wi() { this.subgraphs = null, this.seg = new ce, this.cga = new he; var t = arguments[0]; this.subgraphs = t } function ji() { this.upwardSeg = null, this.leftDepth = null; var t = arguments[0], e = arguments[1]; this.upwardSeg = new ce(t), this.leftDepth = e } function Zi() { this.inputGeom = null, this.distance = null, this.curveBuilder = null, this.curveList = new I; var t = arguments[0], e = arguments[1], n = arguments[2]; this.inputGeom = t, this.distance = e, this.curveBuilder = n } function Ji() { this._hasIntersection = !1, this.hasProper = !1, this.hasProperInterior = !1, this.hasInterior = !1, this.properIntersectionPoint = null, this.li = null, this.isSelfIntersection = null, this.numIntersections = 0, this.numInteriorIntersections = 0, this.numProperIntersections = 0, this.numTests = 0; var t = arguments[0]; this.li = t } function Ki() { this.bufParams = null, this.workingPrecisionModel = null, this.workingNoder = null, this.geomFact = null, this.graph = null, this.edgeList = new ni; var t = arguments[0]; this.bufParams = t } function Qi() { this.li = new ae, this.segStrings = null; var t = arguments[0]; this.segStrings = t } function $i() { this.li = null, this.pt = null, this.originalPt = null, this.ptScaled = null, this.p0Scaled = null, this.p1Scaled = null, this.scaleFactor = null, this.minx = null, this.maxx = null, this.miny = null, this.maxy = null, this.corner = new Array(4).fill(null), this.safeEnv = null; var t = arguments[0], e = arguments[1], n = arguments[2]; if (this.originalPt = t, this.pt = t, this.scaleFactor = e, this.li = n, 0 >= e) throw new i("Scale factor must be non-zero"); 1 !== e && (this.pt = new f(this.scale(t.x), this.scale(t.y)), this.p0Scaled = new f, this.p1Scaled = new f), this.initCorners(this.pt) } function tr() { this.tempEnv1 = new C, this.selectedSegment = new ce } function er() { this.index = null; var t = arguments[0]; this.index = t } function nr() { tr.apply(this), this.hotPixel = null, this.parentEdge = null, this.hotPixelVertexIndex = null, this._isNodeAdded = !1; var t = arguments[0], e = arguments[1], n = arguments[2]; this.hotPixel = t, this.parentEdge = e, this.hotPixelVertexIndex = n } function ir() { this.li = null, this.interiorIntersections = null; var t = arguments[0]; this.li = t, this.interiorIntersections = new I } function rr() { this.pm = null, this.li = null, this.scaleFactor = null, this.noder = null, this.pointSnapper = null, this.nodedSegStrings = null; var t = arguments[0]; this.pm = t, this.li = new ae, this.li.setPrecisionModel(t), this.scaleFactor = t.getScale() } function sr() { if (this.argGeom = null, this.distance = null, this.bufParams = new Bi, this.resultGeometry = null, this.saveException = null, 1 === arguments.length) { var t = arguments[0]; this.argGeom = t } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.argGeom = e, this.bufParams = n } } function or() { this.comps = null; var t = arguments[0]; this.comps = t } function ar() { if (this.component = null, this.segIndex = null, this.pt = null, 2 === arguments.length) { var t = arguments[0], e = arguments[1]; ar.call(this, t, ar.INSIDE_AREA, e) } else if (3 === arguments.length) { var n = arguments[0], i = arguments[1], r = arguments[2]; this.component = n, this.segIndex = i, this.pt = r } } function ur() { this.pts = null; var t = arguments[0]; this.pts = t } function lr() { this.locations = null; var t = arguments[0]; this.locations = t } function hr() { if (this.geom = null, this.terminateDistance = 0, this.ptLocator = new be, this.minDistanceLocation = null, this.minDistance = r.MAX_VALUE, 2 === arguments.length) { var t = arguments[0], e = arguments[1]; hr.call(this, t, e, 0) } else if (3 === arguments.length) { var n = arguments[0], i = arguments[1], s = arguments[2]; this.geom = new Array(2).fill(null), this.geom[0] = n, this.geom[1] = i, this.terminateDistance = s } } function cr() { this.factory = null, this.directedEdges = new I, this.coordinates = null; var t = arguments[0]; this.factory = t } function gr() { this._isMarked = !1, this._isVisited = !1, this.data = null } function fr() { gr.apply(this), this.parentEdge = null, this.from = null, this.to = null, this.p0 = null, this.p1 = null, this.sym = null, this.edgeDirection = null, this.quadrant = null, this.angle = null; var t = arguments[0], e = arguments[1], n = arguments[2], i = arguments[3]; this.from = t, this.to = e, this.edgeDirection = i, this.p0 = t.getCoordinate(), this.p1 = n; var r = this.p1.x - this.p0.x, s = this.p1.y - this.p0.y; this.quadrant = Qe.quadrant(r, s), this.angle = Math.atan2(s, r) } function dr() { var t = arguments[0], e = arguments[1], n = arguments[2], i = arguments[3]; fr.call(this, t, e, n, i) } function mr() { if (gr.apply(this), this.dirEdge = null, 0 === arguments.length); else if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; this.setDirectedEdges(t, e) } } function pr() { this.outEdges = new I, this.sorted = !1 } function vr() { if (gr.apply(this), this.pt = null, this.deStar = null, 1 === arguments.length) { var t = arguments[0]; vr.call(this, t, new pr) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.pt = e, this.deStar = n } } function yr() { mr.apply(this), this.line = null; var t = arguments[0]; this.line = t } function xr() { this.nodeMap = new rt } function Er() { this.edges = new Q, this.dirEdges = new Q, this.nodeMap = new xr } function Ir() { Er.apply(this) } function Nr() { this.graph = new Ir, this.mergedLineStrings = null, this.factory = null, this.edgeStrings = null } function Cr() { this.edgeRing = null, this.next = null, this.label = -1; var t = arguments[0], e = arguments[1], n = arguments[2], i = arguments[3]; fr.call(this, t, e, n, i) } function wr() { mr.apply(this), this.line = null; var t = arguments[0]; this.line = t } function Sr() { this.factory = null, this.deList = new I, this.lowestEdge = null, this.ring = null, this.ringPts = null, this.holes = null, this.shell = null, this._isHole = null, this._isProcessed = !1, this._isIncludedSet = !1, this._isIncluded = !1; var t = arguments[0]; this.factory = t } function Lr() { } function Rr() { Er.apply(this), this.factory = null; var t = arguments[0]; this.factory = t } function br() { if (this.lineStringAdder = new Tr(this), this.graph = null, this.dangles = new I, this.cutEdges = new I, this.invalidRingLines = new I, this.holeList = null, this.shellList = null, this.polyList = null, this.isCheckingRingsValid = !0, this.extractOnlyPolygonal = null, this.geomFactory = null, 0 === arguments.length) br.call(this, !1); else if (1 === arguments.length) { var t = arguments[0]; this.extractOnlyPolygonal = t } } function Tr() { this.p = null; var t = arguments[0]; this.p = t } function Pr() { } function Or() { if (this.edgeEnds = new I, 1 === arguments.length) { var t = arguments[0]; Or.call(this, null, t) } else if (2 === arguments.length) { var e = (arguments[0], arguments[1]); En.call(this, e.getEdge(), e.getCoordinate(), e.getDirectedCoordinate(), new fn(e.getLabel())), this.insert(e) } } function Mr() { Tn.apply(this) } function _r() { var t = arguments[0], e = arguments[1]; yn.call(this, t, e) } function Ar() { Nn.apply(this) } function Dr() { this.li = new ae, this.ptLocator = new be, this.arg = null, this.nodes = new xn(new Ar), this.im = null, this.isolatedEdges = new I, this.invalidPoint = null; var t = arguments[0]; this.arg = t } function Fr() { this.rectEnv = null; var t = arguments[0]; this.rectEnv = t.getEnvelopeInternal() } function Gr() { this.li = new ae, this.rectEnv = null, this.diagUp0 = null, this.diagUp1 = null, this.diagDown0 = null, this.diagDown1 = null; var t = arguments[0]; this.rectEnv = t, this.diagUp0 = new f(t.getMinX(), t.getMinY()), this.diagUp1 = new f(t.getMaxX(), t.getMaxY()), this.diagDown0 = new f(t.getMinX(), t.getMaxY()), this.diagDown1 = new f(t.getMaxX(), t.getMinY()) } function qr() { this._isDone = !1 } function Br() { this.rectangle = null, this.rectEnv = null; var t = arguments[0]; this.rectangle = t, this.rectEnv = t.getEnvelopeInternal() } function zr() { qr.apply(this), this.rectEnv = null, this._intersects = !1; var t = arguments[0]; this.rectEnv = t } function Vr() { qr.apply(this), this.rectSeq = null, this.rectEnv = null, this._containsPoint = !1; var t = arguments[0]; this.rectSeq = t.getExteriorRing().getCoordinateSequence(), this.rectEnv = t.getEnvelopeInternal() } function kr() { qr.apply(this), this.rectEnv = null, this.rectIntersector = null, this.hasIntersection = !1, this.p0 = new f, this.p1 = new f; var t = arguments[0]; this.rectEnv = t.getEnvelopeInternal(), this.rectIntersector = new Gr(this.rectEnv) } function Ur() { if (this._relate = null, 2 === arguments.length) { var t = arguments[0], e = arguments[1]; ti.call(this, t, e), this._relate = new Dr(this.arg) } else if (3 === arguments.length) { var n = arguments[0], i = arguments[1], r = arguments[2]; ti.call(this, n, i, r), this._relate = new Dr(this.arg) } } function Yr() { this.geomFactory = null, this.skipEmpty = !1, this.inputGeoms = null; var t = arguments[0]; this.geomFactory = Yr.extractFactory(t), this.inputGeoms = t } function Xr() { this.pointGeom = null, this.otherGeom = null, this.geomFact = null; var t = arguments[0], e = arguments[1]; this.pointGeom = t, this.otherGeom = e, this.geomFact = e.getFactory() } function Hr() { this.sortIndex = -1, this.comps = null; var t = arguments[0], e = arguments[1]; this.sortIndex = t, this.comps = e } function Wr() { this.inputPolys = null, this.geomFactory = null; var t = arguments[0]; this.inputPolys = t, null === this.inputPolys && (this.inputPolys = new I) } function jr() { if (this.polygons = new I, this.lines = new I, this.points = new I, this.geomFact = null, 1 === arguments.length) { if (R(arguments[0], p)) { var t = arguments[0]; this.extract(t) } else if (arguments[0] instanceof B) { var e = arguments[0]; this.extract(e) } } else if (2 === arguments.length) { var n = arguments[0], i = arguments[1]; this.geomFact = i, this.extract(n) } } function Zr() { this.geometryFactory = new ie, this.geomGraph = null, this.disconnectedRingcoord = null; var t = arguments[0]; this.geomGraph = t } function Jr() { this.items = new I, this.subnode = [null, null] } function Kr() { if (this.min = null, this.max = null, 0 === arguments.length) this.min = 0, this.max = 0; else if (1 === arguments.length) { var t = arguments[0]; this.init(t.min, t.max) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.init(e, n) } } function Qr() { this.pt = 0, this.level = 0, this.interval = null; var t = arguments[0]; this.computeKey(t) } function $r() { Jr.apply(this), this.interval = null, this.centre = null, this.level = null; var t = arguments[0], e = arguments[1]; this.interval = t, this.level = e, this.centre = (t.getMin() + t.getMax()) / 2 } function ts() { Jr.apply(this) } function es() { this.root = null, this.minExtent = 1, this.root = new ts } function ns() { } function is() { this.ring = null, this.tree = null, this.crossings = 0, this.interval = new Kr; var t = arguments[0]; this.ring = t, this.buildIndex() } function rs() { tr.apply(this), this.mcp = null, this.p = null; var t = arguments[0], e = arguments[1]; this.mcp = t, this.p = e } function ss() { this.nodes = new xn(new Ar) } function os() { this.li = new ae, this.geomGraph = null, this.nodeGraph = new ss, this.invalidPoint = null; var t = arguments[0]; this.geomGraph = t } function as() { this.graph = null, this.rings = new I, this.totalEnv = new C, this.index = null, this.nestedPt = null; var t = arguments[0]; this.graph = t } function us() { if (this.errorType = null, this.pt = null, 1 === arguments.length) { var t = arguments[0]; us.call(this, t, null) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.errorType = e, null !== n && (this.pt = n.copy()) } } function ls() { this.parentGeometry = null, this.isSelfTouchingRingFormingHoleValid = !1, this.validErr = null; var t = arguments[0]; this.parentGeometry = t } function hs() { Mt.CoordinateOperation.apply(this), this.targetPM = null, this.removeCollapsed = !0; var t = arguments[0], e = arguments[1]; this.targetPM = t, this.removeCollapsed = e } function cs() { this.targetPM = null, this.removeCollapsed = !0, this.changePrecisionModel = !1, this.isPointwise = !1; var t = arguments[0]; this.targetPM = t } function gs() { this.pts = null, this.usePt = null, this.distanceTolerance = null, this.seg = new ce; var t = arguments[0]; this.pts = t } function fs() { this.inputGeom = null, this.distanceTolerance = null, this.isEnsureValidTopology = !0; var t = arguments[0]; this.inputGeom = t } function ds() { xe.apply(this), this.isEnsureValidTopology = !0, this.distanceTolerance = null; var t = arguments[0], e = arguments[1]; this.isEnsureValidTopology = t, this.distanceTolerance = e } function ms() { if (this.parent = null, this.index = null, 2 === arguments.length) { var t = arguments[0], e = arguments[1]; ms.call(this, t, e, null, -1) } else if (4 === arguments.length) { var n = arguments[0], i = arguments[1], r = arguments[2], s = arguments[3]; ce.call(this, n, i), this.parent = r, this.index = s } } function ps() { if (this.parentLine = null, this.segs = null, this.resultSegs = new I, this.minimumSize = null, 1 === arguments.length) { var t = arguments[0]; ps.call(this, t, 2) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.parentLine = e, this.minimumSize = n, this.init() } } function vs() { this.index = new Ti } function ys() { this.querySeg = null, this.items = new I; var t = arguments[0]; this.querySeg = t } function xs() { this.li = new ae, this.inputIndex = new vs, this.outputIndex = new vs, this.line = null, this.linePts = null, this.distanceTolerance = 0; var t = arguments[0], e = arguments[1]; this.inputIndex = t, this.outputIndex = e } function Es() { this.inputIndex = new vs, this.outputIndex = new vs, this.distanceTolerance = 0 } function Is() { this.inputGeom = null, this.lineSimplifier = new Es, this.linestringMap = null; var t = arguments[0]; this.inputGeom = t } function Ns() { xe.apply(this), this.linestringMap = null; var t = arguments[0]; this.linestringMap = t } function Cs() { this.tps = null; var t = arguments[0]; this.tps = t } function ws() { this.seg = null, this.segLen = null, this.splitPt = null, this.minimumLen = 0; var t = arguments[0]; this.seg = t, this.segLen = t.getLength() } function Ss() { } function Ls() { } function Rs() { } function bs() { if (this.p = null, 1 === arguments.length) { var t = arguments[0]; this.p = new f(t) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.p = new f(e, n) } else if (3 === arguments.length) { var i = arguments[0], r = arguments[1], s = arguments[2]; this.p = new f(i, r, s) } } function Ts() { this._isOnConstraint = null, this.constraint = null; var t = arguments[0]; bs.call(this, t) } function Ps() { this._rot = null, this.vertex = null, this.next = null, this.data = null } function Os() { this.subdiv = null, this.isUsingTolerance = !1; var t = arguments[0]; this.subdiv = t, this.isUsingTolerance = t.getTolerance() > 0 } function Ms() { } function _s() { this.subdiv = null, this.lastEdge = null; var t = arguments[0]; this.subdiv = t, this.init() } function As() { if (this.seg = null, 1 === arguments.length) { if ("string" == typeof arguments[0]) { var t = arguments[0]; l.call(this, t) } else if (arguments[0] instanceof ce) { var e = arguments[0]; l.call(this, "Locate failed to converge (at edge: " + e + "). Possible causes include invalid Subdivision topology or very close sites"), this.seg = new ce(e) } } else if (2 === arguments.length) { var n = arguments[0], i = arguments[1]; l.call(this, As.msgWithSpatial(n, i)), this.seg = new ce(i) } } function Ds() { } function Fs() { this.visitedKey = 0, this.quadEdges = new I, this.startingEdge = null, this.tolerance = null, this.edgeCoincidenceTolerance = null, this.frameVertex = new Array(3).fill(null), this.frameEnv = null, this.locator = null, this.seg = new ce, this.triEdges = new Array(3).fill(null); var t = arguments[0], e = arguments[1]; this.tolerance = e, this.edgeCoincidenceTolerance = e / Fs.EDGE_COINCIDENCE_TOL_FACTOR, this.createFrame(t), this.startingEdge = this.initSubdiv(), this.locator = new _s(this) } function Gs() { } function qs() { this.triList = new I } function Bs() { this.triList = new I } function zs() { this.coordList = new N, this.triCoords = new I } function Vs() { if (this.ls = null, this.data = null, 2 === arguments.length) { var t = arguments[0], e = arguments[1]; this.ls = new ce(t, e) } else if (3 === arguments.length) { var n = arguments[0], i = arguments[1], r = arguments[2]; this.ls = new ce(n, i), this.data = r } else if (6 === arguments.length) { var s = arguments[0], o = arguments[1], a = arguments[2], u = arguments[3], l = arguments[4], h = arguments[5]; Vs.call(this, new f(s, o, a), new f(u, l, h)) } else if (7 === arguments.length) { var c = arguments[0], g = arguments[1], d = arguments[2], m = arguments[3], p = arguments[4], v = arguments[5], y = arguments[6]; Vs.call(this, new f(c, g, d), new f(m, p, v), y) } } function ks() { } function Us() { if (this.p = null, this.data = null, this.left = null, this.right = null, this.count = null, 2 === arguments.length) { var t = arguments[0], e = arguments[1]; this.p = new f(t), this.left = null, this.right = null, this.count = 1, this.data = e } else if (3 === arguments.length) { var n = arguments[0], i = arguments[1], r = arguments[2]; this.p = new f(n, i), this.left = null, this.right = null, this.count = 1, this.data = r } } function Ys() { if (this.root = null, this.numberOfNodes = null, this.tolerance = null, 0 === arguments.length) Ys.call(this, 0); else if (1 === arguments.length) { var t = arguments[0]; this.tolerance = t } } function Xs() { this.tolerance = null, this.matchNode = null, this.matchDist = 0, this.p = null; var t = arguments[0], e = arguments[1]; this.p = t, this.tolerance = e } function Hs() { this.initialVertices = null, this.segVertices = null, this.segments = new I, this.subdiv = null, this.incDel = null, this.convexHull = null, this.splitFinder = new Ls, this.kdt = null, this.vertexFactory = null, this.computeAreaEnv = null, this.splitPt = null, this.tolerance = null; var t = arguments[0], e = arguments[1]; this.initialVertices = new I(t), this.tolerance = e, this.kdt = new Ys(e) } function Ws() { this.siteCoords = null, this.tolerance = 0, this.subdiv = null } function js() { this.siteCoords = null, this.constraintLines = null, this.tolerance = 0, this.subdiv = null, this.constraintVertexMap = new rt } function Zs() { this.siteCoords = null, this.tolerance = 0, this.subdiv = null, this.clipEnv = null, this.diagramEnv = null } function Js() { } Array.prototype.fill || (Array.prototype.fill = function (t) { for (var e = Object(this), n = parseInt(e.length, 10), i = arguments[1], r = parseInt(i, 10) || 0, s = 0 > r ? Math.max(n + r, 0) : Math.min(r, n), o = arguments[2], a = void 0 === o ? n : parseInt(o, 10) || 0, u = 0 > a ? Math.max(n + a, 0) : Math.min(a, n); u > s; s++)e[s] = t; return e }), Number.isFinite = Number.isFinite || function (t) { return "number" == typeof t && isFinite(t) }, Number.isInteger = Number.isInteger || function (t) { return "number" == typeof t && isFinite(t) && Math.floor(t) === t }, Number.parseFloat = Number.parseFloat || parseFloat, Number.isNaN = Number.isNaN || function (t) { return t !== t }, Math.trunc = Math.trunc || function (t) { return 0 > t ? Math.ceil(t) : Math.floor(t) }, e(n.prototype, { interfaces_: function () { return [] }, getClass: function () { return n } }), n.equalsWithTolerance = function (t, e, n) { return Math.abs(t - e) <= n }, r.isNaN = function (t) { return Number.isNaN(t) }, r.doubleToLongBits = function (t) { return t }, r.longBitsToDouble = function (t) { return t }, r.isInfinite = function (t) { return !Number.isFinite(t) }, r.MAX_VALUE = Number.MAX_VALUE, h(c, l), e(c.prototype, { interfaces_: function () { return [] }, getClass: function () { return c } }), e(g.prototype, { interfaces_: function () { return [] }, getClass: function () { return g } }), g.shouldNeverReachHere = function () { if (0 === arguments.length) g.shouldNeverReachHere(null); else if (1 === arguments.length) { var t = arguments[0]; throw new c("Should never reach here" + (null !== t ? ": " + t : "")) } }, g.isTrue = function () { if (1 === arguments.length) { var t = arguments[0]; g.isTrue(t, null) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; if (!e) throw null === n ? new c : new c(n) } }, g.equals = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; g.equals(t, e, null) } else if (3 === arguments.length) { var n = arguments[0], i = arguments[1], r = arguments[2]; if (!i.equals(n)) throw new c("Expected " + n + " but encountered " + i + (null !== r ? ": " + r : "")) } }, e(f.prototype, { setOrdinate: function (t, e) { switch (t) { case f.X: this.x = e; break; case f.Y: this.y = e; break; case f.Z: this.z = e; break; default: throw new i("Invalid ordinate index: " + t) } }, equals2D: function () { if (1 === arguments.length) { var t = arguments[0]; return this.x !== t.x ? !1 : this.y === t.y } if (2 === arguments.length) { var e = arguments[0], i = arguments[1]; return n.equalsWithTolerance(this.x, e.x, i) ? !!n.equalsWithTolerance(this.y, e.y, i) : !1 } }, getOrdinate: function (t) { switch (t) { case f.X: return this.x; case f.Y: return this.y; case f.Z: return this.z }throw new i("Invalid ordinate index: " + t) }, equals3D: function (t) { return this.x === t.x && this.y === t.y && (this.z === t.z || r.isNaN(this.z) && r.isNaN(t.z)) }, equals: function (t) { return t instanceof f ? this.equals2D(t) : !1 }, equalInZ: function (t, e) { return n.equalsWithTolerance(this.z, t.z, e) }, compareTo: function (t) { var e = t; return this.x < e.x ? -1 : this.x > e.x ? 1 : this.y < e.y ? -1 : this.y > e.y ? 1 : 0 }, clone: function () { try { var t = null; return t } catch (t) { if (t instanceof CloneNotSupportedException) return g.shouldNeverReachHere("this shouldn't happen because this class is Cloneable"), null; throw t } finally { } }, copy: function () { return new f(this) }, toString: function () { return "(" + this.x + ", " + this.y + ", " + this.z + ")" }, distance3D: function (t) { var e = this.x - t.x, n = this.y - t.y, i = this.z - t.z; return Math.sqrt(e * e + n * n + i * i) }, distance: function (t) { var e = this.x - t.x, n = this.y - t.y; return Math.sqrt(e * e + n * n) }, hashCode: function () { var t = 17; return t = 37 * t + f.hashCode(this.x), t = 37 * t + f.hashCode(this.y) }, setCoordinate: function (t) { this.x = t.x, this.y = t.y, this.z = t.z }, interfaces_: function () { return [s, o, u] }, getClass: function () { return f } }), f.hashCode = function () { if (1 === arguments.length) { var t = arguments[0], e = r.doubleToLongBits(t); return Math.trunc(e ^ e >>> 32) } }, e(d.prototype, { compare: function (t, e) { var n = t, i = e, r = d.compare(n.x, i.x); if (0 !== r) return r; var s = d.compare(n.y, i.y); if (0 !== s) return s; if (this.dimensionsToTest <= 2) return 0; var o = d.compare(n.z, i.z); return o }, interfaces_: function () { return [a] }, getClass: function () { return d } }), d.compare = function (t, e) { + return e > t ? -1 : t > e ? 1 : r.isNaN(t) ? r.isNaN(e) ? 0 : -1 : r.isNaN(e) ? 1 : 0; + }, f.DimensionalComparator = d, f.serialVersionUID = 0x5cbf2c235c7e5800, f.NULL_ORDINATE = r.NaN, f.X = 0, f.Y = 1, f.Z = 2, m.prototype.hasNext = function () { }, m.prototype.next = function () { }, m.prototype.remove = function () { }, p.prototype.add = function () { }, p.prototype.addAll = function () { }, p.prototype.isEmpty = function () { }, p.prototype.iterator = function () { }, p.prototype.size = function () { }, p.prototype.toArray = function () { }, p.prototype.remove = function () { }, v.prototype = new Error, v.prototype.name = "IndexOutOfBoundsException", y.prototype = Object.create(p.prototype), y.prototype.constructor = y, y.prototype.get = function () { }, y.prototype.set = function () { }, y.prototype.isEmpty = function () { }, x.prototype = new Error, x.prototype.name = "NoSuchElementException", E.prototype = new Error, E.prototype.name = "OperationNotSupported", I.prototype = Object.create(y.prototype), I.prototype.constructor = I, I.prototype.ensureCapacity = function () { }, I.prototype.interfaces_ = function () { return [y, p] }, I.prototype.add = function (t) { return this.array_.push(t), !0 }, I.prototype.clear = function () { this.array_ = [] }, I.prototype.addAll = function (t) { for (var e = t.iterator(); e.hasNext();)this.add(e.next()); return !0 }, I.prototype.set = function (t, e) { var n = this.array_[t]; return this.array_[t] = e, n }, I.prototype.iterator = function () { return new Ks(this) }, I.prototype.get = function (t) { if (0 > t || t >= this.size()) throw new v; return this.array_[t] }, I.prototype.isEmpty = function () { return 0 === this.array_.length }, I.prototype.size = function () { return this.array_.length }, I.prototype.toArray = function () { for (var t = [], e = 0, n = this.array_.length; n > e; e++)t.push(this.array_[e]); return t }, I.prototype.remove = function (t) { for (var e = !1, n = 0, i = this.array_.length; i > n; n++)if (this.array_[n] === t) { this.array_.splice(n, 1), e = !0; break } return e }; var Ks = function (t) { this.arrayList_ = t, this.position_ = 0 }; Ks.prototype.next = function () { if (this.position_ === this.arrayList_.size()) throw new x; return this.arrayList_.get(this.position_++) }, Ks.prototype.hasNext = function () { return this.position_ < this.arrayList_.size() }, Ks.prototype.set = function (t) { return this.arrayList_.set(this.position_ - 1, t) }, Ks.prototype.remove = function () { throw new E }, h(N, I), e(N.prototype, { getCoordinate: function (t) { return this.get(t) }, addAll: function () { if (2 === arguments.length) { for (var t = arguments[0], e = arguments[1], n = !1, i = t.iterator(); i.hasNext();)this.add(i.next(), e), n = !0; return n } return I.prototype.addAll.apply(this, arguments) }, clone: function Fo() { for (var Fo = I.prototype.clone.call(this), t = 0; t < this.size(); t++)Fo.add(t, this.get(t).copy()); return Fo }, toCoordinateArray: function () { return this.toArray(N.coordArrayType) }, add: function () { if (1 === arguments.length) { var t = arguments[0]; I.prototype.add.call(this, t) } else if (2 === arguments.length) { if (arguments[0] instanceof Array && "boolean" == typeof arguments[1]) { var e = arguments[0], n = arguments[1]; return this.add(e, n, !0), !0 } if (arguments[0] instanceof f && "boolean" == typeof arguments[1]) { var i = arguments[0], r = arguments[1]; if (!r && this.size() >= 1) { var s = this.get(this.size() - 1); if (s.equals2D(i)) return null } I.prototype.add.call(this, i) } else if (arguments[0] instanceof Object && "boolean" == typeof arguments[1]) { var o = arguments[0], a = arguments[1]; return this.add(o, a), !0 } } else if (3 === arguments.length) { if ("boolean" == typeof arguments[2] && arguments[0] instanceof Array && "boolean" == typeof arguments[1]) { var u = arguments[0], l = arguments[1], h = arguments[2]; if (h) for (var c = 0; c < u.length; c++)this.add(u[c], l); else for (var c = u.length - 1; c >= 0; c--)this.add(u[c], l); return !0 } if ("boolean" == typeof arguments[2] && Number.isInteger(arguments[0]) && arguments[1] instanceof f) { var g = arguments[0], d = arguments[1], m = arguments[2]; if (!m) { var p = this.size(); if (p > 0) { if (g > 0) { var v = this.get(g - 1); if (v.equals2D(d)) return null } if (p > g) { var y = this.get(g); if (y.equals2D(d)) return null } } } I.prototype.add.call(this, g, d) } } else if (4 === arguments.length) { var x = arguments[0], E = arguments[1], N = arguments[2], C = arguments[3], w = 1; N > C && (w = -1); for (var c = N; c !== C; c += w)this.add(x[c], E); return !0 } }, closeRing: function () { this.size() > 0 && this.add(new f(this.get(0)), !1) }, interfaces_: function () { return [] }, getClass: function () { return N } }), N.coordArrayType = new Array(0).fill(null), e(C.prototype, { getArea: function () { return this.getWidth() * this.getHeight() }, equals: function (t) { if (!(t instanceof C)) return !1; var e = t; return this.isNull() ? e.isNull() : this.maxx === e.getMaxX() && this.maxy === e.getMaxY() && this.minx === e.getMinX() && this.miny === e.getMinY() }, intersection: function (t) { if (this.isNull() || t.isNull() || !this.intersects(t)) return new C; var e = this.minx > t.minx ? this.minx : t.minx, n = this.miny > t.miny ? this.miny : t.miny, i = this.maxx < t.maxx ? this.maxx : t.maxx, r = this.maxy < t.maxy ? this.maxy : t.maxy; return new C(e, i, n, r) }, isNull: function () { return this.maxx < this.minx }, getMaxX: function () { return this.maxx }, covers: function () { if (1 === arguments.length) { if (arguments[0] instanceof f) { var t = arguments[0]; return this.covers(t.x, t.y) } if (arguments[0] instanceof C) { var e = arguments[0]; return this.isNull() || e.isNull() ? !1 : e.getMinX() >= this.minx && e.getMaxX() <= this.maxx && e.getMinY() >= this.miny && e.getMaxY() <= this.maxy } } else if (2 === arguments.length) { var n = arguments[0], i = arguments[1]; return this.isNull() ? !1 : n >= this.minx && n <= this.maxx && i >= this.miny && i <= this.maxy } }, intersects: function () { if (1 === arguments.length) { if (arguments[0] instanceof C) { var t = arguments[0]; return this.isNull() || t.isNull() ? !1 : !(t.minx > this.maxx || t.maxx < this.minx || t.miny > this.maxy || t.maxy < this.miny) } if (arguments[0] instanceof f) { var e = arguments[0]; return this.intersects(e.x, e.y) } } else if (2 === arguments.length) { var n = arguments[0], i = arguments[1]; return this.isNull() ? !1 : !(n > this.maxx || n < this.minx || i > this.maxy || i < this.miny) } }, getMinY: function () { return this.miny }, getMinX: function () { return this.minx }, expandToInclude: function () { if (1 === arguments.length) { if (arguments[0] instanceof f) { var t = arguments[0]; this.expandToInclude(t.x, t.y) } else if (arguments[0] instanceof C) { var e = arguments[0]; if (e.isNull()) return null; this.isNull() ? (this.minx = e.getMinX(), this.maxx = e.getMaxX(), this.miny = e.getMinY(), this.maxy = e.getMaxY()) : (e.minx < this.minx && (this.minx = e.minx), e.maxx > this.maxx && (this.maxx = e.maxx), e.miny < this.miny && (this.miny = e.miny), e.maxy > this.maxy && (this.maxy = e.maxy)) } } else if (2 === arguments.length) { var n = arguments[0], i = arguments[1]; this.isNull() ? (this.minx = n, this.maxx = n, this.miny = i, this.maxy = i) : (n < this.minx && (this.minx = n), n > this.maxx && (this.maxx = n), i < this.miny && (this.miny = i), i > this.maxy && (this.maxy = i)) } }, minExtent: function () { if (this.isNull()) return 0; var t = this.getWidth(), e = this.getHeight(); return e > t ? t : e }, getWidth: function () { return this.isNull() ? 0 : this.maxx - this.minx }, compareTo: function (t) { var e = t; return this.isNull() ? e.isNull() ? 0 : -1 : e.isNull() ? 1 : this.minx < e.minx ? -1 : this.minx > e.minx ? 1 : this.miny < e.miny ? -1 : this.miny > e.miny ? 1 : this.maxx < e.maxx ? -1 : this.maxx > e.maxx ? 1 : this.maxy < e.maxy ? -1 : this.maxy > e.maxy ? 1 : 0 }, translate: function (t, e) { return this.isNull() ? null : void this.init(this.getMinX() + t, this.getMaxX() + t, this.getMinY() + e, this.getMaxY() + e) }, toString: function () { return "Env[" + this.minx + " : " + this.maxx + ", " + this.miny + " : " + this.maxy + "]" }, setToNull: function () { this.minx = 0, this.maxx = -1, this.miny = 0, this.maxy = -1 }, getHeight: function () { return this.isNull() ? 0 : this.maxy - this.miny }, maxExtent: function () { if (this.isNull()) return 0; var t = this.getWidth(), e = this.getHeight(); return t > e ? t : e }, expandBy: function () { if (1 === arguments.length) { var t = arguments[0]; this.expandBy(t, t) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; if (this.isNull()) return null; this.minx -= e, this.maxx += e, this.miny -= n, this.maxy += n, (this.minx > this.maxx || this.miny > this.maxy) && this.setToNull() } }, contains: function () { if (1 === arguments.length) { if (arguments[0] instanceof C) { var t = arguments[0]; return this.covers(t) } if (arguments[0] instanceof f) { var e = arguments[0]; return this.covers(e) } } else if (2 === arguments.length) { var n = arguments[0], i = arguments[1]; return this.covers(n, i) } }, centre: function () { return this.isNull() ? null : new f((this.getMinX() + this.getMaxX()) / 2, (this.getMinY() + this.getMaxY()) / 2) }, init: function () { if (0 === arguments.length) this.setToNull(); else if (1 === arguments.length) { if (arguments[0] instanceof f) { var t = arguments[0]; this.init(t.x, t.x, t.y, t.y) } else if (arguments[0] instanceof C) { var e = arguments[0]; this.minx = e.minx, this.maxx = e.maxx, this.miny = e.miny, this.maxy = e.maxy } } else if (2 === arguments.length) { var n = arguments[0], i = arguments[1]; this.init(n.x, i.x, n.y, i.y) } else if (4 === arguments.length) { var r = arguments[0], s = arguments[1], o = arguments[2], a = arguments[3]; s > r ? (this.minx = r, this.maxx = s) : (this.minx = s, this.maxx = r), a > o ? (this.miny = o, this.maxy = a) : (this.miny = a, this.maxy = o) } }, getMaxY: function () { return this.maxy }, distance: function (t) { if (this.intersects(t)) return 0; var e = 0; this.maxx < t.minx ? e = t.minx - this.maxx : this.minx > t.maxx && (e = this.minx - t.maxx); var n = 0; return this.maxy < t.miny ? n = t.miny - this.maxy : this.miny > t.maxy && (n = this.miny - t.maxy), 0 === e ? n : 0 === n ? e : Math.sqrt(e * e + n * n) }, hashCode: function () { var t = 17; return t = 37 * t + f.hashCode(this.minx), t = 37 * t + f.hashCode(this.maxx), t = 37 * t + f.hashCode(this.miny), t = 37 * t + f.hashCode(this.maxy) }, interfaces_: function () { return [s, u] }, getClass: function () { return C } }), C.intersects = function () { if (3 === arguments.length) { var t = arguments[0], e = arguments[1], n = arguments[2]; return n.x >= (t.x < e.x ? t.x : e.x) && n.x <= (t.x > e.x ? t.x : e.x) && n.y >= (t.y < e.y ? t.y : e.y) && n.y <= (t.y > e.y ? t.y : e.y) } if (4 === arguments.length) { var i = arguments[0], r = arguments[1], s = arguments[2], o = arguments[3], a = Math.min(s.x, o.x), u = Math.max(s.x, o.x), l = Math.min(i.x, r.x), h = Math.max(i.x, r.x); return l > u ? !1 : a > h ? !1 : (a = Math.min(s.y, o.y), u = Math.max(s.y, o.y), l = Math.min(i.y, r.y), h = Math.max(i.y, r.y), l > u ? !1 : !(a > h)) } }, C.serialVersionUID = 0x51845cd552189800, h(S, w), e(S.prototype, { interfaces_: function () { return [] }, getClass: function () { return S } }), e(L.prototype, { interfaces_: function () { return [] }, getClass: function () { return L } }), L.toLocationSymbol = function (t) { switch (t) { case L.EXTERIOR: return "e"; case L.BOUNDARY: return "b"; case L.INTERIOR: return "i"; case L.NONE: return "-" }throw new i("Unknown location value: " + t) }, L.INTERIOR = 0, L.BOUNDARY = 1, L.EXTERIOR = 2, L.NONE = -1, e(b.prototype, { interfaces_: function () { return [] }, getClass: function () { return b } }), b.log10 = function (t) { var e = Math.log(t); return r.isInfinite(e) ? e : r.isNaN(e) ? e : e / b.LOG_10 }, b.min = function (t, e, n, i) { var r = t; return r > e && (r = e), r > n && (r = n), r > i && (r = i), r }, b.clamp = function () { if ("number" == typeof arguments[2] && "number" == typeof arguments[0] && "number" == typeof arguments[1]) { var t = arguments[0], e = arguments[1], n = arguments[2]; return e > t ? e : t > n ? n : t } if (Number.isInteger(arguments[2]) && Number.isInteger(arguments[0]) && Number.isInteger(arguments[1])) { var i = arguments[0], r = arguments[1], s = arguments[2]; return r > i ? r : i > s ? s : i } }, b.wrap = function (t, e) { return 0 > t ? e - -t % e : t % e }, b.max = function () { if (3 === arguments.length) { var t = arguments[0], e = arguments[1], n = arguments[2], i = t; return e > i && (i = e), n > i && (i = n), i } if (4 === arguments.length) { var r = arguments[0], s = arguments[1], o = arguments[2], a = arguments[3], i = r; return s > i && (i = s), o > i && (i = o), a > i && (i = a), i } }, b.average = function (t, e) { return (t + e) / 2 }, b.LOG_10 = Math.log(10), T.prototype.append = function (t) { this.str += t }, T.prototype.setCharAt = function (t, e) { return this.str.substr(0, t) + e + this.str.substr(t + 1) }, T.prototype.toString = function (t) { return this.str }, P.prototype.intValue = function () { return this.value }, P.prototype.compareTo = function (t) { return this.value < t ? -1 : this.value > t ? 1 : 0 }, P.isNaN = function (t) { return Number.isNaN(t) }, O.isWhitespace = function (t) { return 32 >= t && t >= 0 || 127 == t }, O.toUpperCase = function (t) { return t.toUpperCase() }, e(M.prototype, { le: function (t) { return this.hi < t.hi || this.hi === t.hi && this.lo <= t.lo }, extractSignificantDigits: function (t, e) { var n = this.abs(), i = M.magnitude(n.hi), r = M.TEN.pow(i); n = n.divide(r), n.gt(M.TEN) ? (n = n.divide(M.TEN), i += 1) : n.lt(M.ONE) && (n = n.multiply(M.TEN), i -= 1); for (var s = i + 1, o = new T, a = M.MAX_PRINT_DIGITS - 1, u = 0; a >= u; u++) { t && u === s && o.append("."); var l = Math.trunc(n.hi); if (0 > l) break; var h = !1, c = 0; l > 9 ? (h = !0, c = "9") : c = "0" + l, o.append(c), n = n.subtract(M.valueOf(l)).multiply(M.TEN), h && n.selfAdd(M.TEN); var g = !0, f = M.magnitude(n.hi); if (0 > f && Math.abs(f) >= a - u && (g = !1), !g) break } return e[0] = i, o.toString() }, sqr: function () { return this.multiply(this) }, doubleValue: function () { return this.hi + this.lo }, subtract: function () { if (arguments[0] instanceof M) { var t = arguments[0]; return this.add(t.negate()) } if ("number" == typeof arguments[0]) { var e = arguments[0]; return this.add(-e) } }, equals: function () { if (1 === arguments.length) { var t = arguments[0]; return this.hi === t.hi && this.lo === t.lo } }, isZero: function () { return 0 === this.hi && 0 === this.lo }, selfSubtract: function () { if (arguments[0] instanceof M) { var t = arguments[0]; return this.isNaN() ? this : this.selfAdd(-t.hi, -t.lo) } if ("number" == typeof arguments[0]) { var e = arguments[0]; return this.isNaN() ? this : this.selfAdd(-e, 0) } }, getSpecialNumberString: function () { return this.isZero() ? "0.0" : this.isNaN() ? "NaN " : null }, min: function (t) { return this.le(t) ? this : t }, selfDivide: function () { if (1 === arguments.length) { if (arguments[0] instanceof M) { var t = arguments[0]; return this.selfDivide(t.hi, t.lo) } if ("number" == typeof arguments[0]) { var e = arguments[0]; return this.selfDivide(e, 0) } } else if (2 === arguments.length) { var n = arguments[0], i = arguments[1], r = null, s = null, o = null, a = null, u = null, l = null, h = null, c = null; return u = this.hi / n, l = M.SPLIT * u, r = l - u, c = M.SPLIT * n, r = l - r, s = u - r, o = c - n, h = u * n, o = c - o, a = n - o, c = r * o - h + r * a + s * o + s * a, l = (this.hi - h - c + this.lo - u * i) / n, c = u + l, this.hi = c, this.lo = u - c + l, this } }, dump: function () { return "DD<" + this.hi + ", " + this.lo + ">" }, divide: function () { if (arguments[0] instanceof M) { var t = arguments[0], e = null, n = null, i = null, s = null, o = null, a = null, u = null, l = null; o = this.hi / t.hi, a = M.SPLIT * o, e = a - o, l = M.SPLIT * t.hi, e = a - e, n = o - e, i = l - t.hi, u = o * t.hi, i = l - i, s = t.hi - i, l = e * i - u + e * s + n * i + n * s, a = (this.hi - u - l + this.lo - o * t.lo) / t.hi, l = o + a; var h = l, c = o - l + a; return new M(h, c) } if ("number" == typeof arguments[0]) { var g = arguments[0]; return r.isNaN(g) ? M.createNaN() : M.copy(this).selfDivide(g, 0) } }, ge: function (t) { return this.hi > t.hi || this.hi === t.hi && this.lo >= t.lo }, pow: function (t) { if (0 === t) return M.valueOf(1); var e = new M(this), n = M.valueOf(1), i = Math.abs(t); if (i > 1) for (; i > 0;)i % 2 === 1 && n.selfMultiply(e), i /= 2, i > 0 && (e = e.sqr()); else n = e; return 0 > t ? n.reciprocal() : n }, ceil: function () { if (this.isNaN()) return M.NaN; var t = Math.ceil(this.hi), e = 0; return t === this.hi && (e = Math.ceil(this.lo)), new M(t, e) }, compareTo: function (t) { var e = t; return this.hi < e.hi ? -1 : this.hi > e.hi ? 1 : this.lo < e.lo ? -1 : this.lo > e.lo ? 1 : 0 }, rint: function () { if (this.isNaN()) return this; var t = this.add(.5); return t.floor() }, setValue: function () { if (arguments[0] instanceof M) { var t = arguments[0]; return this.init(t), this } if ("number" == typeof arguments[0]) { var e = arguments[0]; return this.init(e), this } }, max: function (t) { return this.ge(t) ? this : t }, sqrt: function () { if (this.isZero()) return M.valueOf(0); if (this.isNegative()) return M.NaN; var t = 1 / Math.sqrt(this.hi), e = this.hi * t, n = M.valueOf(e), i = this.subtract(n.sqr()), r = i.hi * (.5 * t); return n.add(r) }, selfAdd: function () { if (1 === arguments.length) { if (arguments[0] instanceof M) { var t = arguments[0]; return this.selfAdd(t.hi, t.lo) } if ("number" == typeof arguments[0]) { var e = arguments[0], n = null, i = null, r = null, s = null, o = null, a = null; return r = this.hi + e, o = r - this.hi, s = r - o, s = e - o + (this.hi - s), a = s + this.lo, n = r + a, i = a + (r - n), this.hi = n + i, this.lo = i + (n - this.hi), this } } else if (2 === arguments.length) { var u = arguments[0], l = arguments[1], n = null, i = null, h = null, c = null, r = null, s = null, o = null, a = null; r = this.hi + u, h = this.lo + l, o = r - this.hi, a = h - this.lo, s = r - o, c = h - a, s = u - o + (this.hi - s), c = l - a + (this.lo - c), o = s + h, n = r + o, i = o + (r - n), o = c + i; var g = n + o, f = o + (n - g); return this.hi = g, this.lo = f, this } }, selfMultiply: function () { if (1 === arguments.length) { if (arguments[0] instanceof M) { var t = arguments[0]; return this.selfMultiply(t.hi, t.lo) } if ("number" == typeof arguments[0]) { var e = arguments[0]; return this.selfMultiply(e, 0) } } else if (2 === arguments.length) { var n = arguments[0], i = arguments[1], r = null, s = null, o = null, a = null, u = null, l = null; u = M.SPLIT * this.hi, r = u - this.hi, l = M.SPLIT * n, r = u - r, s = this.hi - r, o = l - n, u = this.hi * n, o = l - o, a = n - o, l = r * o - u + r * a + s * o + s * a + (this.hi * i + this.lo * n); var h = u + l; r = u - h; var c = l + r; return this.hi = h, this.lo = c, this } }, selfSqr: function () { return this.selfMultiply(this) }, floor: function () { if (this.isNaN()) return M.NaN; var t = Math.floor(this.hi), e = 0; return t === this.hi && (e = Math.floor(this.lo)), new M(t, e) }, negate: function () { return this.isNaN() ? this : new M(-this.hi, -this.lo) }, clone: function () { try { return null } catch (t) { if (t instanceof CloneNotSupportedException) return null; throw t } finally { } }, multiply: function () { if (arguments[0] instanceof M) { var t = arguments[0]; return t.isNaN() ? M.createNaN() : M.copy(this).selfMultiply(t) } if ("number" == typeof arguments[0]) { var e = arguments[0]; return r.isNaN(e) ? M.createNaN() : M.copy(this).selfMultiply(e, 0) } }, isNaN: function () { return r.isNaN(this.hi) }, intValue: function () { return Math.trunc(this.hi) }, toString: function () { var t = M.magnitude(this.hi); return t >= -3 && 20 >= t ? this.toStandardNotation() : this.toSciNotation() }, toStandardNotation: function () { var t = this.getSpecialNumberString(); if (null !== t) return t; var e = new Array(1).fill(null), n = this.extractSignificantDigits(!0, e), i = e[0] + 1, r = n; if ("." === n.charAt(0)) r = "0" + n; else if (0 > i) r = "0." + M.stringOfChar("0", -i) + n; else if (-1 === n.indexOf(".")) { var s = i - n.length, o = M.stringOfChar("0", s); r = n + o + ".0" } return this.isNegative() ? "-" + r : r }, reciprocal: function () { var t = null, e = null, n = null, i = null, r = null, s = null, o = null, a = null; r = 1 / this.hi, s = M.SPLIT * r, t = s - r, a = M.SPLIT * this.hi, t = s - t, e = r - t, n = a - this.hi, o = r * this.hi, n = a - n, i = this.hi - n, a = t * n - o + t * i + e * n + e * i, s = (1 - o - a - r * this.lo) / this.hi; var u = r + s, l = r - u + s; return new M(u, l) }, toSciNotation: function () { if (this.isZero()) return M.SCI_NOT_ZERO; var t = this.getSpecialNumberString(); if (null !== t) return t; var e = new Array(1).fill(null), n = this.extractSignificantDigits(!1, e), i = M.SCI_NOT_EXPONENT_CHAR + e[0]; if ("0" === n.charAt(0)) throw new IllegalStateException("Found leading zero: " + n); var r = ""; n.length > 1 && (r = n.substring(1)); var s = n.charAt(0) + "." + r; return this.isNegative() ? "-" + s + i : s + i }, abs: function () { return this.isNaN() ? M.NaN : this.isNegative() ? this.negate() : new M(this) }, isPositive: function () { return this.hi > 0 || 0 === this.hi && this.lo > 0 }, lt: function (t) { return this.hi < t.hi || this.hi === t.hi && this.lo < t.lo }, add: function () { if (arguments[0] instanceof M) { var t = arguments[0]; return M.copy(this).selfAdd(t) } if ("number" == typeof arguments[0]) { var e = arguments[0]; return M.copy(this).selfAdd(e) } }, init: function () { if (1 === arguments.length) { if ("number" == typeof arguments[0]) { var t = arguments[0]; this.hi = t, this.lo = 0 } else if (arguments[0] instanceof M) { var e = arguments[0]; this.hi = e.hi, this.lo = e.lo } } else if (2 === arguments.length) { var n = arguments[0], i = arguments[1]; this.hi = n, this.lo = i } }, gt: function (t) { return this.hi > t.hi || this.hi === t.hi && this.lo > t.lo }, isNegative: function () { return this.hi < 0 || 0 === this.hi && this.lo < 0 }, trunc: function () { return this.isNaN() ? M.NaN : this.isPositive() ? this.floor() : this.ceil() }, signum: function () { return this.hi > 0 ? 1 : this.hi < 0 ? -1 : this.lo > 0 ? 1 : this.lo < 0 ? -1 : 0 }, interfaces_: function () { return [u, s, o] }, getClass: function () { return M } }), M.sqr = function (t) { return M.valueOf(t).selfMultiply(t) }, M.valueOf = function () { if ("string" == typeof arguments[0]) { var t = arguments[0]; return M.parse(t) } if ("number" == typeof arguments[0]) { var e = arguments[0]; return new M(e) } }, M.sqrt = function (t) { return M.valueOf(t).sqrt() }, M.parse = function (t) { for (var e = 0, n = t.length; O.isWhitespace(t.charAt(e));)e++; var i = !1; if (n > e) { var r = t.charAt(e); "-" !== r && "+" !== r || (e++ , "-" === r && (i = !0)) } for (var s = new M, o = 0, a = 0, u = 0; !(e >= n);) { var l = t.charAt(e); if (e++ , O.isDigit(l)) { var h = l - "0"; s.selfMultiply(M.TEN), s.selfAdd(h), o++ } else { if ("." !== l) { if ("e" === l || "E" === l) { var c = t.substring(e); try { u = P.parseInt(c) } catch (e) { throw e instanceof NumberFormatException ? new NumberFormatException("Invalid exponent " + c + " in string " + t) : e } finally { } break } throw new NumberFormatException("Unexpected character '" + l + "' at position " + e + " in string " + t) } a = o } } var g = s, f = o - a - u; if (0 === f) g = s; else if (f > 0) { var d = M.TEN.pow(f); g = s.divide(d) } else if (0 > f) { var d = M.TEN.pow(-f); g = s.multiply(d) } return i ? g.negate() : g }, M.createNaN = function () { return new M(r.NaN, r.NaN) }, M.copy = function (t) { return new M(t) }, M.magnitude = function (t) { var e = Math.abs(t), n = Math.log(e) / Math.log(10), i = Math.trunc(Math.floor(n)), r = Math.pow(10, i); return e >= 10 * r && (i += 1), i }, M.stringOfChar = function (t, e) { for (var n = new T, i = 0; e > i; i++)n.append(t); return n.toString() }, M.PI = new M(3.141592653589793, 1.2246467991473532e-16), M.TWO_PI = new M(6.283185307179586, 2.4492935982947064e-16), M.PI_2 = new M(1.5707963267948966, 6.123233995736766e-17), M.E = new M(2.718281828459045, 1.4456468917292502e-16), M.NaN = new M(r.NaN, r.NaN), M.EPS = 1.23259516440783e-32, M.SPLIT = 134217729, M.MAX_PRINT_DIGITS = 32, M.TEN = M.valueOf(10), M.ONE = M.valueOf(1), M.SCI_NOT_EXPONENT_CHAR = "E", M.SCI_NOT_ZERO = "0.0E0", e(_.prototype, { interfaces_: function () { return [] }, getClass: function () { return _ } }), _.orientationIndex = function (t, e, n) { var i = _.orientationIndexFilter(t, e, n); if (1 >= i) return i; var r = M.valueOf(e.x).selfAdd(-t.x), s = M.valueOf(e.y).selfAdd(-t.y), o = M.valueOf(n.x).selfAdd(-e.x), a = M.valueOf(n.y).selfAdd(-e.y); return r.selfMultiply(a).selfSubtract(s.selfMultiply(o)).signum() }, _.signOfDet2x2 = function (t, e, n, i) { var r = t.multiply(i).selfSubtract(e.multiply(n)); return r.signum() }, _.intersection = function (t, e, n, i) { var r = M.valueOf(i.y).selfSubtract(n.y).selfMultiply(M.valueOf(e.x).selfSubtract(t.x)), s = M.valueOf(i.x).selfSubtract(n.x).selfMultiply(M.valueOf(e.y).selfSubtract(t.y)), o = r.subtract(s), a = M.valueOf(i.x).selfSubtract(n.x).selfMultiply(M.valueOf(t.y).selfSubtract(n.y)), u = M.valueOf(i.y).selfSubtract(n.y).selfMultiply(M.valueOf(t.x).selfSubtract(n.x)), l = a.subtract(u), h = l.selfDivide(o).doubleValue(), c = M.valueOf(t.x).selfAdd(M.valueOf(e.x).selfSubtract(t.x).selfMultiply(h)).doubleValue(), g = M.valueOf(e.x).selfSubtract(t.x).selfMultiply(M.valueOf(t.y).selfSubtract(n.y)), d = M.valueOf(e.y).selfSubtract(t.y).selfMultiply(M.valueOf(t.x).selfSubtract(n.x)), m = g.subtract(d), p = m.selfDivide(o).doubleValue(), v = M.valueOf(n.y).selfAdd(M.valueOf(i.y).selfSubtract(n.y).selfMultiply(p)).doubleValue(); return new f(c, v) }, _.orientationIndexFilter = function (t, e, n) { var i = null, r = (t.x - n.x) * (e.y - n.y), s = (t.y - n.y) * (e.x - n.x), o = r - s; if (r > 0) { if (0 >= s) return _.signum(o); i = r + s } else { if (!(0 > r)) return _.signum(o); if (s >= 0) return _.signum(o); i = -r - s } var a = _.DP_SAFE_EPSILON * i; return o >= a || -o >= a ? _.signum(o) : 2 }, _.signum = function (t) { return t > 0 ? 1 : 0 > t ? -1 : 0 }, _.DP_SAFE_EPSILON = 1e-15, e(A.prototype, { setOrdinate: function (t, e, n) { }, size: function () { }, getOrdinate: function (t, e) { }, getCoordinate: function () { 1 === arguments.length ? arguments[0] : 2 === arguments.length && (arguments[0], arguments[1]) }, getCoordinateCopy: function (t) { }, getDimension: function () { }, getX: function (t) { }, clone: function () { }, expandEnvelope: function (t) { }, copy: function () { }, getY: function (t) { }, toCoordinateArray: function () { }, interfaces_: function () { return [o] }, getClass: function () { return A } }), A.X = 0, A.Y = 1, A.Z = 2, A.M = 3, D.arraycopy = function (t, e, n, i, r) { for (var s = 0, o = e; e + r > o; o++)n[i + s] = t[o], s++ }, D.getProperty = function (t) { return { "line.separator": "\n" }[t] }, e(F.prototype, { getY: function () { var t = this.y / this.w; if (r.isNaN(t) || r.isInfinite(t)) throw new S; return t }, getX: function () { var t = this.x / this.w; if (r.isNaN(t) || r.isInfinite(t)) throw new S; return t }, getCoordinate: function () { var t = new f; return t.x = this.getX(), t.y = this.getY(), t }, interfaces_: function () { return [] }, getClass: function () { return F } }), F.intersection = function (t, e, n, i) { var s = t.y - e.y, o = e.x - t.x, a = t.x * e.y - e.x * t.y, u = n.y - i.y, l = i.x - n.x, h = n.x * i.y - i.x * n.y, c = o * h - l * a, g = u * a - s * h, d = s * l - u * o, m = c / d, p = g / d; if (r.isNaN(m) || r.isInfinite(m) || r.isNaN(p) || r.isInfinite(p)) throw new S; return new f(m, p) }, e(G.prototype, { create: function () { 1 === arguments.length ? arguments[0] instanceof Array ? arguments[0] : R(arguments[0], A) && arguments[0] : 2 === arguments.length && (arguments[0], arguments[1]) }, interfaces_: function () { return [] }, getClass: function () { return G } }), e(q.prototype, { filter: function (t) { }, interfaces_: function () { return [] }, getClass: function () { return q } }), e(B.prototype, { isGeometryCollection: function () { return this.getSortIndex() === B.SORTINDEX_GEOMETRYCOLLECTION }, getFactory: function () { return this.factory }, getGeometryN: function (t) { return this }, getArea: function () { return 0 }, isRectangle: function () { return !1 }, equals: function () { if (1 === arguments.length) { if (arguments[0] instanceof B) { var t = arguments[0]; return null === t ? !1 : this.equalsTopo(t) } if (arguments[0] instanceof Object) { var e = arguments[0]; if (!(e instanceof B)) return !1; var n = e; return this.equalsExact(n) } } }, equalsExact: function (t) { return this === t || this.equalsExact(t, 0) }, geometryChanged: function () { this.apply(B.geometryChangedFilter) }, geometryChangedAction: function () { this.envelope = null }, equalsNorm: function (t) { return null === t ? !1 : this.norm().equalsExact(t.norm()) }, getLength: function () { return 0 }, getNumGeometries: function () { return 1 }, compareTo: function () { if (1 === arguments.length) { var t = arguments[0], e = t; return this.getSortIndex() !== e.getSortIndex() ? this.getSortIndex() - e.getSortIndex() : this.isEmpty() && e.isEmpty() ? 0 : this.isEmpty() ? -1 : e.isEmpty() ? 1 : this.compareToSameClass(t) } if (2 === arguments.length) { var n = arguments[0], i = arguments[1], e = n; return this.getSortIndex() !== e.getSortIndex() ? this.getSortIndex() - e.getSortIndex() : this.isEmpty() && e.isEmpty() ? 0 : this.isEmpty() ? -1 : e.isEmpty() ? 1 : this.compareToSameClass(n, i) } }, getUserData: function () { return this.userData }, getSRID: function () { return this.SRID }, getEnvelope: function () { return this.getFactory().toGeometry(this.getEnvelopeInternal()) }, checkNotGeometryCollection: function (t) { if (t.getSortIndex() === B.SORTINDEX_GEOMETRYCOLLECTION) throw new i("This method does not support GeometryCollection arguments") }, equal: function (t, e, n) { return 0 === n ? t.equals(e) : t.distance(e) <= n }, norm: function () { var t = this.copy(); return t.normalize(), t }, getPrecisionModel: function () { return this.factory.getPrecisionModel() }, getEnvelopeInternal: function () { return null === this.envelope && (this.envelope = this.computeEnvelopeInternal()), new C(this.envelope) }, setSRID: function (t) { this.SRID = t }, setUserData: function (t) { this.userData = t }, compare: function (t, e) { for (var n = t.iterator(), i = e.iterator(); n.hasNext() && i.hasNext();) { var r = n.next(), s = i.next(), o = r.compareTo(s); if (0 !== o) return o } return n.hasNext() ? 1 : i.hasNext() ? -1 : 0 }, hashCode: function () { return this.getEnvelopeInternal().hashCode() }, isGeometryCollectionOrDerived: function () { return this.getSortIndex() === B.SORTINDEX_GEOMETRYCOLLECTION || this.getSortIndex() === B.SORTINDEX_MULTIPOINT || this.getSortIndex() === B.SORTINDEX_MULTILINESTRING || this.getSortIndex() === B.SORTINDEX_MULTIPOLYGON }, interfaces_: function () { return [o, s, u] }, getClass: function () { return B } }), B.hasNonEmptyElements = function (t) { for (var e = 0; e < t.length; e++)if (!t[e].isEmpty()) return !0; return !1 }, B.hasNullElements = function (t) { for (var e = 0; e < t.length; e++)if (null === t[e]) return !0; return !1 }, B.serialVersionUID = 0x799ea46522854c00, B.SORTINDEX_POINT = 0, B.SORTINDEX_MULTIPOINT = 1, B.SORTINDEX_LINESTRING = 2, B.SORTINDEX_LINEARRING = 3, B.SORTINDEX_MULTILINESTRING = 4, B.SORTINDEX_POLYGON = 5, B.SORTINDEX_MULTIPOLYGON = 6, B.SORTINDEX_GEOMETRYCOLLECTION = 7, B.geometryChangedFilter = { interfaces_: function () { return [q] }, filter: function (t) { t.geometryChangedAction() } }, e(z.prototype, { filter: function (t) { }, interfaces_: function () { return [] }, getClass: function () { return z } }), e(V.prototype, { isInBoundary: function (t) { }, interfaces_: function () { return [] }, getClass: function () { return V } }), e(k.prototype, { isInBoundary: function (t) { return t % 2 === 1 }, interfaces_: function () { return [V] }, getClass: function () { return k } }), e(U.prototype, { isInBoundary: function (t) { return t > 0 }, interfaces_: function () { return [V] }, getClass: function () { return U } }), e(Y.prototype, { isInBoundary: function (t) { return t > 1 }, interfaces_: function () { return [V] }, getClass: function () { return Y } }), e(X.prototype, { isInBoundary: function (t) { return 1 === t }, interfaces_: function () { return [V] }, getClass: function () { return X } }), V.Mod2BoundaryNodeRule = k, V.EndPointBoundaryNodeRule = U, V.MultiValentEndPointBoundaryNodeRule = Y, V.MonoValentEndPointBoundaryNodeRule = X, V.MOD2_BOUNDARY_RULE = new k, V.ENDPOINT_BOUNDARY_RULE = new U, V.MULTIVALENT_ENDPOINT_BOUNDARY_RULE = new Y, V.MONOVALENT_ENDPOINT_BOUNDARY_RULE = new X, V.OGC_SFS_BOUNDARY_RULE = V.MOD2_BOUNDARY_RULE, e(H.prototype, { interfaces_: function () { return [] }, getClass: function () { return H } }), H.isRing = function (t) { return t.length < 4 ? !1 : !!t[0].equals2D(t[t.length - 1]) }, H.ptNotInList = function (t, e) { for (var n = 0; n < t.length; n++) { var i = t[n]; if (H.indexOf(i, e) < 0) return i } return null }, H.scroll = function (t, e) { var n = H.indexOf(e, t); if (0 > n) return null; var i = new Array(t.length).fill(null); D.arraycopy(t, n, i, 0, t.length - n), D.arraycopy(t, 0, i, t.length - n, n), D.arraycopy(i, 0, t, 0, t.length) }, H.equals = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; if (t === e) return !0; if (null === t || null === e) return !1; if (t.length !== e.length) return !1; for (var n = 0; n < t.length; n++)if (!t[n].equals(e[n])) return !1; return !0 } if (3 === arguments.length) { var i = arguments[0], r = arguments[1], s = arguments[2]; if (i === r) return !0; if (null === i || null === r) return !1; if (i.length !== r.length) return !1; for (var n = 0; n < i.length; n++)if (0 !== s.compare(i[n], r[n])) return !1; return !0 } }, H.intersection = function (t, e) { for (var n = new N, i = 0; i < t.length; i++)e.intersects(t[i]) && n.add(t[i], !0); return n.toCoordinateArray() }, H.hasRepeatedPoints = function (t) { for (var e = 1; e < t.length; e++)if (t[e - 1].equals(t[e])) return !0; return !1 }, H.removeRepeatedPoints = function (t) { if (!H.hasRepeatedPoints(t)) return t; var e = new N(t, !1); return e.toCoordinateArray() }, H.reverse = function (t) { for (var e = t.length - 1, n = Math.trunc(e / 2), i = 0; n >= i; i++) { var r = t[i]; t[i] = t[e - i], t[e - i] = r } }, H.removeNull = function (t) { for (var e = 0, n = 0; n < t.length; n++)null !== t[n] && e++; var i = new Array(e).fill(null); if (0 === e) return i; for (var r = 0, n = 0; n < t.length; n++)null !== t[n] && (i[r++] = t[n]); return i }, H.copyDeep = function () { if (1 === arguments.length) { for (var t = arguments[0], e = new Array(t.length).fill(null), n = 0; n < t.length; n++)e[n] = new f(t[n]); return e } if (5 === arguments.length) for (var i = arguments[0], r = arguments[1], s = arguments[2], o = arguments[3], a = arguments[4], n = 0; a > n; n++)s[o + n] = new f(i[r + n]) }, H.isEqualReversed = function (t, e) { for (var n = 0; n < t.length; n++) { var i = t[n], r = e[t.length - n - 1]; if (0 !== i.compareTo(r)) return !1 } return !0 }, H.envelope = function (t) { for (var e = new C, n = 0; n < t.length; n++)e.expandToInclude(t[n]); return e }, H.toCoordinateArray = function (t) { return t.toArray(H.coordArrayType) }, H.atLeastNCoordinatesOrNothing = function (t, e) { return e.length >= t ? e : [] }, H.indexOf = function (t, e) { for (var n = 0; n < e.length; n++)if (t.equals(e[n])) return n; return -1 }, H.increasingDirection = function (t) { for (var e = 0; e < Math.trunc(t.length / 2); e++) { var n = t.length - 1 - e, i = t[e].compareTo(t[n]); if (0 !== i) return i } return 1 }, H.compare = function (t, e) { for (var n = 0; n < t.length && n < e.length;) { var i = t[n].compareTo(e[n]); if (0 !== i) return i; n++ } return n < e.length ? -1 : n < t.length ? 1 : 0 }, H.minCoordinate = function (t) { for (var e = null, n = 0; n < t.length; n++)(null === e || e.compareTo(t[n]) > 0) && (e = t[n]); return e }, H.extract = function (t, e, n) { e = b.clamp(e, 0, t.length), n = b.clamp(n, -1, t.length); var i = n - e + 1; 0 > n && (i = 0), e >= t.length && (i = 0), e > n && (i = 0); var r = new Array(i).fill(null); if (0 === i) return r; for (var s = 0, o = e; n >= o; o++)r[s++] = t[o]; return r }, e(W.prototype, { compare: function (t, e) { var n = t, i = e; return H.compare(n, i) }, interfaces_: function () { return [a] }, getClass: function () { return W } }), e(j.prototype, { compare: function (t, e) { var n = t, i = e; if (n.length < i.length) return -1; if (n.length > i.length) return 1; if (0 === n.length) return 0; var r = H.compare(n, i), s = H.isEqualReversed(n, i); return s ? 0 : r }, OLDcompare: function (t, e) { var n = t, i = e; if (n.length < i.length) return -1; if (n.length > i.length) return 1; if (0 === n.length) return 0; for (var r = H.increasingDirection(n), s = H.increasingDirection(i), o = r > 0 ? 0 : n.length - 1, a = s > 0 ? 0 : n.length - 1, u = 0; u < n.length; u++) { var l = n[o].compareTo(i[a]); if (0 !== l) return l; o += r, a += s } return 0 }, interfaces_: function () { return [a] }, getClass: function () { return j } }), H.ForwardComparator = W, H.BidirectionalComparator = j, H.coordArrayType = new Array(0).fill(null), Z.prototype.get = function () { }, Z.prototype.put = function () { }, Z.prototype.size = function () { }, Z.prototype.values = function () { }, Z.prototype.entrySet = function () { }, J.prototype = new Z, K.prototype = new p, K.prototype.contains = function () { }, Q.prototype = new K, Q.prototype.contains = function (t) { for (var e = 0, n = this.array_.length; n > e; e++) { var i = this.array_[e]; if (i === t) return !0 } return !1 }, Q.prototype.add = function (t) { return this.contains(t) ? !1 : (this.array_.push(t), !0) }, Q.prototype.addAll = function (t) { + for (var e = t.iterator(); e.hasNext();)this.add(e.next()); + return !0 + }, Q.prototype.remove = function (t) { throw new javascript.util.OperationNotSupported }, Q.prototype.size = function () { return this.array_.length }, Q.prototype.isEmpty = function () { return 0 === this.array_.length }, Q.prototype.toArray = function () { for (var t = [], e = 0, n = this.array_.length; n > e; e++)t.push(this.array_[e]); return t }, Q.prototype.iterator = function () { return new Qs(this) }; var Qs = function (t) { this.hashSet_ = t, this.position_ = 0 }; Qs.prototype.next = function () { if (this.position_ === this.hashSet_.size()) throw new x; return this.hashSet_.array_[this.position_++] }, Qs.prototype.hasNext = function () { return this.position_ < this.hashSet_.size() }, Qs.prototype.remove = function () { throw new E }; var $s = 0, to = 1; rt.prototype = new J, rt.prototype.get = function (t) { for (var e = this.root_; null !== e;) { var n = t.compareTo(e.key); if (0 > n) e = e.left; else { if (!(n > 0)) return e.value; e = e.right } } return null }, rt.prototype.put = function (t, e) { if (null === this.root_) return this.root_ = { key: t, value: e, left: null, right: null, parent: null, color: $s, getValue: function () { return this.value }, getKey: function () { return this.key } }, this.size_ = 1, null; var n, i, r = this.root_; do if (n = r, i = t.compareTo(r.key), 0 > i) r = r.left; else { if (!(i > 0)) { var s = r.value; return r.value = e, s } r = r.right } while (null !== r); var o = { key: t, left: null, right: null, value: e, parent: n, color: $s, getValue: function () { return this.value }, getKey: function () { return this.key } }; return 0 > i ? n.left = o : n.right = o, this.fixAfterInsertion(o), this.size_++ , null }, rt.prototype.fixAfterInsertion = function (t) { for (t.color = to; null != t && t != this.root_ && t.parent.color == to;)if (tt(t) == nt(tt(tt(t)))) { var e = it(tt(tt(t))); $(e) == to ? (et(tt(t), $s), et(e, $s), et(tt(tt(t)), to), t = tt(tt(t))) : (t == it(tt(t)) && (t = tt(t), this.rotateLeft(t)), et(tt(t), $s), et(tt(tt(t)), to), this.rotateRight(tt(tt(t)))) } else { var e = nt(tt(tt(t))); $(e) == to ? (et(tt(t), $s), et(e, $s), et(tt(tt(t)), to), t = tt(tt(t))) : (t == nt(tt(t)) && (t = tt(t), this.rotateRight(t)), et(tt(t), $s), et(tt(tt(t)), to), this.rotateLeft(tt(tt(t)))) } this.root_.color = $s }, rt.prototype.values = function () { var t = new I, e = this.getFirstEntry(); if (null !== e) for (t.add(e.value); null !== (e = rt.successor(e));)t.add(e.value); return t }, rt.prototype.entrySet = function () { var t = new Q, e = this.getFirstEntry(); if (null !== e) for (t.add(e); null !== (e = rt.successor(e));)t.add(e); return t }, rt.prototype.rotateLeft = function (t) { if (null != t) { var e = t.right; t.right = e.left, null != e.left && (e.left.parent = t), e.parent = t.parent, null == t.parent ? this.root_ = e : t.parent.left == t ? t.parent.left = e : t.parent.right = e, e.left = t, t.parent = e } }, rt.prototype.rotateRight = function (t) { if (null != t) { var e = t.left; t.left = e.right, null != e.right && (e.right.parent = t), e.parent = t.parent, null == t.parent ? this.root_ = e : t.parent.right == t ? t.parent.right = e : t.parent.left = e, e.right = t, t.parent = e } }, rt.prototype.getFirstEntry = function () { var t = this.root_; if (null != t) for (; null != t.left;)t = t.left; return t }, rt.successor = function (t) { if (null === t) return null; if (null !== t.right) { for (var e = t.right; null !== e.left;)e = e.left; return e } for (var e = t.parent, n = t; null !== e && n === e.right;)n = e, e = e.parent; return e }, rt.prototype.size = function () { return this.size_ }, e(st.prototype, { interfaces_: function () { return [] }, getClass: function () { return st } }), ot.prototype = new K, at.prototype = new ot, at.prototype.contains = function (t) { for (var e = 0, n = this.array_.length; n > e; e++) { var i = this.array_[e]; if (0 === i.compareTo(t)) return !0 } return !1 }, at.prototype.add = function (t) { if (this.contains(t)) return !1; for (var e = 0, n = this.array_.length; n > e; e++) { var i = this.array_[e]; if (1 === i.compareTo(t)) return this.array_.splice(e, 0, t), !0 } return this.array_.push(t), !0 }, at.prototype.addAll = function (t) { for (var e = t.iterator(); e.hasNext();)this.add(e.next()); return !0 }, at.prototype.remove = function (t) { throw new E }, at.prototype.size = function () { return this.array_.length }, at.prototype.isEmpty = function () { return 0 === this.array_.length }, at.prototype.toArray = function () { for (var t = [], e = 0, n = this.array_.length; n > e; e++)t.push(this.array_[e]); return t }, at.prototype.iterator = function () { return new eo(this) }; var eo = function (t) { this.treeSet_ = t, this.position_ = 0 }; eo.prototype.next = function () { if (this.position_ === this.treeSet_.size()) throw new x; return this.treeSet_.array_[this.position_++] }, eo.prototype.hasNext = function () { return this.position_ < this.treeSet_.size() }, eo.prototype.remove = function () { throw new E }, ut.sort = function () { var t, e, n, i, r = arguments[0]; if (1 === arguments.length) return i = function (t, e) { return t.compareTo(e) }, void r.sort(i); if (2 === arguments.length) n = arguments[1], i = function (t, e) { return n.compare(t, e) }, r.sort(i); else { if (3 === arguments.length) { e = r.slice(arguments[1], arguments[2]), e.sort(); var s = r.slice(0, arguments[1]).concat(e, r.slice(arguments[2], r.length)); for (r.splice(0, r.length), t = 0; t < s.length; t++)r.push(s[t]); return } if (4 === arguments.length) { for (e = r.slice(arguments[1], arguments[2]), n = arguments[3], i = function (t, e) { return n.compare(t, e) }, e.sort(i), s = r.slice(0, arguments[1]).concat(e, r.slice(arguments[2], r.length)), r.splice(0, r.length), t = 0; t < s.length; t++)r.push(s[t]); return } } }, ut.asList = function (t) { for (var e = new I, n = 0, i = t.length; i > n; n++)e.add(t[n]); return e }, e(lt.prototype, { interfaces_: function () { return [] }, getClass: function () { return lt } }), lt.toDimensionSymbol = function (t) { switch (t) { case lt.FALSE: return lt.SYM_FALSE; case lt.TRUE: return lt.SYM_TRUE; case lt.DONTCARE: return lt.SYM_DONTCARE; case lt.P: return lt.SYM_P; case lt.L: return lt.SYM_L; case lt.A: return lt.SYM_A }throw new i("Unknown dimension value: " + t) }, lt.toDimensionValue = function (t) { switch (O.toUpperCase(t)) { case lt.SYM_FALSE: return lt.FALSE; case lt.SYM_TRUE: return lt.TRUE; case lt.SYM_DONTCARE: return lt.DONTCARE; case lt.SYM_P: return lt.P; case lt.SYM_L: return lt.L; case lt.SYM_A: return lt.A }throw new i("Unknown dimension symbol: " + t) }, lt.P = 0, lt.L = 1, lt.A = 2, lt.FALSE = -1, lt.TRUE = -2, lt.DONTCARE = -3, lt.SYM_FALSE = "F", lt.SYM_TRUE = "T", lt.SYM_DONTCARE = "*", lt.SYM_P = "0", lt.SYM_L = "1", lt.SYM_A = "2", e(ht.prototype, { filter: function (t) { }, interfaces_: function () { return [] }, getClass: function () { return ht } }), e(ct.prototype, { filter: function (t, e) { }, isDone: function () { }, isGeometryChanged: function () { }, interfaces_: function () { return [] }, getClass: function () { return ct } }), h(gt, B), e(gt.prototype, { computeEnvelopeInternal: function () { for (var t = new C, e = 0; e < this.geometries.length; e++)t.expandToInclude(this.geometries[e].getEnvelopeInternal()); return t }, getGeometryN: function (t) { return this.geometries[t] }, getSortIndex: function () { return B.SORTINDEX_GEOMETRYCOLLECTION }, getCoordinates: function () { for (var t = new Array(this.getNumPoints()).fill(null), e = -1, n = 0; n < this.geometries.length; n++)for (var i = this.geometries[n].getCoordinates(), r = 0; r < i.length; r++)e++ , t[e] = i[r]; return t }, getArea: function () { for (var t = 0, e = 0; e < this.geometries.length; e++)t += this.geometries[e].getArea(); return t }, equalsExact: function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; if (!this.isEquivalentClass(t)) return !1; var n = t; if (this.geometries.length !== n.geometries.length) return !1; for (var i = 0; i < this.geometries.length; i++)if (!this.geometries[i].equalsExact(n.geometries[i], e)) return !1; return !0 } return B.prototype.equalsExact.apply(this, arguments) }, normalize: function () { for (var t = 0; t < this.geometries.length; t++)this.geometries[t].normalize(); ut.sort(this.geometries) }, getCoordinate: function () { return this.isEmpty() ? null : this.geometries[0].getCoordinate() }, getBoundaryDimension: function () { for (var t = lt.FALSE, e = 0; e < this.geometries.length; e++)t = Math.max(t, this.geometries[e].getBoundaryDimension()); return t }, getDimension: function () { for (var t = lt.FALSE, e = 0; e < this.geometries.length; e++)t = Math.max(t, this.geometries[e].getDimension()); return t }, getLength: function () { for (var t = 0, e = 0; e < this.geometries.length; e++)t += this.geometries[e].getLength(); return t }, getNumPoints: function () { for (var t = 0, e = 0; e < this.geometries.length; e++)t += this.geometries[e].getNumPoints(); return t }, getNumGeometries: function () { return this.geometries.length }, reverse: function () { for (var t = this.geometries.length, e = new Array(t).fill(null), n = 0; n < this.geometries.length; n++)e[n] = this.geometries[n].reverse(); return this.getFactory().createGeometryCollection(e) }, compareToSameClass: function () { if (1 === arguments.length) { var t = arguments[0], e = new at(ut.asList(this.geometries)), n = new at(ut.asList(t.geometries)); return this.compare(e, n) } if (2 === arguments.length) { for (var i = arguments[0], r = arguments[1], s = i, o = this.getNumGeometries(), a = s.getNumGeometries(), u = 0; o > u && a > u;) { var l = this.getGeometryN(u), h = s.getGeometryN(u), c = l.compareToSameClass(h, r); if (0 !== c) return c; u++ } return o > u ? 1 : a > u ? -1 : 0 } }, apply: function () { if (R(arguments[0], z)) for (var t = arguments[0], e = 0; e < this.geometries.length; e++)this.geometries[e].apply(t); else if (R(arguments[0], ct)) { var n = arguments[0]; if (0 === this.geometries.length) return null; for (var e = 0; e < this.geometries.length && (this.geometries[e].apply(n), !n.isDone()); e++); n.isGeometryChanged() && this.geometryChanged() } else if (R(arguments[0], ht)) { var i = arguments[0]; i.filter(this); for (var e = 0; e < this.geometries.length; e++)this.geometries[e].apply(i) } else if (R(arguments[0], q)) { var r = arguments[0]; r.filter(this); for (var e = 0; e < this.geometries.length; e++)this.geometries[e].apply(r) } }, getBoundary: function () { return this.checkNotGeometryCollection(this), g.shouldNeverReachHere(), null }, clone: function () { var t = B.prototype.clone.call(this); t.geometries = new Array(this.geometries.length).fill(null); for (var e = 0; e < this.geometries.length; e++)t.geometries[e] = this.geometries[e].clone(); return t }, getGeometryType: function () { return "GeometryCollection" }, copy: function () { for (var t = new Array(this.geometries.length).fill(null), e = 0; e < t.length; e++)t[e] = this.geometries[e].copy(); return new gt(t, this.factory) }, isEmpty: function () { for (var t = 0; t < this.geometries.length; t++)if (!this.geometries[t].isEmpty()) return !1; return !0 }, interfaces_: function () { return [] }, getClass: function () { return gt } }), gt.serialVersionUID = -0x4f07bcb1f857d800, h(ft, gt), e(ft.prototype, { getSortIndex: function () { return B.SORTINDEX_MULTILINESTRING }, equalsExact: function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; return this.isEquivalentClass(t) ? gt.prototype.equalsExact.call(this, t, e) : !1 } return gt.prototype.equalsExact.apply(this, arguments) }, getBoundaryDimension: function () { return this.isClosed() ? lt.FALSE : 0 }, isClosed: function () { if (this.isEmpty()) return !1; for (var t = 0; t < this.geometries.length; t++)if (!this.geometries[t].isClosed()) return !1; return !0 }, getDimension: function () { return 1 }, reverse: function () { for (var t = this.geometries.length, e = new Array(t).fill(null), n = 0; n < this.geometries.length; n++)e[t - 1 - n] = this.geometries[n].reverse(); return this.getFactory().createMultiLineString(e) }, getBoundary: function () { return new dt(this).getBoundary() }, getGeometryType: function () { return "MultiLineString" }, copy: function () { for (var t = new Array(this.geometries.length).fill(null), e = 0; e < t.length; e++)t[e] = this.geometries[e].copy(); return new ft(t, this.factory) }, interfaces_: function () { return [st] }, getClass: function () { return ft } }), ft.serialVersionUID = 0x7155d2ab4afa8000, e(dt.prototype, { boundaryMultiLineString: function (t) { if (this.geom.isEmpty()) return this.getEmptyMultiPoint(); var e = this.computeBoundaryCoordinates(t); return 1 === e.length ? this.geomFact.createPoint(e[0]) : this.geomFact.createMultiPointFromCoords(e) }, getBoundary: function () { return this.geom instanceof wt ? this.boundaryLineString(this.geom) : this.geom instanceof ft ? this.boundaryMultiLineString(this.geom) : this.geom.getBoundary() }, boundaryLineString: function (t) { if (this.geom.isEmpty()) return this.getEmptyMultiPoint(); if (t.isClosed()) { var e = this.bnRule.isInBoundary(2); return e ? t.getStartPoint() : this.geomFact.createMultiPoint() } return this.geomFact.createMultiPoint([t.getStartPoint(), t.getEndPoint()]) }, getEmptyMultiPoint: function () { return this.geomFact.createMultiPoint() }, computeBoundaryCoordinates: function (t) { var e = new I; this.endpointMap = new rt; for (var n = 0; n < t.getNumGeometries(); n++) { var i = t.getGeometryN(n); 0 !== i.getNumPoints() && (this.addEndpoint(i.getCoordinateN(0)), this.addEndpoint(i.getCoordinateN(i.getNumPoints() - 1))) } for (var r = this.endpointMap.entrySet().iterator(); r.hasNext();) { var s = r.next(), o = s.getValue(), a = o.count; this.bnRule.isInBoundary(a) && e.add(s.getKey()) } return H.toCoordinateArray(e) }, addEndpoint: function (t) { var e = this.endpointMap.get(t); null === e && (e = new mt, this.endpointMap.put(t, e)), e.count++ }, interfaces_: function () { return [] }, getClass: function () { return dt } }), dt.getBoundary = function () { if (1 === arguments.length) { var t = arguments[0], e = new dt(t); return e.getBoundary() } if (2 === arguments.length) { var n = arguments[0], i = arguments[1], e = new dt(n, i); return e.getBoundary() } }, e(mt.prototype, { interfaces_: function () { return [] }, getClass: function () { return mt } }), e(Nt.prototype, { interfaces_: function () { return [] }, getClass: function () { return Nt } }), Nt.chars = function (t, e) { for (var n = new Array(e).fill(null), i = 0; e > i; i++)n[i] = t; return new String(n) }, Nt.getStackTrace = function () { if (1 === arguments.length) { var t = arguments[0], e = new xt, n = new pt(e); return t.printStackTrace(n), e.toString() } if (2 === arguments.length) { for (var i = arguments[0], r = arguments[1], s = "", o = new vt(Nt.getStackTrace(i)), a = new It(o), u = 0; r > u; u++)try { s += a.readLine() + Nt.NEWLINE } catch (t) { if (!(t instanceof Et)) throw t; g.shouldNeverReachHere() } finally { } return s } }, Nt.split = function (t, e) { for (var n = e.length, i = new I, r = "" + t, s = r.indexOf(e); s >= 0;) { var o = r.substring(0, s); i.add(o), r = r.substring(s + n), s = r.indexOf(e) } r.length > 0 && i.add(r); for (var a = new Array(i.size()).fill(null), u = 0; u < a.length; u++)a[u] = i.get(u); return a }, Nt.toString = function () { if (1 === arguments.length) { var t = arguments[0]; return Nt.SIMPLE_ORDINATE_FORMAT.format(t) } }, Nt.spaces = function (t) { return Nt.chars(" ", t) }, Nt.NEWLINE = D.getProperty("line.separator"), Nt.SIMPLE_ORDINATE_FORMAT = new yt("0.#"), e(Ct.prototype, { interfaces_: function () { return [] }, getClass: function () { return Ct } }), Ct.copyCoord = function (t, e, n, i) { for (var r = Math.min(t.getDimension(), n.getDimension()), s = 0; r > s; s++)n.setOrdinate(i, s, t.getOrdinate(e, s)) }, Ct.isRing = function (t) { var e = t.size(); return 0 === e ? !0 : 3 >= e ? !1 : t.getOrdinate(0, A.X) === t.getOrdinate(e - 1, A.X) && t.getOrdinate(0, A.Y) === t.getOrdinate(e - 1, A.Y) }, Ct.isEqual = function (t, e) { var n = t.size(), i = e.size(); if (n !== i) return !1; for (var s = Math.min(t.getDimension(), e.getDimension()), o = 0; n > o; o++)for (var a = 0; s > a; a++) { var u = t.getOrdinate(o, a), l = e.getOrdinate(o, a); if (!(t.getOrdinate(o, a) === e.getOrdinate(o, a) || r.isNaN(u) && r.isNaN(l))) return !1 } return !0 }, Ct.extend = function (t, e, n) { var i = t.create(n, e.getDimension()), r = e.size(); if (Ct.copy(e, 0, i, 0, r), r > 0) for (var s = r; n > s; s++)Ct.copy(e, r - 1, i, s, 1); return i }, Ct.reverse = function (t) { for (var e = t.size() - 1, n = Math.trunc(e / 2), i = 0; n >= i; i++)Ct.swap(t, i, e - i) }, Ct.swap = function (t, e, n) { if (e === n) return null; for (var i = 0; i < t.getDimension(); i++) { var r = t.getOrdinate(e, i); t.setOrdinate(e, i, t.getOrdinate(n, i)), t.setOrdinate(n, i, r) } }, Ct.copy = function (t, e, n, i, r) { for (var s = 0; r > s; s++)Ct.copyCoord(t, e + s, n, i + s) }, Ct.toString = function () { if (1 === arguments.length) { var t = arguments[0], e = t.size(); if (0 === e) return "()"; var n = t.getDimension(), i = new T; i.append("("); for (var r = 0; e > r; r++) { r > 0 && i.append(" "); for (var s = 0; n > s; s++)s > 0 && i.append(","), i.append(Nt.toString(t.getOrdinate(r, s))) } return i.append(")"), i.toString() } }, Ct.ensureValidRing = function (t, e) { var n = e.size(); if (0 === n) return e; if (3 >= n) return Ct.createClosedRing(t, e, 4); var i = e.getOrdinate(0, A.X) === e.getOrdinate(n - 1, A.X) && e.getOrdinate(0, A.Y) === e.getOrdinate(n - 1, A.Y); return i ? e : Ct.createClosedRing(t, e, n + 1) }, Ct.createClosedRing = function (t, e, n) { var i = t.create(n, e.getDimension()), r = e.size(); Ct.copy(e, 0, i, 0, r); for (var s = r; n > s; s++)Ct.copy(e, 0, i, s, 1); return i }, h(wt, B), e(wt.prototype, { computeEnvelopeInternal: function () { return this.isEmpty() ? new C : this.points.expandEnvelope(new C) }, isRing: function () { return this.isClosed() && this.isSimple() }, getSortIndex: function () { return B.SORTINDEX_LINESTRING }, getCoordinates: function () { return this.points.toCoordinateArray() }, equalsExact: function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; if (!this.isEquivalentClass(t)) return !1; var n = t; if (this.points.size() !== n.points.size()) return !1; for (var i = 0; i < this.points.size(); i++)if (!this.equal(this.points.getCoordinate(i), n.points.getCoordinate(i), e)) return !1; return !0 } return B.prototype.equalsExact.apply(this, arguments) }, normalize: function () { for (var t = 0; t < Math.trunc(this.points.size() / 2); t++) { var e = this.points.size() - 1 - t; if (!this.points.getCoordinate(t).equals(this.points.getCoordinate(e))) return this.points.getCoordinate(t).compareTo(this.points.getCoordinate(e)) > 0 && Ct.reverse(this.points), null } }, getCoordinate: function () { return this.isEmpty() ? null : this.points.getCoordinate(0) }, getBoundaryDimension: function () { return this.isClosed() ? lt.FALSE : 0 }, isClosed: function () { return this.isEmpty() ? !1 : this.getCoordinateN(0).equals2D(this.getCoordinateN(this.getNumPoints() - 1)) }, getEndPoint: function () { return this.isEmpty() ? null : this.getPointN(this.getNumPoints() - 1) }, getDimension: function () { return 1 }, getLength: function () { return he.computeLength(this.points) }, getNumPoints: function () { return this.points.size() }, reverse: function () { var t = this.points.copy(); Ct.reverse(t); var e = this.getFactory().createLineString(t); return e }, compareToSameClass: function () { if (1 === arguments.length) { for (var t = arguments[0], e = t, n = 0, i = 0; n < this.points.size() && i < e.points.size();) { var r = this.points.getCoordinate(n).compareTo(e.points.getCoordinate(i)); if (0 !== r) return r; n++ , i++ } return n < this.points.size() ? 1 : i < e.points.size() ? -1 : 0 } if (2 === arguments.length) { var s = arguments[0], o = arguments[1], e = s; return o.compare(this.points, e.points) } }, apply: function () { if (R(arguments[0], z)) for (var t = arguments[0], e = 0; e < this.points.size(); e++)t.filter(this.points.getCoordinate(e)); else if (R(arguments[0], ct)) { var n = arguments[0]; if (0 === this.points.size()) return null; for (var e = 0; e < this.points.size() && (n.filter(this.points, e), !n.isDone()); e++); n.isGeometryChanged() && this.geometryChanged() } else if (R(arguments[0], ht)) { var i = arguments[0]; i.filter(this) } else if (R(arguments[0], q)) { var r = arguments[0]; r.filter(this) } }, getBoundary: function () { return new dt(this).getBoundary() }, isEquivalentClass: function (t) { return t instanceof wt }, clone: function () { var t = B.prototype.clone.call(this); return t.points = this.points.clone(), t }, getCoordinateN: function (t) { return this.points.getCoordinate(t) }, getGeometryType: function () { return "LineString" }, copy: function () { return new wt(this.points.copy(), this.factory) }, getCoordinateSequence: function () { return this.points }, isEmpty: function () { return 0 === this.points.size() }, init: function (t) { if (null === t && (t = this.getFactory().getCoordinateSequenceFactory().create([])), 1 === t.size()) throw new i("Invalid number of points in LineString (found " + t.size() + " - must be 0 or >= 2)"); this.points = t }, isCoordinate: function (t) { for (var e = 0; e < this.points.size(); e++)if (this.points.getCoordinate(e).equals(t)) return !0; return !1 }, getStartPoint: function () { return this.isEmpty() ? null : this.getPointN(0) }, getPointN: function (t) { return this.getFactory().createPoint(this.points.getCoordinate(t)) }, interfaces_: function () { return [st] }, getClass: function () { return wt } }), wt.serialVersionUID = 0x2b2b51ba435c8e00, e(St.prototype, { interfaces_: function () { return [] }, getClass: function () { return St } }), h(Lt, B), e(Lt.prototype, { computeEnvelopeInternal: function () { if (this.isEmpty()) return new C; var t = new C; return t.expandToInclude(this.coordinates.getX(0), this.coordinates.getY(0)), t }, getSortIndex: function () { return B.SORTINDEX_POINT }, getCoordinates: function () { return this.isEmpty() ? [] : [this.getCoordinate()] }, equalsExact: function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; return this.isEquivalentClass(t) ? this.isEmpty() && t.isEmpty() ? !0 : this.isEmpty() !== t.isEmpty() ? !1 : this.equal(t.getCoordinate(), this.getCoordinate(), e) : !1 } return B.prototype.equalsExact.apply(this, arguments) }, normalize: function () { }, getCoordinate: function () { return 0 !== this.coordinates.size() ? this.coordinates.getCoordinate(0) : null }, getBoundaryDimension: function () { return lt.FALSE }, getDimension: function () { return 0 }, getNumPoints: function () { return this.isEmpty() ? 0 : 1 }, reverse: function () { return this.copy() }, getX: function () { if (null === this.getCoordinate()) throw new IllegalStateException("getX called on empty Point"); return this.getCoordinate().x }, compareToSameClass: function () { if (1 === arguments.length) { var t = arguments[0], e = t; return this.getCoordinate().compareTo(e.getCoordinate()) } if (2 === arguments.length) { var n = arguments[0], i = arguments[1], e = n; return i.compare(this.coordinates, e.coordinates) } }, apply: function () { if (R(arguments[0], z)) { var t = arguments[0]; if (this.isEmpty()) return null; t.filter(this.getCoordinate()) } else if (R(arguments[0], ct)) { var e = arguments[0]; if (this.isEmpty()) return null; e.filter(this.coordinates, 0), e.isGeometryChanged() && this.geometryChanged() } else if (R(arguments[0], ht)) { var n = arguments[0]; n.filter(this) } else if (R(arguments[0], q)) { var i = arguments[0]; i.filter(this) } }, getBoundary: function () { return this.getFactory().createGeometryCollection(null) }, clone: function () { var t = B.prototype.clone.call(this); return t.coordinates = this.coordinates.clone(), t }, getGeometryType: function () { return "Point" }, copy: function () { return new Lt(this.coordinates.copy(), this.factory) }, getCoordinateSequence: function () { return this.coordinates }, getY: function () { if (null === this.getCoordinate()) throw new IllegalStateException("getY called on empty Point"); return this.getCoordinate().y }, isEmpty: function () { return 0 === this.coordinates.size() }, init: function (t) { null === t && (t = this.getFactory().getCoordinateSequenceFactory().create([])), g.isTrue(t.size() <= 1), this.coordinates = t }, isSimple: function () { return !0 }, interfaces_: function () { return [St] }, getClass: function () { return Lt } }), Lt.serialVersionUID = 0x44077bad161cbc00, e(Rt.prototype, { interfaces_: function () { return [] }, getClass: function () { return Rt } }), h(bt, B), e(bt.prototype, { computeEnvelopeInternal: function () { return this.shell.getEnvelopeInternal() }, getSortIndex: function () { return B.SORTINDEX_POLYGON }, getCoordinates: function () { if (this.isEmpty()) return []; for (var t = new Array(this.getNumPoints()).fill(null), e = -1, n = this.shell.getCoordinates(), i = 0; i < n.length; i++)e++ , t[e] = n[i]; for (var r = 0; r < this.holes.length; r++)for (var s = this.holes[r].getCoordinates(), o = 0; o < s.length; o++)e++ , t[e] = s[o]; return t }, getArea: function () { var t = 0; t += Math.abs(he.signedArea(this.shell.getCoordinateSequence())); for (var e = 0; e < this.holes.length; e++)t -= Math.abs(he.signedArea(this.holes[e].getCoordinateSequence())); return t }, isRectangle: function () { if (0 !== this.getNumInteriorRing()) return !1; if (null === this.shell) return !1; if (5 !== this.shell.getNumPoints()) return !1; for (var t = this.shell.getCoordinateSequence(), e = this.getEnvelopeInternal(), n = 0; 5 > n; n++) { var i = t.getX(n); if (i !== e.getMinX() && i !== e.getMaxX()) return !1; var r = t.getY(n); if (r !== e.getMinY() && r !== e.getMaxY()) return !1 } for (var s = t.getX(0), o = t.getY(0), n = 1; 4 >= n; n++) { var i = t.getX(n), r = t.getY(n), a = i !== s, u = r !== o; if (a === u) return !1; s = i, o = r } return !0 }, equalsExact: function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; if (!this.isEquivalentClass(t)) return !1; var n = t, i = this.shell, r = n.shell; if (!i.equalsExact(r, e)) return !1; if (this.holes.length !== n.holes.length) return !1; for (var s = 0; s < this.holes.length; s++)if (!this.holes[s].equalsExact(n.holes[s], e)) return !1; return !0 } return B.prototype.equalsExact.apply(this, arguments) }, normalize: function () { if (0 === arguments.length) { this.normalize(this.shell, !0); for (var t = 0; t < this.holes.length; t++)this.normalize(this.holes[t], !1); ut.sort(this.holes) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; if (e.isEmpty()) return null; var i = new Array(e.getCoordinates().length - 1).fill(null); D.arraycopy(e.getCoordinates(), 0, i, 0, i.length); var r = H.minCoordinate(e.getCoordinates()); H.scroll(i, r), D.arraycopy(i, 0, e.getCoordinates(), 0, i.length), e.getCoordinates()[i.length] = i[0], he.isCCW(e.getCoordinates()) === n && H.reverse(e.getCoordinates()) } }, getCoordinate: function () { return this.shell.getCoordinate() }, getNumInteriorRing: function () { return this.holes.length }, getBoundaryDimension: function () { return 1 }, getDimension: function () { return 2 }, getLength: function () { var t = 0; t += this.shell.getLength(); for (var e = 0; e < this.holes.length; e++)t += this.holes[e].getLength(); return t }, getNumPoints: function () { for (var t = this.shell.getNumPoints(), e = 0; e < this.holes.length; e++)t += this.holes[e].getNumPoints(); return t }, reverse: function () { var t = this.copy(); t.shell = this.shell.copy().reverse(), t.holes = new Array(this.holes.length).fill(null); for (var e = 0; e < this.holes.length; e++)t.holes[e] = this.holes[e].copy().reverse(); return t }, convexHull: function () { return this.getExteriorRing().convexHull() }, compareToSameClass: function () { if (1 === arguments.length) { var t = arguments[0], e = this.shell, n = t.shell; return e.compareToSameClass(n) } if (2 === arguments.length) { var i = arguments[0], r = arguments[1], s = i, e = this.shell, n = s.shell, o = e.compareToSameClass(n, r); if (0 !== o) return o; for (var a = this.getNumInteriorRing(), u = s.getNumInteriorRing(), l = 0; a > l && u > l;) { var h = this.getInteriorRingN(l), c = s.getInteriorRingN(l), g = h.compareToSameClass(c, r); if (0 !== g) return g; l++ } return a > l ? 1 : u > l ? -1 : 0 } }, apply: function () { if (R(arguments[0], z)) { var t = arguments[0]; this.shell.apply(t); for (var e = 0; e < this.holes.length; e++)this.holes[e].apply(t) } else if (R(arguments[0], ct)) { var n = arguments[0]; if (this.shell.apply(n), !n.isDone()) for (var e = 0; e < this.holes.length && (this.holes[e].apply(n), !n.isDone()); e++); n.isGeometryChanged() && this.geometryChanged() } else if (R(arguments[0], ht)) { var i = arguments[0]; i.filter(this) } else if (R(arguments[0], q)) { var r = arguments[0]; r.filter(this), this.shell.apply(r); for (var e = 0; e < this.holes.length; e++)this.holes[e].apply(r) } }, getBoundary: function () { if (this.isEmpty()) return this.getFactory().createMultiLineString(); var t = new Array(this.holes.length + 1).fill(null); t[0] = this.shell; for (var e = 0; e < this.holes.length; e++)t[e + 1] = this.holes[e]; return t.length <= 1 ? this.getFactory().createLinearRing(t[0].getCoordinateSequence()) : this.getFactory().createMultiLineString(t) }, clone: function () { var t = B.prototype.clone.call(this); t.shell = this.shell.clone(), t.holes = new Array(this.holes.length).fill(null); for (var e = 0; e < this.holes.length; e++)t.holes[e] = this.holes[e].clone(); return t }, getGeometryType: function () { return "Polygon" }, copy: function () { for (var t = this.shell.copy(), e = new Array(this.holes.length).fill(null), n = 0; n < e.length; n++)e[n] = this.holes[n].copy(); return new bt(t, e, this.factory) }, getExteriorRing: function () { return this.shell }, isEmpty: function () { return this.shell.isEmpty() }, getInteriorRingN: function (t) { return this.holes[t] }, interfaces_: function () { return [Rt] }, getClass: function () { return bt } }), bt.serialVersionUID = -0x307ffefd8dc97200, h(Tt, gt), e(Tt.prototype, { getSortIndex: function () { return B.SORTINDEX_MULTIPOINT }, isValid: function () { return !0 }, equalsExact: function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; return this.isEquivalentClass(t) ? gt.prototype.equalsExact.call(this, t, e) : !1 } return gt.prototype.equalsExact.apply(this, arguments) }, getCoordinate: function () { if (1 === arguments.length) { var t = arguments[0]; return this.geometries[t].getCoordinate() } return gt.prototype.getCoordinate.apply(this, arguments) }, getBoundaryDimension: function () { return lt.FALSE }, getDimension: function () { return 0 }, getBoundary: function () { return this.getFactory().createGeometryCollection(null) }, getGeometryType: function () { return "MultiPoint" }, copy: function () { for (var t = new Array(this.geometries.length).fill(null), e = 0; e < t.length; e++)t[e] = this.geometries[e].copy(); return new Tt(t, this.factory) }, interfaces_: function () { return [St] }, getClass: function () { return Tt } }), Tt.serialVersionUID = -0x6fb1ed4162e0fc00, h(Pt, wt), e(Pt.prototype, { getSortIndex: function () { return B.SORTINDEX_LINEARRING }, getBoundaryDimension: function () { return lt.FALSE }, isClosed: function () { return this.isEmpty() ? !0 : wt.prototype.isClosed.call(this) }, reverse: function () { var t = this.points.copy(); Ct.reverse(t); var e = this.getFactory().createLinearRing(t); return e }, validateConstruction: function () { if (!this.isEmpty() && !wt.prototype.isClosed.call(this)) throw new i("Points of LinearRing do not form a closed linestring"); if (this.getCoordinateSequence().size() >= 1 && this.getCoordinateSequence().size() < Pt.MINIMUM_VALID_SIZE) throw new i("Invalid number of points in LinearRing (found " + this.getCoordinateSequence().size() + " - must be 0 or >= 4)") }, getGeometryType: function () { return "LinearRing" }, copy: function () { return new Pt(this.points.copy(), this.factory) }, interfaces_: function () { return [] }, getClass: function () { return Pt } }), Pt.MINIMUM_VALID_SIZE = 4, Pt.serialVersionUID = -0x3b229e262367a600, h(Ot, gt), e(Ot.prototype, { getSortIndex: function () { return B.SORTINDEX_MULTIPOLYGON }, equalsExact: function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; return this.isEquivalentClass(t) ? gt.prototype.equalsExact.call(this, t, e) : !1 } return gt.prototype.equalsExact.apply(this, arguments) }, getBoundaryDimension: function () { return 1 }, getDimension: function () { return 2 }, reverse: function () { for (var t = this.geometries.length, e = new Array(t).fill(null), n = 0; n < this.geometries.length; n++)e[n] = this.geometries[n].reverse(); return this.getFactory().createMultiPolygon(e) }, getBoundary: function () { if (this.isEmpty()) return this.getFactory().createMultiLineString(); for (var t = new I, e = 0; e < this.geometries.length; e++)for (var n = this.geometries[e], i = n.getBoundary(), r = 0; r < i.getNumGeometries(); r++)t.add(i.getGeometryN(r)); var s = new Array(t.size()).fill(null); return this.getFactory().createMultiLineString(t.toArray(s)) }, getGeometryType: function () { return "MultiPolygon" }, copy: function () { for (var t = new Array(this.geometries.length).fill(null), e = 0; e < t.length; e++)t[e] = this.geometries[e].copy(); return new Ot(t, this.factory) }, interfaces_: function () { return [Rt] }, getClass: function () { return Ot } }), Ot.serialVersionUID = -0x7a5aa1369171980, e(Mt.prototype, { setCopyUserData: function (t) { this.isUserDataCopied = t }, edit: function (t, e) { if (null === t) return null; var n = this.editInternal(t, e); return this.isUserDataCopied && n.setUserData(t.getUserData()), n }, editInternal: function (t, e) { return null === this.factory && (this.factory = t.getFactory()), t instanceof gt ? this.editGeometryCollection(t, e) : t instanceof bt ? this.editPolygon(t, e) : t instanceof Lt ? e.edit(t, this.factory) : t instanceof wt ? e.edit(t, this.factory) : (g.shouldNeverReachHere("Unsupported Geometry class: " + t.getClass().getName()), null) }, editGeometryCollection: function (t, e) { for (var n = e.edit(t, this.factory), i = new I, r = 0; r < n.getNumGeometries(); r++) { var s = this.edit(n.getGeometryN(r), e); null === s || s.isEmpty() || i.add(s) } return n.getClass() === Tt ? this.factory.createMultiPoint(i.toArray([])) : n.getClass() === ft ? this.factory.createMultiLineString(i.toArray([])) : n.getClass() === Ot ? this.factory.createMultiPolygon(i.toArray([])) : this.factory.createGeometryCollection(i.toArray([])) }, editPolygon: function (t, e) { var n = e.edit(t, this.factory); if (null === n && (n = this.factory.createPolygon(null)), n.isEmpty()) return n; var i = this.edit(n.getExteriorRing(), e); if (null === i || i.isEmpty()) return this.factory.createPolygon(); for (var r = new I, s = 0; s < n.getNumInteriorRing(); s++) { var o = this.edit(n.getInteriorRingN(s), e); null === o || o.isEmpty() || r.add(o) } return this.factory.createPolygon(i, r.toArray([])) }, interfaces_: function () { return [] }, getClass: function () { return Mt } }), Mt.GeometryEditorOperation = _t, e(At.prototype, { edit: function (t, e) { return t }, interfaces_: function () { return [_t] }, getClass: function () { return At } }), e(Dt.prototype, { edit: function (t, e) { if (t instanceof Pt) return e.createLinearRing(this.editCoordinates(t.getCoordinates(), t)); if (t instanceof wt) return e.createLineString(this.editCoordinates(t.getCoordinates(), t)); if (t instanceof Lt) { var n = this.editCoordinates(t.getCoordinates(), t); return n.length > 0 ? e.createPoint(n[0]) : e.createPoint() } return t }, interfaces_: function () { return [_t] }, getClass: function () { return Dt } }), e(Ft.prototype, { edit: function (t, e) { return t instanceof Pt ? e.createLinearRing(this.edit(t.getCoordinateSequence(), t)) : t instanceof wt ? e.createLineString(this.edit(t.getCoordinateSequence(), t)) : t instanceof Lt ? e.createPoint(this.edit(t.getCoordinateSequence(), t)) : t }, interfaces_: function () { return [_t] }, getClass: function () { return Ft } }), Mt.NoOpGeometryOperation = At, Mt.CoordinateOperation = Dt, Mt.CoordinateSequenceOperation = Ft, e(Gt.prototype, { + setOrdinate: function (t, e, n) { + switch (e) { + case A.X: this.coordinates[t].x = n; break; case A.Y: + this.coordinates[t].y = n; break; case A.Z: this.coordinates[t].z = n; break; default: throw new i("invalid ordinateIndex") + } + }, size: function () { return this.coordinates.length }, getOrdinate: function (t, e) { switch (e) { case A.X: return this.coordinates[t].x; case A.Y: return this.coordinates[t].y; case A.Z: return this.coordinates[t].z }return r.NaN }, getCoordinate: function () { if (1 === arguments.length) { var t = arguments[0]; return this.coordinates[t] } if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; n.x = this.coordinates[e].x, n.y = this.coordinates[e].y, n.z = this.coordinates[e].z } }, getCoordinateCopy: function (t) { return new f(this.coordinates[t]) }, getDimension: function () { return this.dimension }, getX: function (t) { return this.coordinates[t].x }, clone: function () { for (var t = new Array(this.size()).fill(null), e = 0; e < this.coordinates.length; e++)t[e] = this.coordinates[e].clone(); return new Gt(t, this.dimension) }, expandEnvelope: function (t) { for (var e = 0; e < this.coordinates.length; e++)t.expandToInclude(this.coordinates[e]); return t }, copy: function () { for (var t = new Array(this.size()).fill(null), e = 0; e < this.coordinates.length; e++)t[e] = this.coordinates[e].copy(); return new Gt(t, this.dimension) }, toString: function () { if (this.coordinates.length > 0) { var t = new T(17 * this.coordinates.length); t.append("("), t.append(this.coordinates[0]); for (var e = 1; e < this.coordinates.length; e++)t.append(", "), t.append(this.coordinates[e]); return t.append(")"), t.toString() } return "()" }, getY: function (t) { return this.coordinates[t].y }, toCoordinateArray: function () { return this.coordinates }, interfaces_: function () { return [A, u] }, getClass: function () { return Gt } + }), Gt.serialVersionUID = -0xcb44a778db18e00, e(qt.prototype, { readResolve: function () { return qt.instance() }, create: function () { if (1 === arguments.length) { if (arguments[0] instanceof Array) { var t = arguments[0]; return new Gt(t) } if (R(arguments[0], A)) { var e = arguments[0]; return new Gt(e) } } else if (2 === arguments.length) { var n = arguments[0], i = arguments[1]; return i > 3 && (i = 3), 2 > i ? new Gt(n) : new Gt(n, i) } }, interfaces_: function () { return [G, u] }, getClass: function () { return qt } }), qt.instance = function () { return qt.instanceObject }, qt.serialVersionUID = -0x38e49fa6cf6f2e00, qt.instanceObject = new qt; var no, io = Object.defineProperty, ro = zt({ "delete": kt, has: Xt, get: Ut, set: Ht, keys: jt, values: Zt, entries: Jt, forEach: $t, clear: Wt }), so = "undefined" != typeof Map && Map.prototype.values ? Map : ro; te.prototype = new Z, te.prototype.get = function (t) { return this.map_.get(t) || null }, te.prototype.put = function (t, e) { return this.map_.set(t, e), e }, te.prototype.values = function () { for (var t = new I, e = this.map_.values(), n = e.next(); !n.done;)t.add(n.value), n = e.next(); return t }, te.prototype.entrySet = function () { var t = new Q; return this.map_.entries().forEach(function (e) { return t.add(e) }), t }, te.prototype.size = function () { return this.map_.size() }, e(ee.prototype, { equals: function (t) { if (!(t instanceof ee)) return !1; var e = t; return this.modelType === e.modelType && this.scale === e.scale }, compareTo: function (t) { var e = t, n = this.getMaximumSignificantDigits(), i = e.getMaximumSignificantDigits(); return new P(n).compareTo(new P(i)) }, getScale: function () { return this.scale }, isFloating: function () { return this.modelType === ee.FLOATING || this.modelType === ee.FLOATING_SINGLE }, getType: function () { return this.modelType }, toString: function () { var t = "UNKNOWN"; return this.modelType === ee.FLOATING ? t = "Floating" : this.modelType === ee.FLOATING_SINGLE ? t = "Floating-Single" : this.modelType === ee.FIXED && (t = "Fixed (Scale=" + this.getScale() + ")"), t }, makePrecise: function () { if ("number" == typeof arguments[0]) { var t = arguments[0]; if (r.isNaN(t)) return t; if (this.modelType === ee.FLOATING_SINGLE) { var e = t; return e } return this.modelType === ee.FIXED ? Math.round(t * this.scale) / this.scale : t } if (arguments[0] instanceof f) { var n = arguments[0]; if (this.modelType === ee.FLOATING) return null; n.x = this.makePrecise(n.x), n.y = this.makePrecise(n.y) } }, getMaximumSignificantDigits: function () { var t = 16; return this.modelType === ee.FLOATING ? t = 16 : this.modelType === ee.FLOATING_SINGLE ? t = 6 : this.modelType === ee.FIXED && (t = 1 + Math.trunc(Math.ceil(Math.log(this.getScale()) / Math.log(10)))), t }, setScale: function (t) { this.scale = Math.abs(t) }, interfaces_: function () { return [u, s] }, getClass: function () { return ee } }), ee.mostPrecise = function (t, e) { return t.compareTo(e) >= 0 ? t : e }, e(ne.prototype, { readResolve: function () { return ne.nameToTypeMap.get(this.name) }, toString: function () { return this.name }, interfaces_: function () { return [u] }, getClass: function () { return ne } }), ne.serialVersionUID = -552860263173159e4, ne.nameToTypeMap = new te, ee.Type = ne, ee.serialVersionUID = 0x6bee6404e9a25c00, ee.FIXED = new ne("FIXED"), ee.FLOATING = new ne("FLOATING"), ee.FLOATING_SINGLE = new ne("FLOATING SINGLE"), ee.maximumPreciseValue = 9007199254740992, e(ie.prototype, { toGeometry: function (t) { return t.isNull() ? this.createPoint(null) : t.getMinX() === t.getMaxX() && t.getMinY() === t.getMaxY() ? this.createPoint(new f(t.getMinX(), t.getMinY())) : t.getMinX() === t.getMaxX() || t.getMinY() === t.getMaxY() ? this.createLineString([new f(t.getMinX(), t.getMinY()), new f(t.getMaxX(), t.getMaxY())]) : this.createPolygon(this.createLinearRing([new f(t.getMinX(), t.getMinY()), new f(t.getMinX(), t.getMaxY()), new f(t.getMaxX(), t.getMaxY()), new f(t.getMaxX(), t.getMinY()), new f(t.getMinX(), t.getMinY())]), null) }, createLineString: function () { if (0 === arguments.length) return this.createLineString(this.getCoordinateSequenceFactory().create([])); if (1 === arguments.length) { if (arguments[0] instanceof Array) { var t = arguments[0]; return this.createLineString(null !== t ? this.getCoordinateSequenceFactory().create(t) : null) } if (R(arguments[0], A)) { var e = arguments[0]; return new wt(e, this) } } }, createMultiLineString: function () { if (0 === arguments.length) return new ft(null, this); if (1 === arguments.length) { var t = arguments[0]; return new ft(t, this) } }, buildGeometry: function (t) { for (var e = null, n = !1, i = !1, r = t.iterator(); r.hasNext();) { var s = r.next(), o = s.getClass(); null === e && (e = o), o !== e && (n = !0), s.isGeometryCollectionOrDerived() && (i = !0) } if (null === e) return this.createGeometryCollection(); if (n || i) return this.createGeometryCollection(ie.toGeometryArray(t)); var a = t.iterator().next(), u = t.size() > 1; if (u) { if (a instanceof bt) return this.createMultiPolygon(ie.toPolygonArray(t)); if (a instanceof wt) return this.createMultiLineString(ie.toLineStringArray(t)); if (a instanceof Lt) return this.createMultiPoint(ie.toPointArray(t)); g.shouldNeverReachHere("Unhandled class: " + a.getClass().getName()) } return a }, createMultiPointFromCoords: function (t) { return this.createMultiPoint(null !== t ? this.getCoordinateSequenceFactory().create(t) : null) }, createPoint: function () { if (0 === arguments.length) return this.createPoint(this.getCoordinateSequenceFactory().create([])); if (1 === arguments.length) { if (arguments[0] instanceof f) { var t = arguments[0]; return this.createPoint(null !== t ? this.getCoordinateSequenceFactory().create([t]) : null) } if (R(arguments[0], A)) { var e = arguments[0]; return new Lt(e, this) } } }, getCoordinateSequenceFactory: function () { return this.coordinateSequenceFactory }, createPolygon: function () { if (0 === arguments.length) return new bt(null, null, this); if (1 === arguments.length) { if (R(arguments[0], A)) { var t = arguments[0]; return this.createPolygon(this.createLinearRing(t)) } if (arguments[0] instanceof Array) { var e = arguments[0]; return this.createPolygon(this.createLinearRing(e)) } if (arguments[0] instanceof Pt) { var n = arguments[0]; return this.createPolygon(n, null) } } else if (2 === arguments.length) { var i = arguments[0], r = arguments[1]; return new bt(i, r, this) } }, getSRID: function () { return this.SRID }, createGeometryCollection: function () { if (0 === arguments.length) return new gt(null, this); if (1 === arguments.length) { var t = arguments[0]; return new gt(t, this) } }, createGeometry: function (t) { var e = new Mt(this); return e.edit(t, { edit: function () { if (2 === arguments.length) { var t = arguments[0]; return arguments[1], this.coordinateSequenceFactory.create(t) } } }) }, getPrecisionModel: function () { return this.precisionModel }, createLinearRing: function () { if (0 === arguments.length) return this.createLinearRing(this.getCoordinateSequenceFactory().create([])); if (1 === arguments.length) { if (arguments[0] instanceof Array) { var t = arguments[0]; return this.createLinearRing(null !== t ? this.getCoordinateSequenceFactory().create(t) : null) } if (R(arguments[0], A)) { var e = arguments[0]; return new Pt(e, this) } } }, createMultiPolygon: function () { if (0 === arguments.length) return new Ot(null, this); if (1 === arguments.length) { var t = arguments[0]; return new Ot(t, this) } }, createMultiPoint: function () { if (0 === arguments.length) return new Tt(null, this); if (1 === arguments.length) { if (arguments[0] instanceof Array) { var t = arguments[0]; return new Tt(t, this) } if (arguments[0] instanceof Array) { var e = arguments[0]; return this.createMultiPoint(null !== e ? this.getCoordinateSequenceFactory().create(e) : null) } if (R(arguments[0], A)) { var n = arguments[0]; if (null === n) return this.createMultiPoint(new Array(0).fill(null)); for (var i = new Array(n.size()).fill(null), r = 0; r < n.size(); r++) { var s = this.getCoordinateSequenceFactory().create(1, n.getDimension()); Ct.copy(n, r, s, 0, 1), i[r] = this.createPoint(s) } return this.createMultiPoint(i) } } }, interfaces_: function () { return [u] }, getClass: function () { return ie } }), ie.toMultiPolygonArray = function (t) { var e = new Array(t.size()).fill(null); return t.toArray(e) }, ie.toGeometryArray = function (t) { if (null === t) return null; var e = new Array(t.size()).fill(null); return t.toArray(e) }, ie.getDefaultCoordinateSequenceFactory = function () { return qt.instance() }, ie.toMultiLineStringArray = function (t) { var e = new Array(t.size()).fill(null); return t.toArray(e) }, ie.toLineStringArray = function (t) { var e = new Array(t.size()).fill(null); return t.toArray(e) }, ie.toMultiPointArray = function (t) { var e = new Array(t.size()).fill(null); return t.toArray(e) }, ie.toLinearRingArray = function (t) { var e = new Array(t.size()).fill(null); return t.toArray(e) }, ie.toPointArray = function (t) { var e = new Array(t.size()).fill(null); return t.toArray(e) }, ie.toPolygonArray = function (t) { var e = new Array(t.size()).fill(null); return t.toArray(e) }, ie.createPointFromInternalCoord = function (t, e) { return e.getPrecisionModel().makePrecise(t), e.getFactory().createPoint(t) }, ie.serialVersionUID = -0x5ea75f2051eeb400; var oo = { typeStr: /^\s*(\w+)\s*\(\s*(.*)\s*\)\s*$/, emptyTypeStr: /^\s*(\w+)\s*EMPTY\s*$/, spaces: /\s+/, parenComma: /\)\s*,\s*\(/, doubleParenComma: /\)\s*\)\s*,\s*\(\s*\(/, trimParens: /^\s*\(?(.*?)\)?\s*$/ }; e(re.prototype, { read: function (t) { var e, n, i; t = t.replace(/[\n\r]/g, " "); var r = oo.typeStr.exec(t); if (-1 !== t.search("EMPTY") && (r = oo.emptyTypeStr.exec(t), r[2] = void 0), r && (n = r[1].toLowerCase(), i = r[2], uo[n] && (e = uo[n].apply(this, [i]))), void 0 === e) throw new Error("Could not parse WKT " + t); return e }, write: function (t) { return this.extractGeometry(t) }, extractGeometry: function (t) { var e = t.getGeometryType().toLowerCase(); if (!ao[e]) return null; var n, i = e.toUpperCase(); return n = t.isEmpty() ? i + " EMPTY" : i + "(" + ao[e].apply(this, [t]) + ")" } }); var ao = { coordinate: function (t) { return t.x + " " + t.y }, point: function (t) { return ao.coordinate.call(this, t.coordinates.coordinates[0]) }, multipoint: function (t) { for (var e = [], n = 0, i = t.geometries.length; i > n; ++n)e.push("(" + ao.point.apply(this, [t.geometries[n]]) + ")"); return e.join(",") }, linestring: function (t) { for (var e = [], n = 0, i = t.points.coordinates.length; i > n; ++n)e.push(ao.coordinate.apply(this, [t.points.coordinates[n]])); return e.join(",") }, linearring: function (t) { for (var e = [], n = 0, i = t.points.coordinates.length; i > n; ++n)e.push(ao.coordinate.apply(this, [t.points.coordinates[n]])); return e.join(",") }, multilinestring: function (t) { for (var e = [], n = 0, i = t.geometries.length; i > n; ++n)e.push("(" + ao.linestring.apply(this, [t.geometries[n]]) + ")"); return e.join(",") }, polygon: function (t) { var e = []; e.push("(" + ao.linestring.apply(this, [t.shell]) + ")"); for (var n = 0, i = t.holes.length; i > n; ++n)e.push("(" + ao.linestring.apply(this, [t.holes[n]]) + ")"); return e.join(",") }, multipolygon: function (t) { for (var e = [], n = 0, i = t.geometries.length; i > n; ++n)e.push("(" + ao.polygon.apply(this, [t.geometries[n]]) + ")"); return e.join(",") }, geometrycollection: function (t) { for (var e = [], n = 0, i = t.geometries.length; i > n; ++n)e.push(this.extractGeometry(t.geometries[n])); return e.join(",") } }, uo = { point: function (t) { if (void 0 === t) return this.geometryFactory.createPoint(); var e = t.trim().split(oo.spaces); return this.geometryFactory.createPoint(new f(Number.parseFloat(e[0]), Number.parseFloat(e[1]))) }, multipoint: function (t) { if (void 0 === t) return this.geometryFactory.createMultiPoint(); for (var e, n = t.trim().split(","), i = [], r = 0, s = n.length; s > r; ++r)e = n[r].replace(oo.trimParens, "$1"), i.push(uo.point.apply(this, [e])); return this.geometryFactory.createMultiPoint(i) }, linestring: function (t) { if (void 0 === t) return this.geometryFactory.createLineString(); for (var e, n = t.trim().split(","), i = [], r = 0, s = n.length; s > r; ++r)e = n[r].trim().split(oo.spaces), i.push(new f(Number.parseFloat(e[0]), Number.parseFloat(e[1]))); return this.geometryFactory.createLineString(i) }, linearring: function (t) { if (void 0 === t) return this.geometryFactory.createLinearRing(); for (var e, n = t.trim().split(","), i = [], r = 0, s = n.length; s > r; ++r)e = n[r].trim().split(oo.spaces), i.push(new f(Number.parseFloat(e[0]), Number.parseFloat(e[1]))); return this.geometryFactory.createLinearRing(i) }, multilinestring: function (t) { if (void 0 === t) return this.geometryFactory.createMultiLineString(); for (var e, n = t.trim().split(oo.parenComma), i = [], r = 0, s = n.length; s > r; ++r)e = n[r].replace(oo.trimParens, "$1"), i.push(uo.linestring.apply(this, [e])); return this.geometryFactory.createMultiLineString(i) }, polygon: function (t) { if (void 0 === t) return this.geometryFactory.createPolygon(); for (var e, n, i, r, s = t.trim().split(oo.parenComma), o = [], a = 0, u = s.length; u > a; ++a)e = s[a].replace(oo.trimParens, "$1"), n = uo.linestring.apply(this, [e]), i = this.geometryFactory.createLinearRing(n.points), 0 === a ? r = i : o.push(i); return this.geometryFactory.createPolygon(r, o) }, multipolygon: function (t) { if (void 0 === t) return this.geometryFactory.createMultiPolygon(); for (var e, n = t.trim().split(oo.doubleParenComma), i = [], r = 0, s = n.length; s > r; ++r)e = n[r].replace(oo.trimParens, "$1"), i.push(uo.polygon.apply(this, [e])); return this.geometryFactory.createMultiPolygon(i) }, geometrycollection: function (t) { if (void 0 === t) return this.geometryFactory.createGeometryCollection(); t = t.replace(/,\s*([A-Za-z])/g, "|$1"); for (var e = t.trim().split("|"), n = [], i = 0, r = e.length; r > i; ++i)n.push(this.read(e[i])); return this.geometryFactory.createGeometryCollection(n) } }; e(se.prototype, { write: function (t) { return this.parser.write(t) } }), e(se, { toLineString: function (t, e) { if (2 !== arguments.length) throw new Error("Not implemented"); return "LINESTRING ( " + t.x + " " + t.y + ", " + e.x + " " + e.y + " )" } }), e(oe.prototype, { getIndexAlongSegment: function (t, e) { return this.computeIntLineIndex(), this.intLineIndex[t][e] }, getTopologySummary: function () { var t = new T; return this.isEndPoint() && t.append(" endpoint"), this._isProper && t.append(" proper"), this.isCollinear() && t.append(" collinear"), t.toString() }, computeIntersection: function (t, e, n, i) { this.inputLines[0][0] = t, this.inputLines[0][1] = e, this.inputLines[1][0] = n, this.inputLines[1][1] = i, this.result = this.computeIntersect(t, e, n, i) }, getIntersectionNum: function () { return this.result }, computeIntLineIndex: function () { if (0 === arguments.length) null === this.intLineIndex && (this.intLineIndex = Array(2).fill().map(function () { return Array(2) }), this.computeIntLineIndex(0), this.computeIntLineIndex(1)); else if (1 === arguments.length) { var t = arguments[0], e = this.getEdgeDistance(t, 0), n = this.getEdgeDistance(t, 1); e > n ? (this.intLineIndex[t][0] = 0, this.intLineIndex[t][1] = 1) : (this.intLineIndex[t][0] = 1, this.intLineIndex[t][1] = 0) } }, isProper: function () { return this.hasIntersection() && this._isProper }, setPrecisionModel: function (t) { this.precisionModel = t }, isInteriorIntersection: function () { if (0 === arguments.length) return this.isInteriorIntersection(0) ? !0 : !!this.isInteriorIntersection(1); if (1 === arguments.length) { for (var t = arguments[0], e = 0; e < this.result; e++)if (!this.intPt[e].equals2D(this.inputLines[t][0]) && !this.intPt[e].equals2D(this.inputLines[t][1])) return !0; return !1 } }, getIntersection: function (t) { return this.intPt[t] }, isEndPoint: function () { return this.hasIntersection() && !this._isProper }, hasIntersection: function () { return this.result !== oe.NO_INTERSECTION }, getEdgeDistance: function (t, e) { var n = oe.computeEdgeDistance(this.intPt[e], this.inputLines[t][0], this.inputLines[t][1]); return n }, isCollinear: function () { return this.result === oe.COLLINEAR_INTERSECTION }, toString: function () { return se.toLineString(this.inputLines[0][0], this.inputLines[0][1]) + " - " + se.toLineString(this.inputLines[1][0], this.inputLines[1][1]) + this.getTopologySummary() }, getEndpoint: function (t, e) { return this.inputLines[t][e] }, isIntersection: function (t) { for (var e = 0; e < this.result; e++)if (this.intPt[e].equals2D(t)) return !0; return !1 }, getIntersectionAlongSegment: function (t, e) { return this.computeIntLineIndex(), this.intPt[this.intLineIndex[t][e]] }, interfaces_: function () { return [] }, getClass: function () { return oe } }), oe.computeEdgeDistance = function (t, e, n) { var i = Math.abs(n.x - e.x), r = Math.abs(n.y - e.y), s = -1; if (t.equals(e)) s = 0; else if (t.equals(n)) s = i > r ? i : r; else { var o = Math.abs(t.x - e.x), a = Math.abs(t.y - e.y); s = i > r ? o : a, 0 !== s || t.equals(e) || (s = Math.max(o, a)) } return g.isTrue(!(0 === s && !t.equals(e)), "Bad distance calculation"), s }, oe.nonRobustComputeEdgeDistance = function (t, e, n) { var i = t.x - e.x, r = t.y - e.y, s = Math.sqrt(i * i + r * r); return g.isTrue(!(0 === s && !t.equals(e)), "Invalid distance calculation"), s }, oe.DONT_INTERSECT = 0, oe.DO_INTERSECT = 1, oe.COLLINEAR = 2, oe.NO_INTERSECTION = 0, oe.POINT_INTERSECTION = 1, oe.COLLINEAR_INTERSECTION = 2, h(ae, oe), e(ae.prototype, { isInSegmentEnvelopes: function (t) { var e = new C(this.inputLines[0][0], this.inputLines[0][1]), n = new C(this.inputLines[1][0], this.inputLines[1][1]); return e.contains(t) && n.contains(t) }, computeIntersection: function () { if (3 !== arguments.length) return oe.prototype.computeIntersection.apply(this, arguments); var t = arguments[0], e = arguments[1], n = arguments[2]; return this._isProper = !1, C.intersects(e, n, t) && 0 === he.orientationIndex(e, n, t) && 0 === he.orientationIndex(n, e, t) ? (this._isProper = !0, (t.equals(e) || t.equals(n)) && (this._isProper = !1), this.result = oe.POINT_INTERSECTION, null) : void (this.result = oe.NO_INTERSECTION) }, normalizeToMinimum: function (t, e, n, i, r) { r.x = this.smallestInAbsValue(t.x, e.x, n.x, i.x), r.y = this.smallestInAbsValue(t.y, e.y, n.y, i.y), t.x -= r.x, t.y -= r.y, e.x -= r.x, e.y -= r.y, n.x -= r.x, n.y -= r.y, i.x -= r.x, i.y -= r.y }, safeHCoordinateIntersection: function (t, e, n, i) { var r = null; try { r = F.intersection(t, e, n, i) } catch (s) { if (!(s instanceof S)) throw s; r = ae.nearestEndpoint(t, e, n, i) } finally { } return r }, intersection: function (t, e, n, i) { var r = this.intersectionWithNormalization(t, e, n, i); return this.isInSegmentEnvelopes(r) || (r = new f(ae.nearestEndpoint(t, e, n, i))), null !== this.precisionModel && this.precisionModel.makePrecise(r), r }, smallestInAbsValue: function (t, e, n, i) { var r = t, s = Math.abs(r); return Math.abs(e) < s && (r = e, s = Math.abs(e)), Math.abs(n) < s && (r = n, s = Math.abs(n)), Math.abs(i) < s && (r = i), r }, checkDD: function (t, e, n, i, r) { var s = _.intersection(t, e, n, i), o = this.isInSegmentEnvelopes(s); D.out.println("DD in env = " + o + " --------------------- " + s), r.distance(s) > 1e-4 && D.out.println("Distance = " + r.distance(s)) }, intersectionWithNormalization: function (t, e, n, i) { var r = new f(t), s = new f(e), o = new f(n), a = new f(i), u = new f; this.normalizeToEnvCentre(r, s, o, a, u); var l = this.safeHCoordinateIntersection(r, s, o, a); return l.x += u.x, l.y += u.y, l }, computeCollinearIntersection: function (t, e, n, i) { var r = C.intersects(t, e, n), s = C.intersects(t, e, i), o = C.intersects(n, i, t), a = C.intersects(n, i, e); return r && s ? (this.intPt[0] = n, this.intPt[1] = i, oe.COLLINEAR_INTERSECTION) : o && a ? (this.intPt[0] = t, this.intPt[1] = e, oe.COLLINEAR_INTERSECTION) : r && o ? (this.intPt[0] = n, this.intPt[1] = t, !n.equals(t) || s || a ? oe.COLLINEAR_INTERSECTION : oe.POINT_INTERSECTION) : r && a ? (this.intPt[0] = n, this.intPt[1] = e, !n.equals(e) || s || o ? oe.COLLINEAR_INTERSECTION : oe.POINT_INTERSECTION) : s && o ? (this.intPt[0] = i, this.intPt[1] = t, !i.equals(t) || r || a ? oe.COLLINEAR_INTERSECTION : oe.POINT_INTERSECTION) : s && a ? (this.intPt[0] = i, this.intPt[1] = e, !i.equals(e) || r || o ? oe.COLLINEAR_INTERSECTION : oe.POINT_INTERSECTION) : oe.NO_INTERSECTION }, normalizeToEnvCentre: function (t, e, n, i, r) { var s = t.x < e.x ? t.x : e.x, o = t.y < e.y ? t.y : e.y, a = t.x > e.x ? t.x : e.x, u = t.y > e.y ? t.y : e.y, l = n.x < i.x ? n.x : i.x, h = n.y < i.y ? n.y : i.y, c = n.x > i.x ? n.x : i.x, g = n.y > i.y ? n.y : i.y, f = s > l ? s : l, d = c > a ? a : c, m = o > h ? o : h, p = g > u ? u : g, v = (f + d) / 2, y = (m + p) / 2; r.x = v, r.y = y, t.x -= r.x, t.y -= r.y, e.x -= r.x, e.y -= r.y, n.x -= r.x, n.y -= r.y, i.x -= r.x, i.y -= r.y }, computeIntersect: function (t, e, n, i) { if (this._isProper = !1, !C.intersects(t, e, n, i)) return oe.NO_INTERSECTION; var r = he.orientationIndex(t, e, n), s = he.orientationIndex(t, e, i); if (r > 0 && s > 0 || 0 > r && 0 > s) return oe.NO_INTERSECTION; var o = he.orientationIndex(n, i, t), a = he.orientationIndex(n, i, e); if (o > 0 && a > 0 || 0 > o && 0 > a) return oe.NO_INTERSECTION; var u = 0 === r && 0 === s && 0 === o && 0 === a; return u ? this.computeCollinearIntersection(t, e, n, i) : (0 === r || 0 === s || 0 === o || 0 === a ? (this._isProper = !1, t.equals2D(n) || t.equals2D(i) ? this.intPt[0] = t : e.equals2D(n) || e.equals2D(i) ? this.intPt[0] = e : 0 === r ? this.intPt[0] = new f(n) : 0 === s ? this.intPt[0] = new f(i) : 0 === o ? this.intPt[0] = new f(t) : 0 === a && (this.intPt[0] = new f(e))) : (this._isProper = !0, this.intPt[0] = this.intersection(t, e, n, i)), oe.POINT_INTERSECTION) }, interfaces_: function () { return [] }, getClass: function () { return ae } }), ae.nearestEndpoint = function (t, e, n, i) { var r = t, s = he.distancePointLine(t, n, i), o = he.distancePointLine(e, n, i); return s > o && (s = o, r = e), o = he.distancePointLine(n, t, e), s > o && (s = o, r = n), o = he.distancePointLine(i, t, e), s > o && (s = o, r = i), r }, e(ue.prototype, { interfaces_: function () { return [] }, getClass: function () { return ue } }), ue.orientationIndex = function (t, e, n) { var i = e.x - t.x, r = e.y - t.y, s = n.x - e.x, o = n.y - e.y; return ue.signOfDet2x2(i, r, s, o) }, ue.signOfDet2x2 = function (t, e, n, i) { var r = null, s = null, o = null, a = 0; if (r = 1, 0 === t || 0 === i) return 0 === e || 0 === n ? 0 : e > 0 ? n > 0 ? -r : r : n > 0 ? r : -r; if (0 === e || 0 === n) return i > 0 ? t > 0 ? r : -r : t > 0 ? -r : r; if (e > 0 ? i > 0 ? i >= e || (r = -r, s = t, t = n, n = s, s = e, e = i, i = s) : -i >= e ? (r = -r, n = -n, i = -i) : (s = t, t = -n, n = s, s = e, e = -i, i = s) : i > 0 ? i >= -e ? (r = -r, t = -t, e = -e) : (s = -t, t = n, n = s, s = -e, e = i, i = s) : e >= i ? (t = -t, e = -e, n = -n, i = -i) : (r = -r, s = -t, t = -n, n = s, s = -e, e = -i, i = s), t > 0) { if (!(n > 0)) return r; if (!(n >= t)) return r } else { if (n > 0) return -r; if (!(t >= n)) return -r; r = -r, t = -t, n = -n } for (; ;) { if (a += 1, o = Math.floor(n / t), n -= o * t, i -= o * e, 0 > i) return -r; if (i > e) return r; if (t > n + n) { if (i + i > e) return r } else { if (e > i + i) return -r; n = t - n, i = e - i, r = -r } if (0 === i) return 0 === n ? 0 : -r; if (0 === n) return r; if (o = Math.floor(t / n), t -= o * n, e -= o * i, 0 > e) return r; if (e > i) return -r; if (n > t + t) { if (e + e > i) return -r } else { if (i > e + e) return r; t = n - t, e = i - e, r = -r } if (0 === e) return 0 === t ? 0 : r; if (0 === t) return -r } }, e(le.prototype, { countSegment: function (t, e) { if (t.x < this.p.x && e.x < this.p.x) return null; if (this.p.x === e.x && this.p.y === e.y) return this.isPointOnSegment = !0, null; if (t.y === this.p.y && e.y === this.p.y) { var n = t.x, i = e.x; return n > i && (n = e.x, i = t.x), this.p.x >= n && this.p.x <= i && (this.isPointOnSegment = !0), null } if (t.y > this.p.y && e.y <= this.p.y || e.y > this.p.y && t.y <= this.p.y) { var r = t.x - this.p.x, s = t.y - this.p.y, o = e.x - this.p.x, a = e.y - this.p.y, u = ue.signOfDet2x2(r, s, o, a); if (0 === u) return this.isPointOnSegment = !0, null; s > a && (u = -u), u > 0 && this.crossingCount++ } }, isPointInPolygon: function () { return this.getLocation() !== L.EXTERIOR }, getLocation: function () { return this.isPointOnSegment ? L.BOUNDARY : this.crossingCount % 2 === 1 ? L.INTERIOR : L.EXTERIOR }, isOnSegment: function () { return this.isPointOnSegment }, interfaces_: function () { return [] }, getClass: function () { return le } }), le.locatePointInRing = function () { if (arguments[0] instanceof f && R(arguments[1], A)) { for (var t = arguments[0], e = arguments[1], n = new le(t), i = new f, r = new f, s = 1; s < e.size(); s++)if (e.getCoordinate(s, i), e.getCoordinate(s - 1, r), n.countSegment(i, r), n.isOnSegment()) return n.getLocation(); return n.getLocation() } if (arguments[0] instanceof f && arguments[1] instanceof Array) { for (var o = arguments[0], a = arguments[1], n = new le(o), s = 1; s < a.length; s++) { var i = a[s], r = a[s - 1]; if (n.countSegment(i, r), n.isOnSegment()) return n.getLocation() } return n.getLocation() } }, e(he.prototype, { interfaces_: function () { return [] }, getClass: function () { return he } }), he.orientationIndex = function (t, e, n) { return _.orientationIndex(t, e, n) }, he.signedArea = function () { if (arguments[0] instanceof Array) { var t = arguments[0]; if (t.length < 3) return 0; for (var e = 0, n = t[0].x, i = 1; i < t.length - 1; i++) { var r = t[i].x - n, s = t[i + 1].y, o = t[i - 1].y; e += r * (o - s) } return e / 2 } if (R(arguments[0], A)) { var a = arguments[0], u = a.size(); if (3 > u) return 0; var l = new f, h = new f, c = new f; a.getCoordinate(0, h), a.getCoordinate(1, c); var n = h.x; c.x -= n; for (var e = 0, i = 1; u - 1 > i; i++)l.y = h.y, h.x = c.x, h.y = c.y, a.getCoordinate(i + 1, c), c.x -= n, e += h.x * (l.y - c.y); return e / 2 } }, he.distanceLineLine = function (t, e, n, i) { if (t.equals(e)) return he.distancePointLine(t, n, i); if (n.equals(i)) return he.distancePointLine(i, t, e); var r = !1; if (C.intersects(t, e, n, i)) { var s = (e.x - t.x) * (i.y - n.y) - (e.y - t.y) * (i.x - n.x); if (0 === s) r = !0; else { var o = (t.y - n.y) * (i.x - n.x) - (t.x - n.x) * (i.y - n.y), a = (t.y - n.y) * (e.x - t.x) - (t.x - n.x) * (e.y - t.y), u = a / s, l = o / s; (0 > l || l > 1 || 0 > u || u > 1) && (r = !0) } } else r = !0; return r ? b.min(he.distancePointLine(t, n, i), he.distancePointLine(e, n, i), he.distancePointLine(n, t, e), he.distancePointLine(i, t, e)) : 0 }, he.isPointInRing = function (t, e) { return he.locatePointInRing(t, e) !== L.EXTERIOR }, he.computeLength = function (t) { var e = t.size(); if (1 >= e) return 0; var n = 0, i = new f; t.getCoordinate(0, i); for (var r = i.x, s = i.y, o = 1; e > o; o++) { t.getCoordinate(o, i); var a = i.x, u = i.y, l = a - r, h = u - s; n += Math.sqrt(l * l + h * h), r = a, s = u } return n }, he.isCCW = function (t) { var e = t.length - 1; if (3 > e) throw new i("Ring has fewer than 4 points, so orientation cannot be determined"); for (var n = t[0], r = 0, s = 1; e >= s; s++) { var o = t[s]; o.y > n.y && (n = o, r = s) } var a = r; do a -= 1, 0 > a && (a = e); while (t[a].equals2D(n) && a !== r); var u = r; do u = (u + 1) % e; while (t[u].equals2D(n) && u !== r); var l = t[a], h = t[u]; if (l.equals2D(n) || h.equals2D(n) || l.equals2D(h)) return !1; var c = he.computeOrientation(l, n, h), g = !1; return g = 0 === c ? l.x > h.x : c > 0 }, he.locatePointInRing = function (t, e) { return le.locatePointInRing(t, e) }, he.distancePointLinePerpendicular = function (t, e, n) { var i = (n.x - e.x) * (n.x - e.x) + (n.y - e.y) * (n.y - e.y), r = ((e.y - t.y) * (n.x - e.x) - (e.x - t.x) * (n.y - e.y)) / i; return Math.abs(r) * Math.sqrt(i) }, he.computeOrientation = function (t, e, n) { return he.orientationIndex(t, e, n) }, he.distancePointLine = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; if (0 === e.length) throw new i("Line array must contain at least one vertex"); for (var n = t.distance(e[0]), r = 0; r < e.length - 1; r++) { var s = he.distancePointLine(t, e[r], e[r + 1]); n > s && (n = s) } return n } if (3 === arguments.length) { var o = arguments[0], a = arguments[1], u = arguments[2]; if (a.x === u.x && a.y === u.y) return o.distance(a); var l = (u.x - a.x) * (u.x - a.x) + (u.y - a.y) * (u.y - a.y), h = ((o.x - a.x) * (u.x - a.x) + (o.y - a.y) * (u.y - a.y)) / l; if (0 >= h) return o.distance(a); if (h >= 1) return o.distance(u); var c = ((a.y - o.y) * (u.x - a.x) - (a.x - o.x) * (u.y - a.y)) / l; return Math.abs(c) * Math.sqrt(l) } }, he.isOnLine = function (t, e) { for (var n = new ae, i = 1; i < e.length; i++) { var r = e[i - 1], s = e[i]; if (n.computeIntersection(t, r, s), n.hasIntersection()) return !0 } return !1 }, he.CLOCKWISE = -1, he.RIGHT = he.CLOCKWISE, he.COUNTERCLOCKWISE = 1, he.LEFT = he.COUNTERCLOCKWISE, he.COLLINEAR = 0, he.STRAIGHT = he.COLLINEAR, e(ce.prototype, { minX: function () { return Math.min(this.p0.x, this.p1.x) }, orientationIndex: function () { if (arguments[0] instanceof ce) { var t = arguments[0], e = he.orientationIndex(this.p0, this.p1, t.p0), n = he.orientationIndex(this.p0, this.p1, t.p1); return e >= 0 && n >= 0 ? Math.max(e, n) : 0 >= e && 0 >= n ? Math.max(e, n) : 0 } if (arguments[0] instanceof f) { var i = arguments[0]; return he.orientationIndex(this.p0, this.p1, i) } }, toGeometry: function (t) { return t.createLineString([this.p0, this.p1]) }, isVertical: function () { return this.p0.x === this.p1.x }, equals: function (t) { if (!(t instanceof ce)) return !1; var e = t; return this.p0.equals(e.p0) && this.p1.equals(e.p1) }, intersection: function (t) { var e = new ae; return e.computeIntersection(this.p0, this.p1, t.p0, t.p1), e.hasIntersection() ? e.getIntersection(0) : null }, project: function () { if (arguments[0] instanceof f) { var t = arguments[0]; if (t.equals(this.p0) || t.equals(this.p1)) return new f(t); var e = this.projectionFactor(t), n = new f; return n.x = this.p0.x + e * (this.p1.x - this.p0.x), n.y = this.p0.y + e * (this.p1.y - this.p0.y), n } if (arguments[0] instanceof ce) { var i = arguments[0], r = this.projectionFactor(i.p0), s = this.projectionFactor(i.p1); if (r >= 1 && s >= 1) return null; if (0 >= r && 0 >= s) return null; var o = this.project(i.p0); 0 > r && (o = this.p0), r > 1 && (o = this.p1); var a = this.project(i.p1); return 0 > s && (a = this.p0), s > 1 && (a = this.p1), new ce(o, a) } }, normalize: function () { this.p1.compareTo(this.p0) < 0 && this.reverse() }, angle: function () { return Math.atan2(this.p1.y - this.p0.y, this.p1.x - this.p0.x) }, getCoordinate: function (t) { return 0 === t ? this.p0 : this.p1 }, distancePerpendicular: function (t) { return he.distancePointLinePerpendicular(t, this.p0, this.p1) }, minY: function () { return Math.min(this.p0.y, this.p1.y) }, midPoint: function () { return ce.midPoint(this.p0, this.p1) }, projectionFactor: function (t) { if (t.equals(this.p0)) return 0; if (t.equals(this.p1)) return 1; var e = this.p1.x - this.p0.x, n = this.p1.y - this.p0.y, i = e * e + n * n; if (0 >= i) return r.NaN; var s = ((t.x - this.p0.x) * e + (t.y - this.p0.y) * n) / i; return s }, closestPoints: function (t) { var e = this.intersection(t); if (null !== e) return [e, e]; var n = new Array(2).fill(null), i = r.MAX_VALUE, s = null, o = this.closestPoint(t.p0); i = o.distance(t.p0), n[0] = o, n[1] = t.p0; var a = this.closestPoint(t.p1); s = a.distance(t.p1), i > s && (i = s, n[0] = a, n[1] = t.p1); var u = t.closestPoint(this.p0); s = u.distance(this.p0), i > s && (i = s, n[0] = this.p0, n[1] = u); var l = t.closestPoint(this.p1); return s = l.distance(this.p1), i > s && (i = s, n[0] = this.p1, n[1] = l), n }, closestPoint: function (t) { var e = this.projectionFactor(t); if (e > 0 && 1 > e) return this.project(t); var n = this.p0.distance(t), i = this.p1.distance(t); return i > n ? this.p0 : this.p1 }, maxX: function () { return Math.max(this.p0.x, this.p1.x) }, getLength: function () { return this.p0.distance(this.p1) }, compareTo: function (t) { var e = t, n = this.p0.compareTo(e.p0); return 0 !== n ? n : this.p1.compareTo(e.p1) }, reverse: function () { var t = this.p0; this.p0 = this.p1, this.p1 = t }, equalsTopo: function (t) { return this.p0.equals(t.p0) && this.p1.equals(t.p1) || this.p0.equals(t.p1) && this.p1.equals(t.p0) }, lineIntersection: function (t) { try { var e = F.intersection(this.p0, this.p1, t.p0, t.p1); return e } catch (t) { if (!(t instanceof S)) throw t } finally { } return null }, maxY: function () { return Math.max(this.p0.y, this.p1.y) }, pointAlongOffset: function (t, e) { var n = this.p0.x + t * (this.p1.x - this.p0.x), i = this.p0.y + t * (this.p1.y - this.p0.y), r = this.p1.x - this.p0.x, s = this.p1.y - this.p0.y, o = Math.sqrt(r * r + s * s), a = 0, u = 0; if (0 !== e) { if (0 >= o) throw new IllegalStateException("Cannot compute offset from zero-length line segment"); a = e * r / o, u = e * s / o } var l = n - u, h = i + a, c = new f(l, h); return c }, setCoordinates: function () { if (1 === arguments.length) { var t = arguments[0]; this.setCoordinates(t.p0, t.p1) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.p0.x = e.x, this.p0.y = e.y, this.p1.x = n.x, this.p1.y = n.y } }, segmentFraction: function (t) { var e = this.projectionFactor(t); return 0 > e ? e = 0 : (e > 1 || r.isNaN(e)) && (e = 1), e }, toString: function () { return "LINESTRING( " + this.p0.x + " " + this.p0.y + ", " + this.p1.x + " " + this.p1.y + ")" }, isHorizontal: function () { return this.p0.y === this.p1.y }, distance: function () { if (arguments[0] instanceof ce) { var t = arguments[0]; return he.distanceLineLine(this.p0, this.p1, t.p0, t.p1) } if (arguments[0] instanceof f) { var e = arguments[0]; return he.distancePointLine(e, this.p0, this.p1) } }, pointAlong: function (t) { var e = new f; return e.x = this.p0.x + t * (this.p1.x - this.p0.x), e.y = this.p0.y + t * (this.p1.y - this.p0.y), e }, hashCode: function () { var t = java.lang.Double.doubleToLongBits(this.p0.x); t ^= 31 * java.lang.Double.doubleToLongBits(this.p0.y); var e = Math.trunc(t) ^ Math.trunc(t >> 32), n = java.lang.Double.doubleToLongBits(this.p1.x); n ^= 31 * java.lang.Double.doubleToLongBits(this.p1.y); var i = Math.trunc(n) ^ Math.trunc(n >> 32); return e ^ i }, interfaces_: function () { return [s, u] }, getClass: function () { return ce } }), ce.midPoint = function (t, e) { return new f((t.x + e.x) / 2, (t.y + e.y) / 2) }, ce.serialVersionUID = 0x2d2172135f411c00, e(ge.prototype, { + isIntersects: function () { return !this.isDisjoint() }, isCovers: function () { var t = ge.isTrue(this.matrix[L.INTERIOR][L.INTERIOR]) || ge.isTrue(this.matrix[L.INTERIOR][L.BOUNDARY]) || ge.isTrue(this.matrix[L.BOUNDARY][L.INTERIOR]) || ge.isTrue(this.matrix[L.BOUNDARY][L.BOUNDARY]); return t && this.matrix[L.EXTERIOR][L.INTERIOR] === lt.FALSE && this.matrix[L.EXTERIOR][L.BOUNDARY] === lt.FALSE }, isCoveredBy: function () { + var t = ge.isTrue(this.matrix[L.INTERIOR][L.INTERIOR]) || ge.isTrue(this.matrix[L.INTERIOR][L.BOUNDARY]) || ge.isTrue(this.matrix[L.BOUNDARY][L.INTERIOR]) || ge.isTrue(this.matrix[L.BOUNDARY][L.BOUNDARY]); + return t && this.matrix[L.INTERIOR][L.EXTERIOR] === lt.FALSE && this.matrix[L.BOUNDARY][L.EXTERIOR] === lt.FALSE + }, set: function () { if (1 === arguments.length) for (var t = arguments[0], e = 0; e < t.length; e++) { var n = Math.trunc(e / 3), i = e % 3; this.matrix[n][i] = lt.toDimensionValue(t.charAt(e)) } else if (3 === arguments.length) { var r = arguments[0], s = arguments[1], o = arguments[2]; this.matrix[r][s] = o } }, isContains: function () { return ge.isTrue(this.matrix[L.INTERIOR][L.INTERIOR]) && this.matrix[L.EXTERIOR][L.INTERIOR] === lt.FALSE && this.matrix[L.EXTERIOR][L.BOUNDARY] === lt.FALSE }, setAtLeast: function () { if (1 === arguments.length) for (var t = arguments[0], e = 0; e < t.length; e++) { var n = Math.trunc(e / 3), i = e % 3; this.setAtLeast(n, i, lt.toDimensionValue(t.charAt(e))) } else if (3 === arguments.length) { var r = arguments[0], s = arguments[1], o = arguments[2]; this.matrix[r][s] < o && (this.matrix[r][s] = o) } }, setAtLeastIfValid: function (t, e, n) { t >= 0 && e >= 0 && this.setAtLeast(t, e, n) }, isWithin: function () { return ge.isTrue(this.matrix[L.INTERIOR][L.INTERIOR]) && this.matrix[L.INTERIOR][L.EXTERIOR] === lt.FALSE && this.matrix[L.BOUNDARY][L.EXTERIOR] === lt.FALSE }, isTouches: function (t, e) { return t > e ? this.isTouches(e, t) : t === lt.A && e === lt.A || t === lt.L && e === lt.L || t === lt.L && e === lt.A || t === lt.P && e === lt.A || t === lt.P && e === lt.L ? this.matrix[L.INTERIOR][L.INTERIOR] === lt.FALSE && (ge.isTrue(this.matrix[L.INTERIOR][L.BOUNDARY]) || ge.isTrue(this.matrix[L.BOUNDARY][L.INTERIOR]) || ge.isTrue(this.matrix[L.BOUNDARY][L.BOUNDARY])) : !1 }, isOverlaps: function (t, e) { return t === lt.P && e === lt.P || t === lt.A && e === lt.A ? ge.isTrue(this.matrix[L.INTERIOR][L.INTERIOR]) && ge.isTrue(this.matrix[L.INTERIOR][L.EXTERIOR]) && ge.isTrue(this.matrix[L.EXTERIOR][L.INTERIOR]) : t === lt.L && e === lt.L ? 1 === this.matrix[L.INTERIOR][L.INTERIOR] && ge.isTrue(this.matrix[L.INTERIOR][L.EXTERIOR]) && ge.isTrue(this.matrix[L.EXTERIOR][L.INTERIOR]) : !1 }, isEquals: function (t, e) { return t !== e ? !1 : ge.isTrue(this.matrix[L.INTERIOR][L.INTERIOR]) && this.matrix[L.INTERIOR][L.EXTERIOR] === lt.FALSE && this.matrix[L.BOUNDARY][L.EXTERIOR] === lt.FALSE && this.matrix[L.EXTERIOR][L.INTERIOR] === lt.FALSE && this.matrix[L.EXTERIOR][L.BOUNDARY] === lt.FALSE }, toString: function () { for (var t = new T("123456789"), e = 0; 3 > e; e++)for (var n = 0; 3 > n; n++)t.setCharAt(3 * e + n, lt.toDimensionSymbol(this.matrix[e][n])); return t.toString() }, setAll: function (t) { for (var e = 0; 3 > e; e++)for (var n = 0; 3 > n; n++)this.matrix[e][n] = t }, get: function (t, e) { return this.matrix[t][e] }, transpose: function () { var t = this.matrix[1][0]; return this.matrix[1][0] = this.matrix[0][1], this.matrix[0][1] = t, t = this.matrix[2][0], this.matrix[2][0] = this.matrix[0][2], this.matrix[0][2] = t, t = this.matrix[2][1], this.matrix[2][1] = this.matrix[1][2], this.matrix[1][2] = t, this }, matches: function (t) { if (9 !== t.length) throw new i("Should be length 9: " + t); for (var e = 0; 3 > e; e++)for (var n = 0; 3 > n; n++)if (!ge.matches(this.matrix[e][n], t.charAt(3 * e + n))) return !1; return !0 }, add: function (t) { for (var e = 0; 3 > e; e++)for (var n = 0; 3 > n; n++)this.setAtLeast(e, n, t.get(e, n)) }, isDisjoint: function () { return this.matrix[L.INTERIOR][L.INTERIOR] === lt.FALSE && this.matrix[L.INTERIOR][L.BOUNDARY] === lt.FALSE && this.matrix[L.BOUNDARY][L.INTERIOR] === lt.FALSE && this.matrix[L.BOUNDARY][L.BOUNDARY] === lt.FALSE }, isCrosses: function (t, e) { return t === lt.P && e === lt.L || t === lt.P && e === lt.A || t === lt.L && e === lt.A ? ge.isTrue(this.matrix[L.INTERIOR][L.INTERIOR]) && ge.isTrue(this.matrix[L.INTERIOR][L.EXTERIOR]) : t === lt.L && e === lt.P || t === lt.A && e === lt.P || t === lt.A && e === lt.L ? ge.isTrue(this.matrix[L.INTERIOR][L.INTERIOR]) && ge.isTrue(this.matrix[L.EXTERIOR][L.INTERIOR]) : t === lt.L && e === lt.L ? 0 === this.matrix[L.INTERIOR][L.INTERIOR] : !1 }, interfaces_: function () { return [o] }, getClass: function () { return ge } + }), ge.matches = function () { if (Number.isInteger(arguments[0]) && "string" == typeof arguments[1]) { var t = arguments[0], e = arguments[1]; return e === lt.SYM_DONTCARE ? !0 : e === lt.SYM_TRUE && (t >= 0 || t === lt.TRUE) ? !0 : e === lt.SYM_FALSE && t === lt.FALSE ? !0 : e === lt.SYM_P && t === lt.P ? !0 : e === lt.SYM_L && t === lt.L ? !0 : e === lt.SYM_A && t === lt.A } if ("string" == typeof arguments[0] && "string" == typeof arguments[1]) { var n = arguments[0], i = arguments[1], r = new ge(n); return r.matches(i) } }, ge.isTrue = function (t) { return t >= 0 || t === lt.TRUE }; var lo = Object.freeze({ Coordinate: f, CoordinateList: N, Envelope: C, LineSegment: ce, GeometryFactory: ie, Geometry: B, Point: Lt, LineString: wt, LinearRing: Pt, Polygon: bt, GeometryCollection: gt, MultiPoint: Tt, MultiLineString: ft, MultiPolygon: Ot, Dimension: lt, IntersectionMatrix: ge }); e(fe.prototype, { addPoint: function (t) { this.ptCount += 1, this.ptCentSum.x += t.x, this.ptCentSum.y += t.y }, setBasePoint: function (t) { null === this.areaBasePt && (this.areaBasePt = t) }, addLineSegments: function (t) { for (var e = 0, n = 0; n < t.length - 1; n++) { var i = t[n].distance(t[n + 1]); if (0 !== i) { e += i; var r = (t[n].x + t[n + 1].x) / 2; this.lineCentSum.x += i * r; var s = (t[n].y + t[n + 1].y) / 2; this.lineCentSum.y += i * s } } this.totalLength += e, 0 === e && t.length > 0 && this.addPoint(t[0]) }, addHole: function (t) { for (var e = he.isCCW(t), n = 0; n < t.length - 1; n++)this.addTriangle(this.areaBasePt, t[n], t[n + 1], e); this.addLineSegments(t) }, getCentroid: function () { var t = new f; if (Math.abs(this.areasum2) > 0) t.x = this.cg3.x / 3 / this.areasum2, t.y = this.cg3.y / 3 / this.areasum2; else if (this.totalLength > 0) t.x = this.lineCentSum.x / this.totalLength, t.y = this.lineCentSum.y / this.totalLength; else { if (!(this.ptCount > 0)) return null; t.x = this.ptCentSum.x / this.ptCount, t.y = this.ptCentSum.y / this.ptCount } return t }, addShell: function (t) { t.length > 0 && this.setBasePoint(t[0]); for (var e = !he.isCCW(t), n = 0; n < t.length - 1; n++)this.addTriangle(this.areaBasePt, t[n], t[n + 1], e); this.addLineSegments(t) }, addTriangle: function (t, e, n, i) { var r = i ? 1 : -1; fe.centroid3(t, e, n, this.triangleCent3); var s = fe.area2(t, e, n); this.cg3.x += r * s * this.triangleCent3.x, this.cg3.y += r * s * this.triangleCent3.y, this.areasum2 += r * s }, add: function () { if (arguments[0] instanceof bt) { var t = arguments[0]; this.addShell(t.getExteriorRing().getCoordinates()); for (var e = 0; e < t.getNumInteriorRing(); e++)this.addHole(t.getInteriorRingN(e).getCoordinates()) } else if (arguments[0] instanceof B) { var n = arguments[0]; if (n.isEmpty()) return null; if (n instanceof Lt) this.addPoint(n.getCoordinate()); else if (n instanceof wt) this.addLineSegments(n.getCoordinates()); else if (n instanceof bt) { var i = n; this.add(i) } else if (n instanceof gt) for (var r = n, e = 0; e < r.getNumGeometries(); e++)this.add(r.getGeometryN(e)) } }, interfaces_: function () { return [] }, getClass: function () { return fe } }), fe.area2 = function (t, e, n) { return (e.x - t.x) * (n.y - t.y) - (n.x - t.x) * (e.y - t.y) }, fe.centroid3 = function (t, e, n, i) { return i.x = t.x + e.x + n.x, i.y = t.y + e.y + n.y, null }, fe.getCentroid = function (t) { var e = new fe(t); return e.getCentroid() }, de.prototype = new Error, de.prototype.name = "EmptyStackException", me.prototype = new y, me.prototype.add = function (t) { return this.array_.push(t), !0 }, me.prototype.get = function (t) { if (0 > t || t >= this.size()) throw new IndexOutOfBoundsException; return this.array_[t] }, me.prototype.push = function (t) { return this.array_.push(t), t }, me.prototype.pop = function (t) { if (0 === this.array_.length) throw new de; return this.array_.pop() }, me.prototype.peek = function () { if (0 === this.array_.length) throw new de; return this.array_[this.array_.length - 1] }, me.prototype.empty = function () { return 0 === this.array_.length }, me.prototype.isEmpty = function () { return this.empty() }, me.prototype.search = function (t) { return this.array_.indexOf(t) }, me.prototype.size = function () { return this.array_.length }, me.prototype.toArray = function () { for (var t = [], e = 0, n = this.array_.length; n > e; e++)t.push(this.array_[e]); return t }, e(pe.prototype, { filter: function (t) { this.treeSet.contains(t) || (this.list.add(t), this.treeSet.add(t)) }, getCoordinates: function () { var t = new Array(this.list.size()).fill(null); return this.list.toArray(t) }, interfaces_: function () { return [z] }, getClass: function () { return pe } }), pe.filterCoordinates = function (t) { for (var e = new pe, n = 0; n < t.length; n++)e.filter(t[n]); return e.getCoordinates() }, e(ve.prototype, { preSort: function (t) { for (var e = null, n = 1; n < t.length; n++)(t[n].y < t[0].y || t[n].y === t[0].y && t[n].x < t[0].x) && (e = t[0], t[0] = t[n], t[n] = e); return ut.sort(t, 1, t.length, new ye(t[0])), t }, computeOctRing: function (t) { var e = this.computeOctPts(t), n = new N; return n.add(e, !1), n.size() < 3 ? null : (n.closeRing(), n.toCoordinateArray()) }, lineOrPolygon: function (t) { if (t = this.cleanRing(t), 3 === t.length) return this.geomFactory.createLineString([t[0], t[1]]); var e = this.geomFactory.createLinearRing(t); return this.geomFactory.createPolygon(e, null) }, cleanRing: function (t) { g.equals(t[0], t[t.length - 1]); for (var e = new I, n = null, i = 0; i <= t.length - 2; i++) { var r = t[i], s = t[i + 1]; r.equals(s) || null !== n && this.isBetween(n, r, s) || (e.add(r), n = r) } e.add(t[t.length - 1]); var o = new Array(e.size()).fill(null); return e.toArray(o) }, isBetween: function (t, e, n) { if (0 !== he.computeOrientation(t, e, n)) return !1; if (t.x !== n.x) { if (t.x <= e.x && e.x <= n.x) return !0; if (n.x <= e.x && e.x <= t.x) return !0 } if (t.y !== n.y) { if (t.y <= e.y && e.y <= n.y) return !0; if (n.y <= e.y && e.y <= t.y) return !0 } return !1 }, reduce: function (t) { var e = this.computeOctRing(t); if (null === e) return t; for (var n = new at, i = 0; i < e.length; i++)n.add(e[i]); for (var i = 0; i < t.length; i++)he.isPointInRing(t[i], e) || n.add(t[i]); var r = H.toCoordinateArray(n); return r.length < 3 ? this.padArray3(r) : r }, getConvexHull: function () { if (0 === this.inputPts.length) return this.geomFactory.createGeometryCollection(null); if (1 === this.inputPts.length) return this.geomFactory.createPoint(this.inputPts[0]); if (2 === this.inputPts.length) return this.geomFactory.createLineString(this.inputPts); var t = this.inputPts; this.inputPts.length > 50 && (t = this.reduce(this.inputPts)); var e = this.preSort(t), n = this.grahamScan(e), i = this.toCoordinateArray(n); return this.lineOrPolygon(i) }, padArray3: function (t) { for (var e = new Array(3).fill(null), n = 0; n < e.length; n++)n < t.length ? e[n] = t[n] : e[n] = t[0]; return e }, computeOctPts: function (t) { for (var e = new Array(8).fill(null), n = 0; n < e.length; n++)e[n] = t[0]; for (var i = 1; i < t.length; i++)t[i].x < e[0].x && (e[0] = t[i]), t[i].x - t[i].y < e[1].x - e[1].y && (e[1] = t[i]), t[i].y > e[2].y && (e[2] = t[i]), t[i].x + t[i].y > e[3].x + e[3].y && (e[3] = t[i]), t[i].x > e[4].x && (e[4] = t[i]), t[i].x - t[i].y > e[5].x - e[5].y && (e[5] = t[i]), t[i].y < e[6].y && (e[6] = t[i]), t[i].x + t[i].y < e[7].x + e[7].y && (e[7] = t[i]); return e }, toCoordinateArray: function (t) { for (var e = new Array(t.size()).fill(null), n = 0; n < t.size(); n++) { var i = t.get(n); e[n] = i } return e }, grahamScan: function (t) { var e = null, n = new me; e = n.push(t[0]), e = n.push(t[1]), e = n.push(t[2]); for (var i = 3; i < t.length; i++) { for (e = n.pop(); !n.empty() && he.computeOrientation(n.peek(), e, t[i]) > 0;)e = n.pop(); e = n.push(e), e = n.push(t[i]) } return e = n.push(t[0]), n }, interfaces_: function () { return [] }, getClass: function () { return ve } }), ve.extractCoordinates = function (t) { var e = new pe; return t.apply(e), e.getCoordinates() }, e(ye.prototype, { compare: function (t, e) { var n = t, i = e; return ye.polarCompare(this.origin, n, i) }, interfaces_: function () { return [a] }, getClass: function () { return ye } }), ye.polarCompare = function (t, e, n) { var i = e.x - t.x, r = e.y - t.y, s = n.x - t.x, o = n.y - t.y, a = he.computeOrientation(t, e, n); if (a === he.COUNTERCLOCKWISE) return 1; if (a === he.CLOCKWISE) return -1; var u = i * i + r * r, l = s * s + o * o; return l > u ? -1 : u > l ? 1 : 0 }, ve.RadialComparator = ye, e(xe.prototype, { transformPoint: function (t, e) { return this.factory.createPoint(this.transformCoordinates(t.getCoordinateSequence(), t)) }, transformPolygon: function (t, e) { var n = !0, i = this.transformLinearRing(t.getExteriorRing(), t); null !== i && i instanceof Pt && !i.isEmpty() || (n = !1); for (var r = new I, s = 0; s < t.getNumInteriorRing(); s++) { var o = this.transformLinearRing(t.getInteriorRingN(s), t); null === o || o.isEmpty() || (o instanceof Pt || (n = !1), r.add(o)) } if (n) return this.factory.createPolygon(i, r.toArray([])); var a = new I; return null !== i && a.add(i), a.addAll(r), this.factory.buildGeometry(a) }, createCoordinateSequence: function (t) { return this.factory.getCoordinateSequenceFactory().create(t) }, getInputGeometry: function () { return this.inputGeom }, transformMultiLineString: function (t, e) { for (var n = new I, i = 0; i < t.getNumGeometries(); i++) { var r = this.transformLineString(t.getGeometryN(i), t); null !== r && (r.isEmpty() || n.add(r)) } return this.factory.buildGeometry(n) }, transformCoordinates: function (t, e) { return this.copy(t) }, transformLineString: function (t, e) { return this.factory.createLineString(this.transformCoordinates(t.getCoordinateSequence(), t)) }, transformMultiPoint: function (t, e) { for (var n = new I, i = 0; i < t.getNumGeometries(); i++) { var r = this.transformPoint(t.getGeometryN(i), t); null !== r && (r.isEmpty() || n.add(r)) } return this.factory.buildGeometry(n) }, transformMultiPolygon: function (t, e) { for (var n = new I, i = 0; i < t.getNumGeometries(); i++) { var r = this.transformPolygon(t.getGeometryN(i), t); null !== r && (r.isEmpty() || n.add(r)) } return this.factory.buildGeometry(n) }, copy: function (t) { return t.copy() }, transformGeometryCollection: function (t, e) { for (var n = new I, i = 0; i < t.getNumGeometries(); i++) { var r = this.transform(t.getGeometryN(i)); null !== r && (this.pruneEmptyGeometry && r.isEmpty() || n.add(r)) } return this.preserveGeometryCollectionType ? this.factory.createGeometryCollection(ie.toGeometryArray(n)) : this.factory.buildGeometry(n) }, transform: function (t) { if (this.inputGeom = t, this.factory = t.getFactory(), t instanceof Lt) return this.transformPoint(t, null); if (t instanceof Tt) return this.transformMultiPoint(t, null); if (t instanceof Pt) return this.transformLinearRing(t, null); if (t instanceof wt) return this.transformLineString(t, null); if (t instanceof ft) return this.transformMultiLineString(t, null); if (t instanceof bt) return this.transformPolygon(t, null); if (t instanceof Ot) return this.transformMultiPolygon(t, null); if (t instanceof gt) return this.transformGeometryCollection(t, null); throw new i("Unknown Geometry subtype: " + t.getClass().getName()) }, transformLinearRing: function (t, e) { var n = this.transformCoordinates(t.getCoordinateSequence(), t); if (null === n) return this.factory.createLinearRing(null); var i = n.size(); return i > 0 && 4 > i && !this.preserveType ? this.factory.createLineString(n) : this.factory.createLinearRing(n) }, interfaces_: function () { return [] }, getClass: function () { return xe } }), e(Ee.prototype, { snapVertices: function (t, e) { for (var n = this._isClosed ? t.size() - 1 : t.size(), i = 0; n > i; i++) { var r = t.get(i), s = this.findSnapForVertex(r, e); null !== s && (t.set(i, new f(s)), 0 === i && this._isClosed && t.set(t.size() - 1, new f(s))) } }, findSnapForVertex: function (t, e) { for (var n = 0; n < e.length; n++) { if (t.equals2D(e[n])) return null; if (t.distance(e[n]) < this.snapTolerance) return e[n] } return null }, snapTo: function (t) { var e = new N(this.srcPts); this.snapVertices(e, t), this.snapSegments(e, t); var n = e.toCoordinateArray(); return n }, snapSegments: function (t, e) { if (0 === e.length) return null; var n = e.length; e[0].equals2D(e[e.length - 1]) && (n = e.length - 1); for (var i = 0; n > i; i++) { var r = e[i], s = this.findSegmentIndexToSnap(r, t); s >= 0 && t.add(s + 1, new f(r), !1) } }, findSegmentIndexToSnap: function (t, e) { for (var n = r.MAX_VALUE, i = -1, s = 0; s < e.size() - 1; s++) { if (this.seg.p0 = e.get(s), this.seg.p1 = e.get(s + 1), this.seg.p0.equals2D(t) || this.seg.p1.equals2D(t)) { if (this.allowSnappingToSourceVertices) continue; return -1 } var o = this.seg.distance(t); o < this.snapTolerance && n > o && (n = o, i = s) } return i }, setAllowSnappingToSourceVertices: function (t) { this.allowSnappingToSourceVertices = t }, interfaces_: function () { return [] }, getClass: function () { return Ee } }), Ee.isClosed = function (t) { return t.length <= 1 ? !1 : t[0].equals2D(t[t.length - 1]) }, e(Ie.prototype, { snapTo: function (t, e) { var n = this.extractTargetCoordinates(t), i = new Ne(e, n); return i.transform(this.srcGeom) }, snapToSelf: function (t, e) { var n = this.extractTargetCoordinates(this.srcGeom), i = new Ne(t, n, !0), r = i.transform(this.srcGeom), s = r; return e && R(s, Rt) && (s = r.buffer(0)), s }, computeSnapTolerance: function (t) { var e = this.computeMinimumSegmentLength(t), n = e / 10; return n }, extractTargetCoordinates: function (t) { for (var e = new at, n = t.getCoordinates(), i = 0; i < n.length; i++)e.add(n[i]); return e.toArray(new Array(0).fill(null)) }, computeMinimumSegmentLength: function (t) { for (var e = r.MAX_VALUE, n = 0; n < t.length - 1; n++) { var i = t[n].distance(t[n + 1]); e > i && (e = i) } return e }, interfaces_: function () { return [] }, getClass: function () { return Ie } }), Ie.snap = function (t, e, n) { var i = new Array(2).fill(null), r = new Ie(t); i[0] = r.snapTo(e, n); var s = new Ie(e); return i[1] = s.snapTo(i[0], n), i }, Ie.computeOverlaySnapTolerance = function () { if (1 === arguments.length) { var t = arguments[0], e = Ie.computeSizeBasedSnapTolerance(t), n = t.getPrecisionModel(); if (n.getType() === ee.FIXED) { var i = 1 / n.getScale() * 2 / 1.415; i > e && (e = i) } return e } if (2 === arguments.length) { var r = arguments[0], s = arguments[1]; return Math.min(Ie.computeOverlaySnapTolerance(r), Ie.computeOverlaySnapTolerance(s)) } }, Ie.computeSizeBasedSnapTolerance = function (t) { var e = t.getEnvelopeInternal(), n = Math.min(e.getHeight(), e.getWidth()), i = n * Ie.SNAP_PRECISION_FACTOR; return i }, Ie.snapToSelf = function (t, e, n) { var i = new Ie(t); return i.snapToSelf(e, n) }, Ie.SNAP_PRECISION_FACTOR = 1e-9, h(Ne, xe), e(Ne.prototype, { snapLine: function (t, e) { var n = new Ee(t, this.snapTolerance); return n.setAllowSnappingToSourceVertices(this.isSelfSnap), n.snapTo(e) }, transformCoordinates: function (t, e) { var n = t.toCoordinateArray(), i = this.snapLine(n, this.snapPts); return this.factory.getCoordinateSequenceFactory().create(i) }, interfaces_: function () { return [] }, getClass: function () { return Ne } }), e(Ce.prototype, { getCommon: function () { return r.longBitsToDouble(this.commonBits) }, add: function (t) { var e = r.doubleToLongBits(t); if (this.isFirst) return this.commonBits = e, this.commonSignExp = Ce.signExpBits(this.commonBits), this.isFirst = !1, null; var n = Ce.signExpBits(e); return n !== this.commonSignExp ? (this.commonBits = 0, null) : (this.commonMantissaBitsCount = Ce.numCommonMostSigMantissaBits(this.commonBits, e), void (this.commonBits = Ce.zeroLowerBits(this.commonBits, 64 - (12 + this.commonMantissaBitsCount)))) }, toString: function () { if (1 === arguments.length) { var t = arguments[0], e = r.longBitsToDouble(t), n = Long.toBinaryString(t), i = "0000000000000000000000000000000000000000000000000000000000000000" + n, s = i.substring(i.length - 64), o = s.substring(0, 1) + " " + s.substring(1, 12) + "(exp) " + s.substring(12) + " [ " + e + " ]"; return o } }, interfaces_: function () { return [] }, getClass: function () { return Ce } }), Ce.getBit = function (t, e) { var n = 1 << e; return 0 !== (t & n) ? 1 : 0 }, Ce.signExpBits = function (t) { return t >> 52 }, Ce.zeroLowerBits = function (t, e) { var n = (1 << e) - 1, i = ~n, r = t & i; return r }, Ce.numCommonMostSigMantissaBits = function (t, e) { for (var n = 0, i = 52; i >= 0; i--) { if (Ce.getBit(t, i) !== Ce.getBit(e, i)) return n; n++ } return 52 }, e(we.prototype, { addCommonBits: function (t) { var e = new Le(this.commonCoord); t.apply(e), t.geometryChanged() }, removeCommonBits: function (t) { if (0 === this.commonCoord.x && 0 === this.commonCoord.y) return t; var e = new f(this.commonCoord); e.x = -e.x, e.y = -e.y; var n = new Le(e); return t.apply(n), t.geometryChanged(), t }, getCommonCoordinate: function () { return this.commonCoord }, add: function (t) { t.apply(this.ccFilter), this.commonCoord = this.ccFilter.getCommonCoordinate() }, interfaces_: function () { return [] }, getClass: function () { return we } }), e(Se.prototype, { filter: function (t) { this.commonBitsX.add(t.x), this.commonBitsY.add(t.y) }, getCommonCoordinate: function () { return new f(this.commonBitsX.getCommon(), this.commonBitsY.getCommon()) }, interfaces_: function () { return [z] }, getClass: function () { return Se } }), e(Le.prototype, { filter: function (t, e) { var n = t.getOrdinate(e, 0) + this.trans.x, i = t.getOrdinate(e, 1) + this.trans.y; t.setOrdinate(e, 0, n), t.setOrdinate(e, 1, i) }, isDone: function () { return !1 }, isGeometryChanged: function () { return !0 }, interfaces_: function () { return [ct] }, getClass: function () { return Le } }), we.CommonCoordinateFilter = Se, we.Translater = Le, e(Re.prototype, { next: function () { if (this.atStart) return this.atStart = !1, Re.isAtomic(this.parent) && this.index++ , this.parent; if (null !== this.subcollectionIterator) { if (this.subcollectionIterator.hasNext()) return this.subcollectionIterator.next(); this.subcollectionIterator = null } if (this.index >= this.max) throw new x; var t = this.parent.getGeometryN(this.index++); return t instanceof gt ? (this.subcollectionIterator = new Re(t), this.subcollectionIterator.next()) : t }, remove: function () { throw new UnsupportedOperationException(this.getClass().getName()) }, hasNext: function () { if (this.atStart) return !0; if (null !== this.subcollectionIterator) { if (this.subcollectionIterator.hasNext()) return !0; this.subcollectionIterator = null } return !(this.index >= this.max) }, interfaces_: function () { return [m] }, getClass: function () { return Re } }), Re.isAtomic = function (t) { return !(t instanceof gt) }, e(be.prototype, { locateInternal: function () { if (arguments[0] instanceof f && arguments[1] instanceof bt) { var t = arguments[0], e = arguments[1]; if (e.isEmpty()) return L.EXTERIOR; var n = e.getExteriorRing(), i = this.locateInPolygonRing(t, n); if (i === L.EXTERIOR) return L.EXTERIOR; if (i === L.BOUNDARY) return L.BOUNDARY; for (var r = 0; r < e.getNumInteriorRing(); r++) { var s = e.getInteriorRingN(r), o = this.locateInPolygonRing(t, s); if (o === L.INTERIOR) return L.EXTERIOR; if (o === L.BOUNDARY) return L.BOUNDARY } return L.INTERIOR } if (arguments[0] instanceof f && arguments[1] instanceof wt) { var a = arguments[0], u = arguments[1]; if (!u.getEnvelopeInternal().intersects(a)) return L.EXTERIOR; var l = u.getCoordinates(); return u.isClosed() || !a.equals(l[0]) && !a.equals(l[l.length - 1]) ? he.isOnLine(a, l) ? L.INTERIOR : L.EXTERIOR : L.BOUNDARY } if (arguments[0] instanceof f && arguments[1] instanceof Lt) { var h = arguments[0], c = arguments[1], g = c.getCoordinate(); return g.equals2D(h) ? L.INTERIOR : L.EXTERIOR } }, locateInPolygonRing: function (t, e) { return e.getEnvelopeInternal().intersects(t) ? he.locatePointInRing(t, e.getCoordinates()) : L.EXTERIOR }, intersects: function (t, e) { return this.locate(t, e) !== L.EXTERIOR }, updateLocationInfo: function (t) { t === L.INTERIOR && (this.isIn = !0), t === L.BOUNDARY && this.numBoundaries++ }, computeLocation: function (t, e) { if (e instanceof Lt && this.updateLocationInfo(this.locateInternal(t, e)), e instanceof wt) this.updateLocationInfo(this.locateInternal(t, e)); else if (e instanceof bt) this.updateLocationInfo(this.locateInternal(t, e)); else if (e instanceof ft) for (var n = e, i = 0; i < n.getNumGeometries(); i++) { var r = n.getGeometryN(i); this.updateLocationInfo(this.locateInternal(t, r)) } else if (e instanceof Ot) for (var s = e, i = 0; i < s.getNumGeometries(); i++) { var o = s.getGeometryN(i); this.updateLocationInfo(this.locateInternal(t, o)) } else if (e instanceof gt) for (var a = new Re(e); a.hasNext();) { var u = a.next(); u !== e && this.computeLocation(t, u) } }, locate: function (t, e) { return e.isEmpty() ? L.EXTERIOR : e instanceof wt ? this.locateInternal(t, e) : e instanceof bt ? this.locateInternal(t, e) : (this.isIn = !1, this.numBoundaries = 0, this.computeLocation(t, e), this.boundaryRule.isInBoundary(this.numBoundaries) ? L.BOUNDARY : this.numBoundaries > 0 || this.isIn ? L.INTERIOR : L.EXTERIOR) }, interfaces_: function () { return [] }, getClass: function () { return be } }), e(Te.prototype, { interfaces_: function () { return [] }, getClass: function () { return Te } }), Te.octant = function () { if ("number" == typeof arguments[0] && "number" == typeof arguments[1]) { var t = arguments[0], e = arguments[1]; if (0 === t && 0 === e) throw new i("Cannot compute the octant for point ( " + t + ", " + e + " )"); var n = Math.abs(t), r = Math.abs(e); return t >= 0 ? e >= 0 ? n >= r ? 0 : 1 : n >= r ? 7 : 6 : e >= 0 ? n >= r ? 3 : 2 : n >= r ? 4 : 5 } if (arguments[0] instanceof f && arguments[1] instanceof f) { var s = arguments[0], o = arguments[1], a = o.x - s.x, u = o.y - s.y; if (0 === a && 0 === u) throw new i("Cannot compute the octant for two identical points " + s); return Te.octant(a, u) } }, e(Pe.prototype, { getCoordinates: function () { }, size: function () { }, getCoordinate: function (t) { }, isClosed: function () { }, setData: function (t) { }, getData: function () { }, interfaces_: function () { return [] }, getClass: function () { return Pe } }), e(Oe.prototype, { getCoordinates: function () { return this.pts }, size: function () { return this.pts.length }, getCoordinate: function (t) { return this.pts[t] }, isClosed: function () { return this.pts[0].equals(this.pts[this.pts.length - 1]) }, getSegmentOctant: function (t) { return t === this.pts.length - 1 ? -1 : Te.octant(this.getCoordinate(t), this.getCoordinate(t + 1)) }, setData: function (t) { this.data = t }, getData: function () { return this.data }, toString: function () { return se.toLineString(new Gt(this.pts)) }, interfaces_: function () { return [Pe] }, getClass: function () { return Oe } }), e(Me.prototype, { getBounds: function () { }, interfaces_: function () { return [] }, getClass: function () { return Me } }), e(_e.prototype, { getItem: function () { return this.item }, getBounds: function () { return this.bounds }, interfaces_: function () { return [Me, u] }, getClass: function () { return _e } }), e(Ae.prototype, { poll: function () { if (this.isEmpty()) return null; var t = this.items.get(1); return this.items.set(1, this.items.get(this._size)), this._size -= 1, this.reorder(1), t }, size: function () { return this._size }, reorder: function (t) { for (var e = null, n = this.items.get(t); 2 * t <= this._size && (e = 2 * t, e !== this._size && this.items.get(e + 1).compareTo(this.items.get(e)) < 0 && e++ , this.items.get(e).compareTo(n) < 0); t = e)this.items.set(t, this.items.get(e)); this.items.set(t, n) }, clear: function () { this._size = 0, this.items.clear() }, isEmpty: function () { return 0 === this._size }, add: function (t) { this.items.add(null), this._size += 1; var e = this._size; for (this.items.set(0, t); t.compareTo(this.items.get(Math.trunc(e / 2))) < 0; e /= 2)this.items.set(e, this.items.get(Math.trunc(e / 2))); this.items.set(e, t) }, interfaces_: function () { return [] }, getClass: function () { return Ae } }), e(De.prototype, { visitItem: function (t) { }, interfaces_: function () { return [] }, getClass: function () { return De } }), e(Fe.prototype, { insert: function (t, e) { }, remove: function (t, e) { }, query: function () { 1 === arguments.length ? arguments[0] : 2 === arguments.length && (arguments[0], arguments[1]) }, interfaces_: function () { return [] }, getClass: function () { return Fe } }), e(Ge.prototype, { getLevel: function () { return this.level }, size: function () { return this.childBoundables.size() }, getChildBoundables: function () { return this.childBoundables }, addChildBoundable: function (t) { g.isTrue(null === this.bounds), this.childBoundables.add(t) }, isEmpty: function () { return this.childBoundables.isEmpty() }, getBounds: function () { return null === this.bounds && (this.bounds = this.computeBounds()), this.bounds }, interfaces_: function () { return [Me, u] }, getClass: function () { return Ge } }), Ge.serialVersionUID = 0x5a1e55ec41369800; var ho = { reverseOrder: function () { return { compare: function (t, e) { return e.compareTo(t) } } }, min: function (t) { return ho.sort(t), t.get(0) }, sort: function (t, e) { var n = t.toArray(); e ? ut.sort(n, e) : ut.sort(n); for (var i = t.iterator(), r = 0, s = n.length; s > r; r++)i.next(), i.set(n[r]) }, singletonList: function (t) { var e = new I; return e.add(t), e } }; e(qe.prototype, { expandToQueue: function (t, e) { var n = qe.isComposite(this.boundable1), r = qe.isComposite(this.boundable2); if (n && r) return qe.area(this.boundable1) > qe.area(this.boundable2) ? (this.expand(this.boundable1, this.boundable2, t, e), null) : (this.expand(this.boundable2, this.boundable1, t, e), null); if (n) return this.expand(this.boundable1, this.boundable2, t, e), null; if (r) return this.expand(this.boundable2, this.boundable1, t, e), null; throw new i("neither boundable is composite") }, isLeaves: function () { return !(qe.isComposite(this.boundable1) || qe.isComposite(this.boundable2)) }, compareTo: function (t) { var e = t; return this._distance < e._distance ? -1 : this._distance > e._distance ? 1 : 0 }, expand: function (t, e, n, i) { for (var r = t.getChildBoundables(), s = r.iterator(); s.hasNext();) { var o = s.next(), a = new qe(o, e, this.itemDistance); a.getDistance() < i && n.add(a) } }, getBoundable: function (t) { return 0 === t ? this.boundable1 : this.boundable2 }, getDistance: function () { return this._distance }, distance: function () { return this.isLeaves() ? this.itemDistance.distance(this.boundable1, this.boundable2) : this.boundable1.getBounds().distance(this.boundable2.getBounds()) }, interfaces_: function () { return [s] }, getClass: function () { return qe } }), qe.area = function (t) { return t.getBounds().getArea() }, qe.isComposite = function (t) { return t instanceof Ge }, e(Be.prototype, { getNodeCapacity: function () { return this.nodeCapacity }, lastNode: function (t) { return t.get(t.size() - 1) }, size: function Go() { if (0 === arguments.length) return this.isEmpty() ? 0 : (this.build(), this.size(this.root)); if (1 === arguments.length) { for (var t = arguments[0], Go = 0, e = t.getChildBoundables().iterator(); e.hasNext();) { var n = e.next(); n instanceof Ge ? Go += this.size(n) : n instanceof _e && (Go += 1) } return Go } }, removeItem: function (t, e) { for (var n = null, i = t.getChildBoundables().iterator(); i.hasNext();) { var r = i.next(); r instanceof _e && r.getItem() === e && (n = r) } return null !== n ? (t.getChildBoundables().remove(n), !0) : !1 }, itemsTree: function () { if (0 === arguments.length) { this.build(); var t = this.itemsTree(this.root); return null === t ? new I : t } if (1 === arguments.length) { for (var e = arguments[0], n = new I, i = e.getChildBoundables().iterator(); i.hasNext();) { var r = i.next(); if (r instanceof Ge) { var s = this.itemsTree(r); null !== s && n.add(s) } else r instanceof _e ? n.add(r.getItem()) : g.shouldNeverReachHere() } return n.size() <= 0 ? null : n } }, insert: function (t, e) { g.isTrue(!this.built, "Cannot insert items into an STR packed R-tree after it has been built."), this.itemBoundables.add(new _e(t, e)) }, boundablesAtLevel: function () { if (1 === arguments.length) { var t = arguments[0], e = new I; return this.boundablesAtLevel(t, this.root, e), e } if (3 === arguments.length) { var n = arguments[0], i = arguments[1], r = arguments[2]; if (g.isTrue(n > -2), i.getLevel() === n) return r.add(i), null; for (var s = i.getChildBoundables().iterator(); s.hasNext();) { var o = s.next(); o instanceof Ge ? this.boundablesAtLevel(n, o, r) : (g.isTrue(o instanceof _e), -1 === n && r.add(o)) } return null } }, query: function () { if (1 === arguments.length) { var t = arguments[0]; this.build(); var e = new I; return this.isEmpty() ? e : (this.getIntersectsOp().intersects(this.root.getBounds(), t) && this.query(t, this.root, e), e) } if (2 === arguments.length) { var n = arguments[0], i = arguments[1]; if (this.build(), this.isEmpty()) return null; this.getIntersectsOp().intersects(this.root.getBounds(), n) && this.query(n, this.root, i) } else if (3 === arguments.length) if (R(arguments[2], De) && arguments[0] instanceof Object && arguments[1] instanceof Ge) for (var r = arguments[0], s = arguments[1], o = arguments[2], a = s.getChildBoundables(), u = 0; u < a.size(); u++) { var l = a.get(u); this.getIntersectsOp().intersects(l.getBounds(), r) && (l instanceof Ge ? this.query(r, l, o) : l instanceof _e ? o.visitItem(l.getItem()) : g.shouldNeverReachHere()) } else if (R(arguments[2], y) && arguments[0] instanceof Object && arguments[1] instanceof Ge) for (var h = arguments[0], c = arguments[1], f = arguments[2], a = c.getChildBoundables(), u = 0; u < a.size(); u++) { var l = a.get(u); this.getIntersectsOp().intersects(l.getBounds(), h) && (l instanceof Ge ? this.query(h, l, f) : l instanceof _e ? f.add(l.getItem()) : g.shouldNeverReachHere()) } }, build: function () { return this.built ? null : (this.root = this.itemBoundables.isEmpty() ? this.createNode(0) : this.createHigherLevels(this.itemBoundables, -1), this.itemBoundables = null, void (this.built = !0)) }, getRoot: function () { return this.build(), this.root }, remove: function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; return this.build(), this.getIntersectsOp().intersects(this.root.getBounds(), t) ? this.remove(t, this.root, e) : !1 } if (3 === arguments.length) { var n = arguments[0], i = arguments[1], r = arguments[2], s = this.removeItem(i, r); if (s) return !0; for (var o = null, a = i.getChildBoundables().iterator(); a.hasNext();) { var u = a.next(); if (this.getIntersectsOp().intersects(u.getBounds(), n) && u instanceof Ge && (s = this.remove(n, u, r))) { o = u; break } } return null !== o && o.getChildBoundables().isEmpty() && i.getChildBoundables().remove(o), s } }, createHigherLevels: function (t, e) { g.isTrue(!t.isEmpty()); var n = this.createParentBoundables(t, e + 1); return 1 === n.size() ? n.get(0) : this.createHigherLevels(n, e + 1) }, depth: function () { if (0 === arguments.length) return this.isEmpty() ? 0 : (this.build(), this.depth(this.root)); if (1 === arguments.length) { for (var t = arguments[0], e = 0, n = t.getChildBoundables().iterator(); n.hasNext();) { var i = n.next(); if (i instanceof Ge) { var r = this.depth(i); r > e && (e = r) } } return e + 1 } }, createParentBoundables: function (t, e) { g.isTrue(!t.isEmpty()); var n = new I; n.add(this.createNode(e)); var i = new I(t); ho.sort(i, this.getComparator()); for (var r = i.iterator(); r.hasNext();) { var s = r.next(); this.lastNode(n).getChildBoundables().size() === this.getNodeCapacity() && n.add(this.createNode(e)), this.lastNode(n).addChildBoundable(s) } return n }, isEmpty: function () { return this.built ? this.root.isEmpty() : this.itemBoundables.isEmpty() }, interfaces_: function () { return [u] }, getClass: function () { return Be } }), Be.compareDoubles = function (t, e) { return t > e ? 1 : e > t ? -1 : 0 }, Be.IntersectsOp = ze, Be.serialVersionUID = -0x35ef64c82d4c5400, Be.DEFAULT_NODE_CAPACITY = 10, e(Ve.prototype, { distance: function (t, e) { }, interfaces_: function () { return [] }, getClass: function () { return Ve } }), h(ke, Be), e(ke.prototype, { + createParentBoundablesFromVerticalSlices: function (t, e) { g.isTrue(t.length > 0); for (var n = new I, i = 0; i < t.length; i++)n.addAll(this.createParentBoundablesFromVerticalSlice(t[i], e)); return n }, createNode: function (t) { + return new Ue(t) + }, size: function () { return 0 === arguments.length ? Be.prototype.size.call(this) : Be.prototype.size.apply(this, arguments) }, insert: function () { if (2 !== arguments.length) return Be.prototype.insert.apply(this, arguments); var t = arguments[0], e = arguments[1]; return t.isNull() ? null : void Be.prototype.insert.call(this, t, e) }, getIntersectsOp: function () { return ke.intersectsOp }, verticalSlices: function (t, e) { for (var n = Math.trunc(Math.ceil(t.size() / e)), i = new Array(e).fill(null), r = t.iterator(), s = 0; e > s; s++) { i[s] = new I; for (var o = 0; r.hasNext() && n > o;) { var a = r.next(); i[s].add(a), o++ } } return i }, query: function () { if (1 === arguments.length) { var t = arguments[0]; return Be.prototype.query.call(this, t) } if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; Be.prototype.query.call(this, e, n) } else if (3 === arguments.length) if (R(arguments[2], De) && arguments[0] instanceof Object && arguments[1] instanceof Ge) { var i = arguments[0], r = arguments[1], s = arguments[2]; Be.prototype.query.call(this, i, r, s) } else if (R(arguments[2], y) && arguments[0] instanceof Object && arguments[1] instanceof Ge) { var o = arguments[0], a = arguments[1], u = arguments[2]; Be.prototype.query.call(this, o, a, u) } }, getComparator: function () { return ke.yComparator }, createParentBoundablesFromVerticalSlice: function (t, e) { return Be.prototype.createParentBoundables.call(this, t, e) }, remove: function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; return Be.prototype.remove.call(this, t, e) } return Be.prototype.remove.apply(this, arguments) }, depth: function () { return 0 === arguments.length ? Be.prototype.depth.call(this) : Be.prototype.depth.apply(this, arguments) }, createParentBoundables: function (t, e) { g.isTrue(!t.isEmpty()); var n = Math.trunc(Math.ceil(t.size() / this.getNodeCapacity())), i = new I(t); ho.sort(i, ke.xComparator); var r = this.verticalSlices(i, Math.trunc(Math.ceil(Math.sqrt(n)))); return this.createParentBoundablesFromVerticalSlices(r, e) }, nearestNeighbour: function () { if (1 === arguments.length) { if (R(arguments[0], Ve)) { var t = arguments[0], e = new qe(this.getRoot(), this.getRoot(), t); return this.nearestNeighbour(e) } if (arguments[0] instanceof qe) { var n = arguments[0]; return this.nearestNeighbour(n, r.POSITIVE_INFINITY) } } else if (2 === arguments.length) { if (arguments[0] instanceof ke && R(arguments[1], Ve)) { var i = arguments[0], s = arguments[1], e = new qe(this.getRoot(), i.getRoot(), s); return this.nearestNeighbour(e) } if (arguments[0] instanceof qe && "number" == typeof arguments[1]) { var o = arguments[0], a = arguments[1], u = a, l = null, h = new Ae; for (h.add(o); !h.isEmpty() && u > 0;) { var c = h.poll(), g = c.getDistance(); if (g >= u) break; c.isLeaves() ? (u = g, l = c) : c.expandToQueue(h, u) } return [l.getBoundable(0).getItem(), l.getBoundable(1).getItem()] } } else if (3 === arguments.length) { var f = arguments[0], d = arguments[1], m = arguments[2], p = new _e(f, d), e = new qe(this.getRoot(), p, m); return this.nearestNeighbour(e)[0] } }, interfaces_: function () { return [Fe, u] }, getClass: function () { return ke } + }), ke.centreX = function (t) { return ke.avg(t.getMinX(), t.getMaxX()) }, ke.avg = function (t, e) { return (t + e) / 2 }, ke.centreY = function (t) { return ke.avg(t.getMinY(), t.getMaxY()) }, h(Ue, Ge), e(Ue.prototype, { computeBounds: function () { for (var t = null, e = this.getChildBoundables().iterator(); e.hasNext();) { var n = e.next(); null === t ? t = new C(n.getBounds()) : t.expandToInclude(n.getBounds()) } return t }, interfaces_: function () { return [] }, getClass: function () { return Ue } }), ke.STRtreeNode = Ue, ke.serialVersionUID = 0x39920f7d5f261e0, ke.xComparator = { interfaces_: function () { return [a] }, compare: function (t, e) { return Be.compareDoubles(ke.centreX(t.getBounds()), ke.centreX(e.getBounds())) } }, ke.yComparator = { interfaces_: function () { return [a] }, compare: function (t, e) { return Be.compareDoubles(ke.centreY(t.getBounds()), ke.centreY(e.getBounds())) } }, ke.intersectsOp = { interfaces_: function () { return [IntersectsOp] }, intersects: function (t, e) { return t.intersects(e) } }, ke.DEFAULT_NODE_CAPACITY = 10, e(Ye.prototype, { interfaces_: function () { return [] }, getClass: function () { return Ye } }), Ye.relativeSign = function (t, e) { return e > t ? -1 : t > e ? 1 : 0 }, Ye.compare = function (t, e, n) { if (e.equals2D(n)) return 0; var i = Ye.relativeSign(e.x, n.x), r = Ye.relativeSign(e.y, n.y); switch (t) { case 0: return Ye.compareValue(i, r); case 1: return Ye.compareValue(r, i); case 2: return Ye.compareValue(r, -i); case 3: return Ye.compareValue(-i, r); case 4: return Ye.compareValue(-i, -r); case 5: return Ye.compareValue(-r, -i); case 6: return Ye.compareValue(-r, i); case 7: return Ye.compareValue(i, -r) }return g.shouldNeverReachHere("invalid octant value"), 0 }, Ye.compareValue = function (t, e) { return 0 > t ? -1 : t > 0 ? 1 : 0 > e ? -1 : e > 0 ? 1 : 0 }, e(Xe.prototype, { getCoordinate: function () { return this.coord }, print: function (t) { t.print(this.coord), t.print(" seg # = " + this.segmentIndex) }, compareTo: function (t) { var e = t; return this.segmentIndex < e.segmentIndex ? -1 : this.segmentIndex > e.segmentIndex ? 1 : this.coord.equals2D(e.coord) ? 0 : Ye.compare(this.segmentOctant, this.coord, e.coord) }, isEndPoint: function (t) { return 0 !== this.segmentIndex || this._isInterior ? this.segmentIndex === t : !0 }, isInterior: function () { return this._isInterior }, interfaces_: function () { return [s] }, getClass: function () { return Xe } }), e(He.prototype, { getSplitCoordinates: function () { var t = new N; this.addEndpoints(); for (var e = this.iterator(), n = e.next(); e.hasNext();) { var i = e.next(); this.addEdgeCoordinates(n, i, t), n = i } return t.toCoordinateArray() }, addCollapsedNodes: function () { var t = new I; this.findCollapsesFromInsertedNodes(t), this.findCollapsesFromExistingVertices(t); for (var e = t.iterator(); e.hasNext();) { var n = e.next().intValue(); this.add(this.edge.getCoordinate(n), n) } }, print: function (t) { t.println("Intersections:"); for (var e = this.iterator(); e.hasNext();) { var n = e.next(); n.print(t) } }, findCollapsesFromExistingVertices: function (t) { for (var e = 0; e < this.edge.size() - 2; e++) { var n = this.edge.getCoordinate(e), i = (this.edge.getCoordinate(e + 1), this.edge.getCoordinate(e + 2)); n.equals2D(i) && t.add(new P(e + 1)) } }, addEdgeCoordinates: function (t, e, n) { var i = e.segmentIndex - t.segmentIndex + 2, r = this.edge.getCoordinate(e.segmentIndex), s = e.isInterior() || !e.coord.equals2D(r); s || i-- , n.add(new f(t.coord), !1); for (var o = t.segmentIndex + 1; o <= e.segmentIndex; o++)n.add(this.edge.getCoordinate(o)); s && n.add(new f(e.coord)) }, iterator: function () { return this.nodeMap.values().iterator() }, addSplitEdges: function (t) { this.addEndpoints(), this.addCollapsedNodes(); for (var e = this.iterator(), n = e.next(); e.hasNext();) { var i = e.next(), r = this.createSplitEdge(n, i); t.add(r), n = i } }, findCollapseIndex: function (t, e, n) { if (!t.coord.equals2D(e.coord)) return !1; var i = e.segmentIndex - t.segmentIndex; return e.isInterior() || i-- , 1 === i ? (n[0] = t.segmentIndex + 1, !0) : !1 }, findCollapsesFromInsertedNodes: function (t) { for (var e = new Array(1).fill(null), n = this.iterator(), i = n.next(); n.hasNext();) { var r = n.next(), s = this.findCollapseIndex(i, r, e); s && t.add(new P(e[0])), i = r } }, getEdge: function () { return this.edge }, addEndpoints: function () { var t = this.edge.size() - 1; this.add(this.edge.getCoordinate(0), 0), this.add(this.edge.getCoordinate(t), t) }, createSplitEdge: function (t, e) { var n = e.segmentIndex - t.segmentIndex + 2, i = this.edge.getCoordinate(e.segmentIndex), r = e.isInterior() || !e.coord.equals2D(i); r || n--; var s = new Array(n).fill(null), o = 0; s[o++] = new f(t.coord); for (var a = t.segmentIndex + 1; a <= e.segmentIndex; a++)s[o++] = this.edge.getCoordinate(a); return r && (s[o] = new f(e.coord)), new Ze(s, this.edge.getData()) }, add: function (t, e) { var n = new Xe(this.edge, t, e, this.edge.getSegmentOctant(e)), i = this.nodeMap.get(n); return null !== i ? (g.isTrue(i.coord.equals2D(t), "Found equal nodes with different coordinates"), i) : (this.nodeMap.put(n, n), n) }, checkSplitEdgesCorrectness: function (t) { var e = this.edge.getCoordinates(), n = t.get(0), i = n.getCoordinate(0); if (!i.equals2D(e[0])) throw new l("bad split edge start point at " + i); var r = t.get(t.size() - 1), s = r.getCoordinates(), o = s[s.length - 1]; if (!o.equals2D(e[e.length - 1])) throw new l("bad split edge end point at " + o) }, interfaces_: function () { return [] }, getClass: function () { return He } }), e(We.prototype, { next: function () { return null === this.currNode ? (this.currNode = this.nextNode, this.currSegIndex = this.currNode.segmentIndex, this.readNextNode(), this.currNode) : null === this.nextNode ? null : this.nextNode.segmentIndex === this.currNode.segmentIndex ? (this.currNode = this.nextNode, this.currSegIndex = this.currNode.segmentIndex, this.readNextNode(), this.currNode) : (this.nextNode.segmentIndex > this.currNode.segmentIndex, null) }, remove: function () { throw new UnsupportedOperationException(this.getClass().getName()) }, hasNext: function () { return null !== this.nextNode }, readNextNode: function () { this.nodeIt.hasNext() ? this.nextNode = this.nodeIt.next() : this.nextNode = null }, interfaces_: function () { return [m] }, getClass: function () { return We } }), e(je.prototype, { addIntersection: function (t, e) { }, interfaces_: function () { return [Pe] }, getClass: function () { return je } }), e(Ze.prototype, { getCoordinates: function () { return this.pts }, size: function () { return this.pts.length }, getCoordinate: function (t) { return this.pts[t] }, isClosed: function () { return this.pts[0].equals(this.pts[this.pts.length - 1]) }, getSegmentOctant: function (t) { return t === this.pts.length - 1 ? -1 : this.safeOctant(this.getCoordinate(t), this.getCoordinate(t + 1)) }, setData: function (t) { this.data = t }, safeOctant: function (t, e) { return t.equals2D(e) ? 0 : Te.octant(t, e) }, getData: function () { return this.data }, addIntersection: function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; this.addIntersectionNode(t, e) } else if (4 === arguments.length) { var n = arguments[0], i = arguments[1], r = (arguments[2], arguments[3]), s = new f(n.getIntersection(r)); this.addIntersection(s, i) } }, toString: function () { return se.toLineString(new Gt(this.pts)) }, getNodeList: function () { return this.nodeList }, addIntersectionNode: function (t, e) { var n = e, i = n + 1; if (i < this.pts.length) { var r = this.pts[i]; t.equals2D(r) && (n = i) } var s = this.nodeList.add(t, n); return s }, addIntersections: function (t, e, n) { for (var i = 0; i < t.getIntersectionNum(); i++)this.addIntersection(t, e, n, i) }, interfaces_: function () { return [je] }, getClass: function () { return Ze } }), Ze.getNodedSubstrings = function () { if (1 === arguments.length) { var t = arguments[0], e = new I; return Ze.getNodedSubstrings(t, e), e } if (2 === arguments.length) for (var n = arguments[0], i = arguments[1], r = n.iterator(); r.hasNext();) { var s = r.next(); s.getNodeList().addSplitEdges(i) } }, e(Je.prototype, { overlap: function () { if (2 === arguments.length) arguments[0], arguments[1]; else if (4 === arguments.length) { var t = arguments[0], e = arguments[1], n = arguments[2], i = arguments[3]; t.getLineSegment(e, this.overlapSeg1), n.getLineSegment(i, this.overlapSeg2), this.overlap(this.overlapSeg1, this.overlapSeg2) } }, interfaces_: function () { return [] }, getClass: function () { return Je } }), e(Ke.prototype, { getLineSegment: function (t, e) { e.p0 = this.pts[t], e.p1 = this.pts[t + 1] }, computeSelect: function (t, e, n, i) { var r = this.pts[e], s = this.pts[n]; if (i.tempEnv1.init(r, s), n - e === 1) return i.select(this, e), null; if (!t.intersects(i.tempEnv1)) return null; var o = Math.trunc((e + n) / 2); o > e && this.computeSelect(t, e, o, i), n > o && this.computeSelect(t, o, n, i) }, getCoordinates: function () { for (var t = new Array(this.end - this.start + 1).fill(null), e = 0, n = this.start; n <= this.end; n++)t[e++] = this.pts[n]; return t }, computeOverlaps: function (t, e) { this.computeOverlapsInternal(this.start, this.end, t, t.start, t.end, e) }, setId: function (t) { this.id = t }, select: function (t, e) { this.computeSelect(t, this.start, this.end, e) }, getEnvelope: function () { if (null === this.env) { var t = this.pts[this.start], e = this.pts[this.end]; this.env = new C(t, e) } return this.env }, getEndIndex: function () { return this.end }, getStartIndex: function () { return this.start }, getContext: function () { return this.context }, getId: function () { return this.id }, computeOverlapsInternal: function (t, e, n, i, r, s) { var o = this.pts[t], a = this.pts[e], u = n.pts[i], l = n.pts[r]; if (e - t === 1 && r - i === 1) return s.overlap(this, t, n, i), null; if (s.tempEnv1.init(o, a), s.tempEnv2.init(u, l), !s.tempEnv1.intersects(s.tempEnv2)) return null; var h = Math.trunc((t + e) / 2), c = Math.trunc((i + r) / 2); h > t && (c > i && this.computeOverlapsInternal(t, h, n, i, c, s), r > c && this.computeOverlapsInternal(t, h, n, c, r, s)), e > h && (c > i && this.computeOverlapsInternal(h, e, n, i, c, s), r > c && this.computeOverlapsInternal(h, e, n, c, r, s)) }, interfaces_: function () { return [] }, getClass: function () { return Ke } }), e(Qe.prototype, { interfaces_: function () { return [] }, getClass: function () { return Qe } }), Qe.isNorthern = function (t) { return t === Qe.NE || t === Qe.NW }, Qe.isOpposite = function (t, e) { if (t === e) return !1; var n = (t - e + 4) % 4; return 2 === n }, Qe.commonHalfPlane = function (t, e) { if (t === e) return t; var n = (t - e + 4) % 4; if (2 === n) return -1; var i = e > t ? t : e, r = t > e ? t : e; return 0 === i && 3 === r ? 3 : i }, Qe.isInHalfPlane = function (t, e) { return e === Qe.SE ? t === Qe.SE || t === Qe.SW : t === e || t === e + 1 }, Qe.quadrant = function () { if ("number" == typeof arguments[0] && "number" == typeof arguments[1]) { var t = arguments[0], e = arguments[1]; if (0 === t && 0 === e) throw new i("Cannot compute the quadrant for point ( " + t + ", " + e + " )"); return t >= 0 ? e >= 0 ? Qe.NE : Qe.SE : e >= 0 ? Qe.NW : Qe.SW } if (arguments[0] instanceof f && arguments[1] instanceof f) { var n = arguments[0], r = arguments[1]; if (r.x === n.x && r.y === n.y) throw new i("Cannot compute the quadrant for two identical points " + n); return r.x >= n.x ? r.y >= n.y ? Qe.NE : Qe.SE : r.y >= n.y ? Qe.NW : Qe.SW } }, Qe.NE = 0, Qe.NW = 1, Qe.SW = 2, Qe.SE = 3, e($e.prototype, { interfaces_: function () { return [] }, getClass: function () { return $e } }), $e.getChainStartIndices = function (t) { var e = 0, n = new I; n.add(new P(e)); do { var i = $e.findChainEnd(t, e); n.add(new P(i)), e = i } while (e < t.length - 1); var r = $e.toIntArray(n); return r }, $e.findChainEnd = function (t, e) { for (var n = e; n < t.length - 1 && t[n].equals2D(t[n + 1]);)n++; if (n >= t.length - 1) return t.length - 1; for (var i = Qe.quadrant(t[n], t[n + 1]), r = e + 1; r < t.length;) { if (!t[r - 1].equals2D(t[r])) { var s = Qe.quadrant(t[r - 1], t[r]); if (s !== i) break } r++ } return r - 1 }, $e.getChains = function () { if (1 === arguments.length) { var t = arguments[0]; return $e.getChains(t, null) } if (2 === arguments.length) { for (var e = arguments[0], n = arguments[1], i = new I, r = $e.getChainStartIndices(e), s = 0; s < r.length - 1; s++) { var o = new Ke(e, r[s], r[s + 1], n); i.add(o) } return i } }, $e.toIntArray = function (t) { for (var e = new Array(t.size()).fill(null), n = 0; n < e.length; n++)e[n] = t.get(n).intValue(); return e }, e(tn.prototype, { computeNodes: function (t) { }, getNodedSubstrings: function () { }, interfaces_: function () { return [] }, getClass: function () { return tn } }), e(en.prototype, { setSegmentIntersector: function (t) { this.segInt = t }, interfaces_: function () { return [tn] }, getClass: function () { return en } }), h(nn, en), e(nn.prototype, { getMonotoneChains: function () { return this.monoChains }, getNodedSubstrings: function () { return Ze.getNodedSubstrings(this.nodedSegStrings) }, getIndex: function () { return this.index }, add: function (t) { for (var e = $e.getChains(t.getCoordinates(), t), n = e.iterator(); n.hasNext();) { var i = n.next(); i.setId(this.idCounter++), this.index.insert(i.getEnvelope(), i), this.monoChains.add(i) } }, computeNodes: function (t) { this.nodedSegStrings = t; for (var e = t.iterator(); e.hasNext();)this.add(e.next()); this.intersectChains() }, intersectChains: function () { for (var t = new rn(this.segInt), e = this.monoChains.iterator(); e.hasNext();)for (var n = e.next(), i = this.index.query(n.getEnvelope()), r = i.iterator(); r.hasNext();) { var s = r.next(); if (s.getId() > n.getId() && (n.computeOverlaps(s, t), this.nOverlaps++), this.segInt.isDone()) return null } }, interfaces_: function () { return [] }, getClass: function () { return nn } }), h(rn, Je), e(rn.prototype, { overlap: function () { if (4 !== arguments.length) return Je.prototype.overlap.apply(this, arguments); var t = arguments[0], e = arguments[1], n = arguments[2], i = arguments[3], r = t.getContext(), s = n.getContext(); this.si.processIntersections(r, e, s, i) }, interfaces_: function () { return [] }, getClass: function () { return rn } }), nn.SegmentOverlapAction = rn, h(sn, l), e(sn.prototype, { getCoordinate: function () { return this.pt }, interfaces_: function () { return [] }, getClass: function () { return sn } }), sn.msgWithCoord = function (t, e) { return null !== e ? t + " [ " + e + " ]" : t }, e(on.prototype, { processIntersections: function (t, e, n, i) { }, isDone: function () { }, interfaces_: function () { return [] }, getClass: function () { return on } }), e(an.prototype, { getInteriorIntersection: function () { return this.interiorIntersection }, setCheckEndSegmentsOnly: function (t) { this.isCheckEndSegmentsOnly = t }, getIntersectionSegments: function () { return this.intSegments }, count: function () { return this.intersectionCount }, getIntersections: function () { return this.intersections }, setFindAllIntersections: function (t) { this.findAllIntersections = t }, setKeepIntersections: function (t) { this.keepIntersections = t }, processIntersections: function (t, e, n, i) { if (!this.findAllIntersections && this.hasIntersection()) return null; if (t === n && e === i) return null; if (this.isCheckEndSegmentsOnly) { var r = this.isEndSegment(t, e) || this.isEndSegment(n, i); if (!r) return null } var s = t.getCoordinates()[e], o = t.getCoordinates()[e + 1], a = n.getCoordinates()[i], u = n.getCoordinates()[i + 1]; this.li.computeIntersection(s, o, a, u), this.li.hasIntersection() && this.li.isInteriorIntersection() && (this.intSegments = new Array(4).fill(null), this.intSegments[0] = s, this.intSegments[1] = o, this.intSegments[2] = a, this.intSegments[3] = u, this.interiorIntersection = this.li.getIntersection(0), this.keepIntersections && this.intersections.add(this.interiorIntersection), this.intersectionCount++) }, isEndSegment: function (t, e) { return 0 === e ? !0 : e >= t.size() - 2 }, hasIntersection: function () { return null !== this.interiorIntersection }, isDone: function () { return this.findAllIntersections ? !1 : null !== this.interiorIntersection }, interfaces_: function () { return [on] }, getClass: function () { return an } }), an.createAllIntersectionsFinder = function (t) { var e = new an(t); return e.setFindAllIntersections(!0), e }, an.createAnyIntersectionFinder = function (t) { return new an(t) }, an.createIntersectionCounter = function (t) { var e = new an(t); return e.setFindAllIntersections(!0), e.setKeepIntersections(!1), e }, e(un.prototype, { execute: function () { return null !== this.segInt ? null : void this.checkInteriorIntersections() }, getIntersections: function () { return this.segInt.getIntersections() }, isValid: function () { return this.execute(), this._isValid }, setFindAllIntersections: function (t) { this.findAllIntersections = t }, checkInteriorIntersections: function () { this._isValid = !0, this.segInt = new an(this.li), this.segInt.setFindAllIntersections(this.findAllIntersections); var t = new nn; return t.setSegmentIntersector(this.segInt), t.computeNodes(this.segStrings), this.segInt.hasIntersection() ? (this._isValid = !1, null) : void 0 }, checkValid: function () { if (this.execute(), !this._isValid) throw new sn(this.getErrorMessage(), this.segInt.getInteriorIntersection()) }, getErrorMessage: function () { if (this._isValid) return "no intersections found"; var t = this.segInt.getIntersectionSegments(); return "found non-noded intersection between " + se.toLineString(t[0], t[1]) + " and " + se.toLineString(t[2], t[3]) }, interfaces_: function () { return [] }, getClass: function () { return un } }), un.computeIntersections = function (t) { var e = new un(t); return e.setFindAllIntersections(!0), e.isValid(), e.getIntersections() }, e(ln.prototype, { checkValid: function () { this.nv.checkValid() }, interfaces_: function () { return [] }, getClass: function () { return ln } }), ln.toSegmentStrings = function (t) { for (var e = new I, n = t.iterator(); n.hasNext();) { var i = n.next(); e.add(new Oe(i.getCoordinates(), i)) } return e }, ln.checkValid = function (t) { var e = new ln(t); e.checkValid() }, e(hn.prototype, { map: function (t) { for (var e = new I, n = 0; n < t.getNumGeometries(); n++) { var i = this.mapOp.map(t.getGeometryN(n)); i.isEmpty() || e.add(i) } return t.getFactory().createGeometryCollection(ie.toGeometryArray(e)) }, interfaces_: function () { return [] }, getClass: function () { return hn } }), hn.map = function (t, e) { var n = new hn(e); return n.map(t) }, e(cn.prototype, { interfaces_: function () { return [] }, getClass: function () { return cn } }), cn.opposite = function (t) { return t === cn.LEFT ? cn.RIGHT : t === cn.RIGHT ? cn.LEFT : t }, cn.ON = 0, cn.LEFT = 1, cn.RIGHT = 2, e(gn.prototype, { setAllLocations: function (t) { for (var e = 0; e < this.location.length; e++)this.location[e] = t }, isNull: function () { for (var t = 0; t < this.location.length; t++)if (this.location[t] !== L.NONE) return !1; return !0 }, setAllLocationsIfNull: function (t) { for (var e = 0; e < this.location.length; e++)this.location[e] === L.NONE && (this.location[e] = t) }, isLine: function () { return 1 === this.location.length }, merge: function (t) { if (t.location.length > this.location.length) { var e = new Array(3).fill(null); e[cn.ON] = this.location[cn.ON], e[cn.LEFT] = L.NONE, e[cn.RIGHT] = L.NONE, this.location = e } for (var n = 0; n < this.location.length; n++)this.location[n] === L.NONE && n < t.location.length && (this.location[n] = t.location[n]) }, getLocations: function () { return this.location }, flip: function () { if (this.location.length <= 1) return null; var t = this.location[cn.LEFT]; this.location[cn.LEFT] = this.location[cn.RIGHT], this.location[cn.RIGHT] = t }, toString: function () { var t = new T; return this.location.length > 1 && t.append(L.toLocationSymbol(this.location[cn.LEFT])), t.append(L.toLocationSymbol(this.location[cn.ON])), this.location.length > 1 && t.append(L.toLocationSymbol(this.location[cn.RIGHT])), t.toString() }, setLocations: function (t, e, n) { this.location[cn.ON] = t, this.location[cn.LEFT] = e, this.location[cn.RIGHT] = n }, get: function (t) { return t < this.location.length ? this.location[t] : L.NONE }, isArea: function () { return this.location.length > 1 }, isAnyNull: function () { for (var t = 0; t < this.location.length; t++)if (this.location[t] === L.NONE) return !0; return !1 }, setLocation: function () { if (1 === arguments.length) { var t = arguments[0]; this.setLocation(cn.ON, t) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.location[e] = n } }, init: function (t) { this.location = new Array(t).fill(null), this.setAllLocations(L.NONE) }, isEqualOnSide: function (t, e) { return this.location[e] === t.location[e] }, allPositionsEqual: function (t) { for (var e = 0; e < this.location.length; e++)if (this.location[e] !== t) return !1; return !0 }, interfaces_: function () { return [] }, getClass: function () { return gn } }), e(fn.prototype, { getGeometryCount: function () { var t = 0; return this.elt[0].isNull() || t++ , this.elt[1].isNull() || t++ , t }, setAllLocations: function (t, e) { this.elt[t].setAllLocations(e) }, isNull: function (t) { return this.elt[t].isNull() }, setAllLocationsIfNull: function () { if (1 === arguments.length) { var t = arguments[0]; this.setAllLocationsIfNull(0, t), this.setAllLocationsIfNull(1, t) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.elt[e].setAllLocationsIfNull(n) } }, isLine: function (t) { return this.elt[t].isLine() }, merge: function (t) { for (var e = 0; 2 > e; e++)null === this.elt[e] && null !== t.elt[e] ? this.elt[e] = new gn(t.elt[e]) : this.elt[e].merge(t.elt[e]) }, flip: function () { this.elt[0].flip(), this.elt[1].flip() }, getLocation: function () { if (1 === arguments.length) { var t = arguments[0]; return this.elt[t].get(cn.ON) } if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return this.elt[e].get(n) } }, toString: function () { var t = new T; return null !== this.elt[0] && (t.append("A:"), t.append(this.elt[0].toString())), null !== this.elt[1] && (t.append(" B:"), t.append(this.elt[1].toString())), t.toString() }, isArea: function () { if (0 === arguments.length) return this.elt[0].isArea() || this.elt[1].isArea(); if (1 === arguments.length) { var t = arguments[0]; return this.elt[t].isArea() } }, isAnyNull: function (t) { return this.elt[t].isAnyNull() }, setLocation: function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; this.elt[t].setLocation(cn.ON, e) } else if (3 === arguments.length) { var n = arguments[0], i = arguments[1], r = arguments[2]; this.elt[n].setLocation(i, r) } }, isEqualOnSide: function (t, e) { return this.elt[0].isEqualOnSide(t.elt[0], e) && this.elt[1].isEqualOnSide(t.elt[1], e) }, allPositionsEqual: function (t, e) { return this.elt[t].allPositionsEqual(e) }, toLine: function (t) { this.elt[t].isArea() && (this.elt[t] = new gn(this.elt[t].location[0])) }, interfaces_: function () { return [] }, getClass: function () { return fn } }), fn.toLineLabel = function (t) { for (var e = new fn(L.NONE), n = 0; 2 > n; n++)e.setLocation(n, t.getLocation(n)); return e }, e(dn.prototype, { computeRing: function () { if (null !== this.ring) return null; for (var t = new Array(this.pts.size()).fill(null), e = 0; e < this.pts.size(); e++)t[e] = this.pts.get(e); this.ring = this.geometryFactory.createLinearRing(t), this._isHole = he.isCCW(this.ring.getCoordinates()) }, isIsolated: function () { return 1 === this.label.getGeometryCount() }, computePoints: function (t) { this.startDe = t; var e = t, n = !0; do { if (null === e) throw new sn("Found null DirectedEdge"); if (e.getEdgeRing() === this) throw new sn("Directed Edge visited twice during ring-building at " + e.getCoordinate()); this.edges.add(e); var i = e.getLabel(); g.isTrue(i.isArea()), this.mergeLabel(i), this.addPoints(e.getEdge(), e.isForward(), n), n = !1, this.setEdgeRing(e, this), e = this.getNext(e) } while (e !== this.startDe) }, getLinearRing: function () { return this.ring }, getCoordinate: function (t) { return this.pts.get(t) }, computeMaxNodeDegree: function () { this.maxNodeDegree = 0; var t = this.startDe; do { var e = t.getNode(), n = e.getEdges().getOutgoingDegree(this); n > this.maxNodeDegree && (this.maxNodeDegree = n), t = this.getNext(t) } while (t !== this.startDe); this.maxNodeDegree *= 2 }, addPoints: function (t, e, n) { var i = t.getCoordinates(); if (e) { var r = 1; n && (r = 0); for (var s = r; s < i.length; s++)this.pts.add(i[s]) } else { var r = i.length - 2; n && (r = i.length - 1); for (var s = r; s >= 0; s--)this.pts.add(i[s]) } }, isHole: function () { return this._isHole }, setInResult: function () { var t = this.startDe; do t.getEdge().setInResult(!0), t = t.getNext(); while (t !== this.startDe) }, containsPoint: function (t) { var e = this.getLinearRing(), n = e.getEnvelopeInternal(); if (!n.contains(t)) return !1; if (!he.isPointInRing(t, e.getCoordinates())) return !1; for (var i = this.holes.iterator(); i.hasNext();) { var r = i.next(); if (r.containsPoint(t)) return !1 } return !0 }, addHole: function (t) { this.holes.add(t) }, isShell: function () { return null === this.shell }, getLabel: function () { return this.label }, getEdges: function () { return this.edges }, getMaxNodeDegree: function () { return this.maxNodeDegree < 0 && this.computeMaxNodeDegree(), this.maxNodeDegree }, getShell: function () { return this.shell }, mergeLabel: function () { if (1 === arguments.length) { var t = arguments[0]; this.mergeLabel(t, 0), this.mergeLabel(t, 1) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1], i = e.getLocation(n, cn.RIGHT); if (i === L.NONE) return null; if (this.label.getLocation(n) === L.NONE) return this.label.setLocation(n, i), null } }, setShell: function (t) { this.shell = t, null !== t && t.addHole(this) }, toPolygon: function (t) { for (var e = new Array(this.holes.size()).fill(null), n = 0; n < this.holes.size(); n++)e[n] = this.holes.get(n).getLinearRing(); var i = t.createPolygon(this.getLinearRing(), e); return i }, interfaces_: function () { return [] }, getClass: function () { return dn } }), h(mn, dn), e(mn.prototype, { setEdgeRing: function (t, e) { t.setMinEdgeRing(e) }, getNext: function (t) { return t.getNextMin() }, interfaces_: function () { return [] }, getClass: function () { return mn } }), h(pn, dn), e(pn.prototype, { buildMinimalRings: function () { var t = new I, e = this.startDe; do { if (null === e.getMinEdgeRing()) { var n = new mn(e, this.geometryFactory); t.add(n) } e = e.getNext() } while (e !== this.startDe); return t }, setEdgeRing: function (t, e) { t.setEdgeRing(e) }, linkDirectedEdgesForMinimalEdgeRings: function () { var t = this.startDe; do { var e = t.getNode(); e.getEdges().linkMinimalDirectedEdges(this), t = t.getNext() } while (t !== this.startDe) }, getNext: function (t) { return t.getNext() }, interfaces_: function () { return [] }, getClass: function () { return pn } }), e(vn.prototype, { setVisited: function (t) { this._isVisited = t }, setInResult: function (t) { this._isInResult = t }, isCovered: function () { return this._isCovered }, isCoveredSet: function () { return this._isCoveredSet }, setLabel: function (t) { this.label = t }, getLabel: function () { return this.label }, setCovered: function (t) { this._isCovered = t, this._isCoveredSet = !0 }, updateIM: function (t) { g.isTrue(this.label.getGeometryCount() >= 2, "found partial label"), this.computeIM(t) }, isInResult: function () { return this._isInResult }, isVisited: function () { return this._isVisited }, interfaces_: function () { return [] }, getClass: function () { return vn } }), h(yn, vn), e(yn.prototype, { isIncidentEdgeInResult: function () { for (var t = this.getEdges().getEdges().iterator(); t.hasNext();) { var e = t.next(); if (e.getEdge().isInResult()) return !0 } return !1 }, isIsolated: function () { return 1 === this.label.getGeometryCount() }, getCoordinate: function () { return this.coord }, print: function (t) { t.println("node " + this.coord + " lbl: " + this.label) }, computeIM: function (t) { }, computeMergedLocation: function (t, e) { var n = L.NONE; if (n = this.label.getLocation(e), !t.isNull(e)) { var i = t.getLocation(e); n !== L.BOUNDARY && (n = i) } return n }, setLabel: function () { if (2 !== arguments.length) return vn.prototype.setLabel.apply(this, arguments); var t = arguments[0], e = arguments[1]; null === this.label ? this.label = new fn(t, e) : this.label.setLocation(t, e) }, getEdges: function () { return this.edges }, mergeLabel: function () { if (arguments[0] instanceof yn) { var t = arguments[0]; this.mergeLabel(t.label) } else if (arguments[0] instanceof fn) for (var e = arguments[0], n = 0; 2 > n; n++) { var i = this.computeMergedLocation(e, n), r = this.label.getLocation(n); r === L.NONE && this.label.setLocation(n, i) } }, add: function (t) { this.edges.insert(t), t.setNode(this) }, setLabelBoundary: function (t) { if (null === this.label) return null; var e = L.NONE; null !== this.label && (e = this.label.getLocation(t)); var n = null; switch (e) { case L.BOUNDARY: n = L.INTERIOR; break; case L.INTERIOR: n = L.BOUNDARY; break; default: n = L.BOUNDARY }this.label.setLocation(t, n) }, interfaces_: function () { return [] }, getClass: function () { return yn } }), e(xn.prototype, { find: function (t) { return this.nodeMap.get(t) }, addNode: function () { if (arguments[0] instanceof f) { var t = arguments[0], e = this.nodeMap.get(t); return null === e && (e = this.nodeFact.createNode(t), this.nodeMap.put(t, e)), e } if (arguments[0] instanceof yn) { var n = arguments[0], e = this.nodeMap.get(n.getCoordinate()); return null === e ? (this.nodeMap.put(n.getCoordinate(), n), n) : (e.mergeLabel(n), e) } }, print: function (t) { for (var e = this.iterator(); e.hasNext();) { var n = e.next(); n.print(t) } }, iterator: function () { return this.nodeMap.values().iterator() }, values: function () { return this.nodeMap.values() }, getBoundaryNodes: function (t) { for (var e = new I, n = this.iterator(); n.hasNext();) { var i = n.next(); i.getLabel().getLocation(t) === L.BOUNDARY && e.add(i) } return e }, add: function (t) { var e = t.getCoordinate(), n = this.addNode(e); n.add(t) }, interfaces_: function () { return [] }, getClass: function () { return xn } }), e(En.prototype, { compareDirection: function (t) { return this.dx === t.dx && this.dy === t.dy ? 0 : this.quadrant > t.quadrant ? 1 : this.quadrant < t.quadrant ? -1 : he.computeOrientation(t.p0, t.p1, this.p1) }, getDy: function () { return this.dy }, getCoordinate: function () { return this.p0 }, setNode: function (t) { this.node = t }, print: function (t) { var e = Math.atan2(this.dy, this.dx), n = this.getClass().getName(), i = n.lastIndexOf("."), r = n.substring(i + 1); t.print(" " + r + ": " + this.p0 + " - " + this.p1 + " " + this.quadrant + ":" + e + " " + this.label) }, compareTo: function (t) { var e = t; return this.compareDirection(e) }, getDirectedCoordinate: function () { return this.p1 }, getDx: function () { return this.dx }, getLabel: function () { return this.label }, getEdge: function () { return this.edge }, getQuadrant: function () { return this.quadrant }, getNode: function () { return this.node }, toString: function () { var t = Math.atan2(this.dy, this.dx), e = this.getClass().getName(), n = e.lastIndexOf("."), i = e.substring(n + 1); return " " + i + ": " + this.p0 + " - " + this.p1 + " " + this.quadrant + ":" + t + " " + this.label }, computeLabel: function (t) { }, init: function (t, e) { this.p0 = t, this.p1 = e, this.dx = e.x - t.x, this.dy = e.y - t.y, this.quadrant = Qe.quadrant(this.dx, this.dy), g.isTrue(!(0 === this.dx && 0 === this.dy), "EdgeEnd with identical endpoints found") }, interfaces_: function () { return [s] }, getClass: function () { return En } }), h(In, En), e(In.prototype, { + getNextMin: function () { return this.nextMin }, getDepth: function (t) { return this.depth[t] }, setVisited: function (t) { this._isVisited = t }, computeDirectedLabel: function () { this.label = new fn(this.edge.getLabel()), this._isForward || this.label.flip() }, getNext: function () { return this.next }, setDepth: function (t, e) { if (-999 !== this.depth[t] && this.depth[t] !== e) throw new sn("assigned depths do not match", this.getCoordinate()); this.depth[t] = e }, isInteriorAreaEdge: function qo() { for (var qo = !0, t = 0; 2 > t; t++)this.label.isArea(t) && this.label.getLocation(t, cn.LEFT) === L.INTERIOR && this.label.getLocation(t, cn.RIGHT) === L.INTERIOR || (qo = !1); return qo }, setNextMin: function (t) { this.nextMin = t }, print: function (t) { En.prototype.print.call(this, t), t.print(" " + this.depth[cn.LEFT] + "/" + this.depth[cn.RIGHT]), t.print(" (" + this.getDepthDelta() + ")"), this._isInResult && t.print(" inResult") }, setMinEdgeRing: function (t) { this.minEdgeRing = t }, isLineEdge: function () { + var t = this.label.isLine(0) || this.label.isLine(1), e = !this.label.isArea(0) || this.label.allPositionsEqual(0, L.EXTERIOR), n = !this.label.isArea(1) || this.label.allPositionsEqual(1, L.EXTERIOR); return t && e && n; + }, setEdgeRing: function (t) { this.edgeRing = t }, getMinEdgeRing: function () { return this.minEdgeRing }, getDepthDelta: function () { var t = this.edge.getDepthDelta(); return this._isForward || (t = -t), t }, setInResult: function (t) { this._isInResult = t }, getSym: function () { return this.sym }, isForward: function () { return this._isForward }, getEdge: function () { return this.edge }, printEdge: function (t) { this.print(t), t.print(" "), this._isForward ? this.edge.print(t) : this.edge.printReverse(t) }, setSym: function (t) { this.sym = t }, setVisitedEdge: function (t) { this.setVisited(t), this.sym.setVisited(t) }, setEdgeDepths: function (t, e) { var n = this.getEdge().getDepthDelta(); this._isForward || (n = -n); var i = 1; t === cn.LEFT && (i = -1); var r = cn.opposite(t), s = n * i, o = e + s; this.setDepth(t, e), this.setDepth(r, o) }, getEdgeRing: function () { return this.edgeRing }, isInResult: function () { return this._isInResult }, setNext: function (t) { this.next = t }, isVisited: function () { return this._isVisited }, interfaces_: function () { return [] }, getClass: function () { return In } + }), In.depthFactor = function (t, e) { return t === L.EXTERIOR && e === L.INTERIOR ? 1 : t === L.INTERIOR && e === L.EXTERIOR ? -1 : 0 }, e(Nn.prototype, { createNode: function (t) { return new yn(t, null) }, interfaces_: function () { return [] }, getClass: function () { return Nn } }), e(Cn.prototype, { printEdges: function (t) { t.println("Edges:"); for (var e = 0; e < this.edges.size(); e++) { t.println("edge " + e + ":"); var n = this.edges.get(e); n.print(t), n.eiList.print(t) } }, find: function (t) { return this.nodes.find(t) }, addNode: function () { if (arguments[0] instanceof yn) { var t = arguments[0]; return this.nodes.addNode(t) } if (arguments[0] instanceof f) { var e = arguments[0]; return this.nodes.addNode(e) } }, getNodeIterator: function () { return this.nodes.iterator() }, linkResultDirectedEdges: function () { for (var t = this.nodes.iterator(); t.hasNext();) { var e = t.next(); e.getEdges().linkResultDirectedEdges() } }, debugPrintln: function (t) { D.out.println(t) }, isBoundaryNode: function (t, e) { var n = this.nodes.find(e); if (null === n) return !1; var i = n.getLabel(); return null !== i && i.getLocation(t) === L.BOUNDARY }, linkAllDirectedEdges: function () { for (var t = this.nodes.iterator(); t.hasNext();) { var e = t.next(); e.getEdges().linkAllDirectedEdges() } }, matchInSameDirection: function (t, e, n, i) { return t.equals(n) ? he.computeOrientation(t, e, i) === he.COLLINEAR && Qe.quadrant(t, e) === Qe.quadrant(n, i) : !1 }, getEdgeEnds: function () { return this.edgeEndList }, debugPrint: function (t) { D.out.print(t) }, getEdgeIterator: function () { return this.edges.iterator() }, findEdgeInSameDirection: function (t, e) { for (var n = 0; n < this.edges.size(); n++) { var i = this.edges.get(n), r = i.getCoordinates(); if (this.matchInSameDirection(t, e, r[0], r[1])) return i; if (this.matchInSameDirection(t, e, r[r.length - 1], r[r.length - 2])) return i } return null }, insertEdge: function (t) { this.edges.add(t) }, findEdgeEnd: function (t) { for (var e = this.getEdgeEnds().iterator(); e.hasNext();) { var n = e.next(); if (n.getEdge() === t) return n } return null }, addEdges: function (t) { for (var e = t.iterator(); e.hasNext();) { var n = e.next(); this.edges.add(n); var i = new In(n, !0), r = new In(n, !1); i.setSym(r), r.setSym(i), this.add(i), this.add(r) } }, add: function (t) { this.nodes.add(t), this.edgeEndList.add(t) }, getNodes: function () { return this.nodes.values() }, findEdge: function (t, e) { for (var n = 0; n < this.edges.size(); n++) { var i = this.edges.get(n), r = i.getCoordinates(); if (t.equals(r[0]) && e.equals(r[1])) return i } return null }, interfaces_: function () { return [] }, getClass: function () { return Cn } }), Cn.linkResultDirectedEdges = function (t) { for (var e = t.iterator(); e.hasNext();) { var n = e.next(); n.getEdges().linkResultDirectedEdges() } }, e(wn.prototype, { sortShellsAndHoles: function (t, e, n) { for (var i = t.iterator(); i.hasNext();) { var r = i.next(); r.isHole() ? n.add(r) : e.add(r) } }, computePolygons: function (t) { for (var e = new I, n = t.iterator(); n.hasNext();) { var i = n.next(), r = i.toPolygon(this.geometryFactory); e.add(r) } return e }, placeFreeHoles: function (t, e) { for (var n = e.iterator(); n.hasNext();) { var i = n.next(); if (null === i.getShell()) { var r = this.findEdgeRingContaining(i, t); if (null === r) throw new sn("unable to assign hole to a shell", i.getCoordinate(0)); i.setShell(r) } } }, buildMinimalEdgeRings: function (t, e, n) { for (var i = new I, r = t.iterator(); r.hasNext();) { var s = r.next(); if (s.getMaxNodeDegree() > 2) { s.linkDirectedEdgesForMinimalEdgeRings(); var o = s.buildMinimalRings(), a = this.findShell(o); null !== a ? (this.placePolygonHoles(a, o), e.add(a)) : n.addAll(o) } else i.add(s) } return i }, containsPoint: function (t) { for (var e = this.shellList.iterator(); e.hasNext();) { var n = e.next(); if (n.containsPoint(t)) return !0 } return !1 }, buildMaximalEdgeRings: function (t) { for (var e = new I, n = t.iterator(); n.hasNext();) { var i = n.next(); if (i.isInResult() && i.getLabel().isArea() && null === i.getEdgeRing()) { var r = new pn(i, this.geometryFactory); e.add(r), r.setInResult() } } return e }, placePolygonHoles: function (t, e) { for (var n = e.iterator(); n.hasNext();) { var i = n.next(); i.isHole() && i.setShell(t) } }, getPolygons: function () { var t = this.computePolygons(this.shellList); return t }, findEdgeRingContaining: function (t, e) { for (var n = t.getLinearRing(), i = n.getEnvelopeInternal(), r = n.getCoordinateN(0), s = null, o = null, a = e.iterator(); a.hasNext();) { var u = a.next(), l = u.getLinearRing(), h = l.getEnvelopeInternal(); null !== s && (o = s.getLinearRing().getEnvelopeInternal()); var c = !1; h.contains(i) && he.isPointInRing(r, l.getCoordinates()) && (c = !0), c && (null === s || o.contains(h)) && (s = u) } return s }, findShell: function (t) { for (var e = 0, n = null, i = t.iterator(); i.hasNext();) { var r = i.next(); r.isHole() || (n = r, e++) } return g.isTrue(1 >= e, "found two shells in MinimalEdgeRing list"), n }, add: function () { if (1 === arguments.length) { var t = arguments[0]; this.add(t.getEdgeEnds(), t.getNodes()) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; Cn.linkResultDirectedEdges(n); var i = this.buildMaximalEdgeRings(e), r = new I, s = this.buildMinimalEdgeRings(i, this.shellList, r); this.sortShellsAndHoles(s, this.shellList, r), this.placeFreeHoles(this.shellList, r) } }, interfaces_: function () { return [] }, getClass: function () { return wn } }), e(Sn.prototype, { collectLines: function (t) { for (var e = this.op.getGraph().getEdgeEnds().iterator(); e.hasNext();) { var n = e.next(); this.collectLineEdge(n, t, this.lineEdgesList), this.collectBoundaryTouchEdge(n, t, this.lineEdgesList) } }, labelIsolatedLine: function (t, e) { var n = this.ptLocator.locate(t.getCoordinate(), this.op.getArgGeometry(e)); t.getLabel().setLocation(e, n) }, build: function (t) { return this.findCoveredLineEdges(), this.collectLines(t), this.buildLines(t), this.resultLineList }, collectLineEdge: function (t, e, n) { var i = t.getLabel(), r = t.getEdge(); t.isLineEdge() && (t.isVisited() || !ii.isResultOfOp(i, e) || r.isCovered() || (n.add(r), t.setVisitedEdge(!0))) }, findCoveredLineEdges: function () { for (var t = this.op.getGraph().getNodes().iterator(); t.hasNext();) { var e = t.next(); e.getEdges().findCoveredLineEdges() } for (var n = this.op.getGraph().getEdgeEnds().iterator(); n.hasNext();) { var i = n.next(), r = i.getEdge(); if (i.isLineEdge() && !r.isCoveredSet()) { var s = this.op.isCoveredByA(i.getCoordinate()); r.setCovered(s) } } }, labelIsolatedLines: function (t) { for (var e = t.iterator(); e.hasNext();) { var n = e.next(), i = n.getLabel(); n.isIsolated() && (i.isNull(0) ? this.labelIsolatedLine(n, 0) : this.labelIsolatedLine(n, 1)) } }, buildLines: function (t) { for (var e = this.lineEdgesList.iterator(); e.hasNext();) { var n = e.next(), i = (n.getLabel(), this.geometryFactory.createLineString(n.getCoordinates())); this.resultLineList.add(i), n.setInResult(!0) } }, collectBoundaryTouchEdge: function (t, e, n) { var i = t.getLabel(); return t.isLineEdge() ? null : t.isVisited() ? null : t.isInteriorAreaEdge() ? null : t.getEdge().isInResult() ? null : (g.isTrue(!(t.isInResult() || t.getSym().isInResult()) || !t.getEdge().isInResult()), void (ii.isResultOfOp(i, e) && e === ii.INTERSECTION && (n.add(t.getEdge()), t.setVisitedEdge(!0)))) }, interfaces_: function () { return [] }, getClass: function () { return Sn } }), e(Ln.prototype, { filterCoveredNodeToPoint: function (t) { var e = t.getCoordinate(); if (!this.op.isCoveredByLA(e)) { var n = this.geometryFactory.createPoint(e); this.resultPointList.add(n) } }, extractNonCoveredResultNodes: function (t) { for (var e = this.op.getGraph().getNodes().iterator(); e.hasNext();) { var n = e.next(); if (!(n.isInResult() || n.isIncidentEdgeInResult() || 0 !== n.getEdges().getDegree() && t !== ii.INTERSECTION)) { var i = n.getLabel(); ii.isResultOfOp(i, t) && this.filterCoveredNodeToPoint(n) } } }, build: function (t) { return this.extractNonCoveredResultNodes(t), this.resultPointList }, interfaces_: function () { return [] }, getClass: function () { return Ln } }), e(Rn.prototype, { locate: function (t) { }, interfaces_: function () { return [] }, getClass: function () { return Rn } }), e(bn.prototype, { locate: function (t) { return bn.locate(t, this.geom) }, interfaces_: function () { return [Rn] }, getClass: function () { return bn } }), bn.isPointInRing = function (t, e) { return e.getEnvelopeInternal().intersects(t) ? he.isPointInRing(t, e.getCoordinates()) : !1 }, bn.containsPointInPolygon = function (t, e) { if (e.isEmpty()) return !1; var n = e.getExteriorRing(); if (!bn.isPointInRing(t, n)) return !1; for (var i = 0; i < e.getNumInteriorRing(); i++) { var r = e.getInteriorRingN(i); if (bn.isPointInRing(t, r)) return !1 } return !0 }, bn.containsPoint = function (t, e) { if (e instanceof bt) return bn.containsPointInPolygon(t, e); if (e instanceof gt) for (var n = new Re(e); n.hasNext();) { var i = n.next(); if (i !== e && bn.containsPoint(t, i)) return !0 } return !1 }, bn.locate = function (t, e) { return e.isEmpty() ? L.EXTERIOR : bn.containsPoint(t, e) ? L.INTERIOR : L.EXTERIOR }, e(Tn.prototype, { getNextCW: function (t) { this.getEdges(); var e = this.edgeList.indexOf(t), n = e - 1; return 0 === e && (n = this.edgeList.size() - 1), this.edgeList.get(n) }, propagateSideLabels: function (t) { for (var e = L.NONE, n = this.iterator(); n.hasNext();) { var i = n.next(), r = i.getLabel(); r.isArea(t) && r.getLocation(t, cn.LEFT) !== L.NONE && (e = r.getLocation(t, cn.LEFT)) } if (e === L.NONE) return null; for (var s = e, n = this.iterator(); n.hasNext();) { var i = n.next(), r = i.getLabel(); if (r.getLocation(t, cn.ON) === L.NONE && r.setLocation(t, cn.ON, s), r.isArea(t)) { var o = r.getLocation(t, cn.LEFT), a = r.getLocation(t, cn.RIGHT); if (a !== L.NONE) { if (a !== s) throw new sn("side location conflict", i.getCoordinate()); o === L.NONE && g.shouldNeverReachHere("found single null side (at " + i.getCoordinate() + ")"), s = o } else g.isTrue(r.getLocation(t, cn.LEFT) === L.NONE, "found single null side"), r.setLocation(t, cn.RIGHT, s), r.setLocation(t, cn.LEFT, s) } } }, getCoordinate: function () { var t = this.iterator(); if (!t.hasNext()) return null; var e = t.next(); return e.getCoordinate() }, print: function (t) { D.out.println("EdgeEndStar: " + this.getCoordinate()); for (var e = this.iterator(); e.hasNext();) { var n = e.next(); n.print(t) } }, isAreaLabelsConsistent: function (t) { return this.computeEdgeEndLabels(t.getBoundaryNodeRule()), this.checkAreaLabelsConsistent(0) }, checkAreaLabelsConsistent: function (t) { var e = this.getEdges(); if (e.size() <= 0) return !0; var n = e.size() - 1, i = e.get(n).getLabel(), r = i.getLocation(t, cn.LEFT); g.isTrue(r !== L.NONE, "Found unlabelled area edge"); for (var s = r, o = this.iterator(); o.hasNext();) { var a = o.next(), u = a.getLabel(); g.isTrue(u.isArea(t), "Found non-area edge"); var l = u.getLocation(t, cn.LEFT), h = u.getLocation(t, cn.RIGHT); if (l === h) return !1; if (h !== s) return !1; s = l } return !0 }, findIndex: function (t) { this.iterator(); for (var e = 0; e < this.edgeList.size(); e++) { var n = this.edgeList.get(e); if (n === t) return e } return -1 }, iterator: function () { return this.getEdges().iterator() }, getEdges: function () { return null === this.edgeList && (this.edgeList = new I(this.edgeMap.values())), this.edgeList }, getLocation: function (t, e, n) { return this.ptInAreaLocation[t] === L.NONE && (this.ptInAreaLocation[t] = bn.locate(e, n[t].getGeometry())), this.ptInAreaLocation[t] }, toString: function () { var t = new T; t.append("EdgeEndStar: " + this.getCoordinate()), t.append("\n"); for (var e = this.iterator(); e.hasNext();) { var n = e.next(); t.append(n), t.append("\n") } return t.toString() }, computeEdgeEndLabels: function (t) { for (var e = this.iterator(); e.hasNext();) { var n = e.next(); n.computeLabel(t) } }, computeLabelling: function (t) { this.computeEdgeEndLabels(t[0].getBoundaryNodeRule()), this.propagateSideLabels(0), this.propagateSideLabels(1); for (var e = [!1, !1], n = this.iterator(); n.hasNext();)for (var i = n.next(), r = i.getLabel(), s = 0; 2 > s; s++)r.isLine(s) && r.getLocation(s) === L.BOUNDARY && (e[s] = !0); for (var n = this.iterator(); n.hasNext();)for (var i = n.next(), r = i.getLabel(), s = 0; 2 > s; s++)if (r.isAnyNull(s)) { var o = L.NONE; if (e[s]) o = L.EXTERIOR; else { var a = i.getCoordinate(); o = this.getLocation(s, a, t) } r.setAllLocationsIfNull(s, o) } }, getDegree: function () { return this.edgeMap.size() }, insertEdgeEnd: function (t, e) { this.edgeMap.put(t, e), this.edgeList = null }, interfaces_: function () { return [] }, getClass: function () { return Tn } }), h(Pn, Tn), e(Pn.prototype, { linkResultDirectedEdges: function () { this.getResultAreaEdges(); for (var t = null, e = null, n = this.SCANNING_FOR_INCOMING, i = 0; i < this.resultAreaEdgeList.size(); i++) { var r = this.resultAreaEdgeList.get(i), s = r.getSym(); if (r.getLabel().isArea()) switch (null === t && r.isInResult() && (t = r), n) { case this.SCANNING_FOR_INCOMING: if (!s.isInResult()) continue; e = s, n = this.LINKING_TO_OUTGOING; break; case this.LINKING_TO_OUTGOING: if (!r.isInResult()) continue; e.setNext(r), n = this.SCANNING_FOR_INCOMING } } if (n === this.LINKING_TO_OUTGOING) { if (null === t) throw new sn("no outgoing dirEdge found", this.getCoordinate()); g.isTrue(t.isInResult(), "unable to link last incoming dirEdge"), e.setNext(t) } }, insert: function (t) { var e = t; this.insertEdgeEnd(e, e) }, getRightmostEdge: function () { var t = this.getEdges(), e = t.size(); if (1 > e) return null; var n = t.get(0); if (1 === e) return n; var i = t.get(e - 1), r = n.getQuadrant(), s = i.getQuadrant(); return Qe.isNorthern(r) && Qe.isNorthern(s) ? n : Qe.isNorthern(r) || Qe.isNorthern(s) ? 0 !== n.getDy() ? n : 0 !== i.getDy() ? i : (g.shouldNeverReachHere("found two horizontal edges incident on node"), null) : i }, print: function (t) { D.out.println("DirectedEdgeStar: " + this.getCoordinate()); for (var e = this.iterator(); e.hasNext();) { var n = e.next(); t.print("out "), n.print(t), t.println(), t.print("in "), n.getSym().print(t), t.println() } }, getResultAreaEdges: function () { if (null !== this.resultAreaEdgeList) return this.resultAreaEdgeList; this.resultAreaEdgeList = new I; for (var t = this.iterator(); t.hasNext();) { var e = t.next(); (e.isInResult() || e.getSym().isInResult()) && this.resultAreaEdgeList.add(e) } return this.resultAreaEdgeList }, updateLabelling: function (t) { for (var e = this.iterator(); e.hasNext();) { var n = e.next(), i = n.getLabel(); i.setAllLocationsIfNull(0, t.getLocation(0)), i.setAllLocationsIfNull(1, t.getLocation(1)) } }, linkAllDirectedEdges: function () { this.getEdges(); for (var t = null, e = null, n = this.edgeList.size() - 1; n >= 0; n--) { var i = this.edgeList.get(n), r = i.getSym(); null === e && (e = r), null !== t && r.setNext(t), t = i } e.setNext(t) }, computeDepths: function () { if (1 === arguments.length) { var t = arguments[0], e = this.findIndex(t), n = (t.getLabel(), t.getDepth(cn.LEFT)), i = t.getDepth(cn.RIGHT), r = this.computeDepths(e + 1, this.edgeList.size(), n), s = this.computeDepths(0, e, r); if (s !== i) throw new sn("depth mismatch at " + t.getCoordinate()) } else if (3 === arguments.length) { for (var o = arguments[0], a = arguments[1], u = arguments[2], l = u, h = o; a > h; h++) { var c = this.edgeList.get(h); c.getLabel(), c.setEdgeDepths(cn.RIGHT, l), l = c.getDepth(cn.LEFT) } return l } }, mergeSymLabels: function () { for (var t = this.iterator(); t.hasNext();) { var e = t.next(), n = e.getLabel(); n.merge(e.getSym().getLabel()) } }, linkMinimalDirectedEdges: function (t) { for (var e = null, n = null, i = this.SCANNING_FOR_INCOMING, r = this.resultAreaEdgeList.size() - 1; r >= 0; r--) { var s = this.resultAreaEdgeList.get(r), o = s.getSym(); switch (null === e && s.getEdgeRing() === t && (e = s), i) { case this.SCANNING_FOR_INCOMING: if (o.getEdgeRing() !== t) continue; n = o, i = this.LINKING_TO_OUTGOING; break; case this.LINKING_TO_OUTGOING: if (s.getEdgeRing() !== t) continue; n.setNextMin(s), i = this.SCANNING_FOR_INCOMING } } i === this.LINKING_TO_OUTGOING && (g.isTrue(null !== e, "found null for first outgoing dirEdge"), g.isTrue(e.getEdgeRing() === t, "unable to link last incoming dirEdge"), n.setNextMin(e)) }, getOutgoingDegree: function () { if (0 === arguments.length) { for (var t = 0, e = this.iterator(); e.hasNext();) { var n = e.next(); n.isInResult() && t++ } return t } if (1 === arguments.length) { for (var i = arguments[0], t = 0, e = this.iterator(); e.hasNext();) { var n = e.next(); n.getEdgeRing() === i && t++ } return t } }, getLabel: function () { return this.label }, findCoveredLineEdges: function () { for (var t = L.NONE, e = this.iterator(); e.hasNext();) { var n = e.next(), i = n.getSym(); if (!n.isLineEdge()) { if (n.isInResult()) { t = L.INTERIOR; break } if (i.isInResult()) { t = L.EXTERIOR; break } } } if (t === L.NONE) return null; for (var r = t, e = this.iterator(); e.hasNext();) { var n = e.next(), i = n.getSym(); n.isLineEdge() ? n.getEdge().setCovered(r === L.INTERIOR) : (n.isInResult() && (r = L.EXTERIOR), i.isInResult() && (r = L.INTERIOR)) } }, computeLabelling: function (t) { Tn.prototype.computeLabelling.call(this, t), this.label = new fn(L.NONE); for (var e = this.iterator(); e.hasNext();)for (var n = e.next(), i = n.getEdge(), r = i.getLabel(), s = 0; 2 > s; s++) { var o = r.getLocation(s); o !== L.INTERIOR && o !== L.BOUNDARY || this.label.setLocation(s, L.INTERIOR) } }, interfaces_: function () { return [] }, getClass: function () { return Pn } }), h(On, Nn), e(On.prototype, { createNode: function (t) { return new yn(t, new Pn) }, interfaces_: function () { return [] }, getClass: function () { return On } }), e(Mn.prototype, { computeIntersections: function (t, e) { this.mce.computeIntersectsForChain(this.chainIndex, t.mce, t.chainIndex, e) }, interfaces_: function () { return [] }, getClass: function () { return Mn } }), e(_n.prototype, { isDelete: function () { return this.eventType === _n.DELETE }, setDeleteEventIndex: function (t) { this.deleteEventIndex = t }, getObject: function () { return this.obj }, compareTo: function (t) { var e = t; return this.xValue < e.xValue ? -1 : this.xValue > e.xValue ? 1 : this.eventType < e.eventType ? -1 : this.eventType > e.eventType ? 1 : 0 }, getInsertEvent: function () { return this.insertEvent }, isInsert: function () { return this.eventType === _n.INSERT }, isSameLabel: function (t) { return null === this.label ? !1 : this.label === t.label }, getDeleteEventIndex: function () { return this.deleteEventIndex }, interfaces_: function () { return [s] }, getClass: function () { return _n } }), _n.INSERT = 1, _n.DELETE = 2, e(An.prototype, { interfaces_: function () { return [] }, getClass: function () { return An } }), e(Dn.prototype, { isTrivialIntersection: function (t, e, n, i) { if (t === n && 1 === this.li.getIntersectionNum()) { if (Dn.isAdjacentSegments(e, i)) return !0; if (t.isClosed()) { var r = t.getNumPoints() - 1; if (0 === e && i === r || 0 === i && e === r) return !0 } } return !1 }, getProperIntersectionPoint: function () { return this.properIntersectionPoint }, setIsDoneIfProperInt: function (t) { this.isDoneWhenProperInt = t }, hasProperInteriorIntersection: function () { return this.hasProperInterior }, isBoundaryPointInternal: function (t, e) { for (var n = e.iterator(); n.hasNext();) { var i = n.next(), r = i.getCoordinate(); if (t.isIntersection(r)) return !0 } return !1 }, hasProperIntersection: function () { return this.hasProper }, hasIntersection: function () { return this._hasIntersection }, isDone: function () { return this._isDone }, isBoundaryPoint: function (t, e) { return null === e ? !1 : this.isBoundaryPointInternal(t, e[0]) ? !0 : !!this.isBoundaryPointInternal(t, e[1]) }, setBoundaryNodes: function (t, e) { this.bdyNodes = new Array(2).fill(null), this.bdyNodes[0] = t, this.bdyNodes[1] = e }, addIntersections: function (t, e, n, i) { if (t === n && e === i) return null; this.numTests++; var r = t.getCoordinates()[e], s = t.getCoordinates()[e + 1], o = n.getCoordinates()[i], a = n.getCoordinates()[i + 1]; this.li.computeIntersection(r, s, o, a), this.li.hasIntersection() && (this.recordIsolated && (t.setIsolated(!1), n.setIsolated(!1)), this.numIntersections++ , this.isTrivialIntersection(t, e, n, i) || (this._hasIntersection = !0, !this.includeProper && this.li.isProper() || (t.addIntersections(this.li, e, 0), n.addIntersections(this.li, i, 1)), this.li.isProper() && (this.properIntersectionPoint = this.li.getIntersection(0).copy(), this.hasProper = !0, this.isDoneWhenProperInt && (this._isDone = !0), this.isBoundaryPoint(this.li, this.bdyNodes) || (this.hasProperInterior = !0)))) }, interfaces_: function () { return [] }, getClass: function () { return Dn } }), Dn.isAdjacentSegments = function (t, e) { return 1 === Math.abs(t - e) }, h(Fn, An), e(Fn.prototype, { prepareEvents: function () { ho.sort(this.events); for (var t = 0; t < this.events.size(); t++) { var e = this.events.get(t); e.isDelete() && e.getInsertEvent().setDeleteEventIndex(t) } }, computeIntersections: function () { if (1 === arguments.length) { var t = arguments[0]; this.nOverlaps = 0, this.prepareEvents(); for (var e = 0; e < this.events.size(); e++) { var n = this.events.get(e); if (n.isInsert() && this.processOverlaps(e, n.getDeleteEventIndex(), n, t), t.isDone()) break } } else if (3 === arguments.length) if (arguments[2] instanceof Dn && R(arguments[0], y) && R(arguments[1], y)) { var i = arguments[0], r = arguments[1], s = arguments[2]; this.addEdges(i, i), this.addEdges(r, r), this.computeIntersections(s) } else if ("boolean" == typeof arguments[2] && R(arguments[0], y) && arguments[1] instanceof Dn) { var o = arguments[0], a = arguments[1], u = arguments[2]; u ? this.addEdges(o, null) : this.addEdges(o), this.computeIntersections(a) } }, addEdge: function (t, e) { for (var n = t.getMonotoneChainEdge(), i = n.getStartIndexes(), r = 0; r < i.length - 1; r++) { var s = new Mn(n, r), o = new _n(e, n.getMinX(r), s); this.events.add(o), this.events.add(new _n(n.getMaxX(r), o)) } }, processOverlaps: function (t, e, n, i) { for (var r = n.getObject(), s = t; e > s; s++) { var o = this.events.get(s); if (o.isInsert()) { var a = o.getObject(); n.isSameLabel(o) || (r.computeIntersections(a, i), this.nOverlaps++) } } }, addEdges: function () { if (1 === arguments.length) for (var t = arguments[0], e = t.iterator(); e.hasNext();) { var n = e.next(); this.addEdge(n, n) } else if (2 === arguments.length) for (var i = arguments[0], r = arguments[1], e = i.iterator(); e.hasNext();) { var n = e.next(); this.addEdge(n, r) } }, interfaces_: function () { return [] }, getClass: function () { return Fn } }), e(Gn.prototype, { getMin: function () { return this.min }, intersects: function (t, e) { return !(this.min > e || this.max < t) }, getMax: function () { return this.max }, toString: function () { return se.toLineString(new f(this.min, 0), new f(this.max, 0)) }, interfaces_: function () { return [] }, getClass: function () { return Gn } }), e(qn.prototype, { compare: function (t, e) { var n = t, i = e, r = (n.min + n.max) / 2, s = (i.min + i.max) / 2; return s > r ? -1 : r > s ? 1 : 0 }, interfaces_: function () { return [a] }, getClass: function () { return qn } }), Gn.NodeComparator = qn, h(Bn, Gn), e(Bn.prototype, { query: function (t, e, n) { return this.intersects(t, e) ? void n.visitItem(this.item) : null }, interfaces_: function () { return [] }, getClass: function () { return Bn } }), h(zn, Gn), e(zn.prototype, { buildExtent: function (t, e) { this.min = Math.min(t.min, e.min), this.max = Math.max(t.max, e.max) }, query: function (t, e, n) { return this.intersects(t, e) ? (null !== this.node1 && this.node1.query(t, e, n), void (null !== this.node2 && this.node2.query(t, e, n))) : null }, interfaces_: function () { return [] }, getClass: function () { return zn } }), e(Vn.prototype, { buildTree: function () { ho.sort(this.leaves, new IntervalRTreeNode.NodeComparator); for (var t = this.leaves, e = null, n = new I; ;) { if (this.buildLevel(t, n), 1 === n.size()) return n.get(0); e = t, t = n, n = e } }, insert: function (t, e, n) { if (null !== this.root) throw new IllegalStateException("Index cannot be added to once it has been queried"); this.leaves.add(new Bn(t, e, n)) }, query: function (t, e, n) { this.init(), this.root.query(t, e, n) }, buildRoot: function () { return null !== this.root ? null : void (this.root = this.buildTree()) }, printNode: function (t) { D.out.println(se.toLineString(new f(t.min, this.level), new f(t.max, this.level))) }, init: function () { return null !== this.root ? null : void this.buildRoot() }, buildLevel: function (t, e) { this.level++ , e.clear(); for (var n = 0; n < t.size(); n += 2) { var i = t.get(n), r = n + 1 < t.size() ? t.get(n) : null; if (null === r) e.add(i); else { var s = new zn(t.get(n), t.get(n + 1)); e.add(s) } } }, interfaces_: function () { return [] }, getClass: function () { return Vn } }), e(kn.prototype, { filter: function (t) { if (this.isForcedToLineString && t instanceof Pt) { var e = t.getFactory().createLineString(t.getCoordinateSequence()); return this.lines.add(e), null } t instanceof wt && this.lines.add(t) }, setForceToLineString: function (t) { this.isForcedToLineString = t }, interfaces_: function () { return [q] }, getClass: function () { return kn } }), kn.getGeometry = function () { if (1 === arguments.length) { var t = arguments[0]; return t.getFactory().buildGeometry(kn.getLines(t)) } if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return e.getFactory().buildGeometry(kn.getLines(e, n)) } }, kn.getLines = function () { if (1 === arguments.length) { var t = arguments[0]; return kn.getLines(t, !1) } if (2 === arguments.length) { if (R(arguments[0], p) && R(arguments[1], p)) { for (var e = arguments[0], n = arguments[1], i = e.iterator(); i.hasNext();) { var r = i.next(); kn.getLines(r, n) } return n } if (arguments[0] instanceof B && "boolean" == typeof arguments[1]) { var s = arguments[0], o = arguments[1], a = new I; return s.apply(new kn(a, o)), a } if (arguments[0] instanceof B && R(arguments[1], p)) { var u = arguments[0], l = arguments[1]; return u instanceof wt ? l.add(u) : u.apply(new kn(l)), l } } else if (3 === arguments.length) { if ("boolean" == typeof arguments[2] && R(arguments[0], p) && R(arguments[1], p)) { for (var h = arguments[0], c = arguments[1], g = arguments[2], i = h.iterator(); i.hasNext();) { var r = i.next(); kn.getLines(r, c, g) } return c } if ("boolean" == typeof arguments[2] && arguments[0] instanceof B && R(arguments[1], p)) { var f = arguments[0], d = arguments[1], m = arguments[2]; return f.apply(new kn(d, m)), d } } }, e(Un.prototype, { visitItem: function (t) { this.items.add(t) }, getItems: function () { return this.items }, interfaces_: function () { return [De] }, getClass: function () { return Un } }), e(Yn.prototype, { locate: function (t) { var e = new le(t), n = new Xn(e); return this.index.query(t.y, t.y, n), e.getLocation() }, interfaces_: function () { return [Rn] }, getClass: function () { return Yn } }), e(Xn.prototype, { visitItem: function (t) { var e = t; this.counter.countSegment(e.getCoordinate(0), e.getCoordinate(1)) }, interfaces_: function () { return [De] }, getClass: function () { return Xn } }), e(Hn.prototype, { init: function (t) { for (var e = kn.getLines(t), n = e.iterator(); n.hasNext();) { var i = n.next(), r = i.getCoordinates(); this.addLine(r) } }, addLine: function (t) { for (var e = 1; e < t.length; e++) { var n = new ce(t[e - 1], t[e]), i = Math.min(n.p0.y, n.p1.y), r = Math.max(n.p0.y, n.p1.y); this.index.insert(i, r, n) } }, query: function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1], n = new Un; return this.index.query(t, e, n), n.getItems() } if (3 === arguments.length) { var i = arguments[0], r = arguments[1], s = arguments[2]; this.index.query(i, r, s) } }, interfaces_: function () { return [] }, getClass: function () { return Hn } }), Yn.SegmentVisitor = Xn, Yn.IntervalIndexedGeometry = Hn, e(Wn.prototype, { getSegmentIndex: function () { return this.segmentIndex }, getCoordinate: function () { return this.coord }, print: function (t) { t.print(this.coord), t.print(" seg # = " + this.segmentIndex), t.println(" dist = " + this.dist) }, compareTo: function (t) { var e = t; return this.compare(e.segmentIndex, e.dist) }, isEndPoint: function (t) { return 0 === this.segmentIndex && 0 === this.dist ? !0 : this.segmentIndex === t }, toString: function () { return this.coord + " seg # = " + this.segmentIndex + " dist = " + this.dist }, getDistance: function () { return this.dist }, compare: function (t, e) { return this.segmentIndex < t ? -1 : this.segmentIndex > t ? 1 : this.dist < e ? -1 : this.dist > e ? 1 : 0 }, interfaces_: function () { return [s] }, getClass: function () { return Wn } }), e(jn.prototype, { print: function (t) { t.println("Intersections:"); for (var e = this.iterator(); e.hasNext();) { var n = e.next(); n.print(t) } }, iterator: function () { return this.nodeMap.values().iterator() }, addSplitEdges: function (t) { this.addEndpoints(); for (var e = this.iterator(), n = e.next(); e.hasNext();) { var i = e.next(), r = this.createSplitEdge(n, i); t.add(r), n = i } }, addEndpoints: function () { var t = this.edge.pts.length - 1; this.add(this.edge.pts[0], 0, 0), this.add(this.edge.pts[t], t, 0) }, createSplitEdge: function (t, e) { var n = e.segmentIndex - t.segmentIndex + 2, i = this.edge.pts[e.segmentIndex], r = e.dist > 0 || !e.coord.equals2D(i); r || n--; var s = new Array(n).fill(null), o = 0; s[o++] = new f(t.coord); for (var a = t.segmentIndex + 1; a <= e.segmentIndex; a++)s[o++] = this.edge.pts[a]; return r && (s[o] = e.coord), new Qn(s, new fn(this.edge.label)) }, add: function (t, e, n) { var i = new Wn(t, e, n), r = this.nodeMap.get(i); return null !== r ? r : (this.nodeMap.put(i, i), i) }, isIntersection: function (t) { for (var e = this.iterator(); e.hasNext();) { var n = e.next(); if (n.coord.equals(t)) return !0 } return !1 }, interfaces_: function () { return [] }, getClass: function () { return jn } }), e(Zn.prototype, { getChainStartIndices: function (t) { var e = 0, n = new I; n.add(new P(e)); do { var i = this.findChainEnd(t, e); n.add(new P(i)), e = i } while (e < t.length - 1); var r = Zn.toIntArray(n); return r }, findChainEnd: function (t, e) { for (var n = Qe.quadrant(t[e], t[e + 1]), i = e + 1; i < t.length;) { var r = Qe.quadrant(t[i - 1], t[i]); if (r !== n) break; i++ } return i - 1 }, interfaces_: function () { return [] }, getClass: function () { return Zn } }), Zn.toIntArray = function (t) { for (var e = new Array(t.size()).fill(null), n = 0; n < e.length; n++)e[n] = t.get(n).intValue(); return e }, e(Jn.prototype, { getCoordinates: function () { return this.pts }, getMaxX: function (t) { var e = this.pts[this.startIndex[t]].x, n = this.pts[this.startIndex[t + 1]].x; return e > n ? e : n }, getMinX: function (t) { var e = this.pts[this.startIndex[t]].x, n = this.pts[this.startIndex[t + 1]].x; return n > e ? e : n }, computeIntersectsForChain: function () { if (4 === arguments.length) { var t = arguments[0], e = arguments[1], n = arguments[2], i = arguments[3]; this.computeIntersectsForChain(this.startIndex[t], this.startIndex[t + 1], e, e.startIndex[n], e.startIndex[n + 1], i) } else if (6 === arguments.length) { var r = arguments[0], s = arguments[1], o = arguments[2], a = arguments[3], u = arguments[4], l = arguments[5], h = this.pts[r], c = this.pts[s], g = o.pts[a], f = o.pts[u]; if (s - r === 1 && u - a === 1) return l.addIntersections(this.e, r, o.e, a), null; if (this.env1.init(h, c), this.env2.init(g, f), !this.env1.intersects(this.env2)) return null; var d = Math.trunc((r + s) / 2), m = Math.trunc((a + u) / 2); d > r && (m > a && this.computeIntersectsForChain(r, d, o, a, m, l), u > m && this.computeIntersectsForChain(r, d, o, m, u, l)), s > d && (m > a && this.computeIntersectsForChain(d, s, o, a, m, l), u > m && this.computeIntersectsForChain(d, s, o, m, u, l)) } }, getStartIndexes: function () { return this.startIndex }, computeIntersects: function (t, e) { for (var n = 0; n < this.startIndex.length - 1; n++)for (var i = 0; i < t.startIndex.length - 1; i++)this.computeIntersectsForChain(n, t, i, e) }, interfaces_: function () { return [] }, getClass: function () { return Jn } }), e(Kn.prototype, { getDepth: function (t, e) { return this.depth[t][e] }, setDepth: function (t, e, n) { this.depth[t][e] = n }, isNull: function () { if (0 === arguments.length) { for (var t = 0; 2 > t; t++)for (var e = 0; 3 > e; e++)if (this.depth[t][e] !== Kn.NULL_VALUE) return !1; return !0 } if (1 === arguments.length) { var n = arguments[0]; return this.depth[n][1] === Kn.NULL_VALUE } if (2 === arguments.length) { var i = arguments[0], r = arguments[1]; return this.depth[i][r] === Kn.NULL_VALUE } }, normalize: function () { for (var t = 0; 2 > t; t++)if (!this.isNull(t)) { var e = this.depth[t][1]; this.depth[t][2] < e && (e = this.depth[t][2]), 0 > e && (e = 0); for (var n = 1; 3 > n; n++) { var i = 0; this.depth[t][n] > e && (i = 1), this.depth[t][n] = i } } }, getDelta: function (t) { return this.depth[t][cn.RIGHT] - this.depth[t][cn.LEFT] }, getLocation: function (t, e) { return this.depth[t][e] <= 0 ? L.EXTERIOR : L.INTERIOR }, toString: function () { return "A: " + this.depth[0][1] + "," + this.depth[0][2] + " B: " + this.depth[1][1] + "," + this.depth[1][2] }, add: function () { if (1 === arguments.length) for (var t = arguments[0], e = 0; 2 > e; e++)for (var n = 1; 3 > n; n++) { var i = t.getLocation(e, n); i !== L.EXTERIOR && i !== L.INTERIOR || (this.isNull(e, n) ? this.depth[e][n] = Kn.depthAtLocation(i) : this.depth[e][n] += Kn.depthAtLocation(i)) } else if (3 === arguments.length) { var r = arguments[0], s = arguments[1], o = arguments[2]; o === L.INTERIOR && this.depth[r][s]++ } }, interfaces_: function () { return [] }, getClass: function () { return Kn } }), Kn.depthAtLocation = function (t) { return t === L.EXTERIOR ? 0 : t === L.INTERIOR ? 1 : Kn.NULL_VALUE }, Kn.NULL_VALUE = -1, h(Qn, vn), e(Qn.prototype, { + getDepth: function () { return this.depth }, getCollapsedEdge: function () { var t = new Array(2).fill(null); t[0] = this.pts[0], t[1] = this.pts[1]; var e = new Qn(t, fn.toLineLabel(this.label)); return e }, isIsolated: function () { return this._isIsolated }, getCoordinates: function () { return this.pts }, setIsolated: function (t) { this._isIsolated = t }, setName: function (t) { this.name = t }, equals: function (t) { if (!(t instanceof Qn)) return !1; var e = t; if (this.pts.length !== e.pts.length) return !1; for (var n = !0, i = !0, r = this.pts.length, s = 0; s < this.pts.length; s++)if (this.pts[s].equals2D(e.pts[s]) || (n = !1), this.pts[s].equals2D(e.pts[--r]) || (i = !1), !n && !i) return !1; return !0 }, getCoordinate: function () { if (0 === arguments.length) return this.pts.length > 0 ? this.pts[0] : null; if (1 === arguments.length) { var t = arguments[0]; return this.pts[t] } }, print: function (t) { t.print("edge " + this.name + ": "), t.print("LINESTRING ("); for (var e = 0; e < this.pts.length; e++)e > 0 && t.print(","), t.print(this.pts[e].x + " " + this.pts[e].y); t.print(") " + this.label + " " + this.depthDelta) }, computeIM: function (t) { Qn.updateIM(this.label, t) }, isCollapsed: function () { + return this.label.isArea() ? 3 !== this.pts.length ? !1 : !!this.pts[0].equals(this.pts[2]) : !1; + }, isClosed: function () { return this.pts[0].equals(this.pts[this.pts.length - 1]) }, getMaximumSegmentIndex: function () { return this.pts.length - 1 }, getDepthDelta: function () { return this.depthDelta }, getNumPoints: function () { return this.pts.length }, printReverse: function (t) { t.print("edge " + this.name + ": "); for (var e = this.pts.length - 1; e >= 0; e--)t.print(this.pts[e] + " "); t.println("") }, getMonotoneChainEdge: function () { return null === this.mce && (this.mce = new Jn(this)), this.mce }, getEnvelope: function () { if (null === this.env) { this.env = new C; for (var t = 0; t < this.pts.length; t++)this.env.expandToInclude(this.pts[t]) } return this.env }, addIntersection: function (t, e, n, i) { var r = new f(t.getIntersection(i)), s = e, o = t.getEdgeDistance(n, i), a = s + 1; if (a < this.pts.length) { var u = this.pts[a]; r.equals2D(u) && (s = a, o = 0) } this.eiList.add(r, s, o) }, toString: function () { var t = new T; t.append("edge " + this.name + ": "), t.append("LINESTRING ("); for (var e = 0; e < this.pts.length; e++)e > 0 && t.append(","), t.append(this.pts[e].x + " " + this.pts[e].y); return t.append(") " + this.label + " " + this.depthDelta), t.toString() }, isPointwiseEqual: function (t) { if (this.pts.length !== t.pts.length) return !1; for (var e = 0; e < this.pts.length; e++)if (!this.pts[e].equals2D(t.pts[e])) return !1; return !0 }, setDepthDelta: function (t) { this.depthDelta = t }, getEdgeIntersectionList: function () { return this.eiList }, addIntersections: function (t, e, n) { for (var i = 0; i < t.getIntersectionNum(); i++)this.addIntersection(t, e, n, i) }, interfaces_: function () { return [] }, getClass: function () { return Qn } + }), Qn.updateIM = function () { if (2 !== arguments.length) return vn.prototype.updateIM.apply(this, arguments); var t = arguments[0], e = arguments[1]; e.setAtLeastIfValid(t.getLocation(0, cn.ON), t.getLocation(1, cn.ON), 1), t.isArea() && (e.setAtLeastIfValid(t.getLocation(0, cn.LEFT), t.getLocation(1, cn.LEFT), 2), e.setAtLeastIfValid(t.getLocation(0, cn.RIGHT), t.getLocation(1, cn.RIGHT), 2)) }, h($n, Cn), e($n.prototype, { insertBoundaryPoint: function (t, e) { var n = this.nodes.addNode(e), i = n.getLabel(), r = 1, s = L.NONE; s = i.getLocation(t, cn.ON), s === L.BOUNDARY && r++; var o = $n.determineBoundary(this.boundaryNodeRule, r); i.setLocation(t, o) }, computeSelfNodes: function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; return this.computeSelfNodes(t, e, !1) } if (3 === arguments.length) { var n = arguments[0], i = arguments[1], r = arguments[2], s = new Dn(n, !0, !1); s.setIsDoneIfProperInt(r); var o = this.createEdgeSetIntersector(), a = this.parentGeom instanceof Pt || this.parentGeom instanceof bt || this.parentGeom instanceof Ot, u = i || !a; return o.computeIntersections(this.edges, s, u), this.addSelfIntersectionNodes(this.argIndex), s } }, computeSplitEdges: function (t) { for (var e = this.edges.iterator(); e.hasNext();) { var n = e.next(); n.eiList.addSplitEdges(t) } }, computeEdgeIntersections: function (t, e, n) { var i = new Dn(e, n, !0); i.setBoundaryNodes(this.getBoundaryNodes(), t.getBoundaryNodes()); var r = this.createEdgeSetIntersector(); return r.computeIntersections(this.edges, t.edges, i), i }, getGeometry: function () { return this.parentGeom }, getBoundaryNodeRule: function () { return this.boundaryNodeRule }, hasTooFewPoints: function () { return this._hasTooFewPoints }, addPoint: function () { if (arguments[0] instanceof Lt) { var t = arguments[0], e = t.getCoordinate(); this.insertPoint(this.argIndex, e, L.INTERIOR) } else if (arguments[0] instanceof f) { var n = arguments[0]; this.insertPoint(this.argIndex, n, L.INTERIOR) } }, addPolygon: function (t) { this.addPolygonRing(t.getExteriorRing(), L.EXTERIOR, L.INTERIOR); for (var e = 0; e < t.getNumInteriorRing(); e++) { var n = t.getInteriorRingN(e); this.addPolygonRing(n, L.INTERIOR, L.EXTERIOR) } }, addEdge: function (t) { this.insertEdge(t); var e = t.getCoordinates(); this.insertPoint(this.argIndex, e[0], L.BOUNDARY), this.insertPoint(this.argIndex, e[e.length - 1], L.BOUNDARY) }, addLineString: function (t) { var e = H.removeRepeatedPoints(t.getCoordinates()); if (e.length < 2) return this._hasTooFewPoints = !0, this.invalidPoint = e[0], null; var n = new Qn(e, new fn(this.argIndex, L.INTERIOR)); this.lineEdgeMap.put(t, n), this.insertEdge(n), g.isTrue(e.length >= 2, "found LineString with single point"), this.insertBoundaryPoint(this.argIndex, e[0]), this.insertBoundaryPoint(this.argIndex, e[e.length - 1]) }, getInvalidPoint: function () { return this.invalidPoint }, getBoundaryPoints: function () { for (var t = this.getBoundaryNodes(), e = new Array(t.size()).fill(null), n = 0, i = t.iterator(); i.hasNext();) { var r = i.next(); e[n++] = r.getCoordinate().copy() } return e }, getBoundaryNodes: function () { return null === this.boundaryNodes && (this.boundaryNodes = this.nodes.getBoundaryNodes(this.argIndex)), this.boundaryNodes }, addSelfIntersectionNode: function (t, e, n) { return this.isBoundaryNode(t, e) ? null : void (n === L.BOUNDARY && this.useBoundaryDeterminationRule ? this.insertBoundaryPoint(t, e) : this.insertPoint(t, e, n)) }, addPolygonRing: function (t, e, n) { if (t.isEmpty()) return null; var i = H.removeRepeatedPoints(t.getCoordinates()); if (i.length < 4) return this._hasTooFewPoints = !0, this.invalidPoint = i[0], null; var r = e, s = n; he.isCCW(i) && (r = n, s = e); var o = new Qn(i, new fn(this.argIndex, L.BOUNDARY, r, s)); this.lineEdgeMap.put(t, o), this.insertEdge(o), this.insertPoint(this.argIndex, i[0], L.BOUNDARY) }, insertPoint: function (t, e, n) { var i = this.nodes.addNode(e), r = i.getLabel(); null === r ? i.label = new fn(t, n) : r.setLocation(t, n) }, createEdgeSetIntersector: function () { return new Fn }, addSelfIntersectionNodes: function (t) { for (var e = this.edges.iterator(); e.hasNext();)for (var n = e.next(), i = n.getLabel().getLocation(t), r = n.eiList.iterator(); r.hasNext();) { var s = r.next(); this.addSelfIntersectionNode(t, s.coord, i) } }, add: function () { if (1 !== arguments.length) return Cn.prototype.add.apply(this, arguments); var t = arguments[0]; if (t.isEmpty()) return null; if (t instanceof Ot && (this.useBoundaryDeterminationRule = !1), t instanceof bt) this.addPolygon(t); else if (t instanceof wt) this.addLineString(t); else if (t instanceof Lt) this.addPoint(t); else if (t instanceof Tt) this.addCollection(t); else if (t instanceof ft) this.addCollection(t); else if (t instanceof Ot) this.addCollection(t); else { if (!(t instanceof gt)) throw new UnsupportedOperationException(t.getClass().getName()); this.addCollection(t) } }, addCollection: function (t) { for (var e = 0; e < t.getNumGeometries(); e++) { var n = t.getGeometryN(e); this.add(n) } }, locate: function (t) { return R(this.parentGeom, Rt) && this.parentGeom.getNumGeometries() > 50 ? (null === this.areaPtLocator && (this.areaPtLocator = new Yn(this.parentGeom)), this.areaPtLocator.locate(t)) : this.ptLocator.locate(t, this.parentGeom) }, findEdge: function () { if (1 === arguments.length) { var t = arguments[0]; return this.lineEdgeMap.get(t) } return Cn.prototype.findEdge.apply(this, arguments) }, interfaces_: function () { return [] }, getClass: function () { return $n } }), $n.determineBoundary = function (t, e) { return t.isInBoundary(e) ? L.BOUNDARY : L.INTERIOR }, e(ti.prototype, { getArgGeometry: function (t) { return this.arg[t].getGeometry() }, setComputationPrecision: function (t) { this.resultPrecisionModel = t, this.li.setPrecisionModel(this.resultPrecisionModel) }, interfaces_: function () { return [] }, getClass: function () { return ti } }), e(ei.prototype, { compareTo: function (t) { var e = t, n = ei.compareOriented(this.pts, this._orientation, e.pts, e._orientation); return n }, interfaces_: function () { return [s] }, getClass: function () { return ei } }), ei.orientation = function (t) { return 1 === H.increasingDirection(t) }, ei.compareOriented = function (t, e, n, i) { for (var r = e ? 1 : -1, s = i ? 1 : -1, o = e ? t.length : -1, a = i ? n.length : -1, u = e ? 0 : t.length - 1, l = i ? 0 : n.length - 1; ;) { var h = t[u].compareTo(n[l]); if (0 !== h) return h; u += r, l += s; var c = u === o, g = l === a; if (c && !g) return -1; if (!c && g) return 1; if (c && g) return 0 } }, e(ni.prototype, { print: function (t) { t.print("MULTILINESTRING ( "); for (var e = 0; e < this.edges.size(); e++) { var n = this.edges.get(e); e > 0 && t.print(","), t.print("("); for (var i = n.getCoordinates(), r = 0; r < i.length; r++)r > 0 && t.print(","), t.print(i[r].x + " " + i[r].y); t.println(")") } t.print(") ") }, addAll: function (t) { for (var e = t.iterator(); e.hasNext();)this.add(e.next()) }, findEdgeIndex: function (t) { for (var e = 0; e < this.edges.size(); e++)if (this.edges.get(e).equals(t)) return e; return -1 }, iterator: function () { return this.edges.iterator() }, getEdges: function () { return this.edges }, get: function (t) { return this.edges.get(t) }, findEqualEdge: function (t) { var e = new ei(t.getCoordinates()), n = this.ocaMap.get(e); return n }, add: function (t) { this.edges.add(t); var e = new ei(t.getCoordinates()); this.ocaMap.put(e, t) }, interfaces_: function () { return [] }, getClass: function () { return ni } }), h(ii, ti), e(ii.prototype, { insertUniqueEdge: function (t) { var e = this.edgeList.findEqualEdge(t); if (null !== e) { var n = e.getLabel(), i = t.getLabel(); e.isPointwiseEqual(t) || (i = new fn(t.getLabel()), i.flip()); var r = e.getDepth(); r.isNull() && r.add(n), r.add(i), n.merge(i) } else this.edgeList.add(t) }, getGraph: function () { return this.graph }, cancelDuplicateResultEdges: function () { for (var t = this.graph.getEdgeEnds().iterator(); t.hasNext();) { var e = t.next(), n = e.getSym(); e.isInResult() && n.isInResult() && (e.setInResult(!1), n.setInResult(!1)) } }, isCoveredByLA: function (t) { return this.isCovered(t, this.resultLineList) ? !0 : !!this.isCovered(t, this.resultPolyList) }, computeGeometry: function (t, e, n, i) { var r = new I; return r.addAll(t), r.addAll(e), r.addAll(n), r.isEmpty() ? ii.createEmptyResult(i, this.arg[0].getGeometry(), this.arg[1].getGeometry(), this.geomFact) : this.geomFact.buildGeometry(r) }, mergeSymLabels: function () { for (var t = this.graph.getNodes().iterator(); t.hasNext();) { var e = t.next(); e.getEdges().mergeSymLabels() } }, isCovered: function (t, e) { for (var n = e.iterator(); n.hasNext();) { var i = n.next(), r = this.ptLocator.locate(t, i); if (r !== L.EXTERIOR) return !0 } return !1 }, replaceCollapsedEdges: function () { for (var t = new I, e = this.edgeList.iterator(); e.hasNext();) { var n = e.next(); n.isCollapsed() && (e.remove(), t.add(n.getCollapsedEdge())) } this.edgeList.addAll(t) }, updateNodeLabelling: function () { for (var t = this.graph.getNodes().iterator(); t.hasNext();) { var e = t.next(), n = e.getEdges().getLabel(); e.getLabel().merge(n) } }, getResultGeometry: function (t) { return this.computeOverlay(t), this.resultGeom }, insertUniqueEdges: function (t) { for (var e = t.iterator(); e.hasNext();) { var n = e.next(); this.insertUniqueEdge(n) } }, computeOverlay: function (t) { this.copyPoints(0), this.copyPoints(1), this.arg[0].computeSelfNodes(this.li, !1), this.arg[1].computeSelfNodes(this.li, !1), this.arg[0].computeEdgeIntersections(this.arg[1], this.li, !0); var e = new I; this.arg[0].computeSplitEdges(e), this.arg[1].computeSplitEdges(e), this.insertUniqueEdges(e), this.computeLabelsFromDepths(), this.replaceCollapsedEdges(), ln.checkValid(this.edgeList.getEdges()), this.graph.addEdges(this.edgeList.getEdges()), this.computeLabelling(), this.labelIncompleteNodes(), this.findResultAreaEdges(t), this.cancelDuplicateResultEdges(); var n = new wn(this.geomFact); n.add(this.graph), this.resultPolyList = n.getPolygons(); var i = new Sn(this, this.geomFact, this.ptLocator); this.resultLineList = i.build(t); var r = new Ln(this, this.geomFact, this.ptLocator); this.resultPointList = r.build(t), this.resultGeom = this.computeGeometry(this.resultPointList, this.resultLineList, this.resultPolyList, t) }, labelIncompleteNode: function (t, e) { var n = this.ptLocator.locate(t.getCoordinate(), this.arg[e].getGeometry()); t.getLabel().setLocation(e, n) }, copyPoints: function (t) { for (var e = this.arg[t].getNodeIterator(); e.hasNext();) { var n = e.next(), i = this.graph.addNode(n.getCoordinate()); i.setLabel(t, n.getLabel().getLocation(t)) } }, findResultAreaEdges: function (t) { for (var e = this.graph.getEdgeEnds().iterator(); e.hasNext();) { var n = e.next(), i = n.getLabel(); i.isArea() && !n.isInteriorAreaEdge() && ii.isResultOfOp(i.getLocation(0, cn.RIGHT), i.getLocation(1, cn.RIGHT), t) && n.setInResult(!0) } }, computeLabelsFromDepths: function () { for (var t = this.edgeList.iterator(); t.hasNext();) { var e = t.next(), n = e.getLabel(), i = e.getDepth(); if (!i.isNull()) { i.normalize(); for (var r = 0; 2 > r; r++)n.isNull(r) || !n.isArea() || i.isNull(r) || (0 === i.getDelta(r) ? n.toLine(r) : (g.isTrue(!i.isNull(r, cn.LEFT), "depth of LEFT side has not been initialized"), n.setLocation(r, cn.LEFT, i.getLocation(r, cn.LEFT)), g.isTrue(!i.isNull(r, cn.RIGHT), "depth of RIGHT side has not been initialized"), n.setLocation(r, cn.RIGHT, i.getLocation(r, cn.RIGHT)))) } } }, computeLabelling: function () { for (var t = this.graph.getNodes().iterator(); t.hasNext();) { var e = t.next(); e.getEdges().computeLabelling(this.arg) } this.mergeSymLabels(), this.updateNodeLabelling() }, labelIncompleteNodes: function () { for (var t = 0, e = this.graph.getNodes().iterator(); e.hasNext();) { var n = e.next(), i = n.getLabel(); n.isIsolated() && (t++ , i.isNull(0) ? this.labelIncompleteNode(n, 0) : this.labelIncompleteNode(n, 1)), n.getEdges().updateLabelling(i) } }, isCoveredByA: function (t) { return !!this.isCovered(t, this.resultPolyList) }, interfaces_: function () { return [] }, getClass: function () { return ii } }), ii.overlayOp = function (t, e, n) { var i = new ii(t, e), r = i.getResultGeometry(n); return r }, ii.intersection = function (t, e) { if (t.isEmpty() || e.isEmpty()) return ii.createEmptyResult(ii.INTERSECTION, t, e, t.getFactory()); if (t.isGeometryCollection()) { var n = e; return hn.map(t, { interfaces_: function () { return [MapOp] }, map: function (t) { return t.intersection(n) } }) } return t.checkNotGeometryCollection(t), t.checkNotGeometryCollection(e), si.overlayOp(t, e, ii.INTERSECTION) }, ii.symDifference = function (t, e) { if (t.isEmpty() || e.isEmpty()) { if (t.isEmpty() && e.isEmpty()) return ii.createEmptyResult(ii.SYMDIFFERENCE, t, e, t.getFactory()); if (t.isEmpty()) return e.copy(); if (e.isEmpty()) return t.copy() } return t.checkNotGeometryCollection(t), t.checkNotGeometryCollection(e), si.overlayOp(t, e, ii.SYMDIFFERENCE) }, ii.resultDimension = function (t, e, n) { var i = e.getDimension(), r = n.getDimension(), s = -1; switch (t) { case ii.INTERSECTION: s = Math.min(i, r); break; case ii.UNION: s = Math.max(i, r); break; case ii.DIFFERENCE: s = i; break; case ii.SYMDIFFERENCE: s = Math.max(i, r) }return s }, ii.createEmptyResult = function (t, e, n, i) { var r = null; switch (ii.resultDimension(t, e, n)) { case -1: r = i.createGeometryCollection(new Array(0).fill(null)); break; case 0: r = i.createPoint(); break; case 1: r = i.createLineString(); break; case 2: r = i.createPolygon() }return r }, ii.difference = function (t, e) { return t.isEmpty() ? ii.createEmptyResult(ii.DIFFERENCE, t, e, t.getFactory()) : e.isEmpty() ? t.copy() : (t.checkNotGeometryCollection(t), t.checkNotGeometryCollection(e), si.overlayOp(t, e, ii.DIFFERENCE)) }, ii.isResultOfOp = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1], n = t.getLocation(0), i = t.getLocation(1); return ii.isResultOfOp(n, i, e) } if (3 === arguments.length) { var r = arguments[0], s = arguments[1], o = arguments[2]; switch (r === L.BOUNDARY && (r = L.INTERIOR), s === L.BOUNDARY && (s = L.INTERIOR), o) { case ii.INTERSECTION: return r === L.INTERIOR && s === L.INTERIOR; case ii.UNION: return r === L.INTERIOR || s === L.INTERIOR; case ii.DIFFERENCE: return r === L.INTERIOR && s !== L.INTERIOR; case ii.SYMDIFFERENCE: return r === L.INTERIOR && s !== L.INTERIOR || r !== L.INTERIOR && s === L.INTERIOR }return !1 } }, ii.INTERSECTION = 1, ii.UNION = 2, ii.DIFFERENCE = 3, ii.SYMDIFFERENCE = 4, e(ri.prototype, { selfSnap: function (t) { var e = new Ie(t), n = e.snapTo(t, this.snapTolerance); return n }, removeCommonBits: function (t) { this.cbr = new we, this.cbr.add(t[0]), this.cbr.add(t[1]); var e = new Array(2).fill(null); return e[0] = this.cbr.removeCommonBits(t[0].copy()), e[1] = this.cbr.removeCommonBits(t[1].copy()), e }, prepareResult: function (t) { return this.cbr.addCommonBits(t), t }, getResultGeometry: function (t) { var e = this.snap(this.geom), n = ii.overlayOp(e[0], e[1], t); return this.prepareResult(n) }, checkValid: function (t) { t.isValid() || D.out.println("Snapped geometry is invalid") }, computeSnapTolerance: function () { this.snapTolerance = Ie.computeOverlaySnapTolerance(this.geom[0], this.geom[1]) }, snap: function (t) { var e = this.removeCommonBits(t), n = Ie.snap(e[0], e[1], this.snapTolerance); return n }, interfaces_: function () { return [] }, getClass: function () { return ri } }), ri.overlayOp = function (t, e, n) { var i = new ri(t, e); return i.getResultGeometry(n) }, ri.union = function (t, e) { return ri.overlayOp(t, e, ii.UNION) }, ri.intersection = function (t, e) { return ri.overlayOp(t, e, ii.INTERSECTION) }, ri.symDifference = function (t, e) { return ri.overlayOp(t, e, ii.SYMDIFFERENCE) }, ri.difference = function (t, e) { return ri.overlayOp(t, e, ii.DIFFERENCE) }, e(si.prototype, { getResultGeometry: function (t) { var e = null, n = !1, i = null; try { e = ii.overlayOp(this.geom[0], this.geom[1], t); var r = !0; r && (n = !0) } catch (t) { if (!(t instanceof l)) throw t; i = t } finally { } if (!n) try { e = ri.overlayOp(this.geom[0], this.geom[1], t) } catch (t) { throw t instanceof l ? i : t } finally { } return e }, interfaces_: function () { return [] }, getClass: function () { return si } }), si.overlayOp = function (t, e, n) { var i = new si(t, e); return i.getResultGeometry(n) }, si.union = function (t, e) { return si.overlayOp(t, e, ii.UNION) }, si.intersection = function (t, e) { return si.overlayOp(t, e, ii.INTERSECTION) }, si.symDifference = function (t, e) { return si.overlayOp(t, e, ii.SYMDIFFERENCE) }, si.difference = function (t, e) { return si.overlayOp(t, e, ii.DIFFERENCE) }, e(oi.prototype, { addPolygon: function (t) { if (t.isEmpty()) return null; var e = null, n = 0, i = this.horizontalBisector(t); if (0 === i.getLength()) n = 0, e = i.getCoordinate(); else { var r = si.overlayOp(i, t, ii.INTERSECTION), s = this.widestGeometry(r); n = s.getEnvelopeInternal().getWidth(), e = oi.centre(s.getEnvelopeInternal()) } (null === this.interiorPoint || n > this.maxWidth) && (this.interiorPoint = e, this.maxWidth = n) }, getInteriorPoint: function () { return this.interiorPoint }, widestGeometry: function Bo() { if (arguments[0] instanceof gt) { var t = arguments[0]; if (t.isEmpty()) return t; for (var Bo = t.getGeometryN(0), e = 1; e < t.getNumGeometries(); e++)t.getGeometryN(e).getEnvelopeInternal().getWidth() > Bo.getEnvelopeInternal().getWidth() && (Bo = t.getGeometryN(e)); return Bo } if (arguments[0] instanceof B) { var n = arguments[0]; return n instanceof gt ? this.widestGeometry(n) : n } }, horizontalBisector: function (t) { var e = t.getEnvelopeInternal(), n = ai.getBisectorY(t); return this.factory.createLineString([new f(e.getMinX(), n), new f(e.getMaxX(), n)]) }, add: function (t) { if (t instanceof bt) this.addPolygon(t); else if (t instanceof gt) for (var e = t, n = 0; n < e.getNumGeometries(); n++)this.add(e.getGeometryN(n)) }, interfaces_: function () { return [] }, getClass: function () { return oi } }), oi.centre = function (t) { return new f(oi.avg(t.getMinX(), t.getMaxX()), oi.avg(t.getMinY(), t.getMaxY())) }, oi.avg = function (t, e) { return (t + e) / 2 }, e(ai.prototype, { updateInterval: function (t) { t <= this.centreY ? t > this.loY && (this.loY = t) : t > this.centreY && t < this.hiY && (this.hiY = t) }, getBisectorY: function () { this.process(this.poly.getExteriorRing()); for (var t = 0; t < this.poly.getNumInteriorRing(); t++)this.process(this.poly.getInteriorRingN(t)); var e = oi.avg(this.hiY, this.loY); return e }, process: function (t) { for (var e = t.getCoordinateSequence(), n = 0; n < e.size(); n++) { var i = e.getY(n); this.updateInterval(i) } }, interfaces_: function () { return [] }, getClass: function () { return ai } }), ai.getBisectorY = function (t) { var e = new ai(t); return e.getBisectorY() }, oi.SafeBisectorFinder = ai, e(ui.prototype, { addEndpoints: function () { if (arguments[0] instanceof B) { var t = arguments[0]; if (t instanceof wt) this.addEndpoints(t.getCoordinates()); else if (t instanceof gt) for (var e = t, n = 0; n < e.getNumGeometries(); n++)this.addEndpoints(e.getGeometryN(n)) } else if (arguments[0] instanceof Array) { var i = arguments[0]; this.add(i[0]), this.add(i[i.length - 1]) } }, getInteriorPoint: function () { return this.interiorPoint }, addInterior: function () { if (arguments[0] instanceof B) { var t = arguments[0]; if (t instanceof wt) this.addInterior(t.getCoordinates()); else if (t instanceof gt) for (var e = t, n = 0; n < e.getNumGeometries(); n++)this.addInterior(e.getGeometryN(n)) } else if (arguments[0] instanceof Array) for (var i = arguments[0], n = 1; n < i.length - 1; n++)this.add(i[n]) }, add: function (t) { var e = t.distance(this.centroid); e < this.minDistance && (this.interiorPoint = new f(t), this.minDistance = e) }, interfaces_: function () { return [] }, getClass: function () { return ui } }), e(li.prototype, { getInteriorPoint: function () { return this.interiorPoint }, add: function () { if (arguments[0] instanceof B) { var t = arguments[0]; if (t instanceof Lt) this.add(t.getCoordinate()); else if (t instanceof gt) for (var e = t, n = 0; n < e.getNumGeometries(); n++)this.add(e.getGeometryN(n)) } else if (arguments[0] instanceof f) { var i = arguments[0], r = i.distance(this.centroid); r < this.minDistance && (this.interiorPoint = new f(i), this.minDistance = r) } }, interfaces_: function () { return [] }, getClass: function () { return li } }), e(hi.prototype, { interfaces_: function () { return [] }, getClass: function () { return hi } }), hi.toDegrees = function (t) { return 180 * t / Math.PI }, hi.normalize = function (t) { for (; t > Math.PI;)t -= hi.PI_TIMES_2; for (; t <= -Math.PI;)t += hi.PI_TIMES_2; return t }, hi.angle = function () { if (1 === arguments.length) { var t = arguments[0]; return Math.atan2(t.y, t.x) } if (2 === arguments.length) { var e = arguments[0], n = arguments[1], i = n.x - e.x, r = n.y - e.y; return Math.atan2(r, i) } }, hi.isAcute = function (t, e, n) { var i = t.x - e.x, r = t.y - e.y, s = n.x - e.x, o = n.y - e.y, a = i * s + r * o; return a > 0 }, hi.isObtuse = function (t, e, n) { var i = t.x - e.x, r = t.y - e.y, s = n.x - e.x, o = n.y - e.y, a = i * s + r * o; return 0 > a }, hi.interiorAngle = function (t, e, n) { var i = hi.angle(e, t), r = hi.angle(e, n); return Math.abs(r - i) }, hi.normalizePositive = function (t) { if (0 > t) { for (; 0 > t;)t += hi.PI_TIMES_2; t >= hi.PI_TIMES_2 && (t = 0) } else { for (; t >= hi.PI_TIMES_2;)t -= hi.PI_TIMES_2; 0 > t && (t = 0) } return t }, hi.angleBetween = function (t, e, n) { var i = hi.angle(e, t), r = hi.angle(e, n); return hi.diff(i, r) }, hi.diff = function (t, e) { var n = null; return n = e > t ? e - t : t - e, n > Math.PI && (n = 2 * Math.PI - n), n }, hi.toRadians = function (t) { return t * Math.PI / 180 }, hi.getTurn = function (t, e) { var n = Math.sin(e - t); return n > 0 ? hi.COUNTERCLOCKWISE : 0 > n ? hi.CLOCKWISE : hi.NONE }, hi.angleBetweenOriented = function (t, e, n) { var i = hi.angle(e, t), r = hi.angle(e, n), s = r - i; return s <= -Math.PI ? s + hi.PI_TIMES_2 : s > Math.PI ? s - hi.PI_TIMES_2 : s }, hi.PI_TIMES_2 = 2 * Math.PI, hi.PI_OVER_2 = Math.PI / 2, hi.PI_OVER_4 = Math.PI / 4, hi.COUNTERCLOCKWISE = he.COUNTERCLOCKWISE, hi.CLOCKWISE = he.CLOCKWISE, hi.NONE = he.COLLINEAR, e(ci.prototype, { area: function () { return ci.area(this.p0, this.p1, this.p2) }, signedArea: function () { return ci.signedArea(this.p0, this.p1, this.p2) }, interpolateZ: function (t) { if (null === t) throw new i("Supplied point is null."); return ci.interpolateZ(t, this.p0, this.p1, this.p2) }, longestSideLength: function () { return ci.longestSideLength(this.p0, this.p1, this.p2) }, isAcute: function () { return ci.isAcute(this.p0, this.p1, this.p2) }, circumcentre: function () { return ci.circumcentre(this.p0, this.p1, this.p2) }, area3D: function () { return ci.area3D(this.p0, this.p1, this.p2) }, centroid: function () { return ci.centroid(this.p0, this.p1, this.p2) }, inCentre: function () { return ci.inCentre(this.p0, this.p1, this.p2) }, interfaces_: function () { return [] }, getClass: function () { return ci } }), ci.area = function (t, e, n) { return Math.abs(((n.x - t.x) * (e.y - t.y) - (e.x - t.x) * (n.y - t.y)) / 2) }, ci.signedArea = function (t, e, n) { return ((n.x - t.x) * (e.y - t.y) - (e.x - t.x) * (n.y - t.y)) / 2 }, ci.det = function (t, e, n, i) { return t * i - e * n }, ci.interpolateZ = function (t, e, n, i) { var r = e.x, s = e.y, o = n.x - r, a = i.x - r, u = n.y - s, l = i.y - s, h = o * l - a * u, c = t.x - r, g = t.y - s, f = (l * c - a * g) / h, d = (-u * c + o * g) / h, m = e.z + f * (n.z - e.z) + d * (i.z - e.z); return m }, ci.longestSideLength = function (t, e, n) { var i = t.distance(e), r = e.distance(n), s = n.distance(t), o = i; return r > o && (o = r), s > o && (o = s), o }, ci.isAcute = function (t, e, n) { return hi.isAcute(t, e, n) && hi.isAcute(e, n, t) ? !!hi.isAcute(n, t, e) : !1 }, ci.circumcentre = function (t, e, n) { var i = n.x, r = n.y, s = t.x - i, o = t.y - r, a = e.x - i, u = e.y - r, l = 2 * ci.det(s, o, a, u), h = ci.det(o, s * s + o * o, u, a * a + u * u), c = ci.det(s, s * s + o * o, a, a * a + u * u), g = i - h / l, d = r + c / l; return new f(g, d) }, ci.perpendicularBisector = function (t, e) { var n = e.x - t.x, i = e.y - t.y, r = new F(t.x + n / 2, t.y + i / 2, 1), s = new F(t.x - i + n / 2, t.y + n + i / 2, 1); return new F(r, s) }, ci.angleBisector = function (t, e, n) { var i = e.distance(t), r = e.distance(n), s = i / (i + r), o = n.x - t.x, a = n.y - t.y, u = new f(t.x + s * o, t.y + s * a); return u }, ci.area3D = function (t, e, n) { var i = e.x - t.x, r = e.y - t.y, s = e.z - t.z, o = n.x - t.x, a = n.y - t.y, u = n.z - t.z, l = r * u - s * a, h = s * o - i * u, c = i * a - r * o, g = l * l + h * h + c * c, f = Math.sqrt(g) / 2; return f }, ci.centroid = function (t, e, n) { var i = (t.x + e.x + n.x) / 3, r = (t.y + e.y + n.y) / 3; return new f(i, r) }, ci.inCentre = function (t, e, n) { var i = e.distance(n), r = t.distance(n), s = t.distance(e), o = i + r + s, a = (i * t.x + r * e.x + s * n.x) / o, u = (i * t.y + r * e.y + s * n.y) / o; return new f(a, u) }, e(gi.prototype, { getRadius: function () { return this.compute(), this.radius }, getDiameter: function () { switch (this.compute(), this.extremalPts.length) { case 0: return this.input.getFactory().createLineString(); case 1: return this.input.getFactory().createPoint(this.centre) }var t = this.extremalPts[0], e = this.extremalPts[1]; return this.input.getFactory().createLineString([t, e]) }, getExtremalPoints: function () { return this.compute(), this.extremalPts }, computeCirclePoints: function () { if (this.input.isEmpty()) return this.extremalPts = new Array(0).fill(null), null; if (1 === this.input.getNumPoints()) { var t = this.input.getCoordinates(); return this.extremalPts = [new f(t[0])], null } var e = this.input.convexHull(), n = e.getCoordinates(), t = n; if (n[0].equals2D(n[n.length - 1]) && (t = new Array(n.length - 1).fill(null), H.copyDeep(n, 0, t, 0, n.length - 1)), t.length <= 2) return this.extremalPts = H.copyDeep(t), null; for (var i = gi.lowestPoint(t), r = gi.pointWitMinAngleWithX(t, i), s = 0; s < t.length; s++) { var o = gi.pointWithMinAngleWithSegment(t, i, r); if (hi.isObtuse(i, o, r)) return this.extremalPts = [new f(i), new f(r)], null; if (hi.isObtuse(o, i, r)) i = o; else { if (!hi.isObtuse(o, r, i)) return this.extremalPts = [new f(i), new f(r), new f(o)], null; r = o } } g.shouldNeverReachHere("Logic failure in Minimum Bounding Circle algorithm!") }, compute: function () { return null !== this.extremalPts ? null : (this.computeCirclePoints(), this.computeCentre(), void (null !== this.centre && (this.radius = this.centre.distance(this.extremalPts[0])))) }, getFarthestPoints: function () { switch (this.compute(), this.extremalPts.length) { case 0: return this.input.getFactory().createLineString(); case 1: return this.input.getFactory().createPoint(this.centre) }var t = this.extremalPts[0], e = this.extremalPts[this.extremalPts.length - 1]; return this.input.getFactory().createLineString([t, e]) }, getCircle: function () { if (this.compute(), null === this.centre) return this.input.getFactory().createPolygon(); var t = this.input.getFactory().createPoint(this.centre); return 0 === this.radius ? t : t.buffer(this.radius) }, getCentre: function () { return this.compute(), this.centre }, computeCentre: function () { switch (this.extremalPts.length) { case 0: this.centre = null; break; case 1: this.centre = this.extremalPts[0]; break; case 2: this.centre = new f((this.extremalPts[0].x + this.extremalPts[1].x) / 2, (this.extremalPts[0].y + this.extremalPts[1].y) / 2); break; case 3: this.centre = ci.circumcentre(this.extremalPts[0], this.extremalPts[1], this.extremalPts[2]) } }, interfaces_: function () { return [] }, getClass: function () { return gi } }), gi.pointWitMinAngleWithX = function (t, e) { for (var n = r.MAX_VALUE, i = null, s = 0; s < t.length; s++) { var o = t[s]; if (o !== e) { var a = o.x - e.x, u = o.y - e.y; 0 > u && (u = -u); var l = Math.sqrt(a * a + u * u), h = u / l; n > h && (n = h, i = o) } } return i }, gi.lowestPoint = function (t) { for (var e = t[0], n = 1; n < t.length; n++)t[n].y < e.y && (e = t[n]); return e }, gi.pointWithMinAngleWithSegment = function (t, e, n) { for (var i = r.MAX_VALUE, s = null, o = 0; o < t.length; o++) { var a = t[o]; if (a !== e && a !== n) { var u = hi.angleBetween(e, a, n); i > u && (i = u, s = a) } } return s }, e(fi.prototype, { getWidthCoordinate: function () { return this.computeMinimumDiameter(), this.minWidthPt }, getSupportingSegment: function () { return this.computeMinimumDiameter(), this.inputGeom.getFactory().createLineString([this.minBaseSeg.p0, this.minBaseSeg.p1]) }, getDiameter: function () { if (this.computeMinimumDiameter(), null === this.minWidthPt) return this.inputGeom.getFactory().createLineString(null); var t = this.minBaseSeg.project(this.minWidthPt); return this.inputGeom.getFactory().createLineString([t, this.minWidthPt]) }, computeWidthConvex: function (t) { t instanceof bt ? this.convexHullPts = t.getExteriorRing().getCoordinates() : this.convexHullPts = t.getCoordinates(), 0 === this.convexHullPts.length ? (this.minWidth = 0, this.minWidthPt = null, this.minBaseSeg = null) : 1 === this.convexHullPts.length ? (this.minWidth = 0, this.minWidthPt = this.convexHullPts[0], this.minBaseSeg.p0 = this.convexHullPts[0], this.minBaseSeg.p1 = this.convexHullPts[0]) : 2 === this.convexHullPts.length || 3 === this.convexHullPts.length ? (this.minWidth = 0, this.minWidthPt = this.convexHullPts[0], this.minBaseSeg.p0 = this.convexHullPts[0], this.minBaseSeg.p1 = this.convexHullPts[1]) : this.computeConvexRingMinDiameter(this.convexHullPts) }, computeConvexRingMinDiameter: function (t) { this.minWidth = r.MAX_VALUE; for (var e = 1, n = new ce, i = 0; i < t.length - 1; i++)n.p0 = t[i], n.p1 = t[i + 1], e = this.findMaxPerpDistance(t, n, e) }, computeMinimumDiameter: function () { if (null !== this.minWidthPt) return null; if (this.isConvex) this.computeWidthConvex(this.inputGeom); else { var t = new ve(this.inputGeom).getConvexHull(); this.computeWidthConvex(t) } }, getLength: function () { return this.computeMinimumDiameter(), this.minWidth }, findMaxPerpDistance: function (t, e, n) { for (var i = e.distancePerpendicular(t[n]), r = i, s = n, o = s; r >= i;)i = r, s = o, o = fi.nextIndex(t, s), r = e.distancePerpendicular(t[o]); return i < this.minWidth && (this.minPtIndex = s, this.minWidth = i, this.minWidthPt = t[this.minPtIndex], this.minBaseSeg = new ce(e)), s }, getMinimumRectangle: function () { if (this.computeMinimumDiameter(), 0 === this.minWidth) return this.minBaseSeg.p0.equals2D(this.minBaseSeg.p1) ? this.inputGeom.getFactory().createPoint(this.minBaseSeg.p0) : this.minBaseSeg.toGeometry(this.inputGeom.getFactory()); for (var t = this.minBaseSeg.p1.x - this.minBaseSeg.p0.x, e = this.minBaseSeg.p1.y - this.minBaseSeg.p0.y, n = r.MAX_VALUE, i = -r.MAX_VALUE, s = r.MAX_VALUE, o = -r.MAX_VALUE, a = 0; a < this.convexHullPts.length; a++) { var u = fi.computeC(t, e, this.convexHullPts[a]); u > i && (i = u), n > u && (n = u); var l = fi.computeC(-e, t, this.convexHullPts[a]); l > o && (o = l), s > l && (s = l) } var h = fi.computeSegmentForLine(-t, -e, o), c = fi.computeSegmentForLine(-t, -e, s), g = fi.computeSegmentForLine(-e, t, i), f = fi.computeSegmentForLine(-e, t, n), d = g.lineIntersection(h), m = f.lineIntersection(h), p = f.lineIntersection(c), v = g.lineIntersection(c), y = this.inputGeom.getFactory().createLinearRing([d, m, p, v, d]); return this.inputGeom.getFactory().createPolygon(y, null) }, interfaces_: function () { return [] }, getClass: function () { return fi } }), fi.nextIndex = function (t, e) { return e++ , e >= t.length && (e = 0), e }, fi.computeC = function (t, e, n) { return t * n.y - e * n.x }, fi.getMinimumDiameter = function (t) { return new fi(t).getDiameter() }, fi.getMinimumRectangle = function (t) { return new fi(t).getMinimumRectangle() }, fi.computeSegmentForLine = function (t, e, n) { var i = null, r = null; return Math.abs(e) > Math.abs(t) ? (i = new f(0, n / e), r = new f(1, n / e - t / e)) : (i = new f(n / t, 0), r = new f(n / t - e / t, 1)), new ce(i, r) }; var co = Object.freeze({ Centroid: fe, CGAlgorithms: he, ConvexHull: ve, InteriorPointArea: oi, InteriorPointLine: ui, InteriorPointPoint: li, RobustLineIntersector: ae, MinimumBoundingCircle: gi, MinimumDiameter: fi }); e(di.prototype, { getResultGeometry: function () { return new mi(this.distanceTolerance).transform(this.inputGeom) }, setDistanceTolerance: function (t) { if (0 >= t) throw new i("Tolerance must be positive"); this.distanceTolerance = t }, interfaces_: function () { return [] }, getClass: function () { return di } }), di.densifyPoints = function (t, e, n) { for (var i = new ce, r = new N, s = 0; s < t.length - 1; s++) { i.p0 = t[s], i.p1 = t[s + 1], r.add(i.p0, !1); var o = i.getLength(), a = Math.trunc(o / e) + 1; if (a > 1) for (var u = o / a, l = 1; a > l; l++) { var h = l * u / o, c = i.pointAlong(h); n.makePrecise(c), r.add(c, !1) } } return r.add(t[t.length - 1], !1), r.toCoordinateArray() }, di.densify = function (t, e) { var n = new di(t); return n.setDistanceTolerance(e), n.getResultGeometry() }, h(mi, xe), e(mi.prototype, { transformMultiPolygon: function (t, e) { var n = xe.prototype.transformMultiPolygon.call(this, t, e); return this.createValidArea(n) }, transformPolygon: function (t, e) { var n = xe.prototype.transformPolygon.call(this, t, e); return e instanceof Ot ? n : this.createValidArea(n) }, transformCoordinates: function (t, e) { var n = t.toCoordinateArray(), i = di.densifyPoints(n, this.distanceTolerance, e.getPrecisionModel()); return e instanceof wt && 1 === i.length && (i = new Array(0).fill(null)), this.factory.getCoordinateSequenceFactory().create(i) }, createValidArea: function (t) { return t.buffer(0) }, interfaces_: function () { return [] }, getClass: function () { return mi } }), di.DensifyTransformer = mi; var go = Object.freeze({ Densifier: di }); e(pi.prototype, { + find: function (t) { var e = this; do { if (null === e) return null; if (e.dest().equals2D(t)) return e; e = e.oNext() } while (e !== this); return null }, dest: function () { return this._sym._orig }, oNext: function () { return this._sym._next }, insert: function (t) { if (this.oNext() === this) return this.insertAfter(t), null; var e = this.compareTo(t), n = this; do { var i = n.oNext(), r = i.compareTo(t); if (r !== e || i === this) return n.insertAfter(t), null; n = i } while (n !== this); g.shouldNeverReachHere() }, insertAfter: function (t) { g.equals(this._orig, t.orig()); var e = this.oNext(); this._sym.setNext(t), t.sym().setNext(e) }, degree: function zo() { + var zo = 0, t = this; do zo++ , + t = t.oNext(); while (t !== this); return zo + }, equals: function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; return this._orig.equals2D(t) && this._sym._orig.equals(e) } }, deltaY: function () { return this._sym._orig.y - this._orig.y }, sym: function () { return this._sym }, prev: function () { return this._sym.next()._sym }, compareAngularDirection: function (t) { var e = this.deltaX(), n = this.deltaY(), i = t.deltaX(), r = t.deltaY(); if (e === i && n === r) return 0; var s = Qe.quadrant(e, n), o = Qe.quadrant(i, r); return s > o ? 1 : o > s ? -1 : he.computeOrientation(t._orig, t.dest(), this.dest()) }, prevNode: function () { for (var t = this; 2 === t.degree();)if (t = t.prev(), t === this) return null; return t }, compareTo: function (t) { var e = t, n = this.compareAngularDirection(e); return n }, next: function () { return this._next }, setSym: function (t) { this._sym = t }, orig: function () { return this._orig }, toString: function () { return "HE(" + this._orig.x + " " + this._orig.y + ", " + this._sym._orig.x + " " + this._sym._orig.y + ")" }, setNext: function (t) { this._next = t }, init: function (t) { this.setSym(t), t.setSym(this), this.setNext(t), t.setNext(this) }, deltaX: function () { return this._sym._orig.x - this._orig.x }, interfaces_: function () { return [] }, getClass: function () { return pi } + }), pi.init = function (t, e) { if (null !== t._sym || null !== e._sym || null !== t._next || null !== e._next) throw new IllegalStateException("Edges are already initialized"); return t.init(e), t }, pi.create = function (t, e) { var n = new pi(t), i = new pi(e); return n.init(i), n }, h(vi, pi), e(vi.prototype, { mark: function () { this._isMarked = !0 }, setMark: function (t) { this._isMarked = t }, isMarked: function () { return this._isMarked }, interfaces_: function () { return [] }, getClass: function () { return vi } }), vi.setMarkBoth = function (t, e) { t.setMark(e), t.sym().setMark(e) }, vi.isMarked = function (t) { return t.isMarked() }, vi.setMark = function (t, e) { t.setMark(e) }, vi.markBoth = function (t) { t.mark(), t.sym().mark() }, vi.mark = function (t) { t.mark() }, e(yi.prototype, { insert: function (t, e, n) { var i = this.create(t, e); null !== n ? n.insert(i) : this.vertexMap.put(t, i); var r = this.vertexMap.get(e); return null !== r ? r.insert(i.sym()) : this.vertexMap.put(e, i.sym()), i }, create: function (t, e) { var n = this.createEdge(t), i = this.createEdge(e); return pi.init(n, i), n }, createEdge: function (t) { return new pi(t) }, addEdge: function (t, e) { if (!yi.isValidEdge(t, e)) return null; var n = this.vertexMap.get(t), i = null; if (null !== n && (i = n.find(e)), null !== i) return i; var r = this.insert(t, e, n); return r }, getVertexEdges: function () { return this.vertexMap.values() }, findEdge: function (t, e) { var n = this.vertexMap.get(t); return null === n ? null : n.find(e) }, interfaces_: function () { return [] }, getClass: function () { return yi } }), yi.isValidEdge = function (t, e) { var n = e.compareTo(t); return 0 !== n }, h(xi, vi), e(xi.prototype, { setStart: function () { this._isStart = !0 }, isStart: function () { return this._isStart }, interfaces_: function () { return [] }, getClass: function () { return xi } }), h(Ei, yi), e(Ei.prototype, { createEdge: function (t) { return new xi(t) }, interfaces_: function () { return [] }, getClass: function () { return Ei } }), e(Ii.prototype, { addLine: function (t) { this.lines.add(this.factory.createLineString(t.toCoordinateArray())) }, updateRingStartEdge: function (t) { return t.isStart() || (t = t.sym(), t.isStart()) ? null === this.ringStartEdge ? (this.ringStartEdge = t, null) : void (t.orig().compareTo(this.ringStartEdge.orig()) < 0 && (this.ringStartEdge = t)) : null }, getResult: function () { return null === this.result && this.computeResult(), this.result }, process: function (t) { var e = t.prevNode(); null === e && (e = t), this.stackEdges(e), this.buildLines() }, buildRing: function (t) { var e = new N, n = t; for (e.add(n.orig().copy(), !1); 2 === n.sym().degree();) { var i = n.next(); if (i === t) break; e.add(i.orig().copy(), !1), n = i } e.add(n.dest().copy(), !1), this.addLine(e) }, buildLine: function (t) { var e = new N, n = t; for (this.ringStartEdge = null, vi.markBoth(n), e.add(n.orig().copy(), !1); 2 === n.sym().degree();) { this.updateRingStartEdge(n); var i = n.next(); if (i === t) return this.buildRing(this.ringStartEdge), null; e.add(i.orig().copy(), !1), n = i, vi.markBoth(n) } e.add(n.dest().copy(), !1), this.stackEdges(n.sym()), this.addLine(e) }, stackEdges: function (t) { var e = t; do vi.isMarked(e) || this.nodeEdgeStack.add(e), e = e.oNext(); while (e !== t) }, computeResult: function () { for (var t = this.graph.getVertexEdges(), e = t.iterator(); e.hasNext();) { var n = e.next(); vi.isMarked(n) || this.process(n) } this.result = this.factory.buildGeometry(this.lines) }, buildLines: function () { for (; !this.nodeEdgeStack.empty();) { var t = this.nodeEdgeStack.pop(); vi.isMarked(t) || this.buildLine(t) } }, add: function () { if (arguments[0] instanceof B) { var t = arguments[0]; t.apply({ interfaces_: function () { return [q] }, filter: function (t) { t instanceof wt && this.add(t) } }) } else if (R(arguments[0], p)) for (var e = arguments[0], n = e.iterator(); n.hasNext();) { var i = n.next(); this.add(i) } else if (arguments[0] instanceof wt) { var r = arguments[0]; null === this.factory && (this.factory = r.getFactory()); for (var s = r.getCoordinateSequence(), o = !1, n = 1; n < s.size(); n++) { var a = this.graph.addEdge(s.getCoordinate(n - 1), s.getCoordinate(n)); null !== a && (o || (a.setStart(), o = !0)) } } }, interfaces_: function () { return [] }, getClass: function () { return Ii } }), Ii.dissolve = function (t) { var e = new Ii; return e.add(t), e.getResult() }; var fo = Object.freeze({ LineDissolver: Ii }); e(Ni.prototype, { hasChildren: function () { for (var t = 0; 4 > t; t++)if (null !== this.subnode[t]) return !0; return !1 }, isPrunable: function () { return !(this.hasChildren() || this.hasItems()) }, addAllItems: function (t) { t.addAll(this.items); for (var e = 0; 4 > e; e++)null !== this.subnode[e] && this.subnode[e].addAllItems(t); return t }, getNodeCount: function () { for (var t = 0, e = 0; 4 > e; e++)null !== this.subnode[e] && (t += this.subnode[e].size()); return t + 1 }, size: function () { for (var t = 0, e = 0; 4 > e; e++)null !== this.subnode[e] && (t += this.subnode[e].size()); return t + this.items.size() }, addAllItemsFromOverlapping: function (t, e) { if (!this.isSearchMatch(t)) return null; e.addAll(this.items); for (var n = 0; 4 > n; n++)null !== this.subnode[n] && this.subnode[n].addAllItemsFromOverlapping(t, e) }, visitItems: function (t, e) { for (var n = this.items.iterator(); n.hasNext();)e.visitItem(n.next()) }, hasItems: function () { return !this.items.isEmpty() }, remove: function (t, e) { if (!this.isSearchMatch(t)) return !1; for (var n = !1, i = 0; 4 > i; i++)if (null !== this.subnode[i] && (n = this.subnode[i].remove(t, e))) { this.subnode[i].isPrunable() && (this.subnode[i] = null); break } return n ? n : n = this.items.remove(e) }, visit: function (t, e) { if (!this.isSearchMatch(t)) return null; this.visitItems(t, e); for (var n = 0; 4 > n; n++)null !== this.subnode[n] && this.subnode[n].visit(t, e) }, getItems: function () { return this.items }, depth: function () { for (var t = 0, e = 0; 4 > e; e++)if (null !== this.subnode[e]) { var n = this.subnode[e].depth(); n > t && (t = n) } return t + 1 }, isEmpty: function Vo() { var Vo = !0; this.items.isEmpty() || (Vo = !1); for (var t = 0; 4 > t; t++)null !== this.subnode[t] && (this.subnode[t].isEmpty() || (Vo = !1)); return Vo }, add: function (t) { this.items.add(t) }, interfaces_: function () { return [u] }, getClass: function () { return Ni } }), Ni.getSubnodeIndex = function (t, e, n) { var i = -1; return t.getMinX() >= e && (t.getMinY() >= n && (i = 3), t.getMaxY() <= n && (i = 1)), t.getMaxX() <= e && (t.getMinY() >= n && (i = 2), t.getMaxY() <= n && (i = 0)), i }, Ci.exponent = function (t) { return wi(64, t) - 1023 }, Ci.powerOf2 = function (t) { return Math.pow(2, t) }, e(Si.prototype, { getLevel: function () { return this.level }, computeKey: function () { if (1 === arguments.length) { var t = arguments[0]; for (this.level = Si.computeQuadLevel(t), this.env = new C, this.computeKey(this.level, t); !this.env.contains(t);)this.level += 1, this.computeKey(this.level, t) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1], i = Ci.powerOf2(e); this.pt.x = Math.floor(n.getMinX() / i) * i, this.pt.y = Math.floor(n.getMinY() / i) * i, this.env.init(this.pt.x, this.pt.x + i, this.pt.y, this.pt.y + i) } }, getEnvelope: function () { return this.env }, getCentre: function () { return new f((this.env.getMinX() + this.env.getMaxX()) / 2, (this.env.getMinY() + this.env.getMaxY()) / 2) }, getPoint: function () { return this.pt }, interfaces_: function () { return [] }, getClass: function () { return Si } }), Si.computeQuadLevel = function (t) { var e = t.getWidth(), n = t.getHeight(), i = e > n ? e : n, r = Ci.exponent(i) + 1; return r }, h(Li, Ni), e(Li.prototype, { find: function (t) { var e = Ni.getSubnodeIndex(t, this.centrex, this.centrey); if (-1 === e) return this; if (null !== this.subnode[e]) { var n = this.subnode[e]; return n.find(t) } return this }, isSearchMatch: function (t) { return this.env.intersects(t) }, getSubnode: function (t) { return null === this.subnode[t] && (this.subnode[t] = this.createSubnode(t)), this.subnode[t] }, getEnvelope: function () { return this.env }, getNode: function (t) { var e = Ni.getSubnodeIndex(t, this.centrex, this.centrey); if (-1 !== e) { var n = this.getSubnode(e); return n.getNode(t) } return this }, createSubnode: function (t) { var e = 0, n = 0, i = 0, r = 0; switch (t) { case 0: e = this.env.getMinX(), n = this.centrex, i = this.env.getMinY(), r = this.centrey; break; case 1: e = this.centrex, n = this.env.getMaxX(), i = this.env.getMinY(), r = this.centrey; break; case 2: e = this.env.getMinX(), n = this.centrex, i = this.centrey, r = this.env.getMaxY(); break; case 3: e = this.centrex, n = this.env.getMaxX(), i = this.centrey, r = this.env.getMaxY() }var s = new C(e, n, i, r), o = new Li(s, this.level - 1); return o }, insertNode: function (t) { g.isTrue(null === this.env || this.env.contains(t.env)); var e = Ni.getSubnodeIndex(t.env, this.centrex, this.centrey); if (t.level === this.level - 1) this.subnode[e] = t; else { var n = this.createSubnode(e); n.insertNode(t), this.subnode[e] = n } }, interfaces_: function () { return [] }, getClass: function () { return Li } }), Li.createNode = function (t) { var e = new Si(t), n = new Li(e.getEnvelope(), e.getLevel()); return n }, Li.createExpanded = function (t, e) { var n = new C(e); null !== t && n.expandToInclude(t.env); var i = Li.createNode(n); return null !== t && i.insertNode(t), i }, e(Ri.prototype, { interfaces_: function () { return [] }, getClass: function () { return Ri } }), Ri.isZeroWidth = function (t, e) { var n = e - t; if (0 === n) return !0; var i = Math.max(Math.abs(t), Math.abs(e)), r = n / i, s = Ci.exponent(r); return s <= Ri.MIN_BINARY_EXPONENT }, Ri.MIN_BINARY_EXPONENT = -50, h(bi, Ni), e(bi.prototype, { insert: function (t, e) { var n = Ni.getSubnodeIndex(t, bi.origin.x, bi.origin.y); if (-1 === n) return this.add(e), null; var i = this.subnode[n]; if (null === i || !i.getEnvelope().contains(t)) { var r = Li.createExpanded(i, t); this.subnode[n] = r } this.insertContained(this.subnode[n], t, e) }, isSearchMatch: function (t) { return !0 }, insertContained: function (t, e, n) { g.isTrue(t.getEnvelope().contains(e)); var i = Ri.isZeroWidth(e.getMinX(), e.getMaxX()), r = Ri.isZeroWidth(e.getMinY(), e.getMaxY()), s = null; s = i || r ? t.find(e) : t.getNode(e), s.add(n) }, interfaces_: function () { return [] }, getClass: function () { return bi } }), bi.origin = new f(0, 0), e(Ti.prototype, { size: function () { return null !== this.root ? this.root.size() : 0 }, insert: function (t, e) { this.collectStats(t); var n = Ti.ensureExtent(t, this.minExtent); this.root.insert(n, e) }, query: function () { if (1 === arguments.length) { var t = arguments[0], e = new Un; return this.query(t, e), e.getItems() } if (2 === arguments.length) { var n = arguments[0], i = arguments[1]; this.root.visit(n, i) } }, queryAll: function () { var t = new I; return this.root.addAllItems(t), t }, remove: function (t, e) { var n = Ti.ensureExtent(t, this.minExtent); return this.root.remove(n, e) }, collectStats: function (t) { var e = t.getWidth(); e < this.minExtent && e > 0 && (this.minExtent = e); var n = t.getHeight(); n < this.minExtent && n > 0 && (this.minExtent = n) }, depth: function () { return null !== this.root ? this.root.depth() : 0 }, isEmpty: function () { return null === this.root }, interfaces_: function () { return [Fe, u] }, getClass: function () { return Ti } }), Ti.ensureExtent = function (t, e) { var n = t.getMinX(), i = t.getMaxX(), r = t.getMinY(), s = t.getMaxY(); return n !== i && r !== s ? t : (n === i && (n -= e / 2, i = n + e / 2), r === s && (r -= e / 2, s = r + e / 2), new C(n, i, r, s)) }, Ti.serialVersionUID = -0x678b60c967a25400; var mo = Object.freeze({ Quadtree: Ti }), po = Object.freeze({ STRtree: ke }), vo = Object.freeze({ quadtree: mo, strtree: po }), yo = ["Point", "MultiPoint", "LineString", "MultiLineString", "Polygon", "MultiPolygon"]; e(Pi.prototype, { read: function (t) { var e = void 0; e = "string" == typeof t ? JSON.parse(t) : t; var n = e.type; if (!xo[n]) throw new Error("Unknown GeoJSON type: " + e.type); return -1 !== yo.indexOf(n) ? xo[n].apply(this, [e.coordinates]) : "GeometryCollection" === n ? xo[n].apply(this, [e.geometries]) : xo[n].apply(this, [e]) }, write: function (t) { var e = t.getGeometryType(); if (!Eo[e]) throw new Error("Geometry is not supported"); return Eo[e].apply(this, [t]) } }); var xo = { Feature: function (t) { var e = {}; for (var n in t) e[n] = t[n]; if (t.geometry) { var i = t.geometry.type; if (!xo[i]) throw new Error("Unknown GeoJSON type: " + t.type); e.geometry = this.read(t.geometry) } return t.bbox && (e.bbox = xo.bbox.apply(this, [t.bbox])), e }, FeatureCollection: function (t) { var e = {}; if (t.features) { e.features = []; for (var n = 0; n < t.features.length; ++n)e.features.push(this.read(t.features[n])) } return t.bbox && (e.bbox = this.parse.bbox.apply(this, [t.bbox])), e }, coordinates: function ko(t) { for (var ko = [], e = 0; e < t.length; ++e) { var n = t[e]; ko.push(new f(n[0], n[1])) } return ko }, bbox: function (t) { return this.geometryFactory.createLinearRing([new f(t[0], t[1]), new f(t[2], t[1]), new f(t[2], t[3]), new f(t[0], t[3]), new f(t[0], t[1])]) }, Point: function (t) { var e = new f(t[0], t[1]); return this.geometryFactory.createPoint(e) }, MultiPoint: function (t) { for (var e = [], n = 0; n < t.length; ++n)e.push(xo.Point.apply(this, [t[n]])); return this.geometryFactory.createMultiPoint(e) }, LineString: function (t) { var e = xo.coordinates.apply(this, [t]); return this.geometryFactory.createLineString(e) }, MultiLineString: function (t) { for (var e = [], n = 0; n < t.length; ++n)e.push(xo.LineString.apply(this, [t[n]])); return this.geometryFactory.createMultiLineString(e) }, Polygon: function (t) { for (var e = xo.coordinates.apply(this, [t[0]]), n = this.geometryFactory.createLinearRing(e), i = [], r = 1; r < t.length; ++r) { var s = t[r], o = xo.coordinates.apply(this, [s]), a = this.geometryFactory.createLinearRing(o); i.push(a) } return this.geometryFactory.createPolygon(n, i) }, MultiPolygon: function (t) { for (var e = [], n = 0; n < t.length; ++n) { var i = t[n]; e.push(xo.Polygon.apply(this, [i])) } return this.geometryFactory.createMultiPolygon(e) }, GeometryCollection: function (t) { for (var e = [], n = 0; n < t.length; ++n) { var i = t[n]; e.push(this.read(i)) } return this.geometryFactory.createGeometryCollection(e) } }, Eo = { coordinate: function (t) { return [t.x, t.y] }, Point: function (t) { var e = Eo.coordinate.apply(this, [t.getCoordinate()]); return { type: "Point", coordinates: e } }, MultiPoint: function (t) { for (var e = [], n = 0; n < t.geometries.length; ++n) { var i = t.geometries[n], r = Eo.Point.apply(this, [i]); e.push(r.coordinates) } return { type: "MultiPoint", coordinates: e } }, LineString: function (t) { for (var e = [], n = t.getCoordinates(), i = 0; i < n.length; ++i) { var r = n[i]; e.push(Eo.coordinate.apply(this, [r])) } return { type: "LineString", coordinates: e } }, MultiLineString: function (t) { for (var e = [], n = 0; n < t.geometries.length; ++n) { var i = t.geometries[n], r = Eo.LineString.apply(this, [i]); e.push(r.coordinates) } return { type: "MultiLineString", coordinates: e } }, Polygon: function (t) { var e = [], n = Eo.LineString.apply(this, [t.shell]); e.push(n.coordinates); for (var i = 0; i < t.holes.length; ++i) { var r = t.holes[i], s = Eo.LineString.apply(this, [r]); e.push(s.coordinates) } return { type: "Polygon", coordinates: e } }, MultiPolygon: function (t) { for (var e = [], n = 0; n < t.geometries.length; ++n) { var i = t.geometries[n], r = Eo.Polygon.apply(this, [i]); e.push(r.coordinates) } return { type: "MultiPolygon", coordinates: e } }, GeometryCollection: function (t) { for (var e = [], n = 0; n < t.geometries.length; ++n) { var i = t.geometries[n], r = i.getGeometryType(); e.push(Eo[r].apply(this, [i])) } return { type: "GeometryCollection", geometries: e } } }; e(Oi.prototype, { read: function (t) { var e = this.parser.read(t); return this.precisionModel.getType() === ee.FIXED && this.reducePrecision(e), e }, reducePrecision: function (t) { var e, n; if (t.coordinate) this.precisionModel.makePrecise(t.coordinate); else if (t.points) for (e = 0, n = t.points.length; n > e; e++)this.precisionModel.makePrecise(t.points[e]); else if (t.geometries) for (e = 0, n = t.geometries.length; n > e; e++)this.reducePrecision(t.geometries[e]) } }), e(Mi.prototype, { write: function (t) { return this.parser.write(t) } }), e(_i.prototype, { read: function (t) { var e = this.parser.read(t); return this.precisionModel.getType() === ee.FIXED && this.reducePrecision(e), e }, reducePrecision: function (t) { if (t.coordinate) this.precisionModel.makePrecise(t.coordinate); else if (t.points) for (var e = 0, n = t.points.coordinates.length; n > e; e++)this.precisionModel.makePrecise(t.points.coordinates[e]); else if (t.geometries) for (var i = 0, r = t.geometries.length; r > i; i++)this.reducePrecision(t.geometries[i]) } }), e(Di.prototype, { read: function (t) { return t instanceof ol.geom.Point ? this.convertFromPoint(t) : t instanceof ol.geom.LineString ? this.convertFromLineString(t) : t instanceof ol.geom.LinearRing ? this.convertFromLinearRing(t) : t instanceof ol.geom.Polygon ? this.convertFromPolygon(t) : t instanceof ol.geom.MultiPoint ? this.convertFromMultiPoint(t) : t instanceof ol.geom.MultiLineString ? this.convertFromMultiLineString(t) : t instanceof ol.geom.MultiPolygon ? this.convertFromMultiPolygon(t) : t instanceof ol.geom.GeometryCollection ? this.convertFromCollection(t) : void 0 }, convertFromPoint: function (t) { var e = t.getCoordinates(); return this.geometryFactory.createPoint(new f(e[0], e[1])) }, convertFromLineString: function (t) { return this.geometryFactory.createLineString(t.getCoordinates().map(function (t) { return new f(t[0], t[1]) })) }, convertFromLinearRing: function (t) { return this.geometryFactory.createLinearRing(t.getCoordinates().map(function (t) { return new f(t[0], t[1]) })) }, convertFromPolygon: function (t) { for (var e = t.getLinearRings(), n = null, i = [], r = 0; r < e.length; r++) { var s = this.convertFromLinearRing(e[r]); 0 === r ? n = s : i.push(s) } return this.geometryFactory.createPolygon(n, i) }, convertFromMultiPoint: function (t) { var e = t.getPoints().map(function (t) { return this.convertFromPoint(t) }, this); return this.geometryFactory.createMultiPoint(e) }, convertFromMultiLineString: function (t) { var e = t.getLineStrings().map(function (t) { return this.convertFromLineString(t) }, this); return this.geometryFactory.createMultiLineString(e) }, convertFromMultiPolygon: function (t) { var e = t.getPolygons().map(function (t) { return this.convertFromPolygon(t) }, this); return this.geometryFactory.createMultiPolygon(e) }, convertFromCollection: function (t) { var e = t.getGeometries().map(function (t) { return this.read(t) }, this); return this.geometryFactory.createGeometryCollection(e) }, write: function (t) { return "Point" === t.getGeometryType() ? this.convertToPoint(t.getCoordinate()) : "LineString" === t.getGeometryType() ? this.convertToLineString(t) : "LinearRing" === t.getGeometryType() ? this.convertToLinearRing(t) : "Polygon" === t.getGeometryType() ? this.convertToPolygon(t) : "MultiPoint" === t.getGeometryType() ? this.convertToMultiPoint(t) : "MultiLineString" === t.getGeometryType() ? this.convertToMultiLineString(t) : "MultiPolygon" === t.getGeometryType() ? this.convertToMultiPolygon(t) : "GeometryCollection" === t.getGeometryType() ? this.convertToCollection(t) : void 0 }, convertToPoint: function (t) { return new ol.geom.Point([t.x, t.y]) }, convertToLineString: function (t) { var e = t.points.coordinates.map(Ai); return new ol.geom.LineString(e) }, convertToLinearRing: function (t) { var e = t.points.coordinates.map(Ai); return new ol.geom.LinearRing(e) }, convertToPolygon: function (t) { for (var e = [t.shell.points.coordinates.map(Ai)], n = 0; n < t.holes.length; n++)e.push(t.holes[n].points.coordinates.map(Ai)); return new ol.geom.Polygon(e) }, convertToMultiPoint: function (t) { return new ol.geom.MultiPoint(t.getCoordinates().map(Ai)) }, convertToMultiLineString: function (t) { for (var e = [], n = 0; n < t.geometries.length; n++)e.push(this.convertToLineString(t.geometries[n]).getCoordinates()); return new ol.geom.MultiLineString(e) }, convertToMultiPolygon: function (t) { for (var e = [], n = 0; n < t.geometries.length; n++)e.push(this.convertToPolygon(t.geometries[n]).getCoordinates()); return new ol.geom.MultiPolygon(e) }, convertToCollection: function (t) { for (var e = [], n = 0; n < t.geometries.length; n++) { var i = t.geometries[n]; e.push(this.write(i)) } return new ol.geom.GeometryCollection(e) } }); var Io = Object.freeze({ GeoJSONReader: Oi, GeoJSONWriter: Mi, OL3Parser: Di, WKTReader: _i, WKTWriter: se }); e(Fi.prototype, { rescale: function () { if (R(arguments[0], p)) for (var t = arguments[0], e = t.iterator(); e.hasNext();) { var n = e.next(); this.rescale(n.getCoordinates()) } else if (arguments[0] instanceof Array) { var i = arguments[0], r = null, s = null; 2 === i.length && (r = new f(i[0]), s = new f(i[1])); for (var e = 0; e < i.length; e++)i[e].x = i[e].x / this.scaleFactor + this.offsetX, i[e].y = i[e].y / this.scaleFactor + this.offsetY; 2 === i.length && i[0].equals2D(i[1]) && D.out.println(i) } }, scale: function () { if (R(arguments[0], p)) { for (var t = arguments[0], e = new I, n = t.iterator(); n.hasNext();) { var i = n.next(); e.add(new Ze(this.scale(i.getCoordinates()), i.getData())) } return e } if (arguments[0] instanceof Array) { for (var r = arguments[0], s = new Array(r.length).fill(null), n = 0; n < r.length; n++)s[n] = new f(Math.round((r[n].x - this.offsetX) * this.scaleFactor), Math.round((r[n].y - this.offsetY) * this.scaleFactor), r[n].z); var o = H.removeRepeatedPoints(s); return o } }, isIntegerPrecision: function () { return 1 === this.scaleFactor }, getNodedSubstrings: function () { var t = this.noder.getNodedSubstrings(); return this.isScaled && this.rescale(t), t }, computeNodes: function (t) { var e = t; this.isScaled && (e = this.scale(t)), this.noder.computeNodes(e) }, interfaces_: function () { return [tn] }, getClass: function () { return Fi } }); var No = Object.freeze({ MCIndexNoder: nn, ScaledNoder: Fi, SegmentString: Pe }); e(Gi.prototype, { isSimpleMultiPoint: function (t) { if (t.isEmpty()) return !0; for (var e = new at, n = 0; n < t.getNumGeometries(); n++) { var i = t.getGeometryN(n), r = i.getCoordinate(); if (e.contains(r)) return this.nonSimpleLocation = r, !1; e.add(r) } return !0 }, isSimplePolygonal: function (t) { for (var e = kn.getLines(t), n = e.iterator(); n.hasNext();) { var i = n.next(); if (!this.isSimpleLinearGeometry(i)) return !1 } return !0 }, hasClosedEndpointIntersection: function (t) { for (var e = new rt, n = t.getEdgeIterator(); n.hasNext();) { var i = n.next(), r = (i.getMaximumSegmentIndex(), i.isClosed()), s = i.getCoordinate(0); this.addEndpoint(e, s, r); var o = i.getCoordinate(i.getNumPoints() - 1); this.addEndpoint(e, o, r) } for (var n = e.values().iterator(); n.hasNext();) { var a = n.next(); if (a.isClosed && 2 !== a.degree) return this.nonSimpleLocation = a.getCoordinate(), !0 } return !1 }, getNonSimpleLocation: function () { return this.nonSimpleLocation }, isSimpleLinearGeometry: function (t) { if (t.isEmpty()) return !0; var e = new $n(0, t), n = new ae, i = e.computeSelfNodes(n, !0); return i.hasIntersection() ? i.hasProperIntersection() ? (this.nonSimpleLocation = i.getProperIntersectionPoint(), !1) : this.hasNonEndpointIntersection(e) ? !1 : !this.isClosedEndpointsInInterior || !this.hasClosedEndpointIntersection(e) : !0 }, hasNonEndpointIntersection: function (t) { for (var e = t.getEdgeIterator(); e.hasNext();)for (var n = e.next(), i = n.getMaximumSegmentIndex(), r = n.getEdgeIntersectionList().iterator(); r.hasNext();) { var s = r.next(); if (!s.isEndPoint(i)) return this.nonSimpleLocation = s.getCoordinate(), !0 } return !1 }, addEndpoint: function (t, e, n) { var i = t.get(e); null === i && (i = new qi(e), t.put(e, i)), i.addEndpoint(n) }, computeSimple: function (t) { return this.nonSimpleLocation = null, t.isEmpty() ? !0 : t instanceof wt ? this.isSimpleLinearGeometry(t) : t instanceof ft ? this.isSimpleLinearGeometry(t) : t instanceof Tt ? this.isSimpleMultiPoint(t) : R(t, Rt) ? this.isSimplePolygonal(t) : t instanceof gt ? this.isSimpleGeometryCollection(t) : !0 }, isSimple: function () { return this.nonSimpleLocation = null, this.computeSimple(this.inputGeom) }, isSimpleGeometryCollection: function (t) { for (var e = 0; e < t.getNumGeometries(); e++) { var n = t.getGeometryN(e); if (!this.computeSimple(n)) return !1 } return !0 }, interfaces_: function () { return [] }, getClass: function () { return Gi } }), e(qi.prototype, { addEndpoint: function (t) { this.degree++ , this.isClosed |= t }, getCoordinate: function () { return this.pt }, interfaces_: function () { return [] }, getClass: function () { return qi } }), Gi.EndpointInfo = qi, e(Bi.prototype, { getEndCapStyle: function () { return this.endCapStyle }, isSingleSided: function () { return this._isSingleSided }, setQuadrantSegments: function (t) { this.quadrantSegments = t, 0 === this.quadrantSegments && (this.joinStyle = Bi.JOIN_BEVEL), this.quadrantSegments < 0 && (this.joinStyle = Bi.JOIN_MITRE, this.mitreLimit = Math.abs(this.quadrantSegments)), 0 >= t && (this.quadrantSegments = 1), this.joinStyle !== Bi.JOIN_ROUND && (this.quadrantSegments = Bi.DEFAULT_QUADRANT_SEGMENTS) }, getJoinStyle: function () { return this.joinStyle }, setJoinStyle: function (t) { this.joinStyle = t }, setSimplifyFactor: function (t) { this.simplifyFactor = 0 > t ? 0 : t }, getSimplifyFactor: function () { return this.simplifyFactor }, getQuadrantSegments: function () { return this.quadrantSegments }, setEndCapStyle: function (t) { this.endCapStyle = t }, getMitreLimit: function () { return this.mitreLimit }, setMitreLimit: function (t) { this.mitreLimit = t }, setSingleSided: function (t) { this._isSingleSided = t }, interfaces_: function () { return [] }, getClass: function () { return Bi } }), Bi.bufferDistanceError = function (t) { var e = Math.PI / 2 / t; return 1 - Math.cos(e / 2) }, Bi.CAP_ROUND = 1, Bi.CAP_FLAT = 2, Bi.CAP_SQUARE = 3, Bi.JOIN_ROUND = 1, Bi.JOIN_MITRE = 2, Bi.JOIN_BEVEL = 3, Bi.DEFAULT_QUADRANT_SEGMENTS = 8, Bi.DEFAULT_MITRE_LIMIT = 5, Bi.DEFAULT_SIMPLIFY_FACTOR = .01, e(zi.prototype, { getCoordinate: function () { return this.minCoord }, getRightmostSide: function (t, e) { var n = this.getRightmostSideOfSegment(t, e); return 0 > n && (n = this.getRightmostSideOfSegment(t, e - 1)), 0 > n && (this.minCoord = null, this.checkForRightmostCoordinate(t)), n }, findRightmostEdgeAtVertex: function () { var t = this.minDe.getEdge().getCoordinates(); g.isTrue(this.minIndex > 0 && this.minIndex < t.length, "rightmost point expected to be interior vertex of edge"); var e = t[this.minIndex - 1], n = t[this.minIndex + 1], i = he.computeOrientation(this.minCoord, n, e), r = !1; e.y < this.minCoord.y && n.y < this.minCoord.y && i === he.COUNTERCLOCKWISE ? r = !0 : e.y > this.minCoord.y && n.y > this.minCoord.y && i === he.CLOCKWISE && (r = !0), r && (this.minIndex = this.minIndex - 1) }, getRightmostSideOfSegment: function (t, e) { var n = t.getEdge(), i = n.getCoordinates(); if (0 > e || e + 1 >= i.length) return -1; if (i[e].y === i[e + 1].y) return -1; var r = cn.LEFT; return i[e].y < i[e + 1].y && (r = cn.RIGHT), r }, getEdge: function () { return this.orientedDe }, checkForRightmostCoordinate: function (t) { for (var e = t.getEdge().getCoordinates(), n = 0; n < e.length - 1; n++)(null === this.minCoord || e[n].x > this.minCoord.x) && (this.minDe = t, this.minIndex = n, this.minCoord = e[n]) }, findRightmostEdgeAtNode: function () { var t = this.minDe.getNode(), e = t.getEdges(); this.minDe = e.getRightmostEdge(), this.minDe.isForward() || (this.minDe = this.minDe.getSym(), this.minIndex = this.minDe.getEdge().getCoordinates().length - 1) }, findEdge: function (t) { for (var e = t.iterator(); e.hasNext();) { var n = e.next(); n.isForward() && this.checkForRightmostCoordinate(n) } g.isTrue(0 !== this.minIndex || this.minCoord.equals(this.minDe.getCoordinate()), "inconsistency in rightmost processing"), 0 === this.minIndex ? this.findRightmostEdgeAtNode() : this.findRightmostEdgeAtVertex(), this.orientedDe = this.minDe; var i = this.getRightmostSide(this.minDe, this.minIndex); i === cn.LEFT && (this.orientedDe = this.minDe.getSym()) }, interfaces_: function () { return [] }, getClass: function () { return zi } }), Vi.prototype.addLast = function (t) { this.array_.push(t) }, Vi.prototype.removeFirst = function () { return this.array_.shift() }, Vi.prototype.isEmpty = function () { return 0 === this.array_.length }, e(ki.prototype, { clearVisitedEdges: function () { for (var t = this.dirEdgeList.iterator(); t.hasNext();) { var e = t.next(); e.setVisited(!1) } }, getRightmostCoordinate: function () { return this.rightMostCoord }, computeNodeDepth: function (t) { for (var e = null, n = t.getEdges().iterator(); n.hasNext();) { var i = n.next(); if (i.isVisited() || i.getSym().isVisited()) { e = i; break } } if (null === e) throw new sn("unable to find edge to compute depths at " + t.getCoordinate()); t.getEdges().computeDepths(e); for (var n = t.getEdges().iterator(); n.hasNext();) { var i = n.next(); i.setVisited(!0), this.copySymDepths(i) } }, computeDepth: function (t) { this.clearVisitedEdges(); var e = this.finder.getEdge(); e.getNode(), e.getLabel(), e.setEdgeDepths(cn.RIGHT, t), this.copySymDepths(e), this.computeDepths(e) }, create: function (t) { this.addReachable(t), this.finder.findEdge(this.dirEdgeList), this.rightMostCoord = this.finder.getCoordinate() }, findResultEdges: function () { for (var t = this.dirEdgeList.iterator(); t.hasNext();) { var e = t.next(); e.getDepth(cn.RIGHT) >= 1 && e.getDepth(cn.LEFT) <= 0 && !e.isInteriorAreaEdge() && e.setInResult(!0) } }, computeDepths: function (t) { var e = new Q, n = new Vi, i = t.getNode(); for (n.addLast(i), e.add(i), t.setVisited(!0); !n.isEmpty();) { var r = n.removeFirst(); e.add(r), this.computeNodeDepth(r); for (var s = r.getEdges().iterator(); s.hasNext();) { var o = s.next(), a = o.getSym(); if (!a.isVisited()) { var u = a.getNode(); e.contains(u) || (n.addLast(u), e.add(u)) } } } }, compareTo: function (t) { var e = t; return this.rightMostCoord.x < e.rightMostCoord.x ? -1 : this.rightMostCoord.x > e.rightMostCoord.x ? 1 : 0 }, getEnvelope: function () { if (null === this.env) { for (var t = new C, e = this.dirEdgeList.iterator(); e.hasNext();)for (var n = e.next(), i = n.getEdge().getCoordinates(), r = 0; r < i.length - 1; r++)t.expandToInclude(i[r]); this.env = t } return this.env }, addReachable: function (t) { var e = new me; for (e.add(t); !e.empty();) { var n = e.pop(); this.add(n, e) } }, copySymDepths: function (t) { var e = t.getSym(); e.setDepth(cn.LEFT, t.getDepth(cn.RIGHT)), e.setDepth(cn.RIGHT, t.getDepth(cn.LEFT)) }, add: function (t, e) { t.setVisited(!0), this.nodes.add(t); for (var n = t.getEdges().iterator(); n.hasNext();) { var i = n.next(); this.dirEdgeList.add(i); var r = i.getSym(), s = r.getNode(); s.isVisited() || e.push(s) } }, getNodes: function () { return this.nodes }, getDirectedEdges: function () { return this.dirEdgeList }, interfaces_: function () { return [s] }, getClass: function () { return ki } }), e(Ui.prototype, { isDeletable: function (t, e, n, i) { var r = this.inputLine[t], s = this.inputLine[e], o = this.inputLine[n]; return this.isConcave(r, s, o) && this.isShallow(r, s, o, i) ? this.isShallowSampled(r, s, t, n, i) : !1 }, deleteShallowConcavities: function () { for (var t = 1, e = (this.inputLine.length - 1, this.findNextNonDeletedIndex(t)), n = this.findNextNonDeletedIndex(e), i = !1; n < this.inputLine.length;) { var r = !1; this.isDeletable(t, e, n, this.distanceTol) && (this.isDeleted[e] = Ui.DELETE, r = !0, i = !0), t = r ? n : e, e = this.findNextNonDeletedIndex(t), n = this.findNextNonDeletedIndex(e) } return i }, isShallowConcavity: function (t, e, n, i) { var r = he.computeOrientation(t, e, n), s = r === this.angleOrientation; if (!s) return !1; var o = he.distancePointLine(e, t, n); return i > o }, isShallowSampled: function (t, e, n, i, r) { var s = Math.trunc((i - n) / Ui.NUM_PTS_TO_CHECK); 0 >= s && (s = 1); for (var o = n; i > o; o += s)if (!this.isShallow(t, e, this.inputLine[o], r)) return !1; return !0 }, isConcave: function Uo(t, e, n) { var i = he.computeOrientation(t, e, n), Uo = i === this.angleOrientation; return Uo }, simplify: function (t) { this.distanceTol = Math.abs(t), 0 > t && (this.angleOrientation = he.CLOCKWISE), this.isDeleted = new Array(this.inputLine.length).fill(null); var e = !1; do e = this.deleteShallowConcavities(); while (e); return this.collapseLine() }, findNextNonDeletedIndex: function (t) { for (var e = t + 1; e < this.inputLine.length && this.isDeleted[e] === Ui.DELETE;)e++; return e }, isShallow: function (t, e, n, i) { var r = he.distancePointLine(e, t, n); return i > r }, collapseLine: function () { for (var t = new N, e = 0; e < this.inputLine.length; e++)this.isDeleted[e] !== Ui.DELETE && t.add(this.inputLine[e]); return t.toCoordinateArray() }, interfaces_: function () { return [] }, getClass: function () { return Ui } }), Ui.simplify = function (t, e) { var n = new Ui(t); return n.simplify(e) }, Ui.INIT = 0, Ui.DELETE = 1, Ui.KEEP = 1, Ui.NUM_PTS_TO_CHECK = 10, e(Yi.prototype, { getCoordinates: function () { var t = this.ptList.toArray(Yi.COORDINATE_ARRAY_TYPE); return t }, setPrecisionModel: function (t) { this.precisionModel = t }, addPt: function (t) { var e = new f(t); return this.precisionModel.makePrecise(e), this.isRedundant(e) ? null : void this.ptList.add(e) }, reverse: function () { }, addPts: function (t, e) { if (e) for (var n = 0; n < t.length; n++)this.addPt(t[n]); else for (var n = t.length - 1; n >= 0; n--)this.addPt(t[n]) }, isRedundant: function (t) { if (this.ptList.size() < 1) return !1; var e = this.ptList.get(this.ptList.size() - 1), n = t.distance(e); return n < this.minimimVertexDistance }, toString: function () { var t = new ie, e = t.createLineString(this.getCoordinates()); return e.toString() }, closeRing: function () { if (this.ptList.size() < 1) return null; var t = new f(this.ptList.get(0)), e = this.ptList.get(this.ptList.size() - 1), n = null; return this.ptList.size() >= 2 && (n = this.ptList.get(this.ptList.size() - 2)), t.equals(e) ? null : void this.ptList.add(t) }, setMinimumVertexDistance: function (t) { this.minimimVertexDistance = t }, interfaces_: function () { return [] }, getClass: function () { return Yi } }), Yi.COORDINATE_ARRAY_TYPE = new Array(0).fill(null), e(Xi.prototype, { + addNextSegment: function (t, e) { + if (this.s0 = this.s1, this.s1 = this.s2, this.s2 = t, this.seg0.setCoordinates(this.s0, this.s1), this.computeOffsetSegment(this.seg0, this.side, this.distance, this.offset0), this.seg1.setCoordinates(this.s1, this.s2), this.computeOffsetSegment(this.seg1, this.side, this.distance, this.offset1), + this.s1.equals(this.s2)) return null; var n = he.computeOrientation(this.s0, this.s1, this.s2), i = n === he.CLOCKWISE && this.side === cn.LEFT || n === he.COUNTERCLOCKWISE && this.side === cn.RIGHT; 0 === n ? this.addCollinear(e) : i ? this.addOutsideTurn(n, e) : this.addInsideTurn(n, e) + }, addLineEndCap: function (t, e) { var n = new ce(t, e), i = new ce; this.computeOffsetSegment(n, cn.LEFT, this.distance, i); var r = new ce; this.computeOffsetSegment(n, cn.RIGHT, this.distance, r); var s = e.x - t.x, o = e.y - t.y, a = Math.atan2(o, s); switch (this.bufParams.getEndCapStyle()) { case Bi.CAP_ROUND: this.segList.addPt(i.p1), this.addFilletArc(e, a + Math.PI / 2, a - Math.PI / 2, he.CLOCKWISE, this.distance), this.segList.addPt(r.p1); break; case Bi.CAP_FLAT: this.segList.addPt(i.p1), this.segList.addPt(r.p1); break; case Bi.CAP_SQUARE: var u = new f; u.x = Math.abs(this.distance) * Math.cos(a), u.y = Math.abs(this.distance) * Math.sin(a); var l = new f(i.p1.x + u.x, i.p1.y + u.y), h = new f(r.p1.x + u.x, r.p1.y + u.y); this.segList.addPt(l), this.segList.addPt(h) } }, getCoordinates: function () { var t = this.segList.getCoordinates(); return t }, addMitreJoin: function (t, e, n, i) { var r = !0, s = null; try { s = F.intersection(e.p0, e.p1, n.p0, n.p1); var o = 0 >= i ? 1 : s.distance(t) / Math.abs(i); o > this.bufParams.getMitreLimit() && (r = !1) } catch (t) { if (!(t instanceof S)) throw t; s = new f(0, 0), r = !1 } finally { } r ? this.segList.addPt(s) : this.addLimitedMitreJoin(e, n, i, this.bufParams.getMitreLimit()) }, addFilletCorner: function (t, e, n, i, r) { var s = e.x - t.x, o = e.y - t.y, a = Math.atan2(o, s), u = n.x - t.x, l = n.y - t.y, h = Math.atan2(l, u); i === he.CLOCKWISE ? h >= a && (a += 2 * Math.PI) : a >= h && (a -= 2 * Math.PI), this.segList.addPt(e), this.addFilletArc(t, a, h, i, r), this.segList.addPt(n) }, addOutsideTurn: function (t, e) { return this.offset0.p1.distance(this.offset1.p0) < this.distance * Xi.OFFSET_SEGMENT_SEPARATION_FACTOR ? (this.segList.addPt(this.offset0.p1), null) : void (this.bufParams.getJoinStyle() === Bi.JOIN_MITRE ? this.addMitreJoin(this.s1, this.offset0, this.offset1, this.distance) : this.bufParams.getJoinStyle() === Bi.JOIN_BEVEL ? this.addBevelJoin(this.offset0, this.offset1) : (e && this.segList.addPt(this.offset0.p1), this.addFilletCorner(this.s1, this.offset0.p1, this.offset1.p0, t, this.distance), this.segList.addPt(this.offset1.p0))) }, createSquare: function (t) { this.segList.addPt(new f(t.x + this.distance, t.y + this.distance)), this.segList.addPt(new f(t.x + this.distance, t.y - this.distance)), this.segList.addPt(new f(t.x - this.distance, t.y - this.distance)), this.segList.addPt(new f(t.x - this.distance, t.y + this.distance)), this.segList.closeRing() }, addSegments: function (t, e) { this.segList.addPts(t, e) }, addFirstSegment: function () { this.segList.addPt(this.offset1.p0) }, addLastSegment: function () { this.segList.addPt(this.offset1.p1) }, initSideSegments: function (t, e, n) { this.s1 = t, this.s2 = e, this.side = n, this.seg1.setCoordinates(t, e), this.computeOffsetSegment(this.seg1, n, this.distance, this.offset1) }, addLimitedMitreJoin: function (t, e, n, i) { var r = this.seg0.p1, s = hi.angle(r, this.seg0.p0), o = (hi.angle(r, this.seg1.p1), hi.angleBetweenOriented(this.seg0.p0, r, this.seg1.p1)), a = o / 2, u = hi.normalize(s + a), l = hi.normalize(u + Math.PI), h = i * n, c = h * Math.abs(Math.sin(a)), g = n - c, d = r.x + h * Math.cos(l), m = r.y + h * Math.sin(l), p = new f(d, m), v = new ce(r, p), y = v.pointAlongOffset(1, g), x = v.pointAlongOffset(1, -g); this.side === cn.LEFT ? (this.segList.addPt(y), this.segList.addPt(x)) : (this.segList.addPt(x), this.segList.addPt(y)) }, computeOffsetSegment: function (t, e, n, i) { var r = e === cn.LEFT ? 1 : -1, s = t.p1.x - t.p0.x, o = t.p1.y - t.p0.y, a = Math.sqrt(s * s + o * o), u = r * n * s / a, l = r * n * o / a; i.p0.x = t.p0.x - l, i.p0.y = t.p0.y + u, i.p1.x = t.p1.x - l, i.p1.y = t.p1.y + u }, addFilletArc: function (t, e, n, i, r) { var s = i === he.CLOCKWISE ? -1 : 1, o = Math.abs(e - n), a = Math.trunc(o / this.filletAngleQuantum + .5); if (1 > a) return null; var u = null, l = null; u = 0, l = o / a; for (var h = u, c = new f; o > h;) { var g = e + s * h; c.x = t.x + r * Math.cos(g), c.y = t.y + r * Math.sin(g), this.segList.addPt(c), h += l } }, addInsideTurn: function (t, e) { if (this.li.computeIntersection(this.offset0.p0, this.offset0.p1, this.offset1.p0, this.offset1.p1), this.li.hasIntersection()) this.segList.addPt(this.li.getIntersection(0)); else if (this._hasNarrowConcaveAngle = !0, this.offset0.p1.distance(this.offset1.p0) < this.distance * Xi.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR) this.segList.addPt(this.offset0.p1); else { if (this.segList.addPt(this.offset0.p1), this.closingSegLengthFactor > 0) { var n = new f((this.closingSegLengthFactor * this.offset0.p1.x + this.s1.x) / (this.closingSegLengthFactor + 1), (this.closingSegLengthFactor * this.offset0.p1.y + this.s1.y) / (this.closingSegLengthFactor + 1)); this.segList.addPt(n); var i = new f((this.closingSegLengthFactor * this.offset1.p0.x + this.s1.x) / (this.closingSegLengthFactor + 1), (this.closingSegLengthFactor * this.offset1.p0.y + this.s1.y) / (this.closingSegLengthFactor + 1)); this.segList.addPt(i) } else this.segList.addPt(this.s1); this.segList.addPt(this.offset1.p0) } }, createCircle: function (t) { var e = new f(t.x + this.distance, t.y); this.segList.addPt(e), this.addFilletArc(t, 0, 2 * Math.PI, -1, this.distance), this.segList.closeRing() }, addBevelJoin: function (t, e) { this.segList.addPt(t.p1), this.segList.addPt(e.p0) }, init: function (t) { this.distance = t, this.maxCurveSegmentError = t * (1 - Math.cos(this.filletAngleQuantum / 2)), this.segList = new Yi, this.segList.setPrecisionModel(this.precisionModel), this.segList.setMinimumVertexDistance(t * Xi.CURVE_VERTEX_SNAP_DISTANCE_FACTOR) }, addCollinear: function (t) { this.li.computeIntersection(this.s0, this.s1, this.s1, this.s2); var e = this.li.getIntersectionNum(); e >= 2 && (this.bufParams.getJoinStyle() === Bi.JOIN_BEVEL || this.bufParams.getJoinStyle() === Bi.JOIN_MITRE ? (t && this.segList.addPt(this.offset0.p1), this.segList.addPt(this.offset1.p0)) : this.addFilletCorner(this.s1, this.offset0.p1, this.offset1.p0, he.CLOCKWISE, this.distance)) }, closeRing: function () { this.segList.closeRing() }, hasNarrowConcaveAngle: function () { return this._hasNarrowConcaveAngle }, interfaces_: function () { return [] }, getClass: function () { return Xi } + }), Xi.OFFSET_SEGMENT_SEPARATION_FACTOR = .001, Xi.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR = .001, Xi.CURVE_VERTEX_SNAP_DISTANCE_FACTOR = 1e-6, Xi.MAX_CLOSING_SEG_LEN_FACTOR = 80, e(Hi.prototype, { getOffsetCurve: function (t, e) { if (this.distance = e, 0 === e) return null; var n = 0 > e, i = Math.abs(e), r = this.getSegGen(i); t.length <= 1 ? this.computePointCurve(t[0], r) : this.computeOffsetCurve(t, n, r); var s = r.getCoordinates(); return n && H.reverse(s), s }, computeSingleSidedBufferCurve: function (t, e, n) { var i = this.simplifyTolerance(this.distance); if (e) { n.addSegments(t, !0); var r = Ui.simplify(t, -i), s = r.length - 1; n.initSideSegments(r[s], r[s - 1], cn.LEFT), n.addFirstSegment(); for (var o = s - 2; o >= 0; o--)n.addNextSegment(r[o], !0) } else { n.addSegments(t, !1); var a = Ui.simplify(t, i), u = a.length - 1; n.initSideSegments(a[0], a[1], cn.LEFT), n.addFirstSegment(); for (var o = 2; u >= o; o++)n.addNextSegment(a[o], !0) } n.addLastSegment(), n.closeRing() }, computeRingBufferCurve: function (t, e, n) { var i = this.simplifyTolerance(this.distance); e === cn.RIGHT && (i = -i); var r = Ui.simplify(t, i), s = r.length - 1; n.initSideSegments(r[s - 1], r[0], e); for (var o = 1; s >= o; o++) { var a = 1 !== o; n.addNextSegment(r[o], a) } n.closeRing() }, computeLineBufferCurve: function (t, e) { var n = this.simplifyTolerance(this.distance), i = Ui.simplify(t, n), r = i.length - 1; e.initSideSegments(i[0], i[1], cn.LEFT); for (var s = 2; r >= s; s++)e.addNextSegment(i[s], !0); e.addLastSegment(), e.addLineEndCap(i[r - 1], i[r]); var o = Ui.simplify(t, -n), a = o.length - 1; e.initSideSegments(o[a], o[a - 1], cn.LEFT); for (var s = a - 2; s >= 0; s--)e.addNextSegment(o[s], !0); e.addLastSegment(), e.addLineEndCap(o[1], o[0]), e.closeRing() }, computePointCurve: function (t, e) { switch (this.bufParams.getEndCapStyle()) { case Bi.CAP_ROUND: e.createCircle(t); break; case Bi.CAP_SQUARE: e.createSquare(t) } }, getLineCurve: function (t, e) { if (this.distance = e, 0 > e && !this.bufParams.isSingleSided()) return null; if (0 === e) return null; var n = Math.abs(e), i = this.getSegGen(n); if (t.length <= 1) this.computePointCurve(t[0], i); else if (this.bufParams.isSingleSided()) { var r = 0 > e; this.computeSingleSidedBufferCurve(t, r, i) } else this.computeLineBufferCurve(t, i); var s = i.getCoordinates(); return s }, getBufferParameters: function () { return this.bufParams }, simplifyTolerance: function (t) { return t * this.bufParams.getSimplifyFactor() }, getRingCurve: function (t, e, n) { if (this.distance = n, t.length <= 2) return this.getLineCurve(t, n); if (0 === n) return Hi.copyCoordinates(t); var i = this.getSegGen(n); return this.computeRingBufferCurve(t, e, i), i.getCoordinates() }, computeOffsetCurve: function (t, e, n) { var i = this.simplifyTolerance(this.distance); if (e) { var r = Ui.simplify(t, -i), s = r.length - 1; n.initSideSegments(r[s], r[s - 1], cn.LEFT), n.addFirstSegment(); for (var o = s - 2; o >= 0; o--)n.addNextSegment(r[o], !0) } else { var a = Ui.simplify(t, i), u = a.length - 1; n.initSideSegments(a[0], a[1], cn.LEFT), n.addFirstSegment(); for (var o = 2; u >= o; o++)n.addNextSegment(a[o], !0) } n.addLastSegment() }, getSegGen: function (t) { return new Xi(this.precisionModel, this.bufParams, t) }, interfaces_: function () { return [] }, getClass: function () { return Hi } }), Hi.copyCoordinates = function (t) { for (var e = new Array(t.length).fill(null), n = 0; n < e.length; n++)e[n] = new f(t[n]); return e }, e(Wi.prototype, { findStabbedSegments: function () { if (1 === arguments.length) { for (var t = arguments[0], e = new I, n = this.subgraphs.iterator(); n.hasNext();) { var i = n.next(), r = i.getEnvelope(); t.y < r.getMinY() || t.y > r.getMaxY() || this.findStabbedSegments(t, i.getDirectedEdges(), e) } return e } if (3 === arguments.length) if (R(arguments[2], y) && arguments[0] instanceof f && arguments[1] instanceof In) for (var s = arguments[0], o = arguments[1], a = arguments[2], u = o.getEdge().getCoordinates(), n = 0; n < u.length - 1; n++) { this.seg.p0 = u[n], this.seg.p1 = u[n + 1], this.seg.p0.y > this.seg.p1.y && this.seg.reverse(); var l = Math.max(this.seg.p0.x, this.seg.p1.x); if (!(l < s.x || this.seg.isHorizontal() || s.y < this.seg.p0.y || s.y > this.seg.p1.y || he.computeOrientation(this.seg.p0, this.seg.p1, s) === he.RIGHT)) { var h = o.getDepth(cn.LEFT); this.seg.p0.equals(u[n]) || (h = o.getDepth(cn.RIGHT)); var c = new ji(this.seg, h); a.add(c) } } else if (R(arguments[2], y) && arguments[0] instanceof f && R(arguments[1], y)) for (var g = arguments[0], d = arguments[1], m = arguments[2], n = d.iterator(); n.hasNext();) { var p = n.next(); p.isForward() && this.findStabbedSegments(g, p, m) } }, getDepth: function (t) { var e = this.findStabbedSegments(t); if (0 === e.size()) return 0; var n = ho.min(e); return n.leftDepth }, interfaces_: function () { return [] }, getClass: function () { return Wi } }), e(ji.prototype, { compareTo: function (t) { var e = t; if (this.upwardSeg.minX() >= e.upwardSeg.maxX()) return 1; if (this.upwardSeg.maxX() <= e.upwardSeg.minX()) return -1; var n = this.upwardSeg.orientationIndex(e.upwardSeg); return 0 !== n ? n : (n = -1 * e.upwardSeg.orientationIndex(this.upwardSeg), 0 !== n ? n : this.upwardSeg.compareTo(e.upwardSeg)) }, compareX: function (t, e) { var n = t.p0.compareTo(e.p0); return 0 !== n ? n : t.p1.compareTo(e.p1) }, toString: function () { return this.upwardSeg.toString() }, interfaces_: function () { return [s] }, getClass: function () { return ji } }), Wi.DepthSegment = ji, e(Zi.prototype, { addPoint: function (t) { if (this.distance <= 0) return null; var e = t.getCoordinates(), n = this.curveBuilder.getLineCurve(e, this.distance); this.addCurve(n, L.EXTERIOR, L.INTERIOR) }, addPolygon: function (t) { var e = this.distance, n = cn.LEFT; this.distance < 0 && (e = -this.distance, n = cn.RIGHT); var i = t.getExteriorRing(), r = H.removeRepeatedPoints(i.getCoordinates()); if (this.distance < 0 && this.isErodedCompletely(i, this.distance)) return null; if (this.distance <= 0 && r.length < 3) return null; this.addPolygonRing(r, e, n, L.EXTERIOR, L.INTERIOR); for (var s = 0; s < t.getNumInteriorRing(); s++) { var o = t.getInteriorRingN(s), a = H.removeRepeatedPoints(o.getCoordinates()); this.distance > 0 && this.isErodedCompletely(o, -this.distance) || this.addPolygonRing(a, e, cn.opposite(n), L.INTERIOR, L.EXTERIOR) } }, isTriangleErodedCompletely: function (t, e) { var n = new ci(t[0], t[1], t[2]), i = n.inCentre(), r = he.distancePointLine(i, n.p0, n.p1); return r < Math.abs(e) }, addLineString: function (t) { if (this.distance <= 0 && !this.curveBuilder.getBufferParameters().isSingleSided()) return null; var e = H.removeRepeatedPoints(t.getCoordinates()), n = this.curveBuilder.getLineCurve(e, this.distance); this.addCurve(n, L.EXTERIOR, L.INTERIOR) }, addCurve: function (t, e, n) { if (null === t || t.length < 2) return null; var i = new Ze(t, new fn(0, L.BOUNDARY, e, n)); this.curveList.add(i) }, getCurves: function () { return this.add(this.inputGeom), this.curveList }, addPolygonRing: function (t, e, n, i, r) { if (0 === e && t.length < Pt.MINIMUM_VALID_SIZE) return null; var s = i, o = r; t.length >= Pt.MINIMUM_VALID_SIZE && he.isCCW(t) && (s = r, o = i, n = cn.opposite(n)); var a = this.curveBuilder.getRingCurve(t, n, e); this.addCurve(a, s, o) }, add: function (t) { if (t.isEmpty()) return null; if (t instanceof bt) this.addPolygon(t); else if (t instanceof wt) this.addLineString(t); else if (t instanceof Lt) this.addPoint(t); else if (t instanceof Tt) this.addCollection(t); else if (t instanceof ft) this.addCollection(t); else if (t instanceof Ot) this.addCollection(t); else { if (!(t instanceof gt)) throw new UnsupportedOperationException(t.getClass().getName()); this.addCollection(t) } }, isErodedCompletely: function (t, e) { var n = t.getCoordinates(); if (n.length < 4) return 0 > e; if (4 === n.length) return this.isTriangleErodedCompletely(n, e); var i = t.getEnvelopeInternal(), r = Math.min(i.getHeight(), i.getWidth()); return 0 > e && 2 * Math.abs(e) > r }, addCollection: function (t) { for (var e = 0; e < t.getNumGeometries(); e++) { var n = t.getGeometryN(e); this.add(n) } }, interfaces_: function () { return [] }, getClass: function () { return Zi } }), e(Ji.prototype, { isTrivialIntersection: function (t, e, n, i) { if (t === n && 1 === this.li.getIntersectionNum()) { if (Ji.isAdjacentSegments(e, i)) return !0; if (t.isClosed()) { var r = t.size() - 1; if (0 === e && i === r || 0 === i && e === r) return !0 } } return !1 }, getProperIntersectionPoint: function () { return this.properIntersectionPoint }, hasProperInteriorIntersection: function () { return this.hasProperInterior }, getLineIntersector: function () { return this.li }, hasProperIntersection: function () { return this.hasProper }, processIntersections: function (t, e, n, i) { if (t === n && e === i) return null; this.numTests++; var r = t.getCoordinates()[e], s = t.getCoordinates()[e + 1], o = n.getCoordinates()[i], a = n.getCoordinates()[i + 1]; this.li.computeIntersection(r, s, o, a), this.li.hasIntersection() && (this.numIntersections++ , this.li.isInteriorIntersection() && (this.numInteriorIntersections++ , this.hasInterior = !0), this.isTrivialIntersection(t, e, n, i) || (this._hasIntersection = !0, t.addIntersections(this.li, e, 0), n.addIntersections(this.li, i, 1), this.li.isProper() && (this.numProperIntersections++ , this.hasProper = !0, this.hasProperInterior = !0))) }, hasIntersection: function () { return this._hasIntersection }, isDone: function () { return !1 }, hasInteriorIntersection: function () { return this.hasInterior }, interfaces_: function () { return [on] }, getClass: function () { return Ji } }), Ji.isAdjacentSegments = function (t, e) { return 1 === Math.abs(t - e) }, e(Ki.prototype, { setWorkingPrecisionModel: function (t) { this.workingPrecisionModel = t }, insertUniqueEdge: function (t) { var e = this.edgeList.findEqualEdge(t); if (null !== e) { var n = e.getLabel(), i = t.getLabel(); e.isPointwiseEqual(t) || (i = new fn(t.getLabel()), i.flip()), n.merge(i); var r = Ki.depthDelta(i), s = e.getDepthDelta(), o = s + r; e.setDepthDelta(o) } else this.edgeList.add(t), t.setDepthDelta(Ki.depthDelta(t.getLabel())) }, buildSubgraphs: function (t, e) { for (var n = new I, i = t.iterator(); i.hasNext();) { var r = i.next(), s = r.getRightmostCoordinate(), o = new Wi(n), a = o.getDepth(s); r.computeDepth(a), r.findResultEdges(), n.add(r), e.add(r.getDirectedEdges(), r.getNodes()) } }, createSubgraphs: function (t) { for (var e = new I, n = t.getNodes().iterator(); n.hasNext();) { var i = n.next(); if (!i.isVisited()) { var r = new ki; r.create(i), e.add(r) } } return ho.sort(e, ho.reverseOrder()), e }, createEmptyResultGeometry: function () { var t = this.geomFact.createPolygon(); return t }, getNoder: function (t) { if (null !== this.workingNoder) return this.workingNoder; var e = new nn, n = new ae; return n.setPrecisionModel(t), e.setSegmentIntersector(new Ji(n)), e }, buffer: function (t, e) { var n = this.workingPrecisionModel; null === n && (n = t.getPrecisionModel()), this.geomFact = t.getFactory(); var i = new Hi(n, this.bufParams), r = new Zi(t, e, i), s = r.getCurves(); if (s.size() <= 0) return this.createEmptyResultGeometry(); this.computeNodedEdges(s, n), this.graph = new Cn(new On), this.graph.addEdges(this.edgeList.getEdges()); var o = this.createSubgraphs(this.graph), a = new wn(this.geomFact); this.buildSubgraphs(o, a); var u = a.getPolygons(); if (u.size() <= 0) return this.createEmptyResultGeometry(); var l = this.geomFact.buildGeometry(u); return l }, computeNodedEdges: function (t, e) { var n = this.getNoder(e); n.computeNodes(t); for (var i = n.getNodedSubstrings(), r = i.iterator(); r.hasNext();) { var s = r.next(), o = s.getCoordinates(); if (2 !== o.length || !o[0].equals2D(o[1])) { var a = s.getData(), u = new Qn(s.getCoordinates(), new fn(a)); this.insertUniqueEdge(u) } } }, setNoder: function (t) { this.workingNoder = t }, interfaces_: function () { return [] }, getClass: function () { return Ki } }), Ki.depthDelta = function (t) { var e = t.getLocation(0, cn.LEFT), n = t.getLocation(0, cn.RIGHT); return e === L.INTERIOR && n === L.EXTERIOR ? 1 : e === L.EXTERIOR && n === L.INTERIOR ? -1 : 0 }, Ki.convertSegStrings = function (t) { for (var e = new ie, n = new I; t.hasNext();) { var i = t.next(), r = e.createLineString(i.getCoordinates()); n.add(r) } return e.buildGeometry(n) }, e(Qi.prototype, { checkEndPtVertexIntersections: function () { if (0 === arguments.length) for (var t = this.segStrings.iterator(); t.hasNext();) { var e = t.next(), n = e.getCoordinates(); this.checkEndPtVertexIntersections(n[0], this.segStrings), this.checkEndPtVertexIntersections(n[n.length - 1], this.segStrings) } else if (2 === arguments.length) for (var i = arguments[0], r = arguments[1], t = r.iterator(); t.hasNext();)for (var e = t.next(), n = e.getCoordinates(), s = 1; s < n.length - 1; s++)if (n[s].equals(i)) throw new l("found endpt/interior pt intersection at index " + s + " :pt " + i) }, checkInteriorIntersections: function () { if (0 === arguments.length) for (var t = this.segStrings.iterator(); t.hasNext();)for (var e = t.next(), n = this.segStrings.iterator(); n.hasNext();) { var i = n.next(); this.checkInteriorIntersections(e, i) } else if (2 === arguments.length) for (var r = arguments[0], s = arguments[1], o = r.getCoordinates(), a = s.getCoordinates(), u = 0; u < o.length - 1; u++)for (var h = 0; h < a.length - 1; h++)this.checkInteriorIntersections(r, u, s, h); else if (4 === arguments.length) { var c = arguments[0], g = arguments[1], f = arguments[2], d = arguments[3]; if (c === f && g === d) return null; var m = c.getCoordinates()[g], p = c.getCoordinates()[g + 1], v = f.getCoordinates()[d], y = f.getCoordinates()[d + 1]; if (this.li.computeIntersection(m, p, v, y), this.li.hasIntersection() && (this.li.isProper() || this.hasInteriorIntersection(this.li, m, p) || this.hasInteriorIntersection(this.li, v, y))) throw new l("found non-noded intersection at " + m + "-" + p + " and " + v + "-" + y) } }, checkValid: function () { this.checkEndPtVertexIntersections(), this.checkInteriorIntersections(), this.checkCollapses() }, checkCollapses: function () { if (0 === arguments.length) for (var t = this.segStrings.iterator(); t.hasNext();) { var e = t.next(); this.checkCollapses(e) } else if (1 === arguments.length) for (var n = arguments[0], i = n.getCoordinates(), t = 0; t < i.length - 2; t++)this.checkCollapse(i[t], i[t + 1], i[t + 2]) }, hasInteriorIntersection: function (t, e, n) { for (var i = 0; i < t.getIntersectionNum(); i++) { var r = t.getIntersection(i); if (!r.equals(e) && !r.equals(n)) return !0 } return !1 }, checkCollapse: function (t, e, n) { if (t.equals(n)) throw new l("found non-noded collapse at " + Qi.fact.createLineString([t, e, n])) }, interfaces_: function () { return [] }, getClass: function () { return Qi } }), Qi.fact = new ie, e($i.prototype, { intersectsScaled: function (t, e) { var n = Math.min(t.x, e.x), i = Math.max(t.x, e.x), r = Math.min(t.y, e.y), s = Math.max(t.y, e.y), o = this.maxx < n || this.minx > i || this.maxy < r || this.miny > s; if (o) return !1; var a = this.intersectsToleranceSquare(t, e); return g.isTrue(!(o && a), "Found bad envelope test"), a }, initCorners: function (t) { var e = .5; this.minx = t.x - e, this.maxx = t.x + e, this.miny = t.y - e, this.maxy = t.y + e, this.corner[0] = new f(this.maxx, this.maxy), this.corner[1] = new f(this.minx, this.maxy), this.corner[2] = new f(this.minx, this.miny), this.corner[3] = new f(this.maxx, this.miny) }, intersects: function (t, e) { return 1 === this.scaleFactor ? this.intersectsScaled(t, e) : (this.copyScaled(t, this.p0Scaled), this.copyScaled(e, this.p1Scaled), this.intersectsScaled(this.p0Scaled, this.p1Scaled)) }, scale: function (t) { return Math.round(t * this.scaleFactor) }, getCoordinate: function () { return this.originalPt }, copyScaled: function (t, e) { e.x = this.scale(t.x), e.y = this.scale(t.y) }, getSafeEnvelope: function () { if (null === this.safeEnv) { var t = $i.SAFE_ENV_EXPANSION_FACTOR / this.scaleFactor; this.safeEnv = new C(this.originalPt.x - t, this.originalPt.x + t, this.originalPt.y - t, this.originalPt.y + t) } return this.safeEnv }, intersectsPixelClosure: function (t, e) { return this.li.computeIntersection(t, e, this.corner[0], this.corner[1]), this.li.hasIntersection() ? !0 : (this.li.computeIntersection(t, e, this.corner[1], this.corner[2]), this.li.hasIntersection() ? !0 : (this.li.computeIntersection(t, e, this.corner[2], this.corner[3]), this.li.hasIntersection() ? !0 : (this.li.computeIntersection(t, e, this.corner[3], this.corner[0]), !!this.li.hasIntersection()))) }, intersectsToleranceSquare: function (t, e) { var n = !1, i = !1; return this.li.computeIntersection(t, e, this.corner[0], this.corner[1]), this.li.isProper() ? !0 : (this.li.computeIntersection(t, e, this.corner[1], this.corner[2]), this.li.isProper() ? !0 : (this.li.hasIntersection() && (n = !0), this.li.computeIntersection(t, e, this.corner[2], this.corner[3]), this.li.isProper() ? !0 : (this.li.hasIntersection() && (i = !0), this.li.computeIntersection(t, e, this.corner[3], this.corner[0]), this.li.isProper() ? !0 : n && i ? !0 : t.equals(this.pt) ? !0 : !!e.equals(this.pt)))) }, addSnappedNode: function (t, e) { var n = t.getCoordinate(e), i = t.getCoordinate(e + 1); return this.intersects(n, i) ? (t.addIntersection(this.getCoordinate(), e), !0) : !1 }, interfaces_: function () { return [] }, getClass: function () { return $i } }), $i.SAFE_ENV_EXPANSION_FACTOR = .75, e(tr.prototype, { select: function () { if (1 === arguments.length) arguments[0]; else if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; t.getLineSegment(e, this.selectedSegment), this.select(this.selectedSegment) } }, interfaces_: function () { return [] }, getClass: function () { return tr } }), e(er.prototype, { snap: function () { if (1 === arguments.length) { var t = arguments[0]; return this.snap(t, null, -1) } if (3 === arguments.length) { var e = arguments[0], n = arguments[1], i = arguments[2], r = e.getSafeEnvelope(), s = new nr(e, n, i); return this.index.query(r, { interfaces_: function () { return [De] }, visitItem: function (t) { var e = t; e.select(r, s) } }), s.isNodeAdded() } }, interfaces_: function () { return [] }, getClass: function () { return er } }), h(nr, tr), e(nr.prototype, { isNodeAdded: function () { return this._isNodeAdded }, select: function () { if (2 !== arguments.length) return tr.prototype.select.apply(this, arguments); var t = arguments[0], e = arguments[1], n = t.getContext(); return null !== this.parentEdge && n === this.parentEdge && e === this.hotPixelVertexIndex ? null : void (this._isNodeAdded = this.hotPixel.addSnappedNode(n, e)) }, interfaces_: function () { return [] }, getClass: function () { return nr } }), er.HotPixelSnapAction = nr, e(ir.prototype, { processIntersections: function (t, e, n, i) { if (t === n && e === i) return null; var r = t.getCoordinates()[e], s = t.getCoordinates()[e + 1], o = n.getCoordinates()[i], a = n.getCoordinates()[i + 1]; if (this.li.computeIntersection(r, s, o, a), this.li.hasIntersection() && this.li.isInteriorIntersection()) { for (var u = 0; u < this.li.getIntersectionNum(); u++)this.interiorIntersections.add(this.li.getIntersection(u)); t.addIntersections(this.li, e, 0), n.addIntersections(this.li, i, 1) } }, isDone: function () { return !1 }, getInteriorIntersections: function () { return this.interiorIntersections }, interfaces_: function () { return [on] }, getClass: function () { return ir } }), e(rr.prototype, { checkCorrectness: function (t) { var e = Ze.getNodedSubstrings(t), n = new Qi(e); try { n.checkValid() } catch (t) { if (!(t instanceof w)) throw t; t.printStackTrace() } finally { } }, getNodedSubstrings: function () { return Ze.getNodedSubstrings(this.nodedSegStrings) }, snapRound: function (t, e) { var n = this.findInteriorIntersections(t, e); this.computeIntersectionSnaps(n), this.computeVertexSnaps(t) }, findInteriorIntersections: function (t, e) { var n = new ir(e); return this.noder.setSegmentIntersector(n), this.noder.computeNodes(t), n.getInteriorIntersections() }, computeVertexSnaps: function () { if (R(arguments[0], p)) for (var t = arguments[0], e = t.iterator(); e.hasNext();) { var n = e.next(); this.computeVertexSnaps(n) } else if (arguments[0] instanceof Ze) for (var i = arguments[0], r = i.getCoordinates(), s = 0; s < r.length; s++) { var o = new $i(r[s], this.scaleFactor, this.li), a = this.pointSnapper.snap(o, i, s); a && i.addIntersection(r[s], s) } }, computeNodes: function (t) { this.nodedSegStrings = t, this.noder = new nn, this.pointSnapper = new er(this.noder.getIndex()), this.snapRound(t, this.li) }, computeIntersectionSnaps: function (t) { for (var e = t.iterator(); e.hasNext();) { var n = e.next(), i = new $i(n, this.scaleFactor, this.li); this.pointSnapper.snap(i) } }, interfaces_: function () { return [tn] }, getClass: function () { return rr } }), e(sr.prototype, { bufferFixedPrecision: function (t) { var e = new Fi(new rr(new ee(1)), t.getScale()), n = new Ki(this.bufParams); n.setWorkingPrecisionModel(t), n.setNoder(e), this.resultGeometry = n.buffer(this.argGeom, this.distance) }, bufferReducedPrecision: function () { if (0 === arguments.length) { for (var t = sr.MAX_PRECISION_DIGITS; t >= 0; t--) { try { this.bufferReducedPrecision(t) } catch (t) { if (!(t instanceof sn)) throw t; this.saveException = t } finally { } if (null !== this.resultGeometry) return null } throw this.saveException } if (1 === arguments.length) { var e = arguments[0], n = sr.precisionScaleFactor(this.argGeom, this.distance, e), i = new ee(n); this.bufferFixedPrecision(i) } }, computeGeometry: function () { if (this.bufferOriginalPrecision(), null !== this.resultGeometry) return null; var t = this.argGeom.getFactory().getPrecisionModel(); t.getType() === ee.FIXED ? this.bufferFixedPrecision(t) : this.bufferReducedPrecision() }, setQuadrantSegments: function (t) { this.bufParams.setQuadrantSegments(t) }, bufferOriginalPrecision: function () { try { var t = new Ki(this.bufParams); this.resultGeometry = t.buffer(this.argGeom, this.distance) } catch (t) { if (!(t instanceof l)) throw t; this.saveException = t } finally { } }, getResultGeometry: function (t) { return this.distance = t, this.computeGeometry(), this.resultGeometry }, setEndCapStyle: function (t) { this.bufParams.setEndCapStyle(t) }, interfaces_: function () { return [] }, getClass: function () { return sr } }), sr.bufferOp = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1], n = new sr(t), i = n.getResultGeometry(e); return i } if (3 === arguments.length) { if (Number.isInteger(arguments[2]) && arguments[0] instanceof B && "number" == typeof arguments[1]) { var r = arguments[0], s = arguments[1], o = arguments[2], a = new sr(r); a.setQuadrantSegments(o); var i = a.getResultGeometry(s); return i } if (arguments[2] instanceof Bi && arguments[0] instanceof B && "number" == typeof arguments[1]) { var u = arguments[0], l = arguments[1], h = arguments[2], a = new sr(u, h), i = a.getResultGeometry(l); return i } } else if (4 === arguments.length) { var c = arguments[0], g = arguments[1], f = arguments[2], d = arguments[3], a = new sr(c); a.setQuadrantSegments(f), a.setEndCapStyle(d); var i = a.getResultGeometry(g); return i } }, sr.precisionScaleFactor = function (t, e, n) { var i = t.getEnvelopeInternal(), r = b.max(Math.abs(i.getMaxX()), Math.abs(i.getMaxY()), Math.abs(i.getMinX()), Math.abs(i.getMinY())), s = e > 0 ? e : 0, o = r + 2 * s, a = Math.trunc(Math.log(o) / Math.log(10) + 1), u = n - a, l = Math.pow(10, u); return l }, sr.CAP_ROUND = Bi.CAP_ROUND, sr.CAP_BUTT = Bi.CAP_FLAT, sr.CAP_FLAT = Bi.CAP_FLAT, sr.CAP_SQUARE = Bi.CAP_SQUARE, sr.MAX_PRECISION_DIGITS = 12; var Co = Object.freeze({ BufferOp: sr, BufferParameters: Bi }); e(or.prototype, { filter: function (t) { t instanceof bt && this.comps.add(t) }, interfaces_: function () { return [ht] }, getClass: function () { return or } }), or.getPolygons = function () { if (1 === arguments.length) { var t = arguments[0]; return or.getPolygons(t, new I) } if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return e instanceof bt ? n.add(e) : e instanceof gt && e.apply(new or(n)), n } }, e(ar.prototype, { isInsideArea: function () { return this.segIndex === ar.INSIDE_AREA }, getCoordinate: function () { return this.pt }, getGeometryComponent: function () { return this.component }, getSegmentIndex: function () { return this.segIndex }, interfaces_: function () { return [] }, getClass: function () { return ar } }), ar.INSIDE_AREA = -1, e(ur.prototype, { filter: function (t) { t instanceof Lt && this.pts.add(t) }, interfaces_: function () { return [ht] }, getClass: function () { return ur } }), ur.getPoints = function () { if (1 === arguments.length) { var t = arguments[0]; return t instanceof Lt ? ho.singletonList(t) : ur.getPoints(t, new I) } if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return e instanceof Lt ? n.add(e) : e instanceof gt && e.apply(new ur(n)), n } }, e(lr.prototype, { filter: function (t) { (t instanceof Lt || t instanceof wt || t instanceof bt) && this.locations.add(new ar(t, 0, t.getCoordinate())) }, interfaces_: function () { return [ht] }, getClass: function () { return lr } }), lr.getLocations = function (t) { var e = new I; return t.apply(new lr(e)), e }, e(hr.prototype, { + computeContainmentDistance: function () { if (0 === arguments.length) { var t = new Array(2).fill(null); if (this.computeContainmentDistance(0, t), this.minDistance <= this.terminateDistance) return null; this.computeContainmentDistance(1, t) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1], i = 1 - e, r = or.getPolygons(this.geom[e]); if (r.size() > 0) { var s = lr.getLocations(this.geom[i]); if (this.computeContainmentDistance(s, r, n), this.minDistance <= this.terminateDistance) return this.minDistanceLocation[i] = n[0], this.minDistanceLocation[e] = n[1], null } } else if (3 === arguments.length) if (arguments[2] instanceof Array && R(arguments[0], y) && R(arguments[1], y)) { for (var o = arguments[0], a = arguments[1], u = arguments[2], l = 0; l < o.size(); l++)for (var h = o.get(l), c = 0; c < a.size(); c++)if (this.computeContainmentDistance(h, a.get(c), u), this.minDistance <= this.terminateDistance) return null } else if (arguments[2] instanceof Array && arguments[0] instanceof ar && arguments[1] instanceof bt) { var g = arguments[0], f = arguments[1], d = arguments[2], m = g.getCoordinate(); if (L.EXTERIOR !== this.ptLocator.locate(m, f)) return this.minDistance = 0, d[0] = g, d[1] = new ar(f, m), null } }, computeMinDistanceLinesPoints: function (t, e, n) { for (var i = 0; i < t.size(); i++)for (var r = t.get(i), s = 0; s < e.size(); s++) { var o = e.get(s); if (this.computeMinDistance(r, o, n), this.minDistance <= this.terminateDistance) return null } }, computeFacetDistance: function () { var t = new Array(2).fill(null), e = kn.getLines(this.geom[0]), n = kn.getLines(this.geom[1]), i = ur.getPoints(this.geom[0]), r = ur.getPoints(this.geom[1]); return this.computeMinDistanceLines(e, n, t), this.updateMinDistance(t, !1), this.minDistance <= this.terminateDistance ? null : (t[0] = null, t[1] = null, this.computeMinDistanceLinesPoints(e, r, t), this.updateMinDistance(t, !1), this.minDistance <= this.terminateDistance ? null : (t[0] = null, t[1] = null, this.computeMinDistanceLinesPoints(n, i, t), this.updateMinDistance(t, !0), this.minDistance <= this.terminateDistance ? null : (t[0] = null, t[1] = null, this.computeMinDistancePoints(i, r, t), void this.updateMinDistance(t, !1)))) }, nearestLocations: function () { return this.computeMinDistance(), this.minDistanceLocation }, updateMinDistance: function (t, e) { return null === t[0] ? null : void (e ? (this.minDistanceLocation[0] = t[1], this.minDistanceLocation[1] = t[0]) : (this.minDistanceLocation[0] = t[0], this.minDistanceLocation[1] = t[1])) }, nearestPoints: function () { this.computeMinDistance(); var t = [this.minDistanceLocation[0].getCoordinate(), this.minDistanceLocation[1].getCoordinate()]; return t }, computeMinDistance: function () { + if (0 === arguments.length) { if (null !== this.minDistanceLocation) return null; if (this.minDistanceLocation = new Array(2).fill(null), this.computeContainmentDistance(), this.minDistance <= this.terminateDistance) return null; this.computeFacetDistance() } else if (3 === arguments.length) if (arguments[2] instanceof Array && arguments[0] instanceof wt && arguments[1] instanceof Lt) { var t = arguments[0], e = arguments[1], n = arguments[2]; if (t.getEnvelopeInternal().distance(e.getEnvelopeInternal()) > this.minDistance) return null; for (var i = t.getCoordinates(), r = e.getCoordinate(), s = 0; s < i.length - 1; s++) { var o = he.distancePointLine(r, i[s], i[s + 1]); if (o < this.minDistance) { this.minDistance = o; var a = new ce(i[s], i[s + 1]), u = a.closestPoint(r); n[0] = new ar(t, s, u), n[1] = new ar(e, 0, r) } if (this.minDistance <= this.terminateDistance) return null } } else if (arguments[2] instanceof Array && arguments[0] instanceof wt && arguments[1] instanceof wt) { + var l = arguments[0], h = arguments[1], c = arguments[2]; if (l.getEnvelopeInternal().distance(h.getEnvelopeInternal()) > this.minDistance) return null; for (var i = l.getCoordinates(), g = h.getCoordinates(), s = 0; s < i.length - 1; s++)for (var f = 0; f < g.length - 1; f++) { + var o = he.distanceLineLine(i[s], i[s + 1], g[f], g[f + 1]); if (o < this.minDistance) { + this.minDistance = o; var d = new ce(i[s], i[s + 1]), m = new ce(g[f], g[f + 1]), p = d.closestPoints(m); c[0] = new ar(l, s, p[0]), + c[1] = new ar(h, f, p[1]) + } if (this.minDistance <= this.terminateDistance) return null + } + } + }, computeMinDistancePoints: function (t, e, n) { for (var i = 0; i < t.size(); i++)for (var r = t.get(i), s = 0; s < e.size(); s++) { var o = e.get(s), a = r.getCoordinate().distance(o.getCoordinate()); if (a < this.minDistance && (this.minDistance = a, n[0] = new ar(r, 0, r.getCoordinate()), n[1] = new ar(o, 0, o.getCoordinate())), this.minDistance <= this.terminateDistance) return null } }, distance: function () { if (null === this.geom[0] || null === this.geom[1]) throw new i("null geometries are not supported"); return this.geom[0].isEmpty() || this.geom[1].isEmpty() ? 0 : (this.computeMinDistance(), this.minDistance) }, computeMinDistanceLines: function (t, e, n) { for (var i = 0; i < t.size(); i++)for (var r = t.get(i), s = 0; s < e.size(); s++) { var o = e.get(s); if (this.computeMinDistance(r, o, n), this.minDistance <= this.terminateDistance) return null } }, interfaces_: function () { return [] }, getClass: function () { return hr } + }), hr.distance = function (t, e) { var n = new hr(t, e); return n.distance() }, hr.isWithinDistance = function (t, e, n) { var i = new hr(t, e, n); return i.distance() <= n }, hr.nearestPoints = function (t, e) { var n = new hr(t, e); return n.nearestPoints() }; var wo = Object.freeze({ DistanceOp: hr }); e(cr.prototype, { getCoordinates: function () { if (null === this.coordinates) { for (var t = 0, e = 0, n = new N, i = this.directedEdges.iterator(); i.hasNext();) { var r = i.next(); r.getEdgeDirection() ? t++ : e++ , n.add(r.getEdge().getLine().getCoordinates(), !1, r.getEdgeDirection()) } this.coordinates = n.toCoordinateArray(), e > t && H.reverse(this.coordinates) } return this.coordinates }, toLineString: function () { return this.factory.createLineString(this.getCoordinates()) }, add: function (t) { this.directedEdges.add(t) }, interfaces_: function () { return [] }, getClass: function () { return cr } }), e(gr.prototype, { setVisited: function (t) { this._isVisited = t }, isMarked: function () { return this._isMarked }, setData: function (t) { this.data = t }, getData: function () { return this.data }, setMarked: function (t) { this._isMarked = t }, getContext: function () { return this.data }, isVisited: function () { return this._isVisited }, setContext: function (t) { this.data = t }, interfaces_: function () { return [] }, getClass: function () { return gr } }), gr.getComponentWithVisitedState = function (t, e) { for (; t.hasNext();) { var n = t.next(); if (n.isVisited() === e) return n } return null }, gr.setVisited = function (t, e) { for (; t.hasNext();) { var n = t.next(); n.setVisited(e) } }, gr.setMarked = function (t, e) { for (; t.hasNext();) { var n = t.next(); n.setMarked(e) } }, h(fr, gr), e(fr.prototype, { isRemoved: function () { return null === this.parentEdge }, compareDirection: function (t) { return this.quadrant > t.quadrant ? 1 : this.quadrant < t.quadrant ? -1 : he.computeOrientation(t.p0, t.p1, this.p1) }, getCoordinate: function () { return this.from.getCoordinate() }, print: function (t) { var e = this.getClass().getName(), n = e.lastIndexOf("."), i = e.substring(n + 1); t.print(" " + i + ": " + this.p0 + " - " + this.p1 + " " + this.quadrant + ":" + this.angle) }, getDirectionPt: function () { return this.p1 }, getAngle: function () { return this.angle }, compareTo: function (t) { var e = t; return this.compareDirection(e) }, getFromNode: function () { return this.from }, getSym: function () { return this.sym }, setEdge: function (t) { this.parentEdge = t }, remove: function () { this.sym = null, this.parentEdge = null }, getEdge: function () { return this.parentEdge }, getQuadrant: function () { return this.quadrant }, setSym: function (t) { this.sym = t }, getToNode: function () { return this.to }, getEdgeDirection: function () { return this.edgeDirection }, interfaces_: function () { return [s] }, getClass: function () { return fr } }), fr.toEdges = function (t) { for (var e = new I, n = t.iterator(); n.hasNext();)e.add(n.next().parentEdge); return e }, h(dr, fr), e(dr.prototype, { getNext: function () { return 2 !== this.getToNode().getDegree() ? null : this.getToNode().getOutEdges().getEdges().get(0) === this.getSym() ? this.getToNode().getOutEdges().getEdges().get(1) : (g.isTrue(this.getToNode().getOutEdges().getEdges().get(1) === this.getSym()), this.getToNode().getOutEdges().getEdges().get(0)) }, interfaces_: function () { return [] }, getClass: function () { return dr } }), h(mr, gr), e(mr.prototype, { isRemoved: function () { return null === this.dirEdge }, setDirectedEdges: function (t, e) { this.dirEdge = [t, e], t.setEdge(this), e.setEdge(this), t.setSym(e), e.setSym(t), t.getFromNode().addOutEdge(t), e.getFromNode().addOutEdge(e) }, getDirEdge: function () { if (Number.isInteger(arguments[0])) { var t = arguments[0]; return this.dirEdge[t] } if (arguments[0] instanceof vr) { var e = arguments[0]; return this.dirEdge[0].getFromNode() === e ? this.dirEdge[0] : this.dirEdge[1].getFromNode() === e ? this.dirEdge[1] : null } }, remove: function () { this.dirEdge = null }, getOppositeNode: function (t) { return this.dirEdge[0].getFromNode() === t ? this.dirEdge[0].getToNode() : this.dirEdge[1].getFromNode() === t ? this.dirEdge[1].getToNode() : null }, interfaces_: function () { return [] }, getClass: function () { return mr } }), e(pr.prototype, { getNextEdge: function (t) { var e = this.getIndex(t); return this.outEdges.get(this.getIndex(e + 1)) }, getCoordinate: function () { var t = this.iterator(); if (!t.hasNext()) return null; var e = t.next(); return e.getCoordinate() }, iterator: function () { return this.sortEdges(), this.outEdges.iterator() }, sortEdges: function () { this.sorted || (ho.sort(this.outEdges), this.sorted = !0) }, remove: function (t) { this.outEdges.remove(t) }, getEdges: function () { return this.sortEdges(), this.outEdges }, getNextCWEdge: function (t) { var e = this.getIndex(t); return this.outEdges.get(this.getIndex(e - 1)) }, getIndex: function () { if (arguments[0] instanceof mr) { var t = arguments[0]; this.sortEdges(); for (var e = 0; e < this.outEdges.size(); e++) { var n = this.outEdges.get(e); if (n.getEdge() === t) return e } return -1 } if (arguments[0] instanceof fr) { var i = arguments[0]; this.sortEdges(); for (var e = 0; e < this.outEdges.size(); e++) { var n = this.outEdges.get(e); if (n === i) return e } return -1 } if (Number.isInteger(arguments[0])) { var r = arguments[0], s = r % this.outEdges.size(); return 0 > s && (s += this.outEdges.size()), s } }, add: function (t) { this.outEdges.add(t), this.sorted = !1 }, getDegree: function () { return this.outEdges.size() }, interfaces_: function () { return [] }, getClass: function () { return pr } }), h(vr, gr), e(vr.prototype, { isRemoved: function () { return null === this.pt }, addOutEdge: function (t) { this.deStar.add(t) }, getCoordinate: function () { return this.pt }, getOutEdges: function () { return this.deStar }, remove: function () { if (0 === arguments.length) this.pt = null; else if (1 === arguments.length) { var t = arguments[0]; this.deStar.remove(t) } }, getIndex: function (t) { return this.deStar.getIndex(t) }, getDegree: function () { return this.deStar.getDegree() }, interfaces_: function () { return [] }, getClass: function () { return vr } }), vr.getEdgesBetween = function (t, e) { var n = fr.toEdges(t.getOutEdges().getEdges()), i = new Q(n), r = fr.toEdges(e.getOutEdges().getEdges()); return i.retainAll(r), i }, h(yr, mr), e(yr.prototype, { getLine: function () { return this.line }, interfaces_: function () { return [] }, getClass: function () { return yr } }), e(xr.prototype, { find: function (t) { return this.nodeMap.get(t) }, iterator: function () { return this.nodeMap.values().iterator() }, remove: function (t) { return this.nodeMap.remove(t) }, values: function () { return this.nodeMap.values() }, add: function (t) { return this.nodeMap.put(t.getCoordinate(), t), t }, interfaces_: function () { return [] }, getClass: function () { return xr } }), e(Er.prototype, { findNodesOfDegree: function (t) { for (var e = new I, n = this.nodeIterator(); n.hasNext();) { var i = n.next(); i.getDegree() === t && e.add(i) } return e }, dirEdgeIterator: function () { return this.dirEdges.iterator() }, edgeIterator: function () { return this.edges.iterator() }, remove: function () { if (arguments[0] instanceof mr) { var t = arguments[0]; this.remove(t.getDirEdge(0)), this.remove(t.getDirEdge(1)), this.edges.remove(t), t.remove() } else if (arguments[0] instanceof fr) { var e = arguments[0], n = e.getSym(); null !== n && n.setSym(null), e.getFromNode().remove(e), e.remove(), this.dirEdges.remove(e) } else if (arguments[0] instanceof vr) { for (var i = arguments[0], r = i.getOutEdges().getEdges(), s = r.iterator(); s.hasNext();) { var o = s.next(), n = o.getSym(); null !== n && this.remove(n), this.dirEdges.remove(o); var a = o.getEdge(); null !== a && this.edges.remove(a) } this.nodeMap.remove(i.getCoordinate()), i.remove() } }, findNode: function (t) { return this.nodeMap.find(t) }, getEdges: function () { return this.edges }, nodeIterator: function () { return this.nodeMap.iterator() }, contains: function () { if (arguments[0] instanceof mr) { var t = arguments[0]; return this.edges.contains(t) } if (arguments[0] instanceof fr) { var e = arguments[0]; return this.dirEdges.contains(e) } }, add: function () { if (arguments[0] instanceof vr) { var t = arguments[0]; this.nodeMap.add(t) } else if (arguments[0] instanceof mr) { var e = arguments[0]; this.edges.add(e), this.add(e.getDirEdge(0)), this.add(e.getDirEdge(1)) } else if (arguments[0] instanceof fr) { var n = arguments[0]; this.dirEdges.add(n) } }, getNodes: function () { return this.nodeMap.values() }, interfaces_: function () { return [] }, getClass: function () { return Er } }), h(Ir, Er), e(Ir.prototype, { addEdge: function (t) { if (t.isEmpty()) return null; var e = H.removeRepeatedPoints(t.getCoordinates()); if (e.length <= 1) return null; var n = e[0], i = e[e.length - 1], r = this.getNode(n), s = this.getNode(i), o = new dr(r, s, e[1], !0), a = new dr(s, r, e[e.length - 2], !1), u = new yr(t); u.setDirectedEdges(o, a), this.add(u) }, getNode: function (t) { var e = this.findNode(t); return null === e && (e = new vr(t), this.add(e)), e }, interfaces_: function () { return [] }, getClass: function () { return Ir } }), e(Nr.prototype, { buildEdgeStringsForUnprocessedNodes: function () { for (var t = this.graph.getNodes().iterator(); t.hasNext();) { var e = t.next(); e.isMarked() || (g.isTrue(2 === e.getDegree()), this.buildEdgeStringsStartingAt(e), e.setMarked(!0)) } }, buildEdgeStringsForNonDegree2Nodes: function () { for (var t = this.graph.getNodes().iterator(); t.hasNext();) { var e = t.next(); 2 !== e.getDegree() && (this.buildEdgeStringsStartingAt(e), e.setMarked(!0)) } }, buildEdgeStringsForObviousStartNodes: function () { this.buildEdgeStringsForNonDegree2Nodes() }, getMergedLineStrings: function () { return this.merge(), this.mergedLineStrings }, buildEdgeStringsStartingAt: function (t) { for (var e = t.getOutEdges().iterator(); e.hasNext();) { var n = e.next(); n.getEdge().isMarked() || this.edgeStrings.add(this.buildEdgeStringStartingWith(n)) } }, merge: function () { if (null !== this.mergedLineStrings) return null; gr.setMarked(this.graph.nodeIterator(), !1), gr.setMarked(this.graph.edgeIterator(), !1), this.edgeStrings = new I, this.buildEdgeStringsForObviousStartNodes(), this.buildEdgeStringsForIsolatedLoops(), this.mergedLineStrings = new I; for (var t = this.edgeStrings.iterator(); t.hasNext();) { var e = t.next(); this.mergedLineStrings.add(e.toLineString()) } }, buildEdgeStringStartingWith: function (t) { var e = new cr(this.factory), n = t; do e.add(n), n.getEdge().setMarked(!0), n = n.getNext(); while (null !== n && n !== t); return e }, add: function () { if (arguments[0] instanceof B) { var t = arguments[0]; t.apply({ interfaces_: function () { return [q] }, filter: function (t) { t instanceof wt && this.add(t) } }) } else if (R(arguments[0], p)) { var e = arguments[0]; this.mergedLineStrings = null; for (var n = e.iterator(); n.hasNext();) { var i = n.next(); this.add(i) } } else if (arguments[0] instanceof wt) { var r = arguments[0]; null === this.factory && (this.factory = r.getFactory()), this.graph.addEdge(r) } }, buildEdgeStringsForIsolatedLoops: function () { this.buildEdgeStringsForUnprocessedNodes() }, interfaces_: function () { return [] }, getClass: function () { return Nr } }); var So = Object.freeze({ LineMerger: Nr }), Lo = Object.freeze({ OverlayOp: ii }); h(Cr, fr), e(Cr.prototype, { getNext: function () { return this.next }, isInRing: function () { return null !== this.edgeRing }, setRing: function (t) { this.edgeRing = t }, setLabel: function (t) { this.label = t }, getLabel: function () { return this.label }, setNext: function (t) { this.next = t }, getRing: function () { return this.edgeRing }, interfaces_: function () { return [] }, getClass: function () { return Cr } }), h(wr, mr), e(wr.prototype, { getLine: function () { return this.line }, interfaces_: function () { return [] }, getClass: function () { return wr } }), e(Sr.prototype, { isIncluded: function () { return this._isIncluded }, getCoordinates: function () { if (null === this.ringPts) { for (var t = new N, e = this.deList.iterator(); e.hasNext();) { var n = e.next(), i = n.getEdge(); Sr.addEdge(i.getLine().getCoordinates(), n.getEdgeDirection(), t) } this.ringPts = t.toCoordinateArray() } return this.ringPts }, isIncludedSet: function () { return this._isIncludedSet }, isValid: function () { return this.getCoordinates(), this.ringPts.length <= 3 ? !1 : (this.getRing(), this.ring.isValid()) }, build: function (t) { var e = t; do this.add(e), e.setRing(this), e = e.getNext(), g.isTrue(null !== e, "found null DE in ring"), g.isTrue(e === t || !e.isInRing(), "found DE already in ring"); while (e !== t) }, isOuterHole: function () { return this._isHole ? !this.hasShell() : !1 }, getPolygon: function () { var t = null; if (null !== this.holes) { t = new Array(this.holes.size()).fill(null); for (var e = 0; e < this.holes.size(); e++)t[e] = this.holes.get(e) } var n = this.factory.createPolygon(this.ring, t); return n }, isHole: function () { return this._isHole }, isProcessed: function () { return this._isProcessed }, addHole: function () { if (arguments[0] instanceof Pt) { var t = arguments[0]; null === this.holes && (this.holes = new I), this.holes.add(t) } else if (arguments[0] instanceof Sr) { var e = arguments[0]; e.setShell(this); var n = e.getRing(); null === this.holes && (this.holes = new I), this.holes.add(n) } }, setIncluded: function (t) { this._isIncluded = t, this._isIncludedSet = !0 }, getOuterHole: function () { if (this.isHole()) return null; for (var t = 0; t < this.deList.size(); t++) { var e = this.deList.get(t), n = e.getSym().getRing(); if (n.isOuterHole()) return n } return null }, computeHole: function () { var t = this.getRing(); this._isHole = he.isCCW(t.getCoordinates()) }, hasShell: function () { return null !== this.shell }, isOuterShell: function () { return null !== this.getOuterHole() }, getLineString: function () { return this.getCoordinates(), this.factory.createLineString(this.ringPts) }, toString: function () { return se.toLineString(new Gt(this.getCoordinates())) }, getShell: function () { return this.isHole() ? this.shell : this }, add: function (t) { this.deList.add(t) }, getRing: function () { if (null !== this.ring) return this.ring; this.getCoordinates(), this.ringPts.length < 3 && D.out.println(this.ringPts); try { this.ring = this.factory.createLinearRing(this.ringPts) } catch (t) { if (!(t instanceof w)) throw t; D.out.println(this.ringPts) } finally { } return this.ring }, updateIncluded: function () { if (this.isHole()) return null; for (var t = 0; t < this.deList.size(); t++) { var e = this.deList.get(t), n = e.getSym().getRing().getShell(); if (null !== n && n.isIncludedSet()) return this.setIncluded(!n.isIncluded()), null } }, setShell: function (t) { this.shell = t }, setProcessed: function (t) { this._isProcessed = t }, interfaces_: function () { return [] }, getClass: function () { return Sr } }), Sr.findDirEdgesInRing = function (t) { var e = t, n = new I; do n.add(e), e = e.getNext(), g.isTrue(null !== e, "found null DE in ring"), g.isTrue(e === t || !e.isInRing(), "found DE already in ring"); while (e !== t); return n }, Sr.addEdge = function (t, e, n) { if (e) for (var i = 0; i < t.length; i++)n.add(t[i], !1); else for (var i = t.length - 1; i >= 0; i--)n.add(t[i], !1) }, Sr.findEdgeRingContaining = function (t, e) { for (var n = t.getRing(), i = n.getEnvelopeInternal(), r = n.getCoordinateN(0), s = null, o = null, a = e.iterator(); a.hasNext();) { var u = a.next(), l = u.getRing(), h = l.getEnvelopeInternal(); if (!h.equals(i) && h.contains(i)) { r = H.ptNotInList(n.getCoordinates(), l.getCoordinates()); var c = !1; he.isPointInRing(r, l.getCoordinates()) && (c = !0), c && (null === s || o.contains(h)) && (s = u, o = s.getRing().getEnvelopeInternal()) } } return s }, e(Lr.prototype, { compare: function (t, e) { var n = t, i = e; return n.getRing().getEnvelope().compareTo(i.getRing().getEnvelope()) }, interfaces_: function () { return [a] }, getClass: function () { return Lr } }), Sr.EnvelopeComparator = Lr, h(Rr, Er), e(Rr.prototype, { findEdgeRing: function (t) { var e = new Sr(this.factory); return e.build(t), e }, computeDepthParity: function () { if (0 === arguments.length) for (; ;) { var t = null; if (null === t) return null; this.computeDepthParity(t) } else 1 === arguments.length && arguments[0] }, computeNextCWEdges: function () { for (var t = this.nodeIterator(); t.hasNext();) { var e = t.next(); Rr.computeNextCWEdges(e) } }, addEdge: function (t) { if (t.isEmpty()) return null; var e = H.removeRepeatedPoints(t.getCoordinates()); if (e.length < 2) return null; var n = e[0], i = e[e.length - 1], r = this.getNode(n), s = this.getNode(i), o = new Cr(r, s, e[1], !0), a = new Cr(s, r, e[e.length - 2], !1), u = new wr(t); u.setDirectedEdges(o, a), this.add(u) }, deleteCutEdges: function () { this.computeNextCWEdges(), Rr.findLabeledEdgeRings(this.dirEdges); for (var t = new I, e = this.dirEdges.iterator(); e.hasNext();) { var n = e.next(); if (!n.isMarked()) { var i = n.getSym(); if (n.getLabel() === i.getLabel()) { n.setMarked(!0), i.setMarked(!0); var r = n.getEdge(); t.add(r.getLine()) } } } return t }, getEdgeRings: function () { this.computeNextCWEdges(), Rr.label(this.dirEdges, -1); var t = Rr.findLabeledEdgeRings(this.dirEdges); this.convertMaximalToMinimalEdgeRings(t); for (var e = new I, n = this.dirEdges.iterator(); n.hasNext();) { var i = n.next(); if (!i.isMarked() && !i.isInRing()) { var r = this.findEdgeRing(i); e.add(r) } } return e }, getNode: function (t) { var e = this.findNode(t); return null === e && (e = new vr(t), this.add(e)), e }, convertMaximalToMinimalEdgeRings: function (t) { for (var e = t.iterator(); e.hasNext();) { var n = e.next(), i = n.getLabel(), r = Rr.findIntersectionNodes(n, i); if (null !== r) for (var s = r.iterator(); s.hasNext();) { var o = s.next(); Rr.computeNextCCWEdges(o, i) } } }, deleteDangles: function () { for (var t = this.findNodesOfDegree(1), e = new Q, n = new me, i = t.iterator(); i.hasNext();)n.push(i.next()); for (; !n.isEmpty();) { var r = n.pop(); Rr.deleteAllEdges(r); for (var s = r.getOutEdges().getEdges(), i = s.iterator(); i.hasNext();) { var o = i.next(); o.setMarked(!0); var a = o.getSym(); null !== a && a.setMarked(!0); var u = o.getEdge(); e.add(u.getLine()); var l = o.getToNode(); 1 === Rr.getDegreeNonDeleted(l) && n.push(l) } } return e }, interfaces_: function () { return [] }, getClass: function () { return Rr } }), Rr.findLabeledEdgeRings = function (t) { for (var e = new I, n = 1, i = t.iterator(); i.hasNext();) { var r = i.next(); if (!(r.isMarked() || r.getLabel() >= 0)) { e.add(r); var s = Sr.findDirEdgesInRing(r); Rr.label(s, n), n++ } } return e }, Rr.getDegreeNonDeleted = function (t) { for (var e = t.getOutEdges().getEdges(), n = 0, i = e.iterator(); i.hasNext();) { var r = i.next(); r.isMarked() || n++ } return n }, Rr.deleteAllEdges = function (t) { for (var e = t.getOutEdges().getEdges(), n = e.iterator(); n.hasNext();) { var i = n.next(); i.setMarked(!0); var r = i.getSym(); null !== r && r.setMarked(!0) } }, Rr.label = function (t, e) { for (var n = t.iterator(); n.hasNext();) { var i = n.next(); i.setLabel(e) } }, Rr.computeNextCWEdges = function (t) { for (var e = t.getOutEdges(), n = null, i = null, r = e.getEdges().iterator(); r.hasNext();) { var s = r.next(); if (!s.isMarked()) { if (null === n && (n = s), null !== i) { var o = i.getSym(); o.setNext(s) } i = s } } if (null !== i) { var o = i.getSym(); o.setNext(n) } }, Rr.computeNextCCWEdges = function (t, e) { for (var n = t.getOutEdges(), i = null, r = null, s = n.getEdges(), o = s.size() - 1; o >= 0; o--) { var a = s.get(o), u = a.getSym(), l = null; a.getLabel() === e && (l = a); var h = null; u.getLabel() === e && (h = u), null === l && null === h || (null !== h && (r = h), null !== l && (null !== r && (r.setNext(l), r = null), null === i && (i = l))) } null !== r && (g.isTrue(null !== i), r.setNext(i)) }, Rr.getDegree = function (t, e) { for (var n = t.getOutEdges().getEdges(), i = 0, r = n.iterator(); r.hasNext();) { var s = r.next(); s.getLabel() === e && i++ } return i }, Rr.findIntersectionNodes = function (t, e) { var n = t, i = null; do { var r = n.getFromNode(); Rr.getDegree(r, e) > 1 && (null === i && (i = new I), i.add(r)), n = n.getNext(), g.isTrue(null !== n, "found null DE in ring"), g.isTrue(n === t || !n.isInRing(), "found DE already in ring") } while (n !== t); return i }, e(br.prototype, { getGeometry: function () { return null === this.geomFactory && (this.geomFactory = new ie), this.polygonize(), this.extractOnlyPolygonal ? this.geomFactory.buildGeometry(this.polyList) : this.geomFactory.createGeometryCollection(ie.toGeometryArray(this.polyList)) }, getInvalidRingLines: function () { return this.polygonize(), this.invalidRingLines }, findValidRings: function (t, e, n) { for (var i = t.iterator(); i.hasNext();) { var r = i.next(); r.isValid() ? e.add(r) : n.add(r.getLineString()) } }, polygonize: function () { if (null !== this.polyList) return null; if (this.polyList = new I, null === this.graph) return null; this.dangles = this.graph.deleteDangles(), this.cutEdges = this.graph.deleteCutEdges(); var t = this.graph.getEdgeRings(), e = new I; this.invalidRingLines = new I, this.isCheckingRingsValid ? this.findValidRings(t, e, this.invalidRingLines) : e = t, this.findShellsAndHoles(e), br.assignHolesToShells(this.holeList, this.shellList), ho.sort(this.shellList, new Sr.EnvelopeComparator); var n = !0; this.extractOnlyPolygonal && (br.findDisjointShells(this.shellList), n = !1), this.polyList = br.extractPolygons(this.shellList, n) }, getDangles: function () { return this.polygonize(), this.dangles }, getCutEdges: function () { return this.polygonize(), this.cutEdges }, getPolygons: function () { return this.polygonize(), this.polyList }, add: function () { if (R(arguments[0], p)) for (var t = arguments[0], e = t.iterator(); e.hasNext();) { var n = e.next(); this.add(n) } else if (arguments[0] instanceof wt) { var i = arguments[0]; this.geomFactory = i.getFactory(), null === this.graph && (this.graph = new Rr(this.geomFactory)), this.graph.addEdge(i) } else if (arguments[0] instanceof B) { var r = arguments[0]; r.apply(this.lineStringAdder) } }, setCheckRingsValid: function (t) { this.isCheckingRingsValid = t }, findShellsAndHoles: function (t) { this.holeList = new I, this.shellList = new I; for (var e = t.iterator(); e.hasNext();) { var n = e.next(); n.computeHole(), n.isHole() ? this.holeList.add(n) : this.shellList.add(n) } }, interfaces_: function () { return [] }, getClass: function () { return br } }), br.findOuterShells = function (t) { for (var e = t.iterator(); e.hasNext();) { var n = e.next(), i = n.getOuterHole(); null === i || i.isProcessed() || (n.setIncluded(!0), i.setProcessed(!0)) } }, br.extractPolygons = function (t, e) { for (var n = new I, i = t.iterator(); i.hasNext();) { var r = i.next(); (e || r.isIncluded()) && n.add(r.getPolygon()) } return n }, br.assignHolesToShells = function (t, e) { for (var n = t.iterator(); n.hasNext();) { var i = n.next(); br.assignHoleToShell(i, e) } }, br.assignHoleToShell = function (t, e) { var n = Sr.findEdgeRingContaining(t, e); null !== n && n.addHole(t) }, br.findDisjointShells = function (t) { br.findOuterShells(t); var e = null; do { e = !1; for (var n = t.iterator(); n.hasNext();) { var i = n.next(); i.isIncludedSet() || (i.updateIncluded(), i.isIncludedSet() || (e = !0)) } } while (e) }, e(Tr.prototype, { filter: function (t) { t instanceof wt && this.p.add(t) }, interfaces_: function () { return [q] }, getClass: function () { return Tr } }), br.LineStringAdder = Tr; var Ro = Object.freeze({ Polygonizer: br }); e(Pr.prototype, { createEdgeEndForNext: function (t, e, n, i) { var r = n.segmentIndex + 1; if (r >= t.getNumPoints() && null === i) return null; var s = t.getCoordinate(r); null !== i && i.segmentIndex === n.segmentIndex && (s = i.coord); var o = new En(t, n.coord, s, new fn(t.getLabel())); e.add(o) }, createEdgeEndForPrev: function (t, e, n, i) { var r = n.segmentIndex; if (0 === n.dist) { if (0 === r) return null; r-- } var s = t.getCoordinate(r); null !== i && i.segmentIndex >= r && (s = i.coord); var o = new fn(t.getLabel()); o.flip(); var a = new En(t, n.coord, s, o); e.add(a) }, computeEdgeEnds: function () { if (1 === arguments.length) { for (var t = arguments[0], e = new I, n = t; n.hasNext();) { var i = n.next(); this.computeEdgeEnds(i, e) } return e } if (2 === arguments.length) { var r = arguments[0], s = arguments[1], o = r.getEdgeIntersectionList(); o.addEndpoints(); var a = o.iterator(), u = null, l = null; if (!a.hasNext()) return null; var h = a.next(); do u = l, l = h, h = null, a.hasNext() && (h = a.next()), null !== l && (this.createEdgeEndForPrev(r, s, l, u), this.createEdgeEndForNext(r, s, l, h)); while (null !== l) } }, interfaces_: function () { return [] }, getClass: function () { return Pr } }), h(Or, En), e(Or.prototype, { insert: function (t) { this.edgeEnds.add(t) }, print: function (t) { t.println("EdgeEndBundle--> Label: " + this.label); for (var e = this.iterator(); e.hasNext();) { var n = e.next(); n.print(t), t.println() } }, iterator: function () { return this.edgeEnds.iterator() }, getEdgeEnds: function () { return this.edgeEnds }, computeLabelOn: function (t, e) { for (var n = 0, i = !1, r = this.iterator(); r.hasNext();) { var s = r.next(), o = s.getLabel().getLocation(t); o === L.BOUNDARY && n++ , o === L.INTERIOR && (i = !0) } var o = L.NONE; i && (o = L.INTERIOR), n > 0 && (o = $n.determineBoundary(e, n)), this.label.setLocation(t, o) }, computeLabelSide: function (t, e) { for (var n = this.iterator(); n.hasNext();) { var i = n.next(); if (i.getLabel().isArea()) { var r = i.getLabel().getLocation(t, e); if (r === L.INTERIOR) return this.label.setLocation(t, e, L.INTERIOR), null; r === L.EXTERIOR && this.label.setLocation(t, e, L.EXTERIOR) } } }, getLabel: function () { return this.label }, computeLabelSides: function (t) { this.computeLabelSide(t, cn.LEFT), this.computeLabelSide(t, cn.RIGHT) }, updateIM: function (t) { Qn.updateIM(this.label, t) }, computeLabel: function (t) { for (var e = !1, n = this.iterator(); n.hasNext();) { var i = n.next(); i.getLabel().isArea() && (e = !0) } e ? this.label = new fn(L.NONE, L.NONE, L.NONE) : this.label = new fn(L.NONE); for (var r = 0; 2 > r; r++)this.computeLabelOn(r, t), e && this.computeLabelSides(r) }, interfaces_: function () { return [] }, getClass: function () { return Or } }), h(Mr, Tn), e(Mr.prototype, { updateIM: function (t) { for (var e = this.iterator(); e.hasNext();) { var n = e.next(); n.updateIM(t) } }, insert: function (t) { var e = this.edgeMap.get(t); null === e ? (e = new Or(t), this.insertEdgeEnd(t, e)) : e.insert(t) }, interfaces_: function () { return [] }, getClass: function () { return Mr } }), h(_r, yn), e(_r.prototype, { updateIMFromEdges: function (t) { this.edges.updateIM(t) }, computeIM: function (t) { t.setAtLeastIfValid(this.label.getLocation(0), this.label.getLocation(1), 0) }, interfaces_: function () { return [] }, getClass: function () { return _r } }), h(Ar, Nn), e(Ar.prototype, { createNode: function (t) { return new _r(t, new Mr) }, interfaces_: function () { return [] }, getClass: function () { return Ar } }), e(Dr.prototype, { insertEdgeEnds: function (t) { for (var e = t.iterator(); e.hasNext();) { var n = e.next(); this.nodes.add(n) } }, computeProperIntersectionIM: function (t, e) { var n = this.arg[0].getGeometry().getDimension(), i = this.arg[1].getGeometry().getDimension(), r = t.hasProperIntersection(), s = t.hasProperInteriorIntersection(); 2 === n && 2 === i ? r && e.setAtLeast("212101212") : 2 === n && 1 === i ? (r && e.setAtLeast("FFF0FFFF2"), s && e.setAtLeast("1FFFFF1FF")) : 1 === n && 2 === i ? (r && e.setAtLeast("F0FFFFFF2"), s && e.setAtLeast("1F1FFFFFF")) : 1 === n && 1 === i && s && e.setAtLeast("0FFFFFFFF") }, labelIsolatedEdges: function (t, e) { for (var n = this.arg[t].getEdgeIterator(); n.hasNext();) { var i = n.next(); i.isIsolated() && (this.labelIsolatedEdge(i, e, this.arg[e].getGeometry()), this.isolatedEdges.add(i)) } }, labelIsolatedEdge: function (t, e, n) { if (n.getDimension() > 0) { var i = this.ptLocator.locate(t.getCoordinate(), n); t.getLabel().setAllLocations(e, i) } else t.getLabel().setAllLocations(e, L.EXTERIOR) }, computeIM: function () { var t = new ge; if (t.set(L.EXTERIOR, L.EXTERIOR, 2), !this.arg[0].getGeometry().getEnvelopeInternal().intersects(this.arg[1].getGeometry().getEnvelopeInternal())) return this.computeDisjointIM(t), t; this.arg[0].computeSelfNodes(this.li, !1), this.arg[1].computeSelfNodes(this.li, !1); var e = this.arg[0].computeEdgeIntersections(this.arg[1], this.li, !1); this.computeIntersectionNodes(0), this.computeIntersectionNodes(1), this.copyNodesAndLabels(0), this.copyNodesAndLabels(1), this.labelIsolatedNodes(), this.computeProperIntersectionIM(e, t); var n = new Pr, i = n.computeEdgeEnds(this.arg[0].getEdgeIterator()); this.insertEdgeEnds(i); var r = n.computeEdgeEnds(this.arg[1].getEdgeIterator()); return this.insertEdgeEnds(r), this.labelNodeEdges(), this.labelIsolatedEdges(0, 1), this.labelIsolatedEdges(1, 0), this.updateIM(t), t }, labelNodeEdges: function () { for (var t = this.nodes.iterator(); t.hasNext();) { var e = t.next(); e.getEdges().computeLabelling(this.arg) } }, copyNodesAndLabels: function (t) { for (var e = this.arg[t].getNodeIterator(); e.hasNext();) { var n = e.next(), i = this.nodes.addNode(n.getCoordinate()); i.setLabel(t, n.getLabel().getLocation(t)) } }, labelIntersectionNodes: function (t) { for (var e = this.arg[t].getEdgeIterator(); e.hasNext();)for (var n = e.next(), i = n.getLabel().getLocation(t), r = n.getEdgeIntersectionList().iterator(); r.hasNext();) { var s = r.next(), o = this.nodes.find(s.coord); o.getLabel().isNull(t) && (i === L.BOUNDARY ? o.setLabelBoundary(t) : o.setLabel(t, L.INTERIOR)) } }, labelIsolatedNode: function (t, e) { var n = this.ptLocator.locate(t.getCoordinate(), this.arg[e].getGeometry()); t.getLabel().setAllLocations(e, n) }, computeIntersectionNodes: function (t) { for (var e = this.arg[t].getEdgeIterator(); e.hasNext();)for (var n = e.next(), i = n.getLabel().getLocation(t), r = n.getEdgeIntersectionList().iterator(); r.hasNext();) { var s = r.next(), o = this.nodes.addNode(s.coord); i === L.BOUNDARY ? o.setLabelBoundary(t) : o.getLabel().isNull(t) && o.setLabel(t, L.INTERIOR) } }, labelIsolatedNodes: function () { for (var t = this.nodes.iterator(); t.hasNext();) { var e = t.next(), n = e.getLabel(); g.isTrue(n.getGeometryCount() > 0, "node with empty label found"), e.isIsolated() && (n.isNull(0) ? this.labelIsolatedNode(e, 0) : this.labelIsolatedNode(e, 1)) } }, updateIM: function (t) { for (var e = this.isolatedEdges.iterator(); e.hasNext();) { var n = e.next(); n.updateIM(t) } for (var i = this.nodes.iterator(); i.hasNext();) { var r = i.next(); r.updateIM(t), r.updateIMFromEdges(t) } }, computeDisjointIM: function (t) { var e = this.arg[0].getGeometry(); e.isEmpty() || (t.set(L.INTERIOR, L.EXTERIOR, e.getDimension()), t.set(L.BOUNDARY, L.EXTERIOR, e.getBoundaryDimension())); var n = this.arg[1].getGeometry(); n.isEmpty() || (t.set(L.EXTERIOR, L.INTERIOR, n.getDimension()), t.set(L.EXTERIOR, L.BOUNDARY, n.getBoundaryDimension())) }, interfaces_: function () { return [] }, getClass: function () { return Dr } }), e(Fr.prototype, { isContainedInBoundary: function (t) { if (t instanceof bt) return !1; if (t instanceof Lt) return this.isPointContainedInBoundary(t); if (t instanceof wt) return this.isLineStringContainedInBoundary(t); for (var e = 0; e < t.getNumGeometries(); e++) { var n = t.getGeometryN(e); if (!this.isContainedInBoundary(n)) return !1 } return !0 }, isLineSegmentContainedInBoundary: function (t, e) { if (t.equals(e)) return this.isPointContainedInBoundary(t); if (t.x === e.x) { if (t.x === this.rectEnv.getMinX() || t.x === this.rectEnv.getMaxX()) return !0 } else if (t.y === e.y && (t.y === this.rectEnv.getMinY() || t.y === this.rectEnv.getMaxY())) return !0; return !1 }, isLineStringContainedInBoundary: function (t) { for (var e = t.getCoordinateSequence(), n = new f, i = new f, r = 0; r < e.size() - 1; r++)if (e.getCoordinate(r, n), e.getCoordinate(r + 1, i), !this.isLineSegmentContainedInBoundary(n, i)) return !1; return !0 }, isPointContainedInBoundary: function () { if (arguments[0] instanceof Lt) { var t = arguments[0]; return this.isPointContainedInBoundary(t.getCoordinate()) } if (arguments[0] instanceof f) { var e = arguments[0]; return e.x === this.rectEnv.getMinX() || e.x === this.rectEnv.getMaxX() || e.y === this.rectEnv.getMinY() || e.y === this.rectEnv.getMaxY() } }, contains: function (t) { return this.rectEnv.contains(t.getEnvelopeInternal()) ? !this.isContainedInBoundary(t) : !1 }, interfaces_: function () { return [] }, getClass: function () { return Fr } }), Fr.contains = function (t, e) { var n = new Fr(t); return n.contains(e) }, e(Gr.prototype, { intersects: function (t, e) { var n = new C(t, e); if (!this.rectEnv.intersects(n)) return !1; if (this.rectEnv.intersects(t)) return !0; if (this.rectEnv.intersects(e)) return !0; if (t.compareTo(e) > 0) { var i = t; t = e, e = i } var r = !1; return e.y > t.y && (r = !0), r ? this.li.computeIntersection(t, e, this.diagDown0, this.diagDown1) : this.li.computeIntersection(t, e, this.diagUp0, this.diagUp1), !!this.li.hasIntersection() }, interfaces_: function () { return [] }, getClass: function () { return Gr } }), e(qr.prototype, { applyTo: function (t) { for (var e = 0; e < t.getNumGeometries() && !this._isDone; e++) { var n = t.getGeometryN(e); if (n instanceof gt) this.applyTo(n); else if (this.visit(n), this.isDone()) return this._isDone = !0, null } }, interfaces_: function () { return [] }, getClass: function () { return qr } }), e(Br.prototype, { intersects: function (t) { if (!this.rectEnv.intersects(t.getEnvelopeInternal())) return !1; var e = new zr(this.rectEnv); if (e.applyTo(t), e.intersects()) return !0; var n = new Vr(this.rectangle); if (n.applyTo(t), n.containsPoint()) return !0; var i = new kr(this.rectangle); return i.applyTo(t), !!i.intersects() }, interfaces_: function () { return [] }, getClass: function () { return Br } }), Br.intersects = function (t, e) { var n = new Br(t); return n.intersects(e) }, h(zr, qr), e(zr.prototype, { isDone: function () { return this._intersects === !0 }, visit: function (t) { var e = t.getEnvelopeInternal(); return this.rectEnv.intersects(e) ? this.rectEnv.contains(e) ? (this._intersects = !0, null) : e.getMinX() >= this.rectEnv.getMinX() && e.getMaxX() <= this.rectEnv.getMaxX() ? (this._intersects = !0, null) : e.getMinY() >= this.rectEnv.getMinY() && e.getMaxY() <= this.rectEnv.getMaxY() ? (this._intersects = !0, null) : void 0 : null }, intersects: function () { return this._intersects }, interfaces_: function () { return [] }, getClass: function () { return zr } }), h(Vr, qr), e(Vr.prototype, { + isDone: function () { return this._containsPoint === !0 }, visit: function (t) { + if (!(t instanceof bt)) return null; var e = t.getEnvelopeInternal(); if (!this.rectEnv.intersects(e)) return null; for (var n = new f, i = 0; 4 > i; i++)if (this.rectSeq.getCoordinate(i, n), e.contains(n) && bn.containsPointInPolygon(n, t)) return this._containsPoint = !0, + null + }, containsPoint: function () { return this._containsPoint }, interfaces_: function () { return [] }, getClass: function () { return Vr } + }), h(kr, qr), e(kr.prototype, { intersects: function () { return this.hasIntersection }, isDone: function () { return this.hasIntersection === !0 }, visit: function (t) { var e = t.getEnvelopeInternal(); if (!this.rectEnv.intersects(e)) return null; var n = kn.getLines(t); this.checkIntersectionWithLineStrings(n) }, checkIntersectionWithLineStrings: function (t) { for (var e = t.iterator(); e.hasNext();) { var n = e.next(); if (this.checkIntersectionWithSegments(n), this.hasIntersection) return null } }, checkIntersectionWithSegments: function (t) { for (var e = t.getCoordinateSequence(), n = 1; n < e.size(); n++)if (e.getCoordinate(n - 1, this.p0), e.getCoordinate(n, this.p1), this.rectIntersector.intersects(this.p0, this.p1)) return this.hasIntersection = !0, null }, interfaces_: function () { return [] }, getClass: function () { return kr } }), h(Ur, ti), e(Ur.prototype, { getIntersectionMatrix: function () { return this._relate.computeIM() }, interfaces_: function () { return [] }, getClass: function () { return Ur } }), Ur.covers = function (t, e) { return t.getEnvelopeInternal().covers(e.getEnvelopeInternal()) ? t.isRectangle() ? !0 : Ur.relate(t, e).isCovers() : !1 }, Ur.intersects = function (t, e) { return t.getEnvelopeInternal().intersects(e.getEnvelopeInternal()) ? t.isRectangle() ? Br.intersects(t, e) : e.isRectangle() ? Br.intersects(e, t) : Ur.relate(t, e).isIntersects() : !1 }, Ur.touches = function (t, e) { return t.getEnvelopeInternal().intersects(e.getEnvelopeInternal()) ? Ur.relate(t, e).isTouches(t.getDimension(), e.getDimension()) : !1 }, Ur.within = function (t, e) { return e.contains(t) }, Ur.coveredBy = function (t, e) { return Ur.covers(e, t) }, Ur.relate = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1], n = new Ur(t, e), i = n.getIntersectionMatrix(); return i } if (3 === arguments.length) { if ("string" == typeof arguments[2] && arguments[0] instanceof B && arguments[1] instanceof B) { var r = arguments[0], s = arguments[1], o = arguments[2]; return Ur.relateWithCheck(r, s).matches(o) } if (R(arguments[2], V) && arguments[0] instanceof B && arguments[1] instanceof B) { var a = arguments[0], u = arguments[1], l = arguments[2], n = new Ur(a, u, l), i = n.getIntersectionMatrix(); return i } } }, Ur.overlaps = function (t, e) { return t.getEnvelopeInternal().intersects(e.getEnvelopeInternal()) ? Ur.relate(t, e).isOverlaps(t.getDimension(), e.getDimension()) : !1 }, Ur.disjoint = function (t, e) { return !t.intersects(e) }, Ur.relateWithCheck = function (t, e) { return t.checkNotGeometryCollection(t), t.checkNotGeometryCollection(e), Ur.relate(t, e) }, Ur.crosses = function (t, e) { return t.getEnvelopeInternal().intersects(e.getEnvelopeInternal()) ? Ur.relate(t, e).isCrosses(t.getDimension(), e.getDimension()) : !1 }, Ur.contains = function (t, e) { return t.getEnvelopeInternal().contains(e.getEnvelopeInternal()) ? t.isRectangle() ? Fr.contains(t, e) : Ur.relate(t, e).isContains() : !1 }; var bo = Object.freeze({ RelateOp: Ur }); e(Yr.prototype, { extractElements: function (t, e) { if (null === t) return null; for (var n = 0; n < t.getNumGeometries(); n++) { var i = t.getGeometryN(n); this.skipEmpty && i.isEmpty() || e.add(i) } }, combine: function () { for (var t = new I, e = this.inputGeoms.iterator(); e.hasNext();) { var n = e.next(); this.extractElements(n, t) } return 0 === t.size() ? null !== this.geomFactory ? this.geomFactory.createGeometryCollection(null) : null : this.geomFactory.buildGeometry(t) }, interfaces_: function () { return [] }, getClass: function () { return Yr } }), Yr.combine = function () { if (1 === arguments.length) { var t = arguments[0], e = new Yr(t); return e.combine() } if (2 === arguments.length) { var n = arguments[0], i = arguments[1], e = new Yr(Yr.createList(n, i)); return e.combine() } if (3 === arguments.length) { var r = arguments[0], s = arguments[1], o = arguments[2], e = new Yr(Yr.createList(r, s, o)); return e.combine() } }, Yr.extractFactory = function (t) { return t.isEmpty() ? null : t.iterator().next().getFactory() }, Yr.createList = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1], n = new I; return n.add(t), n.add(e), n } if (3 === arguments.length) { var i = arguments[0], r = arguments[1], s = arguments[2], n = new I; return n.add(i), n.add(r), n.add(s), n } }, e(Xr.prototype, { union: function () { for (var t = new be, e = new at, n = 0; n < this.pointGeom.getNumGeometries(); n++) { var i = this.pointGeom.getGeometryN(n), r = i.getCoordinate(), s = t.locate(r, this.otherGeom); s === L.EXTERIOR && e.add(r) } if (0 === e.size()) return this.otherGeom; var o = null, a = H.toCoordinateArray(e); return o = 1 === a.length ? this.geomFact.createPoint(a[0]) : this.geomFact.createMultiPointFromCoords(a), Yr.combine(o, this.otherGeom) }, interfaces_: function () { return [] }, getClass: function () { return Xr } }), Xr.union = function (t, e) { var n = new Xr(t, e); return n.union() }, e(Hr.prototype, { filter: function (t) { -1 !== this.sortIndex && t.getSortIndex() !== this.sortIndex || this.comps.add(t) }, interfaces_: function () { return [ht] }, getClass: function () { return Hr } }), Hr.extract = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; return Hr.extract(t, e, new I) } if (3 === arguments.length) { var n = arguments[0], i = arguments[1], r = arguments[2]; return n.getSortIndex() === i ? r.add(n) : n instanceof gt && n.apply(new Hr(i, r)), r } }, e(Wr.prototype, { reduceToGeometries: function (t) { for (var e = new I, n = t.iterator(); n.hasNext();) { var i = n.next(), r = null; R(i, y) ? r = this.unionTree(i) : i instanceof B && (r = i), e.add(r) } return e }, extractByEnvelope: function (t, e, n) { for (var i = new I, r = 0; r < e.getNumGeometries(); r++) { var s = e.getGeometryN(r); s.getEnvelopeInternal().intersects(t) ? i.add(s) : n.add(s) } return this.geomFactory.buildGeometry(i) }, unionOptimized: function (t, e) { var n = t.getEnvelopeInternal(), i = e.getEnvelopeInternal(); if (!n.intersects(i)) { var r = Yr.combine(t, e); return r } if (t.getNumGeometries() <= 1 && e.getNumGeometries() <= 1) return this.unionActual(t, e); var s = n.intersection(i); return this.unionUsingEnvelopeIntersection(t, e, s) }, union: function () { if (null === this.inputPolys) throw new IllegalStateException("union() method cannot be called twice"); if (this.inputPolys.isEmpty()) return null; this.geomFactory = this.inputPolys.iterator().next().getFactory(); for (var t = new ke(Wr.STRTREE_NODE_CAPACITY), e = this.inputPolys.iterator(); e.hasNext();) { var n = e.next(); t.insert(n.getEnvelopeInternal(), n) } this.inputPolys = null; var i = t.itemsTree(), r = this.unionTree(i); return r }, binaryUnion: function () { if (1 === arguments.length) { var t = arguments[0]; return this.binaryUnion(t, 0, t.size()) } if (3 === arguments.length) { var e = arguments[0], n = arguments[1], i = arguments[2]; if (1 >= i - n) { var r = Wr.getGeometry(e, n); return this.unionSafe(r, null) } if (i - n === 2) return this.unionSafe(Wr.getGeometry(e, n), Wr.getGeometry(e, n + 1)); var s = Math.trunc((i + n) / 2), r = this.binaryUnion(e, n, s), o = this.binaryUnion(e, s, i); return this.unionSafe(r, o) } }, repeatedUnion: function (t) { for (var e = null, n = t.iterator(); n.hasNext();) { var i = n.next(); e = null === e ? i.copy() : e.union(i) } return e }, unionSafe: function (t, e) { return null === t && null === e ? null : null === t ? e.copy() : null === e ? t.copy() : this.unionOptimized(t, e) }, unionActual: function (t, e) { return Wr.restrictToPolygons(t.union(e)) }, unionTree: function (t) { var e = this.reduceToGeometries(t), n = this.binaryUnion(e); return n }, unionUsingEnvelopeIntersection: function (t, e, n) { var i = new I, r = this.extractByEnvelope(n, t, i), s = this.extractByEnvelope(n, e, i), o = this.unionActual(r, s); i.add(o); var a = Yr.combine(i); return a }, bufferUnion: function () { if (1 === arguments.length) { var t = arguments[0], e = t.get(0).getFactory(), n = e.buildGeometry(t), i = n.buffer(0); return i } if (2 === arguments.length) { var r = arguments[0], s = arguments[1], e = r.getFactory(), n = e.createGeometryCollection([r, s]), i = n.buffer(0); return i } }, interfaces_: function () { return [] }, getClass: function () { return Wr } }), Wr.restrictToPolygons = function (t) { if (R(t, Rt)) return t; var e = or.getPolygons(t); return 1 === e.size() ? e.get(0) : t.getFactory().createMultiPolygon(ie.toPolygonArray(e)) }, Wr.getGeometry = function (t, e) { return e >= t.size() ? null : t.get(e) }, Wr.union = function (t) { var e = new Wr(t); return e.union() }, Wr.STRTREE_NODE_CAPACITY = 4, e(jr.prototype, { unionNoOpt: function (t) { var e = this.geomFact.createPoint(); return si.overlayOp(t, e, ii.UNION) }, unionWithNull: function (t, e) { return null === t && null === e ? null : null === e ? t : null === t ? e : t.union(e) }, extract: function () { if (R(arguments[0], p)) for (var t = arguments[0], e = t.iterator(); e.hasNext();) { var n = e.next(); this.extract(n) } else if (arguments[0] instanceof B) { var i = arguments[0]; null === this.geomFact && (this.geomFact = i.getFactory()), Hr.extract(i, B.SORTINDEX_POLYGON, this.polygons), Hr.extract(i, B.SORTINDEX_LINESTRING, this.lines), Hr.extract(i, B.SORTINDEX_POINT, this.points) } }, union: function Yo() { if (null === this.geomFact) return null; var t = null; if (this.points.size() > 0) { var e = this.geomFact.buildGeometry(this.points); t = this.unionNoOpt(e) } var n = null; if (this.lines.size() > 0) { var i = this.geomFact.buildGeometry(this.lines); n = this.unionNoOpt(i) } var r = null; this.polygons.size() > 0 && (r = Wr.union(this.polygons)); var s = this.unionWithNull(n, r), Yo = null; return Yo = null === t ? s : null === s ? t : Xr.union(t, s), null === Yo ? this.geomFact.createGeometryCollection() : Yo }, interfaces_: function () { return [] }, getClass: function () { return jr } }), jr.union = function () { if (1 === arguments.length) { if (R(arguments[0], p)) { var t = arguments[0], e = new jr(t); return e.union() } if (arguments[0] instanceof B) { var n = arguments[0], e = new jr(n); return e.union() } } else if (2 === arguments.length) { var i = arguments[0], r = arguments[1], e = new jr(i, r); return e.union() } }; var To = Object.freeze({ UnaryUnionOp: jr }); e(Zr.prototype, { visitInteriorRing: function (t, e) { var n = t.getCoordinates(), i = n[0], r = Zr.findDifferentPoint(n, i), s = e.findEdgeInSameDirection(i, r), o = e.findEdgeEnd(s), a = null; o.getLabel().getLocation(0, cn.RIGHT) === L.INTERIOR ? a = o : o.getSym().getLabel().getLocation(0, cn.RIGHT) === L.INTERIOR && (a = o.getSym()), g.isTrue(null !== a, "unable to find dirEdge with Interior on RHS"), this.visitLinkedDirectedEdges(a) }, visitShellInteriors: function (t, e) { if (t instanceof bt) { var n = t; this.visitInteriorRing(n.getExteriorRing(), e) } if (t instanceof Ot) for (var i = t, r = 0; r < i.getNumGeometries(); r++) { var n = i.getGeometryN(r); this.visitInteriorRing(n.getExteriorRing(), e) } }, getCoordinate: function () { return this.disconnectedRingcoord }, setInteriorEdgesInResult: function (t) { for (var e = t.getEdgeEnds().iterator(); e.hasNext();) { var n = e.next(); n.getLabel().getLocation(0, cn.RIGHT) === L.INTERIOR && n.setInResult(!0) } }, visitLinkedDirectedEdges: function (t) { var e = t, n = t; do g.isTrue(null !== n, "found null Directed Edge"), n.setVisited(!0), n = n.getNext(); while (n !== e) }, buildEdgeRings: function (t) { for (var e = new I, n = t.iterator(); n.hasNext();) { var i = n.next(); if (i.isInResult() && null === i.getEdgeRing()) { var r = new pn(i, this.geometryFactory); r.linkDirectedEdgesForMinimalEdgeRings(); var s = r.buildMinimalRings(); e.addAll(s) } } return e }, hasUnvisitedShellEdge: function (t) { for (var e = 0; e < t.size(); e++) { var n = t.get(e); if (!n.isHole()) { var i = n.getEdges(), r = i.get(0); if (r.getLabel().getLocation(0, cn.RIGHT) === L.INTERIOR) for (var s = 0; s < i.size(); s++)if (r = i.get(s), !r.isVisited()) return this.disconnectedRingcoord = r.getCoordinate(), !0 } } return !1 }, isInteriorsConnected: function () { var t = new I; this.geomGraph.computeSplitEdges(t); var e = new Cn(new On); e.addEdges(t), this.setInteriorEdgesInResult(e), e.linkResultDirectedEdges(); var n = this.buildEdgeRings(e.getEdgeEnds()); return this.visitShellInteriors(this.geomGraph.getGeometry(), e), !this.hasUnvisitedShellEdge(n) }, interfaces_: function () { return [] }, getClass: function () { return Zr } }), Zr.findDifferentPoint = function (t, e) { for (var n = 0; n < t.length; n++)if (!t[n].equals(e)) return t[n]; return null }, e(Jr.prototype, { hasChildren: function () { for (var t = 0; 2 > t; t++)if (null !== this.subnode[t]) return !0; return !1 }, isPrunable: function () { return !(this.hasChildren() || this.hasItems()) }, addAllItems: function (t) { t.addAll(this.items); for (var e = 0; 2 > e; e++)null !== this.subnode[e] && this.subnode[e].addAllItems(t); return t }, size: function () { for (var t = 0, e = 0; 2 > e; e++)null !== this.subnode[e] && (t += this.subnode[e].size()); return t + this.items.size() }, addAllItemsFromOverlapping: function (t, e) { return null === t || this.isSearchMatch(t) ? (e.addAll(this.items), null !== this.subnode[0] && this.subnode[0].addAllItemsFromOverlapping(t, e), void (null !== this.subnode[1] && this.subnode[1].addAllItemsFromOverlapping(t, e))) : null }, hasItems: function () { return !this.items.isEmpty() }, remove: function (t, e) { if (!this.isSearchMatch(t)) return !1; for (var n = !1, i = 0; 2 > i; i++)if (null !== this.subnode[i] && (n = this.subnode[i].remove(t, e))) { this.subnode[i].isPrunable() && (this.subnode[i] = null); break } return n ? n : n = this.items.remove(e) }, getItems: function () { return this.items }, depth: function () { for (var t = 0, e = 0; 2 > e; e++)if (null !== this.subnode[e]) { var n = this.subnode[e].depth(); n > t && (t = n) } return t + 1 }, nodeSize: function () { for (var t = 0, e = 0; 2 > e; e++)null !== this.subnode[e] && (t += this.subnode[e].nodeSize()); return t + 1 }, add: function (t) { this.items.add(t) }, interfaces_: function () { return [] }, getClass: function () { return Jr } }), Jr.getSubnodeIndex = function (t, e) { var n = -1; return t.min >= e && (n = 1), t.max <= e && (n = 0), n }, e(Kr.prototype, { expandToInclude: function (t) { t.max > this.max && (this.max = t.max), t.min < this.min && (this.min = t.min) }, getWidth: function () { return this.max - this.min }, overlaps: function () { if (1 === arguments.length) { var t = arguments[0]; return this.overlaps(t.min, t.max) } if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return !(this.min > n || this.max < e) } }, getMin: function () { return this.min }, toString: function () { return "[" + this.min + ", " + this.max + "]" }, contains: function () { if (1 === arguments.length) { if (arguments[0] instanceof Kr) { var t = arguments[0]; return this.contains(t.min, t.max) } if ("number" == typeof arguments[0]) { var e = arguments[0]; return e >= this.min && e <= this.max } } else if (2 === arguments.length) { var n = arguments[0], i = arguments[1]; return n >= this.min && i <= this.max } }, init: function (t, e) { this.min = t, this.max = e, t > e && (this.min = e, this.max = t) }, getMax: function () { return this.max }, interfaces_: function () { return [] }, getClass: function () { return Kr } }), e(Qr.prototype, { getInterval: function () { return this.interval }, getLevel: function () { return this.level }, computeKey: function (t) { for (this.level = Qr.computeLevel(t), this.interval = new Kr, this.computeInterval(this.level, t); !this.interval.contains(t);)this.level += 1, this.computeInterval(this.level, t) }, computeInterval: function (t, e) { var n = Ci.powerOf2(t); this.pt = Math.floor(e.getMin() / n) * n, this.interval.init(this.pt, this.pt + n) }, getPoint: function () { return this.pt }, interfaces_: function () { return [] }, getClass: function () { return Qr } }), Qr.computeLevel = function (t) { var e = t.getWidth(), n = Ci.exponent(e) + 1; return n }, h($r, Jr), e($r.prototype, { getInterval: function () { return this.interval }, find: function (t) { var e = Jr.getSubnodeIndex(t, this.centre); if (-1 === e) return this; if (null !== this.subnode[e]) { var n = this.subnode[e]; return n.find(t) } return this }, insert: function (t) { g.isTrue(null === this.interval || this.interval.contains(t.interval)); var e = Jr.getSubnodeIndex(t.interval, this.centre); if (t.level === this.level - 1) this.subnode[e] = t; else { var n = this.createSubnode(e); n.insert(t), this.subnode[e] = n } }, isSearchMatch: function (t) { return t.overlaps(this.interval) }, getSubnode: function (t) { return null === this.subnode[t] && (this.subnode[t] = this.createSubnode(t)), this.subnode[t] }, getNode: function (t) { var e = Jr.getSubnodeIndex(t, this.centre); if (-1 !== e) { var n = this.getSubnode(e); return n.getNode(t) } return this }, createSubnode: function (t) { var e = 0, n = 0; switch (t) { case 0: e = this.interval.getMin(), n = this.centre; break; case 1: e = this.centre, n = this.interval.getMax() }var i = new Kr(e, n), r = new $r(i, this.level - 1); return r }, interfaces_: function () { return [] }, getClass: function () { return $r } }), $r.createNode = function (t) { var e = new Qr(t), n = new $r(e.getInterval(), e.getLevel()); return n }, $r.createExpanded = function (t, e) { var n = new Kr(e); null !== t && n.expandToInclude(t.interval); var i = $r.createNode(n); return null !== t && i.insert(t), i }, h(ts, Jr), e(ts.prototype, { insert: function (t, e) { var n = Jr.getSubnodeIndex(t, ts.origin); if (-1 === n) return this.add(e), null; var i = this.subnode[n]; if (null === i || !i.getInterval().contains(t)) { var r = $r.createExpanded(i, t); this.subnode[n] = r } this.insertContained(this.subnode[n], t, e) }, isSearchMatch: function (t) { return !0 }, insertContained: function (t, e, n) { g.isTrue(t.getInterval().contains(e)); var i = Ri.isZeroWidth(e.getMin(), e.getMax()), r = null; r = i ? t.find(e) : t.getNode(e), r.add(n) }, interfaces_: function () { return [] }, getClass: function () { return ts } }), ts.origin = 0, e(es.prototype, { size: function () { return null !== this.root ? this.root.size() : 0 }, insert: function (t, e) { this.collectStats(t); var n = es.ensureExtent(t, this.minExtent); this.root.insert(n, e) }, query: function () { if (1 === arguments.length) { if ("number" == typeof arguments[0]) { var t = arguments[0]; return this.query(new Kr(t, t)) } if (arguments[0] instanceof Kr) { var e = arguments[0], n = new I; return this.query(e, n), n } } else if (2 === arguments.length) { var i = arguments[0], r = arguments[1]; this.root.addAllItemsFromOverlapping(i, r) } }, iterator: function () { var t = new I; return this.root.addAllItems(t), t.iterator() }, remove: function (t, e) { var n = es.ensureExtent(t, this.minExtent); return this.root.remove(n, e) }, collectStats: function (t) { var e = t.getWidth(); e < this.minExtent && e > 0 && (this.minExtent = e) }, depth: function () { return null !== this.root ? this.root.depth() : 0 }, nodeSize: function () { return null !== this.root ? this.root.nodeSize() : 0 }, interfaces_: function () { return [] }, getClass: function () { return es } }), es.ensureExtent = function (t, e) { var n = t.getMin(), i = t.getMax(); return n !== i ? t : (n === i && (n -= e / 2, i = n + e / 2), new Kr(n, i)) }, e(ns.prototype, { isInside: function (t) { }, interfaces_: function () { return [] }, getClass: function () { return ns } }), e(is.prototype, { testLineSegment: function (t, e) { var n = null, i = null, r = null, s = null, o = null, a = e.p0, u = e.p1; i = a.x - t.x, r = a.y - t.y, s = u.x - t.x, o = u.y - t.y, (r > 0 && 0 >= o || o > 0 && 0 >= r) && (n = ue.signOfDet2x2(i, r, s, o) / (o - r), n > 0 && this.crossings++) }, buildIndex: function () { this.tree = new es; for (var t = H.removeRepeatedPoints(this.ring.getCoordinates()), e = $e.getChains(t), n = 0; n < e.size(); n++) { var i = e.get(n), r = i.getEnvelope(); this.interval.min = r.getMinY(), this.interval.max = r.getMaxY(), this.tree.insert(this.interval, i) } }, testMonotoneChain: function (t, e, n) { n.select(t, e) }, isInside: function (t) { this.crossings = 0; var e = new C(r.NEGATIVE_INFINITY, r.POSITIVE_INFINITY, t.y, t.y); this.interval.min = t.y, this.interval.max = t.y; for (var n = this.tree.query(this.interval), i = new rs(this, t), s = n.iterator(); s.hasNext();) { var o = s.next(); this.testMonotoneChain(e, i, o) } return this.crossings % 2 === 1 }, interfaces_: function () { return [ns] }, getClass: function () { return is } }), h(rs, tr), e(rs.prototype, { select: function () { if (1 !== arguments.length) return tr.prototype.select.apply(this, arguments); var t = arguments[0]; this.mcp.testLineSegment(this.p, t) }, interfaces_: function () { return [] }, getClass: function () { return rs } }), is.MCSelecter = rs, e(ss.prototype, { insertEdgeEnds: function (t) { for (var e = t.iterator(); e.hasNext();) { var n = e.next(); this.nodes.add(n) } }, getNodeIterator: function () { return this.nodes.iterator() }, copyNodesAndLabels: function (t, e) { for (var n = t.getNodeIterator(); n.hasNext();) { var i = n.next(), r = this.nodes.addNode(i.getCoordinate()); r.setLabel(e, i.getLabel().getLocation(e)) } }, build: function (t) { this.computeIntersectionNodes(t, 0), this.copyNodesAndLabels(t, 0); var e = new Pr, n = e.computeEdgeEnds(t.getEdgeIterator()); this.insertEdgeEnds(n) }, computeIntersectionNodes: function (t, e) { for (var n = t.getEdgeIterator(); n.hasNext();)for (var i = n.next(), r = i.getLabel().getLocation(e), s = i.getEdgeIntersectionList().iterator(); s.hasNext();) { var o = s.next(), a = this.nodes.addNode(o.coord); r === L.BOUNDARY ? a.setLabelBoundary(e) : a.getLabel().isNull(e) && a.setLabel(e, L.INTERIOR) } }, interfaces_: function () { return [] }, getClass: function () { return ss } }), e(os.prototype, { isNodeEdgeAreaLabelsConsistent: function () { for (var t = this.nodeGraph.getNodeIterator(); t.hasNext();) { var e = t.next(); if (!e.getEdges().isAreaLabelsConsistent(this.geomGraph)) return this.invalidPoint = e.getCoordinate().copy(), !1 } return !0 }, getInvalidPoint: function () { return this.invalidPoint }, hasDuplicateRings: function () { for (var t = this.nodeGraph.getNodeIterator(); t.hasNext();)for (var e = t.next(), n = e.getEdges().iterator(); n.hasNext();) { var i = n.next(); if (i.getEdgeEnds().size() > 1) return this.invalidPoint = i.getEdge().getCoordinate(0), !0 } return !1 }, isNodeConsistentArea: function () { var t = this.geomGraph.computeSelfNodes(this.li, !0, !0); return t.hasProperIntersection() ? (this.invalidPoint = t.getProperIntersectionPoint(), !1) : (this.nodeGraph.build(this.geomGraph), this.isNodeEdgeAreaLabelsConsistent()) }, interfaces_: function () { return [] }, getClass: function () { return os } }), e(as.prototype, { buildIndex: function () { this.index = new ke; for (var t = 0; t < this.rings.size(); t++) { var e = this.rings.get(t), n = e.getEnvelopeInternal(); this.index.insert(n, e) } }, getNestedPoint: function () { return this.nestedPt }, isNonNested: function () { this.buildIndex(); for (var t = 0; t < this.rings.size(); t++)for (var e = this.rings.get(t), n = e.getCoordinates(), i = this.index.query(e.getEnvelopeInternal()), r = 0; r < i.size(); r++) { var s = i.get(r), o = s.getCoordinates(); if (e !== s && e.getEnvelopeInternal().intersects(s.getEnvelopeInternal())) { var a = ls.findPtNotNode(n, s, this.graph); if (null !== a) { var u = he.isPointInRing(a, o); if (u) return this.nestedPt = a, !1 } } } return !0 }, add: function (t) { this.rings.add(t), this.totalEnv.expandToInclude(t.getEnvelopeInternal()) }, interfaces_: function () { return [] }, getClass: function () { return as } }), e(us.prototype, { getErrorType: function () { return this.errorType }, getMessage: function () { return us.errMsg[this.errorType] }, getCoordinate: function () { return this.pt }, toString: function () { var t = ""; return null !== this.pt && (t = " at or near point " + this.pt), this.getMessage() + t }, interfaces_: function () { return [] }, getClass: function () { return us } }), us.ERROR = 0, us.REPEATED_POINT = 1, us.HOLE_OUTSIDE_SHELL = 2, us.NESTED_HOLES = 3, us.DISCONNECTED_INTERIOR = 4, us.SELF_INTERSECTION = 5, us.RING_SELF_INTERSECTION = 6, us.NESTED_SHELLS = 7, us.DUPLICATE_RINGS = 8, us.TOO_FEW_POINTS = 9, us.INVALID_COORDINATE = 10, us.RING_NOT_CLOSED = 11, us.errMsg = ["Topology Validation Error", "Repeated Point", "Hole lies outside shell", "Holes are nested", "Interior is disconnected", "Self-intersection", "Ring Self-intersection", "Nested shells", "Duplicate Rings", "Too few distinct points in geometry component", "Invalid Coordinate", "Ring is not closed"], e(ls.prototype, { checkInvalidCoordinates: function () { if (arguments[0] instanceof Array) { for (var t = arguments[0], e = 0; e < t.length; e++)if (!ls.isValid(t[e])) return this.validErr = new us(us.INVALID_COORDINATE, t[e]), null } else if (arguments[0] instanceof bt) { var n = arguments[0]; if (this.checkInvalidCoordinates(n.getExteriorRing().getCoordinates()), null !== this.validErr) return null; for (var e = 0; e < n.getNumInteriorRing(); e++)if (this.checkInvalidCoordinates(n.getInteriorRingN(e).getCoordinates()), null !== this.validErr) return null } }, checkHolesNotNested: function (t, e) { for (var n = new as(e), i = 0; i < t.getNumInteriorRing(); i++) { var r = t.getInteriorRingN(i); n.add(r) } var s = n.isNonNested(); s || (this.validErr = new us(us.NESTED_HOLES, n.getNestedPoint())) }, checkConsistentArea: function (t) { var e = new os(t), n = e.isNodeConsistentArea(); return n ? void (e.hasDuplicateRings() && (this.validErr = new us(us.DUPLICATE_RINGS, e.getInvalidPoint()))) : (this.validErr = new us(us.SELF_INTERSECTION, e.getInvalidPoint()), null) }, isValid: function () { return this.checkValid(this.parentGeometry), null === this.validErr }, checkShellInsideHole: function (t, e, n) { var i = t.getCoordinates(), r = e.getCoordinates(), s = ls.findPtNotNode(i, e, n); if (null !== s) { var o = he.isPointInRing(s, r); if (!o) return s } var a = ls.findPtNotNode(r, t, n); if (null !== a) { var u = he.isPointInRing(a, i); return u ? a : null } return g.shouldNeverReachHere("points in shell and hole appear to be equal"), null }, checkNoSelfIntersectingRings: function (t) { for (var e = t.getEdgeIterator(); e.hasNext();) { var n = e.next(); if (this.checkNoSelfIntersectingRing(n.getEdgeIntersectionList()), null !== this.validErr) return null } }, checkConnectedInteriors: function (t) { var e = new Zr(t); e.isInteriorsConnected() || (this.validErr = new us(us.DISCONNECTED_INTERIOR, e.getCoordinate())) }, checkNoSelfIntersectingRing: function (t) { for (var e = new at, n = !0, i = t.iterator(); i.hasNext();) { var r = i.next(); if (n) n = !1; else { if (e.contains(r.coord)) return this.validErr = new us(us.RING_SELF_INTERSECTION, r.coord), null; e.add(r.coord) } } }, checkHolesInShell: function (t, e) { for (var n = t.getExteriorRing(), i = new is(n), r = 0; r < t.getNumInteriorRing(); r++) { var s = t.getInteriorRingN(r), o = ls.findPtNotNode(s.getCoordinates(), n, e); if (null === o) return null; var a = !i.isInside(o); if (a) return this.validErr = new us(us.HOLE_OUTSIDE_SHELL, o), null } }, checkTooFewPoints: function (t) { return t.hasTooFewPoints() ? (this.validErr = new us(us.TOO_FEW_POINTS, t.getInvalidPoint()), null) : void 0 }, getValidationError: function () { return this.checkValid(this.parentGeometry), this.validErr }, checkValid: function () { if (arguments[0] instanceof Lt) { var t = arguments[0]; this.checkInvalidCoordinates(t.getCoordinates()) } else if (arguments[0] instanceof Tt) { var e = arguments[0]; this.checkInvalidCoordinates(e.getCoordinates()) } else if (arguments[0] instanceof Pt) { var n = arguments[0]; if (this.checkInvalidCoordinates(n.getCoordinates()), null !== this.validErr) return null; if (this.checkClosedRing(n), null !== this.validErr) return null; var i = new $n(0, n); if (this.checkTooFewPoints(i), null !== this.validErr) return null; var r = new ae; i.computeSelfNodes(r, !0, !0), this.checkNoSelfIntersectingRings(i) } else if (arguments[0] instanceof wt) { var s = arguments[0]; if (this.checkInvalidCoordinates(s.getCoordinates()), null !== this.validErr) return null; var i = new $n(0, s); this.checkTooFewPoints(i) } else if (arguments[0] instanceof bt) { var o = arguments[0]; if (this.checkInvalidCoordinates(o), null !== this.validErr) return null; if (this.checkClosedRings(o), null !== this.validErr) return null; var i = new $n(0, o); if (this.checkTooFewPoints(i), null !== this.validErr) return null; if (this.checkConsistentArea(i), null !== this.validErr) return null; if (!this.isSelfTouchingRingFormingHoleValid && (this.checkNoSelfIntersectingRings(i), null !== this.validErr)) return null; if (this.checkHolesInShell(o, i), null !== this.validErr) return null; if (this.checkHolesNotNested(o, i), null !== this.validErr) return null; this.checkConnectedInteriors(i) } else if (arguments[0] instanceof Ot) { for (var a = arguments[0], u = 0; u < a.getNumGeometries(); u++) { var l = a.getGeometryN(u); if (this.checkInvalidCoordinates(l), null !== this.validErr) return null; if (this.checkClosedRings(l), null !== this.validErr) return null } var i = new $n(0, a); if (this.checkTooFewPoints(i), null !== this.validErr) return null; if (this.checkConsistentArea(i), null !== this.validErr) return null; if (!this.isSelfTouchingRingFormingHoleValid && (this.checkNoSelfIntersectingRings(i), null !== this.validErr)) return null; for (var u = 0; u < a.getNumGeometries(); u++) { var l = a.getGeometryN(u); if (this.checkHolesInShell(l, i), null !== this.validErr) return null } for (var u = 0; u < a.getNumGeometries(); u++) { var l = a.getGeometryN(u); if (this.checkHolesNotNested(l, i), null !== this.validErr) return null } if (this.checkShellsNotNested(a, i), null !== this.validErr) return null; this.checkConnectedInteriors(i) } else if (arguments[0] instanceof gt) for (var h = arguments[0], u = 0; u < h.getNumGeometries(); u++) { var c = h.getGeometryN(u); if (this.checkValid(c), null !== this.validErr) return null } else if (arguments[0] instanceof B) { var g = arguments[0]; if (this.validErr = null, g.isEmpty()) return null; if (g instanceof Lt) this.checkValid(g); else if (g instanceof Tt) this.checkValid(g); else if (g instanceof Pt) this.checkValid(g); else if (g instanceof wt) this.checkValid(g); else if (g instanceof bt) this.checkValid(g); else if (g instanceof Ot) this.checkValid(g); else { if (!(g instanceof gt)) throw new UnsupportedOperationException(g.getClass().getName()); this.checkValid(g) } } }, setSelfTouchingRingFormingHoleValid: function (t) { this.isSelfTouchingRingFormingHoleValid = t }, checkShellNotNested: function (t, e, n) { var i = t.getCoordinates(), r = e.getExteriorRing(), s = r.getCoordinates(), o = ls.findPtNotNode(i, r, n); if (null === o) return null; var a = he.isPointInRing(o, s); if (!a) return null; if (e.getNumInteriorRing() <= 0) return this.validErr = new us(us.NESTED_SHELLS, o), null; for (var u = null, l = 0; l < e.getNumInteriorRing(); l++) { var h = e.getInteriorRingN(l); if (u = this.checkShellInsideHole(t, h, n), null === u) return null } this.validErr = new us(us.NESTED_SHELLS, u) }, checkClosedRings: function (t) { if (this.checkClosedRing(t.getExteriorRing()), null !== this.validErr) return null; for (var e = 0; e < t.getNumInteriorRing(); e++)if (this.checkClosedRing(t.getInteriorRingN(e)), null !== this.validErr) return null }, checkClosedRing: function (t) { if (!t.isClosed()) { var e = null; t.getNumPoints() >= 1 && (e = t.getCoordinateN(0)), this.validErr = new us(us.RING_NOT_CLOSED, e) } }, checkShellsNotNested: function (t, e) { for (var n = 0; n < t.getNumGeometries(); n++)for (var i = t.getGeometryN(n), r = i.getExteriorRing(), s = 0; s < t.getNumGeometries(); s++)if (n !== s) { var o = t.getGeometryN(s); if (this.checkShellNotNested(r, o, e), null !== this.validErr) return null } }, interfaces_: function () { return [] }, getClass: function () { return ls } }), ls.findPtNotNode = function (t, e, n) { for (var i = n.findEdge(e), r = i.getEdgeIntersectionList(), s = 0; s < t.length; s++) { var o = t[s]; if (!r.isIntersection(o)) return o } return null }, ls.isValid = function () { if (arguments[0] instanceof B) { var t = arguments[0], e = new ls(t); return e.isValid() } if (arguments[0] instanceof f) { var n = arguments[0]; return r.isNaN(n.x) ? !1 : r.isInfinite(n.x) ? !1 : r.isNaN(n.y) ? !1 : !r.isInfinite(n.y) } }; var Po = Object.freeze({ IsValidOp: ls }), Oo = Object.freeze({ BoundaryOp: dt, IsSimpleOp: Gi, buffer: Co, distance: wo, linemerge: So, overlay: Lo, polygonize: Ro, relate: bo, union: To, valid: Po }); h(hs, Mt.CoordinateOperation), e(hs.prototype, { editCoordinates: function (t, e) { if (0 === t.length) return null; for (var n = new Array(t.length).fill(null), i = 0; i < t.length; i++) { var r = new f(t[i]); this.targetPM.makePrecise(r), n[i] = r } var s = new N(n, !1), o = s.toCoordinateArray(), a = 0; e instanceof wt && (a = 2), e instanceof Pt && (a = 4); var u = n; return this.removeCollapsed && (u = null), o.length < a ? u : o }, interfaces_: function () { return [] }, getClass: function () { return hs } }), e(cs.prototype, { fixPolygonalTopology: function (t) { var e = t; this.changePrecisionModel || (e = this.changePM(t, this.targetPM)); var n = e.buffer(0), i = n; return this.changePrecisionModel || (i = t.getFactory().createGeometry(n)), i }, reducePointwise: function (t) { var e = null; if (this.changePrecisionModel) { var n = this.createFactory(t.getFactory(), this.targetPM); e = new Mt(n) } else e = new Mt; var i = this.removeCollapsed; t.getDimension() >= 2 && (i = !0); var r = e.edit(t, new hs(this.targetPM, i)); return r }, changePM: function (t, e) { var n = this.createEditor(t.getFactory(), e); return n.edit(t, new Mt.NoOpGeometryOperation) }, setRemoveCollapsedComponents: function (t) { this.removeCollapsed = t }, createFactory: function (t, e) { var n = new ie(e, t.getSRID(), t.getCoordinateSequenceFactory()); return n }, setChangePrecisionModel: function (t) { this.changePrecisionModel = t }, reduce: function (t) { var e = this.reducePointwise(t); return this.isPointwise ? e : R(e, Rt) ? e.isValid() ? e : this.fixPolygonalTopology(e) : e }, setPointwise: function (t) { this.isPointwise = t }, createEditor: function (t, e) { if (t.getPrecisionModel() === e) return new Mt; var n = this.createFactory(t, e), i = new Mt(n); return i }, interfaces_: function () { return [] }, getClass: function () { return cs } }), cs.reduce = function (t, e) { var n = new cs(e); return n.reduce(t) }, cs.reducePointwise = function (t, e) { var n = new cs(e); return n.setPointwise(!0), n.reduce(t) }; var Mo = Object.freeze({ GeometryPrecisionReducer: cs }); e(gs.prototype, { simplifySection: function (t, e) { if (t + 1 === e) return null; this.seg.p0 = this.pts[t], this.seg.p1 = this.pts[e]; for (var n = -1, i = t, r = t + 1; e > r; r++) { var s = this.seg.distance(this.pts[r]); s > n && (n = s, i = r) } if (n <= this.distanceTolerance) for (var r = t + 1; e > r; r++)this.usePt[r] = !1; else this.simplifySection(t, i), this.simplifySection(i, e) }, setDistanceTolerance: function (t) { this.distanceTolerance = t }, simplify: function () { this.usePt = new Array(this.pts.length).fill(null); for (var t = 0; t < this.pts.length; t++)this.usePt[t] = !0; this.simplifySection(0, this.pts.length - 1); for (var e = new N, t = 0; t < this.pts.length; t++)this.usePt[t] && e.add(new f(this.pts[t])); return e.toCoordinateArray() }, interfaces_: function () { return [] }, getClass: function () { return gs } }), gs.simplify = function (t, e) { var n = new gs(t); return n.setDistanceTolerance(e), n.simplify() }, e(fs.prototype, { setEnsureValid: function (t) { this.isEnsureValidTopology = t }, getResultGeometry: function () { return this.inputGeom.isEmpty() ? this.inputGeom.copy() : new ds(this.isEnsureValidTopology, this.distanceTolerance).transform(this.inputGeom) }, setDistanceTolerance: function (t) { if (0 > t) throw new i("Tolerance must be non-negative"); this.distanceTolerance = t }, interfaces_: function () { return [] }, getClass: function () { return fs } }), fs.simplify = function (t, e) { + var n = new fs(t); return n.setDistanceTolerance(e), + n.getResultGeometry() + }, h(ds, xe), e(ds.prototype, { transformPolygon: function (t, e) { if (t.isEmpty()) return null; var n = xe.prototype.transformPolygon.call(this, t, e); return e instanceof Ot ? n : this.createValidArea(n) }, createValidArea: function (t) { return this.isEnsureValidTopology ? t.buffer(0) : t }, transformCoordinates: function (t, e) { var n = t.toCoordinateArray(), i = null; return i = 0 === n.length ? new Array(0).fill(null) : gs.simplify(n, this.distanceTolerance), this.factory.getCoordinateSequenceFactory().create(i) }, transformMultiPolygon: function (t, e) { var n = xe.prototype.transformMultiPolygon.call(this, t, e); return this.createValidArea(n) }, transformLinearRing: function (t, e) { var n = e instanceof bt, i = xe.prototype.transformLinearRing.call(this, t, e); return !n || i instanceof Pt ? i : null }, interfaces_: function () { return [] }, getClass: function () { return ds } }), fs.DPTransformer = ds, h(ms, ce), e(ms.prototype, { getIndex: function () { return this.index }, getParent: function () { return this.parent }, interfaces_: function () { return [] }, getClass: function () { return ms } }), e(ps.prototype, { addToResult: function (t) { this.resultSegs.add(t) }, asLineString: function () { return this.parentLine.getFactory().createLineString(ps.extractCoordinates(this.resultSegs)) }, getResultSize: function () { var t = this.resultSegs.size(); return 0 === t ? 0 : t + 1 }, getParent: function () { return this.parentLine }, getSegment: function (t) { return this.segs[t] }, getParentCoordinates: function () { return this.parentLine.getCoordinates() }, getMinimumSize: function () { return this.minimumSize }, asLinearRing: function () { return this.parentLine.getFactory().createLinearRing(ps.extractCoordinates(this.resultSegs)) }, getSegments: function () { return this.segs }, init: function () { var t = this.parentLine.getCoordinates(); this.segs = new Array(t.length - 1).fill(null); for (var e = 0; e < t.length - 1; e++) { var n = new ms(t[e], t[e + 1], this.parentLine, e); this.segs[e] = n } }, getResultCoordinates: function () { return ps.extractCoordinates(this.resultSegs) }, interfaces_: function () { return [] }, getClass: function () { return ps } }), ps.extractCoordinates = function (t) { for (var e = new Array(t.size() + 1).fill(null), n = null, i = 0; i < t.size(); i++)n = t.get(i), e[i] = n.p0; return e[e.length - 1] = n.p1, e }, e(vs.prototype, { remove: function (t) { this.index.remove(new C(t.p0, t.p1), t) }, add: function () { if (arguments[0] instanceof ps) for (var t = arguments[0], e = t.getSegments(), n = 0; n < e.length; n++) { var i = e[n]; this.add(i) } else if (arguments[0] instanceof ce) { var r = arguments[0]; this.index.insert(new C(r.p0, r.p1), r) } }, query: function (t) { var e = new C(t.p0, t.p1), n = new ys(t); this.index.query(e, n); var i = n.getItems(); return i }, interfaces_: function () { return [] }, getClass: function () { return vs } }), e(ys.prototype, { visitItem: function (t) { var e = t; C.intersects(e.p0, e.p1, this.querySeg.p0, this.querySeg.p1) && this.items.add(t) }, getItems: function () { return this.items }, interfaces_: function () { return [De] }, getClass: function () { return ys } }), e(xs.prototype, { flatten: function (t, e) { var n = this.linePts[t], i = this.linePts[e], r = new ce(n, i); return this.remove(this.line, t, e), this.outputIndex.add(r), r }, hasBadIntersection: function (t, e, n) { return this.hasBadOutputIntersection(n) ? !0 : !!this.hasBadInputIntersection(t, e, n) }, setDistanceTolerance: function (t) { this.distanceTolerance = t }, simplifySection: function (t, e, n) { n += 1; var i = new Array(2).fill(null); if (t + 1 === e) { var r = this.line.getSegment(t); return this.line.addToResult(r), null } var s = !0; if (this.line.getResultSize() < this.line.getMinimumSize()) { var o = n + 1; o < this.line.getMinimumSize() && (s = !1) } var a = new Array(1).fill(null), u = this.findFurthestPoint(this.linePts, t, e, a); a[0] > this.distanceTolerance && (s = !1); var l = new ce; if (l.p0 = this.linePts[t], l.p1 = this.linePts[e], i[0] = t, i[1] = e, this.hasBadIntersection(this.line, i, l) && (s = !1), s) { var r = this.flatten(t, e); return this.line.addToResult(r), null } this.simplifySection(t, u, n), this.simplifySection(u, e, n) }, hasBadOutputIntersection: function (t) { for (var e = this.outputIndex.query(t), n = e.iterator(); n.hasNext();) { var i = n.next(); if (this.hasInteriorIntersection(i, t)) return !0 } return !1 }, findFurthestPoint: function (t, e, n, i) { var r = new ce; r.p0 = t[e], r.p1 = t[n]; for (var s = -1, o = e, a = e + 1; n > a; a++) { var u = t[a], l = r.distance(u); l > s && (s = l, o = a) } return i[0] = s, o }, simplify: function (t) { this.line = t, this.linePts = t.getParentCoordinates(), this.simplifySection(0, this.linePts.length - 1, 0) }, remove: function (t, e, n) { for (var i = e; n > i; i++) { var r = t.getSegment(i); this.inputIndex.remove(r) } }, hasInteriorIntersection: function (t, e) { return this.li.computeIntersection(t.p0, t.p1, e.p0, e.p1), this.li.isInteriorIntersection() }, hasBadInputIntersection: function (t, e, n) { for (var i = this.inputIndex.query(n), r = i.iterator(); r.hasNext();) { var s = r.next(); if (this.hasInteriorIntersection(s, n)) { if (xs.isInLineSection(t, e, s)) continue; return !0 } } return !1 }, interfaces_: function () { return [] }, getClass: function () { return xs } }), xs.isInLineSection = function (t, e, n) { if (n.getParent() !== t.getParent()) return !1; var i = n.getIndex(); return i >= e[0] && i < e[1] }, e(Es.prototype, { setDistanceTolerance: function (t) { this.distanceTolerance = t }, simplify: function (t) { for (var e = t.iterator(); e.hasNext();)this.inputIndex.add(e.next()); for (var e = t.iterator(); e.hasNext();) { var n = new xs(this.inputIndex, this.outputIndex); n.setDistanceTolerance(this.distanceTolerance), n.simplify(e.next()) } }, interfaces_: function () { return [] }, getClass: function () { return Es } }), e(Is.prototype, { getResultGeometry: function () { if (this.inputGeom.isEmpty()) return this.inputGeom.copy(); this.linestringMap = new te, this.inputGeom.apply(new Cs(this)), this.lineSimplifier.simplify(this.linestringMap.values()); var t = new Ns(this.linestringMap).transform(this.inputGeom); return t }, setDistanceTolerance: function (t) { if (0 > t) throw new i("Tolerance must be non-negative"); this.lineSimplifier.setDistanceTolerance(t) }, interfaces_: function () { return [] }, getClass: function () { return Is } }), Is.simplify = function (t, e) { var n = new Is(t); return n.setDistanceTolerance(e), n.getResultGeometry() }, h(Ns, xe), e(Ns.prototype, { transformCoordinates: function (t, e) { if (0 === t.size()) return null; if (e instanceof wt) { var n = this.linestringMap.get(e); return this.createCoordinateSequence(n.getResultCoordinates()) } return xe.prototype.transformCoordinates.call(this, t, e) }, interfaces_: function () { return [] }, getClass: function () { return Ns } }), e(Cs.prototype, { filter: function (t) { if (t instanceof wt) { var e = t; if (e.isEmpty()) return null; var n = e.isClosed() ? 4 : 2, i = new ps(e, n); this.tps.linestringMap.put(e, i) } }, interfaces_: function () { return [q] }, getClass: function () { return Cs } }), Is.LineStringTransformer = Ns, Is.LineStringMapBuilderFilter = Cs; var _o = Object.freeze({ DouglasPeuckerSimplifier: fs, TopologyPreservingSimplifier: Is }); e(ws.prototype, { splitAt: function () { if (1 === arguments.length) { var t = arguments[0], e = this.minimumLen / this.segLen; if (t.distance(this.seg.p0) < this.minimumLen) return this.splitPt = this.seg.pointAlong(e), null; if (t.distance(this.seg.p1) < this.minimumLen) return this.splitPt = ws.pointAlongReverse(this.seg, e), null; this.splitPt = t } else if (2 === arguments.length) { var n = arguments[0], i = arguments[1], r = this.getConstrainedLength(n), s = r / this.segLen; i.equals2D(this.seg.p0) ? this.splitPt = this.seg.pointAlong(s) : this.splitPt = ws.pointAlongReverse(this.seg, s) } }, setMinimumLength: function (t) { this.minimumLen = t }, getConstrainedLength: function (t) { return t < this.minimumLen ? this.minimumLen : t }, getSplitPoint: function () { return this.splitPt }, interfaces_: function () { return [] }, getClass: function () { return ws } }), ws.pointAlongReverse = function (t, e) { var n = new f; return n.x = t.p1.x - e * (t.p1.x - t.p0.x), n.y = t.p1.y - e * (t.p1.y - t.p0.y), n }, e(Ss.prototype, { findSplitPoint: function (t, e) { }, interfaces_: function () { return [] }, getClass: function () { return Ss } }), e(Ls.prototype, { findSplitPoint: function (t, e) { var n = t.getLineSegment(), i = n.getLength(), r = i / 2, s = new ws(n), o = Ls.projectedSplitPoint(t, e), a = 2 * o.distance(e) * .8, u = a; return u > r && (u = r), s.setMinimumLength(u), s.splitAt(o), s.getSplitPoint() }, interfaces_: function () { return [Ss] }, getClass: function () { return Ls } }), Ls.projectedSplitPoint = function (t, e) { var n = t.getLineSegment(), i = n.project(e); return i }, e(Rs.prototype, { interfaces_: function () { return [] }, getClass: function () { return Rs } }), Rs.triArea = function (t, e, n) { return (e.x - t.x) * (n.y - t.y) - (e.y - t.y) * (n.x - t.x) }, Rs.isInCircleDDNormalized = function (t, e, n, i) { var r = M.valueOf(t.x).selfSubtract(i.x), s = M.valueOf(t.y).selfSubtract(i.y), o = M.valueOf(e.x).selfSubtract(i.x), a = M.valueOf(e.y).selfSubtract(i.y), u = M.valueOf(n.x).selfSubtract(i.x), l = M.valueOf(n.y).selfSubtract(i.y), h = r.multiply(a).selfSubtract(o.multiply(s)), c = o.multiply(l).selfSubtract(u.multiply(a)), g = u.multiply(s).selfSubtract(r.multiply(l)), f = r.multiply(r).selfAdd(s.multiply(s)), d = o.multiply(o).selfAdd(a.multiply(a)), m = u.multiply(u).selfAdd(l.multiply(l)), p = f.selfMultiply(c).selfAdd(d.selfMultiply(g)).selfAdd(m.selfMultiply(h)), v = p.doubleValue() > 0; return v }, Rs.checkRobustInCircle = function (t, e, n, i) { var r = Rs.isInCircleNonRobust(t, e, n, i), s = Rs.isInCircleDDSlow(t, e, n, i), o = Rs.isInCircleCC(t, e, n, i), a = ci.circumcentre(t, e, n); D.out.println("p radius diff a = " + Math.abs(i.distance(a) - t.distance(a)) / t.distance(a)), r === s && r === o || (D.out.println("inCircle robustness failure (double result = " + r + ", DD result = " + s + ", CC result = " + o + ")"), D.out.println(se.toLineString(new Gt([t, e, n, i]))), D.out.println("Circumcentre = " + se.toPoint(a) + " radius = " + t.distance(a)), D.out.println("p radius diff a = " + Math.abs(i.distance(a) / t.distance(a) - 1)), D.out.println("p radius diff b = " + Math.abs(i.distance(a) / e.distance(a) - 1)), D.out.println("p radius diff c = " + Math.abs(i.distance(a) / n.distance(a) - 1)), D.out.println()) }, Rs.isInCircleDDFast = function (t, e, n, i) { var r = M.sqr(t.x).selfAdd(M.sqr(t.y)).selfMultiply(Rs.triAreaDDFast(e, n, i)), s = M.sqr(e.x).selfAdd(M.sqr(e.y)).selfMultiply(Rs.triAreaDDFast(t, n, i)), o = M.sqr(n.x).selfAdd(M.sqr(n.y)).selfMultiply(Rs.triAreaDDFast(t, e, i)), a = M.sqr(i.x).selfAdd(M.sqr(i.y)).selfMultiply(Rs.triAreaDDFast(t, e, n)), u = r.selfSubtract(s).selfAdd(o).selfSubtract(a), l = u.doubleValue() > 0; return l }, Rs.isInCircleCC = function (t, e, n, i) { var r = ci.circumcentre(t, e, n), s = t.distance(r), o = i.distance(r) - s; return 0 >= o }, Rs.isInCircleNormalized = function (t, e, n, i) { var r = t.x - i.x, s = t.y - i.y, o = e.x - i.x, a = e.y - i.y, u = n.x - i.x, l = n.y - i.y, h = r * a - o * s, c = o * l - u * a, g = u * s - r * l, f = r * r + s * s, d = o * o + a * a, m = u * u + l * l, p = f * c + d * g + m * h; return p > 0 }, Rs.isInCircleDDSlow = function (t, e, n, i) { var r = M.valueOf(i.x), s = M.valueOf(i.y), o = M.valueOf(t.x), a = M.valueOf(t.y), u = M.valueOf(e.x), l = M.valueOf(e.y), h = M.valueOf(n.x), c = M.valueOf(n.y), g = o.multiply(o).add(a.multiply(a)).multiply(Rs.triAreaDDSlow(u, l, h, c, r, s)), f = u.multiply(u).add(l.multiply(l)).multiply(Rs.triAreaDDSlow(o, a, h, c, r, s)), d = h.multiply(h).add(c.multiply(c)).multiply(Rs.triAreaDDSlow(o, a, u, l, r, s)), m = r.multiply(r).add(s.multiply(s)).multiply(Rs.triAreaDDSlow(o, a, u, l, h, c)), p = g.subtract(f).add(d).subtract(m), v = p.doubleValue() > 0; return v }, Rs.isInCircleNonRobust = function (t, e, n, i) { var r = (t.x * t.x + t.y * t.y) * Rs.triArea(e, n, i) - (e.x * e.x + e.y * e.y) * Rs.triArea(t, n, i) + (n.x * n.x + n.y * n.y) * Rs.triArea(t, e, i) - (i.x * i.x + i.y * i.y) * Rs.triArea(t, e, n) > 0; return r }, Rs.isInCircleRobust = function (t, e, n, i) { return Rs.isInCircleNormalized(t, e, n, i) }, Rs.triAreaDDSlow = function (t, e, n, i, r, s) { return n.subtract(t).multiply(s.subtract(e)).subtract(i.subtract(e).multiply(r.subtract(t))) }, Rs.triAreaDDFast = function (t, e, n) { var i = M.valueOf(e.x).selfSubtract(t.x).selfMultiply(M.valueOf(n.y).selfSubtract(t.y)), r = M.valueOf(e.y).selfSubtract(t.y).selfMultiply(M.valueOf(n.x).selfSubtract(t.x)); return i.selfSubtract(r) }, e(bs.prototype, { circleCenter: function (t, e) { var n = new bs(this.getX(), this.getY()), i = this.bisector(n, t), r = this.bisector(t, e), s = new F(i, r), o = null; try { o = new bs(s.getX(), s.getY()) } catch (i) { if (!(i instanceof S)) throw i; D.err.println("a: " + n + " b: " + t + " c: " + e), D.err.println(i) } finally { } return o }, dot: function (t) { return this.p.x * t.getX() + this.p.y * t.getY() }, magn: function () { return Math.sqrt(this.p.x * this.p.x + this.p.y * this.p.y) }, getZ: function () { return this.p.z }, bisector: function (t, e) { var n = e.getX() - t.getX(), i = e.getY() - t.getY(), r = new F(t.getX() + n / 2, t.getY() + i / 2, 1), s = new F(t.getX() - i + n / 2, t.getY() + n + i / 2, 1); return new F(r, s) }, equals: function () { if (1 === arguments.length) { var t = arguments[0]; return this.p.x === t.getX() && this.p.y === t.getY() } if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return this.p.distance(e.getCoordinate()) < n } }, getCoordinate: function () { return this.p }, isInCircle: function (t, e, n) { return Rs.isInCircleRobust(t.p, e.p, n.p, this.p) }, interpolateZValue: function (t, e, n) { var i = t.getX(), r = t.getY(), s = e.getX() - i, o = n.getX() - i, a = e.getY() - r, u = n.getY() - r, l = s * u - o * a, h = this.getX() - i, c = this.getY() - r, g = (u * h - o * c) / l, f = (-a * h + s * c) / l, d = t.getZ() + g * (e.getZ() - t.getZ()) + f * (n.getZ() - t.getZ()); return d }, midPoint: function (t) { var e = (this.p.x + t.getX()) / 2, n = (this.p.y + t.getY()) / 2, i = (this.p.z + t.getZ()) / 2; return new bs(e, n, i) }, rightOf: function (t) { return this.isCCW(t.dest(), t.orig()) }, isCCW: function (t, e) { return (t.p.x - this.p.x) * (e.p.y - this.p.y) - (t.p.y - this.p.y) * (e.p.x - this.p.x) > 0 }, getX: function () { return this.p.x }, crossProduct: function (t) { return this.p.x * t.getY() - this.p.y * t.getX() }, setZ: function (t) { this.p.z = t }, times: function (t) { return new bs(t * this.p.x, t * this.p.y) }, cross: function () { return new bs(this.p.y, -this.p.x) }, leftOf: function (t) { return this.isCCW(t.orig(), t.dest()) }, toString: function () { return "POINT (" + this.p.x + " " + this.p.y + ")" }, sub: function (t) { return new bs(this.p.x - t.getX(), this.p.y - t.getY()) }, getY: function () { return this.p.y }, classify: function (t, e) { var n = this, i = e.sub(t), r = n.sub(t), s = i.crossProduct(r); return s > 0 ? bs.LEFT : 0 > s ? bs.RIGHT : i.getX() * r.getX() < 0 || i.getY() * r.getY() < 0 ? bs.BEHIND : i.magn() < r.magn() ? bs.BEYOND : t.equals(n) ? bs.ORIGIN : e.equals(n) ? bs.DESTINATION : bs.BETWEEN }, sum: function (t) { return new bs(this.p.x + t.getX(), this.p.y + t.getY()) }, distance: function (t, e) { return Math.sqrt(Math.pow(e.getX() - t.getX(), 2) + Math.pow(e.getY() - t.getY(), 2)) }, circumRadiusRatio: function (t, e) { var n = this.circleCenter(t, e), i = this.distance(n, t), r = this.distance(this, t), s = this.distance(t, e); return r > s && (r = s), s = this.distance(e, this), r > s && (r = s), i / r }, interfaces_: function () { return [] }, getClass: function () { return bs } }), bs.interpolateZ = function () { if (3 === arguments.length) { var t = arguments[0], e = arguments[1], n = arguments[2], i = e.distance(n), r = t.distance(e), s = n.z - e.z, o = e.z + s * (r / i); return o } if (4 === arguments.length) { var a = arguments[0], u = arguments[1], l = arguments[2], h = arguments[3], c = u.x, g = u.y, f = l.x - c, d = h.x - c, m = l.y - g, p = h.y - g, v = f * p - d * m, y = a.x - c, x = a.y - g, E = (p * y - d * x) / v, I = (-m * y + f * x) / v, N = u.z + E * (l.z - u.z) + I * (h.z - u.z); return N } }, bs.LEFT = 0, bs.RIGHT = 1, bs.BEYOND = 2, bs.BEHIND = 3, bs.BETWEEN = 4, bs.ORIGIN = 5, bs.DESTINATION = 6, h(Ts, bs), e(Ts.prototype, { getConstraint: function () { return this.constraint }, setOnConstraint: function (t) { this._isOnConstraint = t }, merge: function (t) { t._isOnConstraint && (this._isOnConstraint = !0, this.constraint = t.constraint) }, isOnConstraint: function () { return this._isOnConstraint }, setConstraint: function (t) { this._isOnConstraint = !0, this.constraint = t }, interfaces_: function () { return [] }, getClass: function () { return Ts } }), e(Ps.prototype, { equalsNonOriented: function (t) { return this.equalsOriented(t) ? !0 : !!this.equalsOriented(t.sym()) }, toLineSegment: function () { return new ce(this.vertex.getCoordinate(), this.dest().getCoordinate()) }, dest: function () { return this.sym().orig() }, oNext: function () { return this.next }, equalsOriented: function (t) { return !(!this.orig().getCoordinate().equals2D(t.orig().getCoordinate()) || !this.dest().getCoordinate().equals2D(t.dest().getCoordinate())) }, dNext: function () { return this.sym().oNext().sym() }, lPrev: function () { return this.next.sym() }, rPrev: function () { return this.sym().oNext() }, rot: function () { return this._rot }, oPrev: function () { return this._rot.next._rot }, sym: function () { return this._rot._rot }, setOrig: function (t) { this.vertex = t }, lNext: function () { return this.invRot().oNext().rot() }, getLength: function () { return this.orig().getCoordinate().distance(this.dest().getCoordinate()) }, invRot: function () { return this._rot.sym() }, setDest: function (t) { this.sym().setOrig(t) }, setData: function (t) { this.data = t }, getData: function () { return this.data }, "delete": function () { this._rot = null }, orig: function () { return this.vertex }, rNext: function () { return this._rot.next.invRot() }, toString: function () { var t = this.vertex.getCoordinate(), e = this.dest().getCoordinate(); return se.toLineString(t, e) }, isLive: function () { return null !== this._rot }, getPrimary: function () { return this.orig().getCoordinate().compareTo(this.dest().getCoordinate()) <= 0 ? this : this.sym() }, dPrev: function () { return this.invRot().oNext().invRot() }, setNext: function (t) { this.next = t }, interfaces_: function () { return [] }, getClass: function () { return Ps } }), Ps.makeEdge = function (t, e) { var n = new Ps, i = new Ps, r = new Ps, s = new Ps; n._rot = i, i._rot = r, r._rot = s, s._rot = n, n.setNext(n), i.setNext(s), r.setNext(r), s.setNext(i); var o = n; return o.setOrig(t), o.setDest(e), o }, Ps.swap = function (t) { var e = t.oPrev(), n = t.sym().oPrev(); Ps.splice(t, e), Ps.splice(t.sym(), n), Ps.splice(t, e.lNext()), Ps.splice(t.sym(), n.lNext()), t.setOrig(e.dest()), t.setDest(n.dest()) }, Ps.splice = function (t, e) { var n = t.oNext().rot(), i = e.oNext().rot(), r = e.oNext(), s = t.oNext(), o = i.oNext(), a = n.oNext(); t.setNext(r), e.setNext(s), n.setNext(o), i.setNext(a) }, Ps.connect = function (t, e) { var n = Ps.makeEdge(t.dest(), e.orig()); return Ps.splice(n, t.lNext()), Ps.splice(n.sym(), e), n }, e(Os.prototype, { insertSite: function (t) { var e = this.subdiv.locate(t); if (this.subdiv.isVertexOfEdge(e, t)) return e; this.subdiv.isOnEdge(e, t.getCoordinate()) && (e = e.oPrev(), this.subdiv["delete"](e.oNext())); var n = this.subdiv.makeEdge(e.orig(), t); Ps.splice(n, e); var i = n; do n = this.subdiv.connect(e, n.sym()), e = n.oPrev(); while (e.lNext() !== i); for (; ;) { var r = e.oPrev(); if (r.dest().rightOf(e) && t.isInCircle(e.orig(), r.dest(), e.dest())) Ps.swap(e), e = e.oPrev(); else { if (e.oNext() === i) return n; e = e.oNext().lPrev() } } }, insertSites: function (t) { for (var e = t.iterator(); e.hasNext();) { var n = e.next(); this.insertSite(n) } }, interfaces_: function () { return [] }, getClass: function () { return Os } }), e(Ms.prototype, { locate: function (t) { }, interfaces_: function () { return [] }, getClass: function () { return Ms } }), e(_s.prototype, { init: function () { this.lastEdge = this.findEdge() }, locate: function (t) { this.lastEdge.isLive() || this.init(); var e = this.subdiv.locateFromEdge(t, this.lastEdge); return this.lastEdge = e, e }, findEdge: function () { var t = this.subdiv.getEdges(); return t.iterator().next() }, interfaces_: function () { return [Ms] }, getClass: function () { return _s } }), h(As, l), e(As.prototype, { getSegment: function () { return this.seg }, interfaces_: function () { return [] }, getClass: function () { return As } }), As.msgWithSpatial = function (t, e) { return null !== e ? t + " [ " + e + " ]" : t }, e(Ds.prototype, { visit: function (t) { }, interfaces_: function () { return [] }, getClass: function () { return Ds } }), e(Fs.prototype, { getTriangleVertices: function (t) { var e = new Bs; return this.visitTriangles(e, t), e.getTriangleVertices() }, isFrameVertex: function (t) { return t.equals(this.frameVertex[0]) ? !0 : t.equals(this.frameVertex[1]) ? !0 : !!t.equals(this.frameVertex[2]) }, isVertexOfEdge: function (t, e) { return !(!e.equals(t.orig(), this.tolerance) && !e.equals(t.dest(), this.tolerance)) }, connect: function (t, e) { var n = Ps.connect(t, e); return this.quadEdges.add(n), n }, getVoronoiCellPolygon: function (t, e) { var n = new I, i = t; do { var r = t.rot().orig().getCoordinate(); n.add(r), t = t.oPrev() } while (t !== i); var s = new N; s.addAll(n, !1), s.closeRing(), s.size() < 4 && (D.out.println(s), s.add(s.get(s.size() - 1), !0)); var o = s.toCoordinateArray(), a = e.createPolygon(e.createLinearRing(o), null), u = i.orig(); return a.setUserData(u.getCoordinate()), a }, setLocator: function (t) { this.locator = t }, initSubdiv: function () { var t = this.makeEdge(this.frameVertex[0], this.frameVertex[1]), e = this.makeEdge(this.frameVertex[1], this.frameVertex[2]); Ps.splice(t.sym(), e); var n = this.makeEdge(this.frameVertex[2], this.frameVertex[0]); return Ps.splice(e.sym(), n), Ps.splice(n.sym(), t), t }, isFrameBorderEdge: function (t) { var e = new Array(3).fill(null); Fs.getTriangleEdges(t, e); var n = new Array(3).fill(null); Fs.getTriangleEdges(t.sym(), n); var i = t.lNext().dest(); if (this.isFrameVertex(i)) return !0; var r = t.sym().lNext().dest(); return !!this.isFrameVertex(r) }, makeEdge: function (t, e) { var n = Ps.makeEdge(t, e); return this.quadEdges.add(n), n }, visitTriangles: function (t, e) { this.visitedKey++; var n = new me; n.push(this.startingEdge); for (var i = new Q; !n.empty();) { var r = n.pop(); if (!i.contains(r)) { var s = this.fetchTriangleToVisit(r, n, e, i); null !== s && t.visit(s) } } }, isFrameEdge: function (t) { return !(!this.isFrameVertex(t.orig()) && !this.isFrameVertex(t.dest())) }, isOnEdge: function (t, e) { this.seg.setCoordinates(t.orig().getCoordinate(), t.dest().getCoordinate()); var n = this.seg.distance(e); return n < this.edgeCoincidenceTolerance }, getEnvelope: function () { return new C(this.frameEnv) }, createFrame: function (t) { var e = t.getWidth(), n = t.getHeight(), i = 0; i = e > n ? 10 * e : 10 * n, this.frameVertex[0] = new bs((t.getMaxX() + t.getMinX()) / 2, t.getMaxY() + i), this.frameVertex[1] = new bs(t.getMinX() - i, t.getMinY() - i), this.frameVertex[2] = new bs(t.getMaxX() + i, t.getMinY() - i), this.frameEnv = new C(this.frameVertex[0].getCoordinate(), this.frameVertex[1].getCoordinate()), this.frameEnv.expandToInclude(this.frameVertex[2].getCoordinate()) }, getTriangleCoordinates: function (t) { var e = new zs; return this.visitTriangles(e, t), e.getTriangles() }, getVertices: function (t) { for (var e = new Q, n = this.quadEdges.iterator(); n.hasNext();) { var i = n.next(), r = i.orig(); !t && this.isFrameVertex(r) || e.add(r); var s = i.dest(); !t && this.isFrameVertex(s) || e.add(s) } return e }, fetchTriangleToVisit: function (t, e, n, i) { var r = t, s = 0, o = !1; do { this.triEdges[s] = r, this.isFrameEdge(r) && (o = !0); var a = r.sym(); i.contains(a) || e.push(a), i.add(r), s++ , r = r.lNext() } while (r !== t); return o && !n ? null : this.triEdges }, getEdges: function () { if (0 === arguments.length) return this.quadEdges; if (1 === arguments.length) { for (var t = arguments[0], e = this.getPrimaryEdges(!1), n = new Array(e.size()).fill(null), i = 0, r = e.iterator(); r.hasNext();) { var s = r.next(); n[i++] = t.createLineString([s.orig().getCoordinate(), s.dest().getCoordinate()]) } return t.createMultiLineString(n) } }, getVertexUniqueEdges: function (t) { for (var e = new I, n = new Q, i = this.quadEdges.iterator(); i.hasNext();) { var r = i.next(), s = r.orig(); n.contains(s) || (n.add(s), !t && this.isFrameVertex(s) || e.add(r)); var o = r.sym(), a = o.orig(); n.contains(a) || (n.add(a), !t && this.isFrameVertex(a) || e.add(o)) } return e }, getTriangleEdges: function (t) { var e = new qs; return this.visitTriangles(e, t), e.getTriangleEdges() }, getPrimaryEdges: function (t) { this.visitedKey++; var e = new I, n = new me; n.push(this.startingEdge); for (var i = new Q; !n.empty();) { var r = n.pop(); if (!i.contains(r)) { var s = r.getPrimary(); !t && this.isFrameEdge(s) || e.add(s), n.push(r.oNext()), n.push(r.sym().oNext()), i.add(r), i.add(r.sym()) } } return e }, "delete": function (t) { Ps.splice(t, t.oPrev()), Ps.splice(t.sym(), t.sym().oPrev()); var e = t.sym(), n = t.rot(), i = t.rot().sym(); this.quadEdges.remove(t), this.quadEdges.remove(e), this.quadEdges.remove(n), this.quadEdges.remove(i), t["delete"](), e["delete"](), n["delete"](), i["delete"]() }, locateFromEdge: function (t, e) { for (var n = 0, i = this.quadEdges.size(), r = e; ;) { if (n++ , n > i) throw new As(r.toLineSegment()); if (t.equals(r.orig()) || t.equals(r.dest())) break; if (t.rightOf(r)) r = r.sym(); else if (t.rightOf(r.oNext())) { if (t.rightOf(r.dPrev())) break; r = r.dPrev() } else r = r.oNext() } return r }, getTolerance: function () { return this.tolerance }, getVoronoiCellPolygons: function (t) { this.visitTriangles(new Gs, !0); for (var e = new I, n = this.getVertexUniqueEdges(!1), i = n.iterator(); i.hasNext();) { var r = i.next(); e.add(this.getVoronoiCellPolygon(r, t)) } return e }, getVoronoiDiagram: function (t) { var e = this.getVoronoiCellPolygons(t); return t.createGeometryCollection(ie.toGeometryArray(e)) }, getTriangles: function (t) { for (var e = this.getTriangleCoordinates(!1), n = new Array(e.size()).fill(null), i = 0, r = e.iterator(); r.hasNext();) { var s = r.next(); n[i++] = t.createPolygon(t.createLinearRing(s), null) } return t.createGeometryCollection(n) }, insertSite: function (t) { var e = this.locate(t); if (t.equals(e.orig(), this.tolerance) || t.equals(e.dest(), this.tolerance)) return e; var n = this.makeEdge(e.orig(), t); Ps.splice(n, e); var i = n; do n = this.connect(e, n.sym()), e = n.oPrev(); while (e.lNext() !== i); return i }, locate: function () { if (1 === arguments.length) { if (arguments[0] instanceof bs) { var t = arguments[0]; return this.locator.locate(t) } if (arguments[0] instanceof f) { var e = arguments[0]; return this.locator.locate(new bs(e)) } } else if (2 === arguments.length) { var n = arguments[0], i = arguments[1], r = this.locator.locate(new bs(n)); if (null === r) return null; var s = r; r.dest().getCoordinate().equals2D(n) && (s = r.sym()); var o = s; do { if (o.dest().getCoordinate().equals2D(i)) return o; o = o.oNext() } while (o !== s); return null } }, interfaces_: function () { return [] }, getClass: function () { return Fs } }), Fs.getTriangleEdges = function (t, e) { if (e[0] = t, e[1] = e[0].lNext(), e[2] = e[1].lNext(), e[2].lNext() !== e[0]) throw new i("Edges do not form a triangle") }, e(Gs.prototype, { visit: function (t) { for (var e = t[0].orig().getCoordinate(), n = t[1].orig().getCoordinate(), i = t[2].orig().getCoordinate(), r = ci.circumcentre(e, n, i), s = new bs(r), o = 0; 3 > o; o++)t[o].rot().setOrig(s) }, interfaces_: function () { return [Ds] }, getClass: function () { return Gs } }), e(qs.prototype, { getTriangleEdges: function () { return this.triList }, visit: function (t) { this.triList.add(t.clone()) }, interfaces_: function () { return [Ds] }, getClass: function () { return qs } }), e(Bs.prototype, { visit: function (t) { this.triList.add([t[0].orig(), t[1].orig(), t[2].orig()]) }, getTriangleVertices: function () { return this.triList }, interfaces_: function () { return [Ds] }, getClass: function () { return Bs } }), e(zs.prototype, { checkTriangleSize: function (t) { var e = ""; t.length >= 2 ? e = se.toLineString(t[0], t[1]) : t.length >= 1 && (e = se.toPoint(t[0])) }, visit: function (t) { this.coordList.clear(); for (var e = 0; 3 > e; e++) { var n = t[e].orig(); this.coordList.add(n.getCoordinate()) } if (this.coordList.size() > 0) { this.coordList.closeRing(); var i = this.coordList.toCoordinateArray(); if (4 !== i.length) return null; this.triCoords.add(i) } }, getTriangles: function () { return this.triCoords }, interfaces_: function () { return [Ds] }, getClass: function () { return zs } }), Fs.TriangleCircumcentreVisitor = Gs, Fs.TriangleEdgesListVisitor = qs, Fs.TriangleVertexListVisitor = Bs, Fs.TriangleCoordinatesVisitor = zs, Fs.EDGE_COINCIDENCE_TOL_FACTOR = 1e3, e(Vs.prototype, { getLineSegment: function () { return this.ls }, getEndZ: function () { var t = this.ls.getCoordinate(1); return t.z }, getStartZ: function () { var t = this.ls.getCoordinate(0); return t.z }, intersection: function (t) { return this.ls.intersection(t.getLineSegment()) }, getStart: function () { return this.ls.getCoordinate(0) }, getEnd: function () { return this.ls.getCoordinate(1) }, getEndY: function () { var t = this.ls.getCoordinate(1); return t.y }, getStartX: function () { var t = this.ls.getCoordinate(0); return t.x }, equalsTopo: function (t) { return this.ls.equalsTopo(t.getLineSegment()) }, getStartY: function () { var t = this.ls.getCoordinate(0); return t.y }, setData: function (t) { this.data = t }, getData: function () { return this.data }, getEndX: function () { var t = this.ls.getCoordinate(1); return t.x }, toString: function () { return this.ls.toString() }, interfaces_: function () { return [] }, getClass: function () { return Vs } }), e(ks.prototype, { visit: function (t) { }, interfaces_: function () { return [] }, getClass: function () { return ks } }), e(Us.prototype, { isRepeated: function () { return this.count > 1 }, getRight: function () { return this.right }, getCoordinate: function () { return this.p }, setLeft: function (t) { this.left = t }, getX: function () { return this.p.x }, getData: function () { return this.data }, getCount: function () { return this.count }, getLeft: function () { return this.left }, getY: function () { return this.p.y }, increment: function () { this.count = this.count + 1 }, setRight: function (t) { this.right = t }, interfaces_: function () { return [] }, getClass: function () { return Us } }), e(Ys.prototype, { insert: function () { if (1 === arguments.length) { var t = arguments[0]; return this.insert(t, null) } if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; if (null === this.root) return this.root = new Us(e, n), this.root; if (this.tolerance > 0) { var i = this.findBestMatchNode(e); if (null !== i) return i.increment(), i } return this.insertExact(e, n) } }, query: function () { var t = arguments, e = this; if (1 === arguments.length) { var n = arguments[0], i = new I; return this.query(n, i), i } if (2 === arguments.length) if (arguments[0] instanceof C && R(arguments[1], y)) !function () { var n = t[0], i = t[1]; e.queryNode(e.root, n, !0, { interfaces_: function () { return [ks] }, visit: function (t) { i.add(t) } }) }(); else if (arguments[0] instanceof C && R(arguments[1], ks)) { var r = arguments[0], s = arguments[1]; this.queryNode(this.root, r, !0, s) } }, queryNode: function (t, e, n, i) { if (null === t) return null; var r = null, s = null, o = null; n ? (r = e.getMinX(), s = e.getMaxX(), o = t.getX()) : (r = e.getMinY(), s = e.getMaxY(), o = t.getY()); var a = o > r, u = s >= o; a && this.queryNode(t.getLeft(), e, !n, i), e.contains(t.getCoordinate()) && i.visit(t), u && this.queryNode(t.getRight(), e, !n, i) }, findBestMatchNode: function (t) { var e = new Xs(t, this.tolerance); return this.query(e.queryEnvelope(), e), e.getNode() }, isEmpty: function () { return null === this.root }, insertExact: function (t, e) { for (var n = this.root, i = this.root, r = !0, s = !0; null !== n;) { if (null !== n) { var o = t.distance(n.getCoordinate()) <= this.tolerance; if (o) return n.increment(), n } s = r ? t.x < n.getX() : t.y < n.getY(), i = n, n = s ? n.getLeft() : n.getRight(), r = !r } this.numberOfNodes = this.numberOfNodes + 1; var a = new Us(t, e); return s ? i.setLeft(a) : i.setRight(a), a }, interfaces_: function () { return [] }, getClass: function () { return Ys } }), Ys.toCoordinates = function () { if (1 === arguments.length) { var t = arguments[0]; return Ys.toCoordinates(t, !1) } if (2 === arguments.length) { for (var e = arguments[0], n = arguments[1], i = new N, r = e.iterator(); r.hasNext();)for (var s = r.next(), o = n ? s.getCount() : 1, a = 0; o > a; a++)i.add(s.getCoordinate(), !0); return i.toCoordinateArray() } }, e(Xs.prototype, { visit: function (t) { var e = this.p.distance(t.getCoordinate()), n = e <= this.tolerance; if (!n) return null; var i = !1; (null === this.matchNode || e < this.matchDist || null !== this.matchNode && e === this.matchDist && t.getCoordinate().compareTo(this.matchNode.getCoordinate()) < 1) && (i = !0), i && (this.matchNode = t, this.matchDist = e) }, queryEnvelope: function () { var t = new C(this.p); return t.expandBy(this.tolerance), t }, getNode: function () { return this.matchNode }, interfaces_: function () { return [ks] }, getClass: function () { return Xs } }), Ys.BestMatchVisitor = Xs, e(Hs.prototype, { + getInitialVertices: function () { return this.initialVertices }, getKDT: function () { return this.kdt }, enforceConstraints: function () { this.addConstraintVertices(); var t = 0, e = 0; do e = this.enforceGabriel(this.segments), t++; while (e > 0 && t < Hs.MAX_SPLIT_ITER) }, insertSites: function (t) { for (var e = t.iterator(); e.hasNext();) { var n = e.next(); this.insertSite(n) } }, getVertexFactory: function () { return this.vertexFactory }, getPointArray: function () { for (var t = new Array(this.initialVertices.size() + this.segVertices.size()).fill(null), e = 0, n = this.initialVertices.iterator(); n.hasNext();) { var i = n.next(); t[e++] = i.getCoordinate() } for (var r = this.segVertices.iterator(); r.hasNext();) { var i = r.next(); t[e++] = i.getCoordinate() } return t }, setConstraints: function (t, e) { this.segments = t, this.segVertices = e }, computeConvexHull: function () { var t = new ie, e = this.getPointArray(), n = new ve(e, t); this.convexHull = n.getConvexHull() }, addConstraintVertices: function () { this.computeConvexHull(), this.insertSites(this.segVertices) }, findNonGabrielPoint: function (t) { var e = t.getStart(), n = t.getEnd(), i = new f((e.x + n.x) / 2, (e.y + n.y) / 2), s = e.distance(i), o = new C(i); o.expandBy(s); for (var a = this.kdt.query(o), u = null, l = r.MAX_VALUE, h = a.iterator(); h.hasNext();) { var c = h.next(), g = c.getCoordinate(); if (!g.equals2D(e) && !g.equals2D(n)) { var d = i.distance(g); if (s > d) { var m = d; (null === u || l > m) && (u = g, l = m) } } } return u }, getConstraintSegments: function () { return this.segments }, setSplitPointFinder: function (t) { this.splitFinder = t }, getConvexHull: function () { return this.convexHull }, getTolerance: function () { return this.tolerance }, enforceGabriel: function (t) { for (var e = new I, n = 0, i = new I, r = t.iterator(); r.hasNext();) { var s = r.next(), o = this.findNonGabrielPoint(s); if (null !== o) { this.splitPt = this.splitFinder.findSplitPoint(s, o); var a = this.createVertex(this.splitPt, s), u = (this.insertSite(a), new Vs(s.getStartX(), s.getStartY(), s.getStartZ(), a.getX(), a.getY(), a.getZ(), s.getData())), l = new Vs(a.getX(), a.getY(), a.getZ(), s.getEndX(), s.getEndY(), s.getEndZ(), s.getData()); e.add(u), e.add(l), i.add(s), n += 1 } } return t.removeAll(i), t.addAll(e), n }, createVertex: function () { + if (1 === arguments.length) { var t = arguments[0], e = null; return e = null !== this.vertexFactory ? this.vertexFactory.createVertex(t, null) : new Ts(t) } if (2 === arguments.length) { + var n = arguments[0], i = arguments[1], e = null; + return e = null !== this.vertexFactory ? this.vertexFactory.createVertex(n, i) : new Ts(n), e.setOnConstraint(!0), e + } + }, getSubdivision: function () { return this.subdiv }, computeBoundingBox: function () { var t = Hs.computeVertexEnvelope(this.initialVertices), e = Hs.computeVertexEnvelope(this.segVertices), n = new C(t); n.expandToInclude(e); var i = .2 * n.getWidth(), r = .2 * n.getHeight(), s = Math.max(i, r); this.computeAreaEnv = new C(n), this.computeAreaEnv.expandBy(s) }, setVertexFactory: function (t) { this.vertexFactory = t }, formInitialDelaunay: function () { this.computeBoundingBox(), this.subdiv = new Fs(this.computeAreaEnv, this.tolerance), this.subdiv.setLocator(new _s(this.subdiv)), this.incDel = new Os(this.subdiv), this.insertSites(this.initialVertices) }, insertSite: function () { if (arguments[0] instanceof Ts) { var t = arguments[0], e = this.kdt.insert(t.getCoordinate(), t); if (e.isRepeated()) { var n = e.getData(); return n.merge(t), n } return this.incDel.insertSite(t), t } if (arguments[0] instanceof f) { var i = arguments[0]; this.insertSite(this.createVertex(i)) } }, interfaces_: function () { return [] }, getClass: function () { return Hs } + }), Hs.computeVertexEnvelope = function (t) { for (var e = new C, n = t.iterator(); n.hasNext();) { var i = n.next(); e.expandToInclude(i.getCoordinate()) } return e }, Hs.MAX_SPLIT_ITER = 99, e(Ws.prototype, { create: function () { if (null !== this.subdiv) return null; var t = Ws.envelope(this.siteCoords), e = Ws.toVertices(this.siteCoords); this.subdiv = new Fs(t, this.tolerance); var n = new Os(this.subdiv); n.insertSites(e) }, setTolerance: function (t) { this.tolerance = t }, setSites: function () { if (arguments[0] instanceof B) { var t = arguments[0]; this.siteCoords = Ws.extractUniqueCoordinates(t) } else if (R(arguments[0], p)) { var e = arguments[0]; this.siteCoords = Ws.unique(H.toCoordinateArray(e)) } }, getEdges: function (t) { return this.create(), this.subdiv.getEdges(t) }, getSubdivision: function () { return this.create(), this.subdiv }, getTriangles: function (t) { return this.create(), this.subdiv.getTriangles(t) }, interfaces_: function () { return [] }, getClass: function () { return Ws } }), Ws.extractUniqueCoordinates = function (t) { if (null === t) return new N; var e = t.getCoordinates(); return Ws.unique(e) }, Ws.envelope = function (t) { for (var e = new C, n = t.iterator(); n.hasNext();) { var i = n.next(); e.expandToInclude(i) } return e }, Ws.unique = function (t) { var e = H.copyDeep(t); ut.sort(e); var n = new N(e, !1); return n }, Ws.toVertices = function (t) { for (var e = new I, n = t.iterator(); n.hasNext();) { var i = n.next(); e.add(new bs(i)) } return e }, e(js.prototype, { createSiteVertices: function (t) { for (var e = new I, n = t.iterator(); n.hasNext();) { var i = n.next(); this.constraintVertexMap.containsKey(i) || e.add(new Ts(i)) } return e }, create: function () { if (null !== this.subdiv) return null; var t = Ws.envelope(this.siteCoords), e = new I; null !== this.constraintLines && (t.expandToInclude(this.constraintLines.getEnvelopeInternal()), this.createVertices(this.constraintLines), e = js.createConstraintSegments(this.constraintLines)); var n = this.createSiteVertices(this.siteCoords), i = new Hs(n, this.tolerance); i.setConstraints(e, new I(this.constraintVertexMap.values())), i.formInitialDelaunay(), i.enforceConstraints(), this.subdiv = i.getSubdivision() }, setTolerance: function (t) { this.tolerance = t }, setConstraints: function (t) { this.constraintLines = t }, setSites: function (t) { this.siteCoords = Ws.extractUniqueCoordinates(t) }, getEdges: function (t) { return this.create(), this.subdiv.getEdges(t) }, getSubdivision: function () { return this.create(), this.subdiv }, getTriangles: function (t) { return this.create(), this.subdiv.getTriangles(t) }, createVertices: function (t) { for (var e = t.getCoordinates(), n = 0; n < e.length; n++) { var i = new Ts(e[n]); this.constraintVertexMap.put(e[n], i) } }, interfaces_: function () { return [] }, getClass: function () { return js } }), js.createConstraintSegments = function () { if (1 === arguments.length) { for (var t = arguments[0], e = kn.getLines(t), n = new I, i = e.iterator(); i.hasNext();) { var r = i.next(); js.createConstraintSegments(r, n) } return n } if (2 === arguments.length) for (var s = arguments[0], o = arguments[1], a = s.getCoordinates(), i = 1; i < a.length; i++)o.add(new Vs(a[i - 1], a[i])) }, e(Zs.prototype, { create: function () { if (null !== this.subdiv) return null; var t = Ws.envelope(this.siteCoords); this.diagramEnv = t; var e = Math.max(this.diagramEnv.getWidth(), this.diagramEnv.getHeight()); this.diagramEnv.expandBy(e), null !== this.clipEnv && this.diagramEnv.expandToInclude(this.clipEnv); var n = Ws.toVertices(this.siteCoords); this.subdiv = new Fs(t, this.tolerance); var i = new Os(this.subdiv); i.insertSites(n) }, getDiagram: function (t) { this.create(); var e = this.subdiv.getVoronoiDiagram(t); return Zs.clipGeometryCollection(e, this.diagramEnv) }, setTolerance: function (t) { this.tolerance = t }, setSites: function () { if (arguments[0] instanceof B) { var t = arguments[0]; this.siteCoords = Ws.extractUniqueCoordinates(t) } else if (R(arguments[0], p)) { var e = arguments[0]; this.siteCoords = Ws.unique(H.toCoordinateArray(e)) } }, setClipEnvelope: function (t) { this.clipEnv = t }, getSubdivision: function () { return this.create(), this.subdiv }, interfaces_: function () { return [] }, getClass: function () { return Zs } }), Zs.clipGeometryCollection = function (t, e) { for (var n = t.getFactory().toGeometry(e), i = new I, r = 0; r < t.getNumGeometries(); r++) { var s = t.getGeometryN(r), o = null; e.contains(s.getEnvelopeInternal()) ? o = s : e.intersects(s.getEnvelopeInternal()) && (o = n.intersection(s), o.setUserData(s.getUserData())), null === o || o.isEmpty() || i.add(o) } return t.getFactory().createGeometryCollection(ie.toGeometryArray(i)) }; var Ao = Object.freeze({ ConformingDelaunayTriangulationBuilder: js, DelaunayTriangulationBuilder: Ws, VoronoiDiagramBuilder: Zs }); e(Js.prototype, { interfaces_: function () { return [] }, getClass: function () { return Js } }), Js.union = function (t, e) { if (t.isEmpty() || e.isEmpty()) { if (t.isEmpty() && e.isEmpty()) return ii.createEmptyResult(ii.UNION, t, e, t.getFactory()); if (t.isEmpty()) return e.copy(); if (e.isEmpty()) return t.copy() } return t.checkNotGeometryCollection(t), t.checkNotGeometryCollection(e), si.overlayOp(t, e, ii.UNION) }, e(B.prototype, { equalsTopo: function (t) { return this.getEnvelopeInternal().equals(t.getEnvelopeInternal()) ? Ur.relate(this, t).isEquals(this.getDimension(), t.getDimension()) : !1 }, union: function () { if (0 === arguments.length) return jr.union(this); if (1 === arguments.length) { var t = arguments[0]; return Js.union(this, t) } }, isValid: function () { return ls.isValid(this) }, intersection: function (t) { if (this.isEmpty() || t.isEmpty()) return ii.createEmptyResult(ii.INTERSECTION, this, t, this.factory); if (this.isGeometryCollection()) { var e = t; return hn.map(this, { interfaces_: function () { return [MapOp] }, map: function (t) { return t.intersection(e) } }) } return this.checkNotGeometryCollection(this), this.checkNotGeometryCollection(t), si.overlayOp(this, t, ii.INTERSECTION) }, covers: function (t) { return Ur.covers(this, t) }, coveredBy: function (t) { return Ur.coveredBy(this, t) }, touches: function (t) { return Ur.touches(this, t) }, intersects: function (t) { return Ur.intersects(this, t) }, within: function (t) { return Ur.within(this, t) }, overlaps: function (t) { return Ur.overlaps(this, t) }, disjoint: function (t) { return Ur.disjoint(this, t) }, crosses: function (t) { return Ur.crosses(this, t) }, buffer: function () { if (1 === arguments.length) { var t = arguments[0]; return sr.bufferOp(this, t) } if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return sr.bufferOp(this, e, n) } if (3 === arguments.length) { var i = arguments[0], r = arguments[1], s = arguments[2]; return sr.bufferOp(this, i, r, s) } }, convexHull: function () { return new ve(this).getConvexHull() }, relate: function () { for (var t = arguments.length, e = Array(t), n = 0; t > n; n++)e[n] = arguments[n]; return Ur.relate.apply(Ur, [this].concat(e)) }, getCentroid: function () { if (this.isEmpty()) return this.factory.createPoint(); var t = fe.getCentroid(this); return this.createPointFromInternalCoord(t, this) }, getInteriorPoint: function () { if (this.isEmpty()) return this.factory.createPoint(); var t = null, e = this.getDimension(); if (0 === e) { var n = new li(this); t = n.getInteriorPoint() } else if (1 === e) { var n = new ui(this); t = n.getInteriorPoint() } else { var n = new oi(this); t = n.getInteriorPoint() } return this.createPointFromInternalCoord(t, this) }, symDifference: function (t) { if (this.isEmpty() || t.isEmpty()) { if (this.isEmpty() && t.isEmpty()) return ii.createEmptyResult(ii.SYMDIFFERENCE, this, t, this.factory); if (this.isEmpty()) return t.copy(); if (t.isEmpty()) return this.copy() } return this.checkNotGeometryCollection(this), this.checkNotGeometryCollection(t), si.overlayOp(this, t, ii.SYMDIFFERENCE) }, createPointFromInternalCoord: function (t, e) { return e.getPrecisionModel().makePrecise(t), e.getFactory().createPoint(t) }, toText: function () { var t = new se; return t.write(this) }, toString: function () { this.toText() }, contains: function (t) { return Ur.contains(this, t) }, difference: function (t) { return this.isEmpty() ? ii.createEmptyResult(ii.DIFFERENCE, this, t, this.factory) : t.isEmpty() ? this.copy() : (this.checkNotGeometryCollection(this), this.checkNotGeometryCollection(t), si.overlayOp(this, t, ii.DIFFERENCE)) }, isSimple: function () { var t = new Gi(this); return t.isSimple() }, isWithinDistance: function (t, e) { var n = this.getEnvelopeInternal().distance(t.getEnvelopeInternal()); return n > e ? !1 : hr.isWithinDistance(this, t, e) }, distance: function (t) { return hr.distance(this, t) }, isEquivalentClass: function (t) { return this.getClass() === t.getClass() } }); var Do = "1.1.2 (248dab8)"; t.version = Do, t.algorithm = co, t.densify = go, t.dissolve = fo, t.geom = lo, t.index = vo, t.io = Io, t.noding = No, t.operation = Oo, t.precision = Mo, t.simplify = _o, t.triangulate = Ao + }) + }, {}], 15: [function (t, e, n) { var i = t("turf-bbox"), r = t("turf-helpers").point; e.exports = function (t) { var e = i(t), n = (e[0] + e[2]) / 2, s = (e[1] + e[3]) / 2; return r([n, s]) } }, { "turf-bbox": 7, "turf-helpers": 58 }], 16: [function (t, e, n) { var i = t("turf-meta").coordEach, r = t("turf-helpers").point; e.exports = function (t) { var e = 0, n = 0, s = 0; return i(t, function (t) { e += t[0], n += t[1], s++ }, !0), r([e / s, n / s]) } }, { "turf-helpers": 58, "turf-meta": 71 }], 17: [function (t, e, n) { var i = t("turf-inside"); e.exports = function (t, e, n, r) { return t.features.forEach(function (t) { var s = e.features.filter(function (e) { return i(e, t) }).map(function (t) { return t.properties[n] }); t.properties || (t.properties = {}), t.properties[r] = s }), t } }, { "turf-inside": 60 }], 18: [function (t, e, n) { var i = t("turf-meta"); e.exports = function (t) { function e(t, e, i) { i ? n[e].coordinates = n[e].coordinates.concat(t.geometry.coordinates) : n[e].coordinates.push(t.geometry.coordinates), n[e].properties.push(t.properties) } var n = { MultiPoint: { coordinates: [], properties: [] }, MultiLineString: { coordinates: [], properties: [] }, MultiPolygon: { coordinates: [], properties: [] } }, r = Object.keys(n).reduce(function (t, e) { return t[e.replace("Multi", "")] = e, t }, {}); return i.featureEach(t, function (t) { t.geometry && (n[t.geometry.type] ? e(t, t.geometry.type, !0) : r[t.geometry.type] && e(t, r[t.geometry.type], !1)) }), { type: "FeatureCollection", features: Object.keys(n).filter(function (t) { return n[t].coordinates.length }).sort().map(function (t) { return { type: "Feature", properties: { collectedProperties: n[t].properties }, geometry: { type: t, coordinates: n[t].coordinates } } }) } } }, { "turf-meta": 71 }], 19: [function (t, e, n) { function i(t, e, n) { function i(t) { var i = t.geometry.coordinates[0][0], r = t.geometry.coordinates[0][1], s = t.geometry.coordinates[0][2], o = a(i, r, n), u = a(r, s, n), l = a(i, s, n); return e >= o && e >= u && e >= l } if ("number" != typeof e) throw new Error("maxEdge parameter is required"); if ("string" != typeof n) throw new Error("units parameter is required"); var o = s(t), u = o.features.filter(i); return o.features = u, r(o) } function r(t) { for (var e = JSON.parse(JSON.stringify(t.features[0])), n = t.features, i = 0, r = n.length; r > i; i++) { var s = n[i]; s.geometry && (e = o(e, s)) } return e } var s = t("turf-tin"), o = t("turf-union"), a = t("turf-distance"); e.exports = i }, { "turf-distance": 53, "turf-tin": 88, "turf-union": 90 }], 20: [function (t, e, n) { var i = t("turf-meta").coordEach, r = t("convex-hull"), s = t("turf-helpers").polygon; e.exports = function (t) { var e = []; i(t, function (t) { e.push(t) }); var n = r(e); if (n.length > 0) { for (var o = [], a = 0; a < n.length; a++)o.push(e[n[a][0]]); return o.push(e[n[n.length - 1][1]]), s([o]) } return void 0 } }, { "convex-hull": 21, "turf-helpers": 58, "turf-meta": 71 }], 21: [function (t, e, n) { "use strict"; function i(t) { var e = t.length; if (0 === e) return []; if (1 === e) return [[0]]; var n = t[0].length; return 0 === n ? [] : 1 === n ? r(t) : 2 === n ? s(t) : o(t, n) } var r = t("./lib/ch1d"), s = t("./lib/ch2d"), o = t("./lib/chnd"); e.exports = i }, { "./lib/ch1d": 22, "./lib/ch2d": 23, "./lib/chnd": 24 }], 22: [function (t, e, n) { "use strict"; function i(t) { for (var e = 0, n = 0, i = 1; i < t.length; ++i)t[i][0] < t[e][0] && (e = i), t[i][0] > t[n][0] && (n = i); return n > e ? [[e], [n]] : e > n ? [[n], [e]] : [[e]] } e.exports = i }, {}], 23: [function (t, e, n) { "use strict"; function i(t) { var e = r(t), n = e.length; if (2 >= n) return []; for (var i = new Array(n), s = e[n - 1], o = 0; n > o; ++o) { var a = e[o]; i[o] = [s, a], s = a } return i } e.exports = i; var r = t("monotone-convex-hull-2d") }, { "monotone-convex-hull-2d": 42 }], 24: [function (t, e, n) { "use strict"; function i(t, e) { for (var n = t.length, i = new Array(n), r = 0; r < e.length; ++r)i[r] = t[e[r]]; for (var s = e.length, r = 0; n > r; ++r)e.indexOf(r) < 0 && (i[s++] = t[r]); return i } function r(t, e) { for (var n = t.length, i = e.length, r = 0; n > r; ++r)for (var s = t[r], o = 0; o < s.length; ++o) { var a = s[o]; if (i > a) s[o] = e[a]; else { a -= i; for (var u = 0; i > u; ++u)a >= e[u] && (a += 1); s[o] = a } } return t } function s(t, e) { try { return o(t, !0) } catch (n) { var s = a(t); if (s.length <= e) return []; var u = i(t, s), l = o(u, !0); return r(l, s) } } e.exports = s; var o = t("incremental-convex-hull"), a = t("affine-hull") }, { "affine-hull": 25, "incremental-convex-hull": 32 }], 25: [function (t, e, n) { "use strict"; function i(t, e) { for (var n = new Array(e + 1), i = 0; i < t.length; ++i)n[i] = t[i]; for (var i = 0; i <= t.length; ++i) { for (var r = t.length; e >= r; ++r) { for (var o = new Array(e), a = 0; e > a; ++a)o[a] = Math.pow(r + 1 - i, a); n[r] = o } var u = s.apply(void 0, n); if (u) return !0 } return !1 } function r(t) { var e = t.length; if (0 === e) return []; if (1 === e) return [0]; for (var n = t[0].length, r = [t[0]], s = [0], o = 1; e > o; ++o)if (r.push(t[o]), i(r, n)) { if (s.push(o), s.length === n + 1) return s } else r.pop(); return s } e.exports = r; var s = t("robust-orientation") }, { "robust-orientation": 31 }], 26: [function (t, e, n) { "use strict"; function i(t, e, n) { var i = t + e, r = i - t, s = i - r, o = e - r, a = t - s; return n ? (n[0] = a + o, n[1] = i, n) : [a + o, i] } e.exports = i }, {}], 27: [function (t, e, n) { "use strict"; function i(t, e) { var n = t.length; if (1 === n) { var i = r(t[0], e); return i[0] ? i : [i[1]] } var o = new Array(2 * n), a = [.1, .1], u = [.1, .1], l = 0; r(t[0], e, a), a[0] && (o[l++] = a[0]); for (var h = 1; n > h; ++h) { r(t[h], e, u); var c = a[1]; s(c, u[0], a), a[0] && (o[l++] = a[0]); var g = u[1], f = a[1], d = g + f, m = d - g, p = f - m; a[1] = d, p && (o[l++] = p) } return a[1] && (o[l++] = a[1]), 0 === l && (o[l++] = 0), o.length = l, o } var r = t("two-product"), s = t("two-sum"); e.exports = i }, { "two-product": 30, "two-sum": 26 }], 28: [function (t, e, n) { "use strict"; function i(t, e) { var n = t + e, i = n - t, r = n - i, s = e - i, o = t - r, a = o + s; return a ? [a, n] : [n] } function r(t, e) { var n = 0 | t.length, r = 0 | e.length; if (1 === n && 1 === r) return i(t[0], -e[0]); var s, o, a = n + r, u = new Array(a), l = 0, h = 0, c = 0, g = Math.abs, f = t[h], d = g(f), m = -e[c], p = g(m); p > d ? (o = f, h += 1, n > h && (f = t[h], d = g(f))) : (o = m, c += 1, r > c && (m = -e[c], p = g(m))), n > h && p > d || c >= r ? (s = f, h += 1, n > h && (f = t[h], d = g(f))) : (s = m, c += 1, r > c && (m = -e[c], p = g(m))); for (var v, y, x, E, I, N = s + o, C = N - s, w = o - C, S = w, L = N; n > h && r > c;)p > d ? (s = f, h += 1, n > h && (f = t[h], d = g(f))) : (s = m, c += 1, r > c && (m = -e[c], p = g(m))), o = S, N = s + o, C = N - s, w = o - C, w && (u[l++] = w), v = L + N, y = v - L, x = v - y, E = N - y, I = L - x, S = I + E, L = v; for (; n > h;)s = f, o = S, N = s + o, C = N - s, w = o - C, w && (u[l++] = w), v = L + N, y = v - L, x = v - y, E = N - y, I = L - x, S = I + E, L = v, h += 1, n > h && (f = t[h]); for (; r > c;)s = m, o = S, N = s + o, C = N - s, w = o - C, w && (u[l++] = w), v = L + N, y = v - L, x = v - y, E = N - y, I = L - x, S = I + E, L = v, c += 1, r > c && (m = -e[c]); return S && (u[l++] = S), L && (u[l++] = L), l || (u[l++] = 0), u.length = l, u } e.exports = r }, {}], 29: [function (t, e, n) { "use strict"; function i(t, e) { var n = t + e, i = n - t, r = n - i, s = e - i, o = t - r, a = o + s; return a ? [a, n] : [n] } function r(t, e) { var n = 0 | t.length, r = 0 | e.length; if (1 === n && 1 === r) return i(t[0], e[0]); var s, o, a = n + r, u = new Array(a), l = 0, h = 0, c = 0, g = Math.abs, f = t[h], d = g(f), m = e[c], p = g(m); p > d ? (o = f, h += 1, n > h && (f = t[h], d = g(f))) : (o = m, c += 1, r > c && (m = e[c], p = g(m))), n > h && p > d || c >= r ? (s = f, h += 1, n > h && (f = t[h], d = g(f))) : (s = m, c += 1, r > c && (m = e[c], p = g(m))); for (var v, y, x, E, I, N = s + o, C = N - s, w = o - C, S = w, L = N; n > h && r > c;)p > d ? (s = f, h += 1, n > h && (f = t[h], d = g(f))) : (s = m, c += 1, r > c && (m = e[c], p = g(m))), o = S, N = s + o, C = N - s, w = o - C, w && (u[l++] = w), v = L + N, y = v - L, x = v - y, E = N - y, I = L - x, S = I + E, L = v; for (; n > h;)s = f, o = S, N = s + o, C = N - s, w = o - C, w && (u[l++] = w), v = L + N, y = v - L, x = v - y, E = N - y, I = L - x, S = I + E, L = v, h += 1, n > h && (f = t[h]); for (; r > c;)s = m, o = S, N = s + o, C = N - s, w = o - C, w && (u[l++] = w), v = L + N, y = v - L, x = v - y, E = N - y, I = L - x, S = I + E, L = v, c += 1, r > c && (m = e[c]); return S && (u[l++] = S), L && (u[l++] = L), l || (u[l++] = 0), u.length = l, u } e.exports = r }, {}], 30: [function (t, e, n) { "use strict"; function i(t, e, n) { var i = t * e, s = r * t, o = s - t, a = s - o, u = t - a, l = r * e, h = l - e, c = l - h, g = e - c, f = i - a * c, d = f - u * c, m = d - a * g, p = u * g - m; return n ? (n[0] = p, n[1] = i, n) : [p, i] } e.exports = i; var r = +(Math.pow(2, 27) + 1) }, {}], 31: [function (t, e, n) { "use strict"; function i(t, e) { for (var n = new Array(t.length - 1), i = 1; i < t.length; ++i)for (var r = n[i - 1] = new Array(t.length - 1), s = 0, o = 0; s < t.length; ++s)s !== e && (r[o++] = t[i][s]); return n } function r(t) { for (var e = new Array(t), n = 0; t > n; ++n) { e[n] = new Array(t); for (var i = 0; t > i; ++i)e[n][i] = ["m", i, "[", t - n - 1, "]"].join("") } return e } function s(t) { return 1 & t ? "-" : "" } function o(t) { if (1 === t.length) return t[0]; if (2 === t.length) return ["sum(", t[0], ",", t[1], ")"].join(""); var e = t.length >> 1; return ["sum(", o(t.slice(0, e)), ",", o(t.slice(e)), ")"].join("") } function a(t) { if (2 === t.length) return [["sum(prod(", t[0][0], ",", t[1][1], "),prod(-", t[0][1], ",", t[1][0], "))"].join("")]; for (var e = [], n = 0; n < t.length; ++n)e.push(["scale(", o(a(i(t, n))), ",", s(n), t[0][n], ")"].join("")); return e } function u(t) { for (var e = [], n = [], s = r(t), u = [], l = 0; t > l; ++l)0 === (1 & l) ? e.push.apply(e, a(i(s, l))) : n.push.apply(n, a(i(s, l))), u.push("m" + l); var h = o(e), m = o(n), p = "orientation" + t + "Exact", v = ["function ", p, "(", u.join(), "){var p=", h, ",n=", m, ",d=sub(p,n);return d[d.length-1];};return ", p].join(""), y = new Function("sum", "prod", "scale", "sub", v); return y(g, c, f, d) } function l(t) { var e = I[t.length]; return e || (e = I[t.length] = u(t.length)), e.apply(void 0, t) } function h() { for (; I.length <= m;)I.push(u(I.length)); for (var t = [], n = ["slow"], i = 0; m >= i; ++i)t.push("a" + i), n.push("o" + i); for (var r = ["function getOrientation(", t.join(), "){switch(arguments.length){case 0:case 1:return 0;"], i = 2; m >= i; ++i)r.push("case ", i, ":return o", i, "(", t.slice(0, i).join(), ");"); r.push("}var s=new Array(arguments.length);for(var i=0;i= i; ++i)e.exports[i] = I[i] } var c = t("two-product"), g = t("robust-sum"), f = t("robust-scale"), d = t("robust-subtract"), m = 5, p = 1.1102230246251565e-16, v = (3 + 16 * p) * p, y = (7 + 56 * p) * p, x = u(3), E = u(4), I = [function () { return 0 }, function () { return 0 }, function (t, e) { return e[0] - t[0] }, function (t, e, n) { var i, r = (t[1] - n[1]) * (e[0] - n[0]), s = (t[0] - n[0]) * (e[1] - n[1]), o = r - s; if (r > 0) { if (0 >= s) return o; i = r + s } else { if (!(0 > r)) return o; if (s >= 0) return o; i = -(r + s) } var a = v * i; return o >= a || -a >= o ? o : x(t, e, n) }, function (t, e, n, i) { var r = t[0] - i[0], s = e[0] - i[0], o = n[0] - i[0], a = t[1] - i[1], u = e[1] - i[1], l = n[1] - i[1], h = t[2] - i[2], c = e[2] - i[2], g = n[2] - i[2], f = s * l, d = o * u, m = o * a, p = r * l, v = r * u, x = s * a, I = h * (f - d) + c * (m - p) + g * (v - x), N = (Math.abs(f) + Math.abs(d)) * Math.abs(h) + (Math.abs(m) + Math.abs(p)) * Math.abs(c) + (Math.abs(v) + Math.abs(x)) * Math.abs(g), C = y * N; return I > C || -I > C ? I : E(t, e, n, i) }]; h() }, { "robust-scale": 27, "robust-subtract": 28, "robust-sum": 29, "two-product": 30 }], 32: [function (t, e, n) { "use strict"; function i(t, e, n) { this.vertices = t, this.adjacent = e, this.boundary = n, this.lastVisited = -1 } function r(t, e, n) { this.vertices = t, this.cell = e, this.index = n } function s(t, e) { return h(t.vertices, e.vertices) } function o(t) { for (var e = ["function orient(){var tuple=this.tuple;return test("], n = 0; t >= n; ++n)n > 0 && e.push(","), e.push("tuple[", n, "]"); e.push(")}return orient"); var i = new Function("test", e.join("")), r = l[t + 1]; return r || (r = l), i(r) } function a(t, e, n) { this.dimension = t, this.vertices = e, this.simplices = n, this.interior = n.filter(function (t) { return !t.boundary }), this.tuple = new Array(t + 1); for (var i = 0; t >= i; ++i)this.tuple[i] = this.vertices[i]; var r = c[t]; r || (r = c[t] = o(t)), this.orient = r } function u(t, e) { var n = t.length; if (0 === n) throw new Error("Must have at least d+1 points"); var r = t[0].length; if (r >= n) throw new Error("Must input at least d+1 points"); var s = t.slice(0, r + 1), o = l.apply(void 0, s); if (0 === o) throw new Error("Input not in general position"); for (var u = new Array(r + 1), h = 0; r >= h; ++h)u[h] = h; 0 > o && (u[0] = 1, u[1] = 0); for (var c = new i(u, new Array(r + 1), !1), g = c.adjacent, f = new Array(r + 2), h = 0; r >= h; ++h) { for (var d = u.slice(), m = 0; r >= m; ++m)m === h && (d[m] = -1); var p = d[0]; d[0] = d[1], d[1] = p; var v = new i(d, new Array(r + 1), !0); g[h] = v, f[h] = v } f[r + 1] = c; for (var h = 0; r >= h; ++h)for (var d = g[h].vertices, y = g[h].adjacent, m = 0; r >= m; ++m) { var x = d[m]; if (0 > x) y[m] = c; else for (var E = 0; r >= E; ++E)g[E].vertices.indexOf(x) < 0 && (y[m] = g[E]) } for (var I = new a(r, s, f), N = !!e, h = r + 1; n > h; ++h)I.insert(t[h], N); return I.boundary() } e.exports = u; var l = t("robust-orientation"), h = t("simplicial-complex").compareCells; i.prototype.flip = function () { var t = this.vertices[0]; this.vertices[0] = this.vertices[1], this.vertices[1] = t; var e = this.adjacent[0]; this.adjacent[0] = this.adjacent[1], this.adjacent[1] = e }; var c = [], g = a.prototype; g.handleBoundaryDegeneracy = function (t, e) { var n = this.dimension, i = this.vertices.length - 1, r = this.tuple, s = this.vertices, o = [t]; for (t.lastVisited = -i; o.length > 0;) { t = o.pop(); for (var a = (t.vertices, t.adjacent), u = 0; n >= u; ++u) { var l = a[u]; if (l.boundary && !(l.lastVisited <= -i)) { for (var h = l.vertices, c = 0; n >= c; ++c) { var g = h[c]; 0 > g ? r[c] = e : r[c] = s[g] } var f = this.orient(); if (f > 0) return l; l.lastVisited = -i, 0 === f && o.push(l) } } } return null }, g.walk = function (t, e) { var n = this.vertices.length - 1, i = this.dimension, r = this.vertices, s = this.tuple, o = e ? this.interior.length * Math.random() | 0 : this.interior.length - 1, a = this.interior[o]; t: for (; !a.boundary;) { for (var u = a.vertices, l = a.adjacent, h = 0; i >= h; ++h)s[h] = r[u[h]]; a.lastVisited = n; for (var h = 0; i >= h; ++h) { var c = l[h]; if (!(c.lastVisited >= n)) { var g = s[h]; s[h] = t; var f = this.orient(); if (s[h] = g, 0 > f) { a = c; continue t } c.boundary ? c.lastVisited = -n : c.lastVisited = n } } return } return a }, g.addPeaks = function (t, e) { var n = this.vertices.length - 1, o = this.dimension, a = this.vertices, u = this.tuple, l = this.interior, h = this.simplices, c = [e]; e.lastVisited = n, e.vertices[e.vertices.indexOf(-1)] = n, e.boundary = !1, l.push(e); for (var g = []; c.length > 0;) { var e = c.pop(), f = e.vertices, d = e.adjacent, m = f.indexOf(n); if (!(0 > m)) for (var p = 0; o >= p; ++p)if (p !== m) { var v = d[p]; if (v.boundary && !(v.lastVisited >= n)) { var y = v.vertices; if (v.lastVisited !== -n) { for (var x = 0, E = 0; o >= E; ++E)y[E] < 0 ? (x = E, u[E] = t) : u[E] = a[y[E]]; var I = this.orient(); if (I > 0) { y[x] = n, v.boundary = !1, l.push(v), c.push(v), v.lastVisited = n; continue } v.lastVisited = -n } var N = v.adjacent, C = f.slice(), w = d.slice(), S = new i(C, w, !0); h.push(S); var L = N.indexOf(e); if (!(0 > L)) { N[L] = S, w[m] = v, C[p] = -1, w[p] = e, d[p] = S, S.flip(); for (var E = 0; o >= E; ++E) { var R = C[E]; if (!(0 > R || R === n)) { for (var b = new Array(o - 1), T = 0, P = 0; o >= P; ++P) { var O = C[P]; 0 > O || P === E || (b[T++] = O) } g.push(new r(b, S, E)) } } } } } } g.sort(s); for (var p = 0; p + 1 < g.length; p += 2) { var M = g[p], _ = g[p + 1], A = M.index, D = _.index; 0 > A || 0 > D || (M.cell.adjacent[M.index] = _.cell, _.cell.adjacent[_.index] = M.cell) } }, g.insert = function (t, e) { var n = this.vertices; n.push(t); var i = this.walk(t, e); if (i) { for (var r = this.dimension, s = this.tuple, o = 0; r >= o; ++o) { var a = i.vertices[o]; 0 > a ? s[o] = t : s[o] = n[a] } var u = this.orient(s); 0 > u || (0 !== u || (i = this.handleBoundaryDegeneracy(i, t))) && this.addPeaks(t, i) } }, g.boundary = function () { for (var t = this.dimension, e = [], n = this.simplices, i = n.length, r = 0; i > r; ++r) { var s = n[r]; if (s.boundary) { for (var o = new Array(t), a = s.vertices, u = 0, l = 0, h = 0; t >= h; ++h)a[h] >= 0 ? o[u++] = a[h] : l = 1 & h; if (l === (1 & t)) { var c = o[0]; o[0] = o[1], o[1] = c } e.push(o) } } return e } }, { "robust-orientation": 38, "simplicial-complex": 41 }], 33: [function (t, e, n) { arguments[4][26][0].apply(n, arguments) }, { dup: 26 }], 34: [function (t, e, n) { arguments[4][27][0].apply(n, arguments) }, { dup: 27, "two-product": 37, "two-sum": 33 }], 35: [function (t, e, n) { arguments[4][28][0].apply(n, arguments) }, { dup: 28 }], 36: [function (t, e, n) { arguments[4][29][0].apply(n, arguments) }, { dup: 29 }], 37: [function (t, e, n) { arguments[4][30][0].apply(n, arguments) }, { dup: 30 }], 38: [function (t, e, n) { arguments[4][31][0].apply(n, arguments) }, { dup: 31, "robust-scale": 34, "robust-subtract": 35, "robust-sum": 36, "two-product": 37 }], 39: [function (t, e, n) { "use strict"; "use restrict"; function i(t) { var e = 32; return t &= -t, t && e-- , 65535 & t && (e -= 16), 16711935 & t && (e -= 8), 252645135 & t && (e -= 4), 858993459 & t && (e -= 2), 1431655765 & t && (e -= 1), e } var r = 32; n.INT_BITS = r, n.INT_MAX = 2147483647, n.INT_MIN = -1 << r - 1, n.sign = function (t) { return (t > 0) - (0 > t) }, n.abs = function (t) { var e = t >> r - 1; return (t ^ e) - e }, n.min = function (t, e) { return e ^ (t ^ e) & -(e > t) }, n.max = function (t, e) { return t ^ (t ^ e) & -(e > t) }, n.isPow2 = function (t) { return !(t & t - 1 || !t) }, n.log2 = function (t) { var e, n; return e = (t > 65535) << 4, t >>>= e, n = (t > 255) << 3, t >>>= n, e |= n, n = (t > 15) << 2, t >>>= n, e |= n, n = (t > 3) << 1, t >>>= n, e |= n, e | t >> 1 }, n.log10 = function (t) { return t >= 1e9 ? 9 : t >= 1e8 ? 8 : t >= 1e7 ? 7 : t >= 1e6 ? 6 : t >= 1e5 ? 5 : t >= 1e4 ? 4 : t >= 1e3 ? 3 : t >= 100 ? 2 : t >= 10 ? 1 : 0 }, n.popCount = function (t) { return t -= t >>> 1 & 1431655765, t = (858993459 & t) + (t >>> 2 & 858993459), 16843009 * (t + (t >>> 4) & 252645135) >>> 24 }, n.countTrailingZeros = i, n.nextPow2 = function (t) { return t += 0 === t, --t, t |= t >>> 1, t |= t >>> 2, t |= t >>> 4, t |= t >>> 8, t |= t >>> 16, t + 1 }, n.prevPow2 = function (t) { return t |= t >>> 1, t |= t >>> 2, t |= t >>> 4, t |= t >>> 8, t |= t >>> 16, t - (t >>> 1) }, n.parity = function (t) { return t ^= t >>> 16, t ^= t >>> 8, t ^= t >>> 4, t &= 15, 27030 >>> t & 1 }; var s = new Array(256); !function (t) { for (var e = 0; 256 > e; ++e) { var n = e, i = e, r = 7; for (n >>>= 1; n; n >>>= 1)i <<= 1, i |= 1 & n, --r; t[e] = i << r & 255 } }(s), n.reverse = function (t) { return s[255 & t] << 24 | s[t >>> 8 & 255] << 16 | s[t >>> 16 & 255] << 8 | s[t >>> 24 & 255] }, n.interleave2 = function (t, e) { return t &= 65535, t = 16711935 & (t | t << 8), t = 252645135 & (t | t << 4), t = 858993459 & (t | t << 2), t = 1431655765 & (t | t << 1), e &= 65535, e = 16711935 & (e | e << 8), e = 252645135 & (e | e << 4), e = 858993459 & (e | e << 2), e = 1431655765 & (e | e << 1), t | e << 1 }, n.deinterleave2 = function (t, e) { return t = t >>> e & 1431655765, t = 858993459 & (t | t >>> 1), t = 252645135 & (t | t >>> 2), t = 16711935 & (t | t >>> 4), t = 65535 & (t | t >>> 16), t << 16 >> 16 }, n.interleave3 = function (t, e, n) { return t &= 1023, t = 4278190335 & (t | t << 16), t = 251719695 & (t | t << 8), t = 3272356035 & (t | t << 4), t = 1227133513 & (t | t << 2), e &= 1023, e = 4278190335 & (e | e << 16), e = 251719695 & (e | e << 8), e = 3272356035 & (e | e << 4), e = 1227133513 & (e | e << 2), t |= e << 1, n &= 1023, n = 4278190335 & (n | n << 16), n = 251719695 & (n | n << 8), n = 3272356035 & (n | n << 4), n = 1227133513 & (n | n << 2), t | n << 2 }, n.deinterleave3 = function (t, e) { return t = t >>> e & 1227133513, t = 3272356035 & (t | t >>> 2), t = 251719695 & (t | t >>> 4), t = 4278190335 & (t | t >>> 8), t = 1023 & (t | t >>> 16), t << 22 >> 22 }, n.nextCombination = function (t) { var e = t | t - 1; return e + 1 | (~e & -~e) - 1 >>> i(t) + 1 } }, {}], 40: [function (t, e, n) { "use strict"; "use restrict"; function i(t) { this.roots = new Array(t), this.ranks = new Array(t); for (var e = 0; t > e; ++e)this.roots[e] = e, this.ranks[e] = 0 } e.exports = i; var r = i.prototype; Object.defineProperty(r, "length", { get: function () { return this.roots.length } }), r.makeSet = function () { var t = this.roots.length; return this.roots.push(t), this.ranks.push(0), t }, r.find = function (t) { for (var e = t, n = this.roots; n[t] !== t;)t = n[t]; for (; n[e] !== t;) { var i = n[e]; n[e] = t, e = i } return t }, r.link = function (t, e) { var n = this.find(t), i = this.find(e); if (n !== i) { var r = this.ranks, s = this.roots, o = r[n], a = r[i]; a > o ? s[n] = i : o > a ? s[i] = n : (s[i] = n, ++r[n]) } } }, {}], 41: [function (t, e, n) { "use strict"; "use restrict"; function i(t) { for (var e = 0, n = Math.max, i = 0, r = t.length; r > i; ++i)e = n(e, t[i].length); return e - 1 } function r(t) { for (var e = -1, n = Math.max, i = 0, r = t.length; r > i; ++i)for (var s = t[i], o = 0, a = s.length; a > o; ++o)e = n(e, s[o]); return e + 1 } function s(t) { for (var e = new Array(t.length), n = 0, i = t.length; i > n; ++n)e[n] = t[n].slice(0); return e } function o(t, e) { var n = t.length, i = t.length - e.length, r = Math.min; if (i) return i; switch (n) { case 0: return 0; case 1: return t[0] - e[0]; case 2: var s = t[0] + t[1] - e[0] - e[1]; return s ? s : r(t[0], t[1]) - r(e[0], e[1]); case 3: var o = t[0] + t[1], a = e[0] + e[1]; if (s = o + t[2] - (a + e[2])) return s; var u = r(t[0], t[1]), l = r(e[0], e[1]), s = r(u, t[2]) - r(l, e[2]); return s ? s : r(u + t[2], o) - r(l + e[2], a); default: var h = t.slice(0); h.sort(); var c = e.slice(0); c.sort(); for (var g = 0; n > g; ++g)if (i = h[g] - c[g]) return i; return 0 } } function a(t, e) { return o(t[0], e[0]) } function u(t, e) { if (e) { for (var n = t.length, i = new Array(n), r = 0; n > r; ++r)i[r] = [t[r], e[r]]; i.sort(a); for (var r = 0; n > r; ++r)t[r] = i[r][0], e[r] = i[r][1]; return t } return t.sort(o), t } function l(t) { if (0 === t.length) return []; for (var e = 1, n = t.length, i = 1; n > i; ++i) { var r = t[i]; if (o(r, t[i - 1])) { if (i === e) { e++; continue } t[e++] = r } } return t.length = e, t } function h(t, e) { for (var n = 0, i = t.length - 1, r = -1; i >= n;) { var s = n + i >> 1, a = o(t[s], e); 0 >= a ? (0 === a && (r = s), n = s + 1) : a > 0 && (i = s - 1) } return r } function c(t, e) { for (var n = new Array(t.length), i = 0, r = n.length; r > i; ++i)n[i] = []; for (var s = [], i = 0, a = e.length; a > i; ++i)for (var u = e[i], l = u.length, c = 1, g = 1 << l; g > c; ++c) { s.length = x.popCount(c); for (var f = 0, d = 0; l > d; ++d)c & 1 << d && (s[f++] = u[d]); var m = h(t, s); if (!(0 > m)) for (; ;)if (n[m++].push(i), m >= t.length || 0 !== o(t[m], s)) break } return n } function g(t, e) { if (!e) return c(l(d(t, 0)), t, 0); for (var n = new Array(e), i = 0; e > i; ++i)n[i] = []; for (var i = 0, r = t.length; r > i; ++i)for (var s = t[i], o = 0, a = s.length; a > o; ++o)n[s[o]].push(i); return n } function f(t) { for (var e = [], n = 0, i = t.length; i > n; ++n)for (var r = t[n], s = 0 | r.length, o = 1, a = 1 << s; a > o; ++o) { for (var l = [], h = 0; s > h; ++h)o >>> h & 1 && l.push(r[h]); e.push(l) } return u(e) } function d(t, e) { if (0 > e) return []; for (var n = [], i = (1 << e + 1) - 1, r = 0; r < t.length; ++r)for (var s = t[r], o = i; o < 1 << s.length; o = x.nextCombination(o)) { for (var a = new Array(e + 1), l = 0, h = 0; h < s.length; ++h)o & 1 << h && (a[l++] = s[h]); n.push(a) } return u(n) } function m(t) { for (var e = [], n = 0, i = t.length; i > n; ++n)for (var r = t[n], s = 0, o = r.length; o > s; ++s) { for (var a = new Array(r.length - 1), l = 0, h = 0; o > l; ++l)l !== s && (a[h++] = r[l]); e.push(a) } return u(e) } function p(t, e) { for (var n = new E(e), i = 0; i < t.length; ++i)for (var r = t[i], s = 0; s < r.length; ++s)for (var o = s + 1; o < r.length; ++o)n.link(r[s], r[o]); for (var a = [], u = n.ranks, i = 0; i < u.length; ++i)u[i] = -1; for (var i = 0; i < t.length; ++i) { var l = n.find(t[i][0]); u[l] < 0 ? (u[l] = a.length, a.push([t[i].slice(0)])) : a[u[l]].push(t[i].slice(0)) } return a } function v(t) { for (var e = l(u(d(t, 0))), n = new E(e.length), i = 0; i < t.length; ++i)for (var r = t[i], s = 0; s < r.length; ++s)for (var o = h(e, [r[s]]), a = s + 1; a < r.length; ++a)n.link(o, h(e, [r[a]])); for (var c = [], g = n.ranks, i = 0; i < g.length; ++i)g[i] = -1; for (var i = 0; i < t.length; ++i) { var f = n.find(h(e, [t[i][0]])); g[f] < 0 ? (g[f] = c.length, c.push([t[i].slice(0)])) : c[g[f]].push(t[i].slice(0)) } return c } function y(t, e) { return e ? p(t, e) : v(t) } var x = t("bit-twiddle"), E = t("union-find"); n.dimension = i, n.countVertices = r, n.cloneCells = s, n.compareCells = o, n.normalize = u, n.unique = l, n.findCell = h, n.incidence = c, n.dual = g, n.explode = f, n.skeleton = d, n.boundary = m, n.connectedComponents = y }, { "bit-twiddle": 39, "union-find": 40 }], 42: [function (t, e, n) { "use strict"; function i(t) { var e = t.length; if (3 > e) { for (var n = new Array(e), i = 0; e > i; ++i)n[i] = i; return 2 === e && t[0][0] === t[1][0] && t[0][1] === t[1][1] ? [0] : n } for (var s = new Array(e), i = 0; e > i; ++i)s[i] = i; s.sort(function (e, n) { var i = t[e][0] - t[n][0]; return i ? i : t[e][1] - t[n][1] }); for (var o = [s[0], s[1]], a = [s[0], s[1]], i = 2; e > i; ++i) { for (var u = s[i], l = t[u], h = o.length; h > 1 && r(t[o[h - 2]], t[o[h - 1]], l) <= 0;)h -= 1, o.pop(); for (o.push(u), h = a.length; h > 1 && r(t[a[h - 2]], t[a[h - 1]], l) >= 0;)h -= 1, a.pop(); a.push(u) } for (var n = new Array(a.length + o.length - 2), c = 0, i = 0, g = o.length; g > i; ++i)n[c++] = o[i]; for (var f = a.length - 2; f > 0; --f)n[c++] = a[f]; return n } e.exports = i; var r = t("robust-orientation")[3] }, { "robust-orientation": 48 }], 43: [function (t, e, n) { arguments[4][26][0].apply(n, arguments) }, { dup: 26 }], 44: [function (t, e, n) { arguments[4][27][0].apply(n, arguments) }, { dup: 27, "two-product": 47, "two-sum": 43 }], 45: [function (t, e, n) { arguments[4][28][0].apply(n, arguments) }, { dup: 28 }], 46: [function (t, e, n) { arguments[4][29][0].apply(n, arguments) }, { dup: 29 }], 47: [function (t, e, n) { arguments[4][30][0].apply(n, arguments) }, { dup: 30 }], 48: [function (t, e, n) { arguments[4][31][0].apply(n, arguments) }, { dup: 31, "robust-scale": 44, "robust-subtract": 45, "robust-sum": 46, "two-product": 47 }], 49: [function (t, e, n) { var i = t("turf-invariant").getCoord, r = t("turf-helpers"), s = r.point, o = r.distanceToRadians; e.exports = function (t, e, n, r) { var a = Math.PI / 180, u = 180 / Math.PI, l = i(t), h = a * l[0], c = a * l[1], g = a * n, f = o(e, r), d = Math.asin(Math.sin(c) * Math.cos(f) + Math.cos(c) * Math.sin(f) * Math.cos(g)), m = h + Math.atan2(Math.sin(g) * Math.sin(f) * Math.cos(c), Math.cos(f) - Math.sin(c) * Math.sin(d)); return s([u * m, u * d]) } }, { "turf-helpers": 58, "turf-invariant": 50 }], 50: [function (t, e, n) { arguments[4][9][0].apply(n, arguments) }, { dup: 9 }], 51: [function (t, e, n) { + var i = t("jsts"); e.exports = function (t, e) { + var n = JSON.parse(JSON.stringify(t)), r = JSON.parse(JSON.stringify(e)); "Feature" !== n.type && (n = { type: "Feature", properties: {}, geometry: n }), "Feature" !== r.type && (r = { type: "Feature", properties: {}, geometry: r }); var s = new i.io.GeoJSONReader, o = s.read(JSON.stringify(n.geometry)), a = s.read(JSON.stringify(r.geometry)), u = o.difference(a); + if (u.isEmpty()) return void 0; var l = new i.io.GeoJSONWriter, h = l.write(u); return n.geometry = u, { type: "Feature", properties: n.properties, geometry: h } + } + }, { jsts: 52 }], 52: [function (t, e, n) { arguments[4][14][0].apply(n, arguments) }, { dup: 14 }], 53: [function (t, e, n) { var i = t("turf-invariant").getCoord, r = t("turf-helpers").radiansToDistance; e.exports = function (t, e, n) { var s = Math.PI / 180, o = i(t), a = i(e), u = s * (a[1] - o[1]), l = s * (a[0] - o[0]), h = s * o[1], c = s * a[1], g = Math.pow(Math.sin(u / 2), 2) + Math.pow(Math.sin(l / 2), 2) * Math.cos(h) * Math.cos(c); return r(2 * Math.atan2(Math.sqrt(g), Math.sqrt(1 - g)), n) } }, { "turf-helpers": 58, "turf-invariant": 54 }], 54: [function (t, e, n) { arguments[4][9][0].apply(n, arguments) }, { dup: 9 }], 55: [function (t, e, n) { var i = t("turf-bbox"), r = t("turf-bbox-polygon"); e.exports = function (t) { return r(i(t)) } }, { "turf-bbox": 7, "turf-bbox-polygon": 6 }], 56: [function (t, e, n) { var i = t("turf-helpers").featureCollection, r = t("turf-meta").coordEach, s = t("turf-helpers").point; e.exports = function (t) { var e = []; return r(t, function (t) { e.push(s(t)) }), i(e) } }, { "turf-helpers": 58, "turf-meta": 71 }], 57: [function (t, e, n) { var i = t("turf-meta").coordEach; e.exports = function (t) { return t = JSON.parse(JSON.stringify(t)), i(t, function (t) { t.reverse() }), t } }, { "turf-meta": 71 }], 58: [function (t, e, n) { function i(t, e) { return { type: "Feature", properties: e || {}, geometry: t } } e.exports.feature = i, e.exports.point = function (t, e) { if (!Array.isArray(t)) throw new Error("Coordinates must be an array"); if (t.length < 2) throw new Error("Coordinates must be at least 2 numbers long"); return i({ type: "Point", coordinates: t.slice() }, e) }, e.exports.polygon = function (t, e) { if (!t) throw new Error("No coordinates passed"); for (var n = 0; n < t.length; n++) { var r = t[n]; if (r.length < 4) throw new Error("Each LinearRing of a Polygon must have 4 or more Positions."); for (var s = 0; s < r[r.length - 1].length; s++)if (r[r.length - 1][s] !== r[0][s]) throw new Error("First and last Position are not equivalent.") } return i({ type: "Polygon", coordinates: t }, e) }, e.exports.lineString = function (t, e) { if (!t) throw new Error("No coordinates passed"); return i({ type: "LineString", coordinates: t }, e) }, e.exports.featureCollection = function (t) { return { type: "FeatureCollection", features: t } }, e.exports.multiLineString = function (t, e) { if (!t) throw new Error("No coordinates passed"); return i({ type: "MultiLineString", coordinates: t }, e) }, e.exports.multiPoint = function (t, e) { if (!t) throw new Error("No coordinates passed"); return i({ type: "MultiPoint", coordinates: t }, e) }, e.exports.multiPolygon = function (t, e) { if (!t) throw new Error("No coordinates passed"); return i({ type: "MultiPolygon", coordinates: t }, e) }, e.exports.geometryCollection = function (t, e) { return i({ type: "GeometryCollection", geometries: t }, e) }; var r = { miles: 3960, nauticalmiles: 3441.145, degrees: 57.2957795, radians: 1, inches: 250905600, yards: 6969600, meters: 6373e3, metres: 6373e3, kilometers: 6373, kilometres: 6373 }; e.exports.radiansToDistance = function (t, e) { var n = r[e || "kilometers"]; if (void 0 === n) throw new Error("Invalid unit"); return t * n }, e.exports.distanceToRadians = function (t, e) { var n = r[e || "kilometers"]; if (void 0 === n) throw new Error("Invalid unit"); return t / n }, e.exports.distanceToDegrees = function (t, e) { var n = r[e || "kilometers"]; if (void 0 === n) throw new Error("Invalid unit"); return t / n * 57.2958 } }, {}], 59: [function (t, e, n) { function i(t, e, n) { for (var i = [], r = 0; 6 > r; r++) { var s = t[0] + e * l[r], a = t[1] + n * h[r]; i.push([s, a]) } return i.push(i[0]), o([i]) } function r(t, e, n) { for (var i = [], r = 0; 6 > r; r++) { var s = []; s.push(t), s.push([t[0] + e * l[r], t[1] + n * h[r]]), s.push([t[0] + e * l[(r + 1) % 6], t[1] + n * h[(r + 1) % 6]]), s.push(t), i.push(o([s])) } return i } for (var s = t("turf-helpers").point, o = t("turf-helpers").polygon, a = t("turf-distance"), u = t("turf-helpers").featureCollection, l = [], h = [], c = 0; 6 > c; c++) { var g = 2 * Math.PI / 6 * c; l.push(Math.cos(g)), h.push(Math.sin(g)) } e.exports = function (t, e, n, o) { var l = e / a(s([t[0], t[1]]), s([t[2], t[1]]), n), h = l * (t[2] - t[0]), c = e / a(s([t[0], t[1]]), s([t[0], t[3]]), n), g = c * (t[3] - t[1]), f = h / 2, d = 2 * f, m = Math.sqrt(3) / 2 * g, p = t[2] - t[0], v = t[3] - t[1], y = .75 * d, x = m, E = p / (d - f / 2), I = Math.ceil(E); Math.round(E) === I && I++; var N = (I * y - f / 2 - p) / 2 - f / 2, C = Math.ceil(v / m), w = (v - C * m) / 2, S = C * m - v > m / 2; S && (w -= m / 4); for (var L = u([]), R = 0; I > R; R++)for (var b = 0; C >= b; b++) { var T = R % 2 === 1; if (!(0 === b && T || 0 === b && S)) { var P = R * y + t[0] - N, O = b * x + t[1] + w; T && (O -= m / 2), o ? L.features.push.apply(L.features, r([P, O], h / 2, g / 2)) : L.features.push(i([P, O], h / 2, g / 2)) } } return L } }, { "turf-distance": 53, "turf-helpers": 58 }], 60: [function (t, e, n) { function i(t, e) { for (var n = !1, i = 0, r = e.length - 1; i < e.length; r = i++) { var s = e[i][0], o = e[i][1], a = e[r][0], u = e[r][1], l = o > t[1] != u > t[1] && t[0] < (a - s) * (t[1] - o) / (u - o) + s; l && (n = !n) } return n } var r = t("turf-invariant"); e.exports = function (t, e) { var n = r.getCoord(t), s = e.geometry.coordinates; "Polygon" === e.geometry.type && (s = [s]); for (var o = 0, a = !1; o < s.length && !a; o++)if (i(n, s[o][0])) { for (var u = !1, l = 1; l < s[o].length && !u;)i(n, s[o][l]) && (u = !0), l++; u || (a = !0) } return a } }, { "turf-invariant": 61 }], 61: [function (t, e, n) { arguments[4][9][0].apply(n, arguments) }, { dup: 9 }], 62: [function (t, e, n) { var i = t("jsts"); e.exports = function (t, e) { var n, r; n = "Feature" === t.type ? t.geometry : t, r = "Feature" === e.type ? e.geometry : e; var s = new i.io.GeoJSONReader, o = s.read(JSON.stringify(n)), a = s.read(JSON.stringify(r)), u = o.intersection(a); if (u.isEmpty()) return void 0; var l = new i.io.GeoJSONWriter, h = l.write(u); return { type: "Feature", properties: {}, geometry: h } } }, { jsts: 63 }], 63: [function (t, e, n) { arguments[4][14][0].apply(n, arguments) }, { dup: 14 }], 64: [function (t, e, n) { function i(t, e) { var n = t.x - e.x, i = t.y - e.y; return a > n * n + i * i } function r(t) { for (var e = t.head; e;) { var n = e.next; e.next = e.prev, e.prev = n, e = n } var n = t.head; t.head = t.tail, t.tail = n } function s(t) { this.level = t, this.s = null, this.count = 0 } function o(t) { if (t) this.drawContour = t; else { var e = this; e.contours = {}, this.drawContour = function (t, n, i, r, o, a) { var u = e.contours[a]; u || (u = e.contours[a] = new s(o)), u.addSegment({ x: t, y: n }, { x: i, y: r }) }, this.contourList = function () { var t = [], n = e.contours; for (var i in n) for (var r = n[i].s, s = n[i].level; r;) { var o = r.head, a = []; for (a.level = s, a.k = i; o && o.p;)a.push(o.p), o = o.next; t.push(a), r = r.next } return t.sort(function (t, e) { return t.k - e.k }), t } } this.h = new Array(5), this.sh = new Array(5), this.xh = new Array(5), this.yh = new Array(5) } e.exports = o; var a = 1e-10; s.prototype.remove_seq = function (t) { t.prev ? t.prev.next = t.next : this.s = t.next, t.next && (t.next.prev = t.prev), --this.count }, s.prototype.addSegment = function (t, e) { for (var n = this.s, s = null, o = null, a = !1, u = !1; n && (null == s && (i(t, n.head.p) ? (s = n, a = !0) : i(t, n.tail.p) && (s = n)), null == o && (i(e, n.head.p) ? (o = n, u = !0) : i(e, n.tail.p) && (o = n)), null == o || null == s);)n = n.next; var l = (null != s ? 1 : 0) | (null != o ? 2 : 0); switch (l) { case 0: var h = { p: t, prev: null }, c = { p: e, next: null }; h.next = c, c.prev = h, s = { head: h, tail: c, next: this.s, prev: null, closed: !1 }, this.s && (this.s.prev = s), this.s = s, ++this.count; break; case 1: var g = { p: e }; a ? (g.next = s.head, g.prev = null, s.head.prev = g, s.head = g) : (g.next = null, g.prev = s.tail, s.tail.next = g, s.tail = g); break; case 2: var g = { p: t }; u ? (g.next = o.head, g.prev = null, o.head.prev = g, o.head = g) : (g.next = null, g.prev = o.tail, o.tail.next = g, o.tail = g); break; case 3: if (s === o) { var g = { p: s.tail.p, next: s.head, prev: null }; s.head.prev = g, s.head = g, s.closed = !0; break } switch ((a ? 1 : 0) | (u ? 2 : 0)) { case 0: r(s); case 1: o.tail.next = s.head, s.head.prev = o.tail, o.tail = s.tail, this.remove_seq(s); break; case 3: r(s); case 2: s.tail.next = o.head, o.head.prev = s.tail, s.tail = o.tail, this.remove_seq(o) } } }, o.prototype.contour = function (t, e, n, i, r, s, o, u, l) { var h = this.h, c = this.sh, g = this.xh, f = this.yh, d = this.drawContour; this.contours = {}; for (var m, p, v, y, x, E, I = function (t, e) { return (h[e] * g[t] - h[t] * g[e]) / (h[e] - h[t]) }, N = function (t, e) { return (h[e] * f[t] - h[t] * f[e]) / (h[e] - h[t]) }, C = 0, w = 0, S = 0, L = 0, R = [0, 1, 1, 0], b = [0, 0, 1, 1], T = [[[0, 0, 8], [0, 2, 5], [7, 6, 9]], [[0, 3, 4], [1, 3, 1], [4, 3, 0]], [[9, 6, 7], [5, 2, 0], [8, 0, 0]]], P = r - 1; P >= i; P--)for (var O = e; n - 1 >= O; O++) { var M, _; if (M = Math.min(t[O][P], t[O][P + 1]), _ = Math.min(t[O + 1][P], t[O + 1][P + 1]), x = Math.min(M, _), M = Math.max(t[O][P], t[O][P + 1]), _ = Math.max(t[O + 1][P], t[O + 1][P + 1]), E = Math.max(M, _), E >= l[0] && x <= l[u - 1]) for (var A = 0; u > A; A++)if (l[A] >= x && l[A] <= E) { for (var D = 4; D >= 0; D--)D > 0 ? (h[D] = t[O + R[D - 1]][P + b[D - 1]] - l[A], g[D] = s[O + R[D - 1]], f[D] = o[P + b[D - 1]]) : (h[0] = .25 * (h[1] + h[2] + h[3] + h[4]), g[0] = .5 * (s[O] + s[O + 1]), f[0] = .5 * (o[P] + o[P + 1])), h[D] > a ? c[D] = 1 : h[D] < -a ? c[D] = -1 : c[D] = 0; for (D = 1; 4 >= D; D++)if (m = D, p = 0, v = 4 != D ? D + 1 : 1, y = T[c[m] + 1][c[p] + 1][c[v] + 1], 0 != y) { switch (y) { case 1: C = g[m], S = f[m], w = g[p], L = f[p]; break; case 2: C = g[p], S = f[p], w = g[v], L = f[v]; break; case 3: C = g[v], S = f[v], w = g[m], L = f[m]; break; case 4: C = g[m], S = f[m], w = I(p, v), L = N(p, v); break; case 5: C = g[p], S = f[p], w = I(v, m), L = N(v, m); break; case 6: C = g[v], S = f[v], w = I(m, p), L = N(m, p); break; case 7: C = I(m, p), S = N(m, p), w = I(p, v), L = N(p, v); break; case 8: C = I(p, v), S = N(p, v), w = I(v, m), L = N(v, m); break; case 9: C = I(v, m), S = N(v, m), w = I(m, p), L = N(m, p) }d(C, S, w, L, l[A], A) } } } } }, {}], 65: [function (t, e, n) { var i = t("turf-tin"), r = t("turf-inside"), s = t("turf-grid"), o = t("turf-bbox"), a = t("turf-planepoint"), u = t("turf-helpers").featureCollection, l = t("turf-helpers").lineString, h = t("turf-square"), c = t("./conrec"); e.exports = function (t, e, n, g) { for (var f = i(t, e), d = o(t), m = h(d), p = s(m, n), v = [], y = 0; y < p.features.length; y++)for (var x = p.features[y], E = 0; E < f.features.length; E++) { var I = f.features[E]; r(x, I) && (x.properties = {}, x.properties[e] = a(x, I)) } for (var N = Math.sqrt(p.features.length), C = 0; N > C; C++) { for (var w = p.features.slice(C * N, (C + 1) * N), S = [], L = 0; L < w.length; L++)w[L].properties ? S.push(w[L].properties[e]) : S.push(0); v.push(S) } for (var R = (m[2] - m[0]) / N, b = [], T = [], P = 0; N > P; P++)b.push(P * R + m[0]), T.push(P * R + m[1]); var O = new c; O.contour(v, 0, n, 0, n, b, T, g.length, g); var M = O.contourList(), _ = u([]); return M.forEach(function (t) { if (t.length > 2) { var n = []; t.forEach(function (t) { n.push([t.x, t.y]) }); var i = l(n); i.properties = {}, i.properties[e] = t.level, _.features.push(i) } }), _ } }, { "./conrec": 64, "turf-bbox": 7, "turf-grid": 66, "turf-helpers": 58, "turf-inside": 60, "turf-planepoint": 74, "turf-square": 84, "turf-tin": 88 }], 66: [function (t, e, n) { var i = t("turf-point"); e.exports = function (t, e) { for (var n = t[0], r = t[1], s = t[2], o = (t[3], (s - n) / e), a = { type: "FeatureCollection", features: [] }, u = 0; e >= u; u++)for (var l = 0; e >= l; l++)a.features.push(i([u * o + n, l * o + r])); return a } }, { "turf-point": 67 }], 67: [function (t, e, n) { var i = Array.isArray || function (t) { return "[object Array]" === Object.prototype.toString.call(t) }; e.exports = function (t, e) { if (!i(t)) throw new Error("Coordinates must be an array"); if (t.length < 2) throw new Error("Coordinates must be at least 2 numbers long"); return { type: "Feature", geometry: { type: "Point", coordinates: t }, properties: e || {} } } }, {}], 68: [function (t, e, n) { function i(t, e, n, i, r, s, o, a) { var u, l, h, c, g, f = { x: null, y: null, onLine1: !1, onLine2: !1 }; return u = (a - s) * (n - t) - (o - r) * (i - e), 0 === u ? null !== f.x && null !== f.y ? f : !1 : (l = e - s, h = t - r, c = (o - r) * l - (a - s) * h, g = (n - t) * l - (i - e) * h, l = c / u, h = g / u, f.x = t + l * (n - t), f.y = e + l * (i - e), l >= 0 && 1 >= l && (f.onLine1 = !0), h >= 0 && 1 >= h && (f.onLine2 = !0), f.onLine1 && f.onLine2 ? [f.x, f.y] : !1) } var r = t("turf-helpers").point; e.exports = function (t) { var e, n = { type: "FeatureCollection", features: [] }; return e = "Feature" === t.type ? t.geometry : t, e.coordinates.forEach(function (t) { e.coordinates.forEach(function (e) { for (var s = 0; s < t.length - 1; s++)for (var o = 0; o < e.length - 1; o++)if (t !== e || 1 !== Math.abs(s - o) && Math.abs(s - o) !== t.length - 2) { var a = i(t[s][0], t[s][1], t[s + 1][0], t[s + 1][1], e[o][0], e[o][1], e[o + 1][0], e[o + 1][1]); a && n.features.push(r([a[0], a[1]])) } }) }), n } }, { "turf-helpers": 58 }], 69: [function (t, e, n) { function i(t, e) { for (var n, i = 0, o = s(t[0]), a = s(t[0]), u = 1; u < t.length; u++)a.geometry.coordinates = t[u], i += r(o, a, e), n = o, o = a, a = n; return i } var r = t("turf-distance"), s = t("turf-helpers").point; e.exports = function o(t, e) { if ("FeatureCollection" === t.type) return t.features.reduce(function (t, n) { return t + o(n, e) }, 0); var n, r, s = "Feature" === t.type ? t.geometry : t; if ("LineString" === s.type) return i(s.coordinates, e); if ("Polygon" === s.type || "MultiLineString" === s.type) { for (n = 0, r = 0; r < s.coordinates.length; r++)n += i(s.coordinates[r], e); return n } if ("MultiPolygon" === t.type) { for (n = 0, r = 0; r < s.coordinates.length; r++)for (var a = 0; a < s.coordinates[r].length; a++)n += i(s.coordinates[r][a], e); return n } throw new Error("input must be a LineString, MultiLineString, Polygon, or MultiPolygon Feature or Geometry (or a FeatureCollection containing only those types)") } }, { "turf-distance": 53, "turf-helpers": 58 }], 70: [function (t, e, n) { var i = t("turf-helpers").lineString, r = t("turf-point-on-line"); e.exports = function (t, e, n) { var s; if ("Feature" === n.type) s = n.geometry.coordinates; else { if ("LineString" !== n.type) throw new Error("input must be a LineString Feature or Geometry"); s = n.coordinates } var o, a = r(n, t), u = r(n, e); o = a.properties.index <= u.properties.index ? [a, u] : [u, a]; for (var l = i([o[0].geometry.coordinates], {}), h = o[0].properties.index + 1; h < o[1].properties.index + 1; h++)l.geometry.coordinates.push(s[h]); return l.geometry.coordinates.push(o[1].geometry.coordinates), l } }, { "turf-helpers": 58, "turf-point-on-line": 76 }], 71: [function (t, e, n) { function i(t, e, n) { var i, r, s, o, a, u, l, h, c, g, f = 0, d = "FeatureCollection" === t.type, m = "Feature" === t.type, p = d ? t.features.length : 1; for (i = 0; p > i; i++)for (c = d ? t.features[i].geometry : m ? t.geometry : t, g = "GeometryCollection" === c.type, l = g ? c.geometries.length : 1, o = 0; l > o; o++)if (u = g ? c.geometries[o] : c, h = u.coordinates, f = !n || "Polygon" !== u.type && "MultiPolygon" !== u.type ? 0 : 1, "Point" === u.type) e(h); else if ("LineString" === u.type || "MultiPoint" === u.type) for (r = 0; r < h.length; r++)e(h[r]); else if ("Polygon" === u.type || "MultiLineString" === u.type) for (r = 0; r < h.length; r++)for (s = 0; s < h[r].length - f; s++)e(h[r][s]); else { if ("MultiPolygon" !== u.type) throw new Error("Unknown Geometry Type"); for (r = 0; r < h.length; r++)for (s = 0; s < h[r].length; s++)for (a = 0; a < h[r][s].length - f; a++)e(h[r][s][a]) } } function r(t, e, n, r) { return i(t, function (t) { n = e(n, t) }, r), n } function s(t, e) { var n; switch (t.type) { case "FeatureCollection": for (n = 0; n < t.features.length; n++)e(t.features[n].properties); break; case "Feature": e(t.properties) } } function o(t, e, n) { return s(t, function (t) { n = e(n, t) }), n } function a(t, e) { if ("Feature" === t.type) return e(t); if ("FeatureCollection" === t.type) for (var n = 0; n < t.features.length; n++)e(t.features[n]) } function u(t) { var e = []; return i(t, function (t) { e.push(t) }), e } e.exports.coordEach = i, e.exports.coordReduce = r, e.exports.propEach = s, e.exports.propReduce = o, e.exports.featureEach = a, e.exports.coordAll = u }, {}], 72: [function (t, e, n) { var i = t("turf-bearing"), r = t("turf-destination"), s = t("turf-distance"); e.exports = function (t, e) { var n = s(t, e, "miles"), o = i(t, e), a = r(t, n / 2, o, "miles"); return a } }, { "turf-bearing": 8, "turf-destination": 49, "turf-distance": 53 }], 73: [function (t, e, n) { var i = t("turf-distance"); e.exports = function (t, e) { for (var n, r = 1 / 0, s = 0; s < e.features.length; s++) { var o = i(t, e.features[s], "miles"); r > o && (n = e.features[s], r = o) } return n } }, { "turf-distance": 53 }], 74: [function (t, e, n) { e.exports = function (t, e) { var n = t.geometry.coordinates[0], i = t.geometry.coordinates[1], r = e.geometry.coordinates[0][0][0], s = e.geometry.coordinates[0][0][1], o = e.properties.a, a = e.geometry.coordinates[0][1][0], u = e.geometry.coordinates[0][1][1], l = e.properties.b, h = e.geometry.coordinates[0][2][0], c = e.geometry.coordinates[0][2][1], g = e.properties.c, f = (g * (n - r) * (i - u) + o * (n - a) * (i - c) + l * (n - h) * (i - s) - l * (n - r) * (i - c) - g * (n - a) * (i - s) - o * (n - h) * (i - u)) / ((n - r) * (i - u) + (n - a) * (i - c) + (n - h) * (i - s) - (n - r) * (i - c) - (n - a) * (i - s) - (n - h) * (i - u)); return f } }, {}], 75: [function (t, e, n) { var i = t("turf-helpers").point, r = t("turf-helpers").featureCollection, s = t("turf-distance"); e.exports = function (t, e, n) { for (var o = r([]), a = e / s(i([t[0], t[1]]), i([t[2], t[1]]), n), u = a * (t[2] - t[0]), l = e / s(i([t[0], t[1]]), i([t[0], t[3]]), n), h = l * (t[3] - t[1]), c = t[0]; c <= t[2];) { for (var g = t[1]; g <= t[3];)o.features.push(i([c, g])), g += h; c += u } return o } }, { "turf-distance": 53, "turf-helpers": 58 }], 76: [function (t, e, n) { function i(t, e) { for (var n = "miles", i = o([1 / 0, 1 / 0], { dist: 1 / 0 }), l = 0; l < e.length - 1; l++) { var h = o(e[l]), c = o(e[l + 1]); h.properties.dist = s(t, h, n), c.properties.dist = s(t, c, n); var g, f = Math.max(h.properties.dist, c.properties.dist), d = a(h, c), m = u(t, f, d + 90, n), p = u(t, f, d - 90, n), v = r(m.geometry.coordinates[0], m.geometry.coordinates[1], p.geometry.coordinates[0], p.geometry.coordinates[1], h.geometry.coordinates[0], h.geometry.coordinates[1], c.geometry.coordinates[0], c.geometry.coordinates[1]); v && (g = o(v), g.properties.dist = s(t, g, n)), h.properties.dist < i.properties.dist && (i = h, i.properties.index = l), c.properties.dist < i.properties.dist && (i = c, i.properties.index = l), g && g.properties.dist < i.properties.dist && (i = g, i.properties.index = l) } return i } function r(t, e, n, i, r, s, o, a) { var u, l, h, c, g, f = { x: null, y: null, onLine1: !1, onLine2: !1 }; return u = (a - s) * (n - t) - (o - r) * (i - e), 0 === u ? null !== f.x && null !== f.y ? f : !1 : (l = e - s, h = t - r, c = (o - r) * l - (a - s) * h, g = (n - t) * l - (i - e) * h, l = c / u, h = g / u, f.x = t + l * (n - t), f.y = e + l * (i - e), l > 0 && 1 > l && (f.onLine1 = !0), h > 0 && 1 > h && (f.onLine2 = !0), f.onLine1 && f.onLine2 ? [f.x, f.y] : !1) } var s = t("turf-distance"), o = t("turf-helpers").point, a = t("turf-bearing"), u = t("turf-destination"); e.exports = function (t, e) { var n; if ("Feature" === t.type) n = t.geometry.coordinates; else { if ("LineString" !== t.type) throw new Error("input must be a LineString Feature or Geometry"); n = t.coordinates } return i(e, n) } }, { "turf-bearing": 8, "turf-destination": 49, "turf-distance": 53, "turf-helpers": 58 }], 77: [function (t, e, n) { function i(t) { "FeatureCollection" !== t.type && ("Feature" !== t.type && (t = { type: "Feature", geometry: t, properties: {} }), t = s([t])); for (var e = o(t), n = !1, i = 0; !n && i < t.features.length;) { var h, c, g, f, d, m, p, v = t.features[i].geometry, y = !1; if ("Point" === v.type) e.geometry.coordinates[0] === v.coordinates[0] && e.geometry.coordinates[1] === v.coordinates[1] && (n = !0); else if ("MultiPoint" === v.type) { var x = !1; for (p = 0; !x && p < v.coordinates.length;)e.geometry.coordinates[0] === v.coordinates[p][0] && e.geometry.coordinates[1] === v.coordinates[p][1] && (n = !0, x = !0), p++ } else if ("LineString" === v.type) for (p = 0; !y && p < v.coordinates.length - 1;)h = e.geometry.coordinates[0], c = e.geometry.coordinates[1], g = v.coordinates[p][0], f = v.coordinates[p][1], d = v.coordinates[p + 1][0], m = v.coordinates[p + 1][1], r(h, c, g, f, d, m) && (y = !0, n = !0), p++; else if ("MultiLineString" === v.type) for (var E = 0; E < v.coordinates.length;) { y = !1, p = 0; for (var I = v.coordinates[E]; !y && p < I.length - 1;)h = e.geometry.coordinates[0], c = e.geometry.coordinates[1], g = I[p][0], f = I[p][1], d = I[p + 1][0], m = I[p + 1][1], r(h, c, g, f, d, m) && (y = !0, n = !0), p++; E++ } else if ("Polygon" === v.type || "MultiPolygon" === v.type) { var N = { type: "Feature", geometry: v, properties: {} }; u(e, N) && (n = !0) } i++ } if (n) return e; var C = s([]); for (i = 0; i < t.features.length; i++)C.features = C.features.concat(l(t.features[i]).features); var w, S = 1 / 0; for (i = 0; i < C.features.length; i++) { var L = a(e, C.features[i], "miles"); S > L && (S = L, w = C.features[i]) } return w } function r(t, e, n, i, r, s) { var o = Math.sqrt((r - n) * (r - n) + (s - i) * (s - i)), a = Math.sqrt((t - n) * (t - n) + (e - i) * (e - i)), u = Math.sqrt((r - t) * (r - t) + (s - e) * (s - e)); return o === a + u ? !0 : void 0 } var s = t("turf-helpers").featureCollection, o = t("turf-center"), a = t("turf-distance"), u = t("turf-inside"), l = t("turf-explode"); e.exports = i }, { "turf-center": 15, "turf-distance": 53, "turf-explode": 56, "turf-helpers": 58, "turf-inside": 60 }], 78: [function (t, e, n) { var i = t("geojson-random"); e.exports = function (t, e, n) { switch (n = n || {}, e = e || 1, t) { case "point": case "points": case void 0: return i.point(e, n.bbox); case "polygon": case "polygons": return i.polygon(e, n.num_vertices, n.max_radial_length, n.bbox); default: throw new Error("Unknown type given: valid options are points and polygons") } } }, { "geojson-random": 79 }], 79: [function (t, e, n) { function r(t) { return t ? h(t) : [a(), u()] } function s(t) { return function (e, n) { return [e[0] + t[0], e[1] + t[1]] } } function o() { return Math.random() - .5 } function a() { return 360 * o() } function u() { return 180 * o() } function l(t) { return { type: "Point", coordinates: t || [a(), u()] } } function h(t) { return [Math.random() * (t[2] - t[0]) + t[0], Math.random() * (t[3] - t[1]) + t[1]] } function c(t) { return { type: "Polygon", coordinates: t } } function g(t) { return { type: "Feature", geometry: t, properties: {} } } function f(t) { return { type: "FeatureCollection", features: t } } e.exports = function () { throw new Error("call .point() or .polygon() instead") }, e.exports.position = r, e.exports.point = function (t, e) { var n = []; for (i = 0; i < t; i++)n.push(g(e ? l(r(e)) : l())); return f(n) }, e.exports.polygon = function (t, e, n, o) { function a(t, e, n) { n[e] = e > 0 ? t + n[e - 1] : t } function u(t, e) { t = 2 * t * Math.PI / d[d.length - 1]; var i = Math.random(); h.push([i * n * Math.sin(t), i * n * Math.cos(t)]) } "number" != typeof e && (e = 10), "number" != typeof n && (n = 10); var l = []; for (i = 0; i < t; i++) { var h = [], d = Array.apply(null, new Array(e + 1)).map(Math.random); d.forEach(a), d.forEach(u), h[h.length - 1] = h[0], h = h.map(s(r(o))), l.push(g(c([h]))) } return f(l) } }, {}], 80: [function (t, e, n) { function i(t, e) { for (var n, i, r = t.slice(0), s = t.length, o = s - e; s-- > o;)i = Math.floor((s + 1) * Math.random()), n = r[i], r[i] = r[s], r[s] = n; return r.slice(o) } var r = t("turf-helpers").featureCollection; e.exports = function (t, e) { var n = r(i(t.features, e)); return n } }, { "turf-helpers": 58 }], 81: [function (t, e, n) { function i(t, e, n) { return "LineString" === t.geometry.type ? { type: "LineString", coordinates: o(t.geometry.coordinates, e, n) } : "MultiLineString" === t.geometry.type ? { type: "MultiLineString", coordinates: t.geometry.coordinates.map(function (t) { return o(t, e, n) }) } : "Polygon" === t.geometry.type ? { type: "Polygon", coordinates: a(t.geometry.coordinates, e, n) } : "MultiPolygon" === t.geometry.type ? { type: "MultiPolygon", coordinates: t.geometry.coordinates.map(function (t) { return a(t, e, n) }) } : t } function r(t) { return t.length < 3 ? !1 : 3 === t.length && t[2][0] === t[0][0] && t[2][1] === t[0][1] ? !1 : !0 } function s(t, e) { return { type: "Feature", geometry: t, properties: e } } function o(t, e, n) { return u(t.map(function (t) { return { x: t[0], y: t[1] } }), e, n).map(function (t) { return [t.x, t.y] }) } function a(t, e, n) { return t.map(function (t) { var i = t.map(function (t) { return { x: t[0], y: t[1] } }); if (i.length < 4) throw new Error("Invalid polygon"); for (var s = u(i, e, n).map(function (t) { return [t.x, t.y] }); !r(s);)e -= .01 * e, s = u(i, e, n).map(function (t) { return [t.x, t.y] }); return (s[s.length - 1][0] !== s[0][0] || s[s.length - 1][1] !== s[0][1]) && s.push(s[0]), s }) } var u = t("simplify-js"), l = ["LineString", "MultiLineString", "Polygon", "MultiPolygon"]; e.exports = function (t, e, n) { return "Feature" === t.type ? s(i(t, e, n), t.properties) : "FeatureCollection" === t.type ? { type: "FeatureCollection", features: t.features.map(function (t) { var r = i(t, e, n); return l.indexOf(r.type) > -1 ? s(r, t.properties) : r }) } : "GeometryCollection" === t.type ? { type: "GeometryCollection", geometries: t.geometries.map(function (t) { return l.indexOf(t.type) > -1 ? i({ type: "Feature", geometry: t }, e, n) : t }) } : t } }, { "simplify-js": 82 }], 82: [function (e, n, i) { !function () { "use strict"; function e(t, e) { var n = t.x - e.x, i = t.y - e.y; return n * n + i * i } function i(t, e, n) { var i = e.x, r = e.y, s = n.x - i, o = n.y - r; if (0 !== s || 0 !== o) { var a = ((t.x - i) * s + (t.y - r) * o) / (s * s + o * o); a > 1 ? (i = n.x, r = n.y) : a > 0 && (i += s * a, r += o * a) } return s = t.x - i, o = t.y - r, s * s + o * o } function r(t, n) { for (var i, r = t[0], s = [r], o = 1, a = t.length; a > o; o++)i = t[o], e(i, r) > n && (s.push(i), r = i); return r !== i && s.push(i), s } function s(t, e) { var n, r, s, o, a = t.length, u = "undefined" != typeof Uint8Array ? Uint8Array : Array, l = new u(a), h = 0, c = a - 1, g = [], f = []; for (l[h] = l[c] = 1; c;) { for (r = 0, n = h + 1; c > n; n++)s = i(t[n], t[h], t[c]), s > r && (o = n, r = s); r > e && (l[o] = 1, g.push(h, o, o, c)), c = g.pop(), h = g.pop() } for (n = 0; a > n; n++)l[n] && f.push(t[n]); return f } function o(t, e, n) { var i = void 0 !== e ? e * e : 1; return t = n ? t : r(t, i), t = s(t, i) } "function" == typeof t && t.amd ? t(function () { return o }) : "undefined" != typeof n ? n.exports = o : "undefined" != typeof self ? self.simplify = o : window.simplify = o }() }, {}], 83: [function (t, e, n) { var i = t("turf-helpers").featureCollection, r = t("turf-helpers").point, s = t("turf-helpers").polygon, o = t("turf-distance"); e.exports = function (t, e, n) { for (var a = i([]), u = e / o(r([t[0], t[1]]), r([t[2], t[1]]), n), l = u * (t[2] - t[0]), h = e / o(r([t[0], t[1]]), r([t[0], t[3]]), n), c = h * (t[3] - t[1]), g = t[0]; g <= t[2];) { for (var f = t[1]; f <= t[3];) { var d = s([[[g, f], [g, f + c], [g + l, f + c], [g + l, f], [g, f]]]); a.features.push(d), f += c } g += l } return a } }, { "turf-distance": 53, "turf-helpers": 58 }], 84: [function (t, e, n) { var i = t("turf-distance"); e.exports = function (t) { var e = i(t.slice(0, 2), [t[2], t[1]], "miles"), n = i(t.slice(0, 2), [t[0], t[3]], "miles"); if (e >= n) { var r = (t[1] + t[3]) / 2; return [t[0], r - (t[2] - t[0]) / 2, t[2], r + (t[2] - t[0]) / 2] } var s = (t[0] + t[2]) / 2; return [s - (t[3] - t[1]) / 2, t[1], s + (t[3] - t[1]) / 2, t[3]] } }, { "turf-distance": 53 }], 85: [function (t, e, n) { var i = t("turf-inside"); e.exports = function (t, e, n, r) { return t = JSON.parse(JSON.stringify(t)), e = JSON.parse(JSON.stringify(e)), t.features.forEach(function (t) { t.properties || (t.properties = {}), e.features.forEach(function (e) { if (void 0 === t.properties[r]) { var s = i(t, e); s && (t.properties[r] = e.properties[n]) } }) }), t } }, { "turf-inside": 60 }], 86: [function (t, e, n) { function i(t) { var e = r(t), n = 2, i = o(e.vertices, e.holes, n), a = [], u = []; i.forEach(function (t, r) { var s = i[r]; u.push([e.vertices[s * n], e.vertices[s * n + 1]]) }); for (var l = 0; l < u.length; l += 3) { var h = u.slice(l, l + 3); h.push(u[l]), a.push(s([h])) } return a } function r(t) { for (var e = t[0][0].length, n = { vertices: [], holes: [], dimensions: e }, i = 0, r = 0; r < t.length; r++) { for (var s = 0; s < t[r].length; s++)for (var o = 0; e > o; o++)n.vertices.push(t[r][s][o]); r > 0 && (i += t[r - 1].length, n.holes.push(i)) } return n } var s = t("turf-helpers").polygon, o = t("earcut"); e.exports = function (t) { if (!t.geometry || "Polygon" !== t.geometry.type && "MultiPolygon" !== t.geometry.type) throw new Error("input must be a Polygon or MultiPolygon"); var e = { type: "FeatureCollection", features: [] }; return "Polygon" === t.geometry.type ? e.features = i(t.geometry.coordinates) : t.geometry.coordinates.forEach(function (t) { e.features = e.features.concat(i(t)) }), e } }, { earcut: 87, "turf-helpers": 58 }], 87: [function (t, e, n) { "use strict"; function i(t, e, n) { n = n || 2; var i = e && e.length, s = i ? e[0] * n : t.length, a = r(t, 0, s, n, !0), u = []; if (!a) return u; var l, h, g, f, d, m, p; if (i && (a = c(t, e, a, n)), t.length > 80 * n) { l = g = t[0], h = f = t[1]; for (var v = n; s > v; v += n)d = t[v], m = t[v + 1], l > d && (l = d), h > m && (h = m), d > g && (g = d), m > f && (f = m); p = Math.max(g - l, f - h) } return o(a, u, n, l, h, p), u } function r(t, e, n, i, r) { var s, o; if (r === O(t, e, n, i) > 0) for (s = e; n > s; s += i)o = b(s, t[s], t[s + 1], o); else for (s = n - i; s >= e; s -= i)o = b(s, t[s], t[s + 1], o); return o && N(o, o.next) && (T(o), o = o.next), o } function s(t, e) { if (!t) return t; e || (e = t); var n, i = t; do if (n = !1, i.steiner || !N(i, i.next) && 0 !== I(i.prev, i, i.next)) i = i.next; else { if (T(i), i = e = i.prev, i === i.next) return null; n = !0 } while (n || i !== e); return e } function o(t, e, n, i, r, c, g) { if (t) { !g && c && m(t, i, r, c); for (var f, d, p = t; t.prev !== t.next;)if (f = t.prev, d = t.next, c ? u(t, i, r, c) : a(t)) e.push(f.i / n), e.push(t.i / n), e.push(d.i / n), T(t), t = d.next, p = d.next; else if (t = d, t === p) { g ? 1 === g ? (t = l(t, e, n), o(t, e, n, i, r, c, 2)) : 2 === g && h(t, e, n, i, r, c) : o(s(t), e, n, i, r, c, 1); break } } } function a(t) { var e = t.prev, n = t, i = t.next; if (I(e, n, i) >= 0) return !1; for (var r = t.next.next; r !== t.prev;) { if (x(e.x, e.y, n.x, n.y, i.x, i.y, r.x, r.y) && I(r.prev, r, r.next) >= 0) return !1; r = r.next } return !0 } function u(t, e, n, i) { var r = t.prev, s = t, o = t.next; if (I(r, s, o) >= 0) return !1; for (var a = r.x < s.x ? r.x < o.x ? r.x : o.x : s.x < o.x ? s.x : o.x, u = r.y < s.y ? r.y < o.y ? r.y : o.y : s.y < o.y ? s.y : o.y, l = r.x > s.x ? r.x > o.x ? r.x : o.x : s.x > o.x ? s.x : o.x, h = r.y > s.y ? r.y > o.y ? r.y : o.y : s.y > o.y ? s.y : o.y, c = v(a, u, e, n, i), g = v(l, h, e, n, i), f = t.nextZ; f && f.z <= g;) { if (f !== t.prev && f !== t.next && x(r.x, r.y, s.x, s.y, o.x, o.y, f.x, f.y) && I(f.prev, f, f.next) >= 0) return !1; f = f.nextZ } for (f = t.prevZ; f && f.z >= c;) { if (f !== t.prev && f !== t.next && x(r.x, r.y, s.x, s.y, o.x, o.y, f.x, f.y) && I(f.prev, f, f.next) >= 0) return !1; f = f.prevZ } return !0 } function l(t, e, n) { var i = t; do { var r = i.prev, s = i.next.next; !N(r, s) && C(r, i, i.next, s) && S(r, s) && S(s, r) && (e.push(r.i / n), e.push(i.i / n), e.push(s.i / n), T(i), T(i.next), i = t = s), i = i.next } while (i !== t); return i } function h(t, e, n, i, r, a) { var u = t; do { for (var l = u.next.next; l !== u.prev;) { if (u.i !== l.i && E(u, l)) { var h = R(u, l); return u = s(u, u.next), h = s(h, h.next), o(u, e, n, i, r, a), void o(h, e, n, i, r, a) } l = l.next } u = u.next } while (u !== t) } function c(t, e, n, i) { var o, a, u, l, h, c = []; for (o = 0, a = e.length; a > o; o++)u = e[o] * i, l = a - 1 > o ? e[o + 1] * i : t.length, h = r(t, u, l, i, !1), h === h.next && (h.steiner = !0), c.push(y(h)); for (c.sort(g), o = 0; o < c.length; o++)f(c[o], n), n = s(n, n.next); return n } function g(t, e) { return t.x - e.x } function f(t, e) { if (e = d(t, e)) { var n = R(e, t); s(n, n.next) } } function d(t, e) { var n, i = e, r = t.x, s = t.y, o = -(1 / 0); do { if (s <= i.y && s >= i.next.y) { var a = i.x + (s - i.y) * (i.next.x - i.x) / (i.next.y - i.y); if (r >= a && a > o) { if (o = a, a === r) { if (s === i.y) return i; if (s === i.next.y) return i.next } n = i.x < i.next.x ? i : i.next } } i = i.next } while (i !== e); if (!n) return null; if (r === o) return n.prev; var u, l = n, h = n.x, c = n.y, g = 1 / 0; for (i = n.next; i !== l;)r >= i.x && i.x >= h && x(c > s ? r : o, s, h, c, c > s ? o : r, s, i.x, i.y) && (u = Math.abs(s - i.y) / (r - i.x), (g > u || u === g && i.x > n.x) && S(i, t) && (n = i, g = u)), i = i.next; return n } function m(t, e, n, i) { var r = t; do null === r.z && (r.z = v(r.x, r.y, e, n, i)), r.prevZ = r.prev, r.nextZ = r.next, r = r.next; while (r !== t); r.prevZ.nextZ = null, r.prevZ = null, p(r) } function p(t) { var e, n, i, r, s, o, a, u, l = 1; do { for (n = t, t = null, s = null, o = 0; n;) { for (o++ , i = n, a = 0, e = 0; l > e && (a++ , i = i.nextZ, i); e++); for (u = l; a > 0 || u > 0 && i;)0 === a ? (r = i, i = i.nextZ, u--) : 0 !== u && i ? n.z <= i.z ? (r = n, n = n.nextZ, a--) : (r = i, i = i.nextZ, u--) : (r = n, n = n.nextZ, a--), s ? s.nextZ = r : t = r, r.prevZ = s, s = r; n = i } s.nextZ = null, l *= 2 } while (o > 1); return t } function v(t, e, n, i, r) { return t = 32767 * (t - n) / r, e = 32767 * (e - i) / r, t = 16711935 & (t | t << 8), t = 252645135 & (t | t << 4), t = 858993459 & (t | t << 2), t = 1431655765 & (t | t << 1), e = 16711935 & (e | e << 8), e = 252645135 & (e | e << 4), e = 858993459 & (e | e << 2), e = 1431655765 & (e | e << 1), t | e << 1 } function y(t) { var e = t, n = t; do e.x < n.x && (n = e), e = e.next; while (e !== t); return n } function x(t, e, n, i, r, s, o, a) { return (r - o) * (e - a) - (t - o) * (s - a) >= 0 && (t - o) * (i - a) - (n - o) * (e - a) >= 0 && (n - o) * (s - a) - (r - o) * (i - a) >= 0 } function E(t, e) { return t.next.i !== e.i && t.prev.i !== e.i && !w(t, e) && S(t, e) && S(e, t) && L(t, e) } function I(t, e, n) { return (e.y - t.y) * (n.x - e.x) - (e.x - t.x) * (n.y - e.y) } function N(t, e) { return t.x === e.x && t.y === e.y } function C(t, e, n, i) { return N(t, e) && N(n, i) || N(t, i) && N(n, e) ? !0 : I(t, e, n) > 0 != I(t, e, i) > 0 && I(n, i, t) > 0 != I(n, i, e) > 0 } function w(t, e) { var n = t; do { if (n.i !== t.i && n.next.i !== t.i && n.i !== e.i && n.next.i !== e.i && C(n, n.next, t, e)) return !0; n = n.next } while (n !== t); return !1 } function S(t, e) { return I(t.prev, t, t.next) < 0 ? I(t, e, t.next) >= 0 && I(t, t.prev, e) >= 0 : I(t, e, t.prev) < 0 || I(t, t.next, e) < 0 } function L(t, e) { var n = t, i = !1, r = (t.x + e.x) / 2, s = (t.y + e.y) / 2; do n.y > s != n.next.y > s && r < (n.next.x - n.x) * (s - n.y) / (n.next.y - n.y) + n.x && (i = !i), n = n.next; while (n !== t); return i } function R(t, e) { var n = new P(t.i, t.x, t.y), i = new P(e.i, e.x, e.y), r = t.next, s = e.prev; return t.next = e, e.prev = t, n.next = r, r.prev = n, i.next = n, n.prev = i, s.next = i, i.prev = s, i } function b(t, e, n, i) { var r = new P(t, e, n); return i ? (r.next = i.next, r.prev = i, i.next.prev = r, i.next = r) : (r.prev = r, r.next = r), r } function T(t) { t.next.prev = t.prev, t.prev.next = t.next, t.prevZ && (t.prevZ.nextZ = t.nextZ), t.nextZ && (t.nextZ.prevZ = t.prevZ) } function P(t, e, n) { this.i = t, this.x = e, this.y = n, this.prev = null, this.next = null, this.z = null, this.prevZ = null, this.nextZ = null, this.steiner = !1 } function O(t, e, n, i) { for (var r = 0, s = e, o = n - i; n > s; s += i)r += (t[o] - t[s]) * (t[s + 1] + t[o + 1]), o = s; return r } e.exports = i, i.deviation = function (t, e, n, i) { var r = e && e.length, s = r ? e[0] * n : t.length, o = Math.abs(O(t, 0, s, n)); if (r) for (var a = 0, u = e.length; u > a; a++) { var l = e[a] * n, h = u - 1 > a ? e[a + 1] * n : t.length; o -= Math.abs(O(t, l, h, n)) } var c = 0; for (a = 0; a < i.length; a += 3) { var g = i[a] * n, f = i[a + 1] * n, d = i[a + 2] * n; c += Math.abs((t[g] - t[d]) * (t[f + 1] - t[g + 1]) - (t[g] - t[f]) * (t[d + 1] - t[g + 1])) } return 0 === o && 0 === c ? 0 : Math.abs((c - o) / o) }, i.flatten = function (t) { for (var e = t[0][0].length, n = { vertices: [], holes: [], dimensions: e }, i = 0, r = 0; r < t.length; r++) { for (var s = 0; s < t[r].length; s++)for (var o = 0; e > o; o++)n.vertices.push(t[r][s][o]); r > 0 && (i += t[r - 1].length, n.holes.push(i)) } return n } }, {}], 88: [function (t, e, n) { + function i(t, e, n) { this.a = t, this.b = e, this.c = n; var i, r, s, o, a = e.x - t.x, u = e.y - t.y, l = n.x - t.x, h = n.y - t.y, c = a * (t.x + e.x) + u * (t.y + e.y), g = l * (t.x + n.x) + h * (t.y + n.y), f = 2 * (a * (n.y - e.y) - u * (n.x - e.x)); Math.abs(f) < 1e-6 ? (i = Math.min(t.x, e.x, n.x), r = Math.min(t.y, e.y, n.y), s = .5 * (Math.max(t.x, e.x, n.x) - i), o = .5 * (Math.max(t.y, e.y, n.y) - r), this.x = i + s, this.y = r + o, this.r = s * s + o * o) : (this.x = (h * c - u * g) / f, this.y = (a * g - l * c) / f, s = this.x - t.x, o = this.y - t.y, this.r = s * s + o * o) } function r(t, e) { return e.x - t.x } function s(t) { var e, n, i, r, s, o = t.length; t: for (; o;)for (n = t[--o], e = t[--o], i = o; i;)if (s = t[--i], r = t[--i], e === r && n === s || e === s && n === r) { t.splice(o, 2), t.splice(i, 2), o -= 2; continue t } } function o(t) { if (t.length < 3) return []; t.sort(r); for (var e = t.length - 1, n = t[e].x, o = t[0].x, a = t[e].y, u = a; e--;)t[e].y < a && (a = t[e].y), t[e].y > u && (u = t[e].y); var l, h, c, g = o - n, f = u - a, d = g > f ? g : f, m = .5 * (o + n), p = .5 * (u + a), v = [new i({ x: m - 20 * d, y: p - d, __sentinel: !0 }, { x: m, y: p + 20 * d, __sentinel: !0 }, { x: m + 20 * d, y: p - d, __sentinel: !0 })], y = [], x = []; for (e = t.length; e--;) { for (x.length = 0, l = v.length; l--;)g = t[e].x - v[l].x, g > 0 && g * g > v[l].r ? (y.push(v[l]), v.splice(l, 1)) : (f = t[e].y - v[l].y, g * g + f * f > v[l].r || (x.push(v[l].a, v[l].b, v[l].b, v[l].c, v[l].c, v[l].a), v.splice(l, 1))); for (s(x), l = x.length; l;)c = x[--l], h = x[--l], v.push(new i(h, c, t[e])) } for (Array.prototype.push.apply(y, v), e = y.length; e--;)(y[e].a.__sentinel || y[e].b.__sentinel || y[e].c.__sentinel) && y.splice(e, 1); return y } var a = t("turf-helpers").polygon, u = t("turf-helpers").featureCollection; + e.exports = function (t, e) { return u(o(t.features.map(function (t) { var n = { x: t.geometry.coordinates[0], y: t.geometry.coordinates[1] }; return e && (n.z = t.properties[e]), n })).map(function (t) { return a([[[t.a.x, t.a.y], [t.b.x, t.b.y], [t.c.x, t.c.y], [t.a.x, t.a.y]]], { a: t.a.z, b: t.b.z, c: t.c.z }) })) } + }, { "turf-helpers": 58 }], 89: [function (t, e, n) { var i = t("turf-helpers").featureCollection, r = t("turf-helpers").polygon, s = t("turf-distance"); e.exports = function (t, e, n) { for (var o = i([]), a = e / s([t[0], t[1]], [t[2], t[1]], n), u = a * (t[2] - t[0]), l = e / s([t[0], t[1]], [t[0], t[3]], n), h = l * (t[3] - t[1]), c = 0, g = t[0]; g <= t[2];) { for (var f = 0, d = t[1]; d <= t[3];)c % 2 === 0 && f % 2 === 0 ? o.features.push(r([[[g, d], [g, d + h], [g + u, d], [g, d]]]), r([[[g, d + h], [g + u, d + h], [g + u, d], [g, d + h]]])) : c % 2 === 0 && f % 2 === 1 ? o.features.push(r([[[g, d], [g + u, d + h], [g + u, d], [g, d]]]), r([[[g, d], [g, d + h], [g + u, d + h], [g, d]]])) : f % 2 === 0 && c % 2 === 1 ? o.features.push(r([[[g, d], [g, d + h], [g + u, d + h], [g, d]]]), r([[[g, d], [g + u, d + h], [g + u, d], [g, d]]])) : f % 2 === 1 && c % 2 === 1 && o.features.push(r([[[g, d], [g, d + h], [g + u, d], [g, d]]]), r([[[g, d + h], [g + u, d + h], [g + u, d], [g, d + h]]])), d += h, f++; c++ , g += u } return o } }, { "turf-distance": 53, "turf-helpers": 58 }], 90: [function (t, e, n) { var i = t("jsts"); e.exports = function (t, e) { var n = new i.io.GeoJSONReader, r = n.read(JSON.stringify(t.geometry)), s = n.read(JSON.stringify(e.geometry)), o = r.union(s), a = new i.io.GeoJSONWriter; return o = a.write(o), { type: "Feature", geometry: o, properties: t.properties } } }, { jsts: 91 }], 91: [function (t, e, n) { arguments[4][14][0].apply(n, arguments) }, { dup: 14 }], 92: [function (t, e, n) { var i = t("turf-inside"), r = t("turf-helpers").featureCollection; e.exports = function (t, e) { for (var n = r([]), s = 0; s < e.features.length; s++)for (var o = 0; o < t.features.length; o++) { var a = i(t.features[o], e.features[s]); a && n.features.push(t.features[o]) } return n } }, { "turf-helpers": 58, "turf-inside": 60 }] + }, {}, [1])(1) +}); \ No newline at end of file diff --git a/04.系统编码/App/Properties/PublishProfiles/FolderProfile.pubxml b/04.系统编码/App/Properties/PublishProfiles/FolderProfile.pubxml new file mode 100644 index 0000000..3dd3b02 --- /dev/null +++ b/04.系统编码/App/Properties/PublishProfiles/FolderProfile.pubxml @@ -0,0 +1,18 @@ + + + + + FileSystem + FileSystem + Release + Any CPU + + True + False + bin\Release\Publish + False + + \ No newline at end of file diff --git a/04.系统编码/App/Views/Beijing/Index.cshtml b/04.系统编码/App/Views/Beijing/Index.cshtml index 3d14541..319a679 100644 --- a/04.系统编码/App/Views/Beijing/Index.cshtml +++ b/04.系统编码/App/Views/Beijing/Index.cshtml @@ -275,6 +275,7 @@ @section scripts { + diff --git a/04.系统编码/App/Views/Menggu/Index.cshtml b/04.系统编码/App/Views/Menggu/Index.cshtml index 52981eb..a66205c 100644 --- a/04.系统编码/App/Views/Menggu/Index.cshtml +++ b/04.系统编码/App/Views/Menggu/Index.cshtml @@ -274,6 +274,7 @@ @section scripts { + diff --git a/04.系统编码/App/Views/Shared/_Layout.cshtml b/04.系统编码/App/Views/Shared/_Layout.cshtml index 613efa6..0079cd3 100644 --- a/04.系统编码/App/Views/Shared/_Layout.cshtml +++ b/04.系统编码/App/Views/Shared/_Layout.cshtml @@ -38,8 +38,9 @@
欢迎,@(ViewBag.LoginUser != null ? ViewBag.LoginUser.RealName : "未登录") - 系统管理 + 管理员入口 退出 + @*@((ViewBag.LoginUser.Id == 1) ? "style=display:inline-block" : "style=display:none")*@
diff --git a/07.系统验收/项目汇报.07.22.pptx b/07.系统验收/项目汇报.07.22.pptx new file mode 100644 index 0000000..a1eb8ff Binary files /dev/null and b/07.系统验收/项目汇报.07.22.pptx differ