diff --git a/.gitignore b/.gitignore index a298eaf..d00ba2c 100644 --- a/.gitignore +++ b/.gitignore @@ -16,8 +16,8 @@ .idea -temp/ +tempdata/ .temp/ -testdata/ +data/ internal/service diff --git a/README.md b/README.md index 38f6bdd..c2f66f4 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,65 @@ # go-kriging -[![GoDoc](https://godoc.org/github.com/liuvigongzuoshi/go-kriging?status.svg)](https://godoc.org/github.com/liuvigongzuoshi/go-kriging) +[![GoDoc](https://godoc.org/github.com/liuvigongzuoshi/go-kriging?status.svg)](https://pkg.go.dev/github.com/liuvigongzuoshi/go-kriging) -Golang Multi-Goroutine spatial interpolation algorithm library for geospatial prediction and mapping via ordinary kriging +Golang Multi-Goroutine spatial interpolation algorithm library for geospatial prediction and mapping via ordinary kriging. + +Based on [oeo4b/kriging.js](https://github.com/oeo4b/kriging.js) refactoring and optimized the algorithm and added some new features. + +## Fitting a Model + +The train method with the new ordinaryKriging fits your input to whatever variogram model you specify - gaussian, exponential or spherical - and returns a variogram variable. + + +```go +import "github.com/liuvigongzuoshi/go-kriging/ordinarykriging" + +func main() { + sigma2 := 0 + alpha := 100 + ordinaryKriging := ordinarykriging.NewOrdinary(values, x, y) + variogram = ordinaryKriging.Train(ordinarykriging.Spherical, sigma2, alpha) +} +``` + +## Predicting New Values + +Values can be predicted for new coordinate pairs by using the predict method with the new ordinaryKriging. + +```go +import "github.com/liuvigongzuoshi/go-kriging/ordinarykriging" + +func main() { + // ... + // Pair of new coordinates to predict + xnew := 0.5481 + ynew := 0.4455 + tpredicted := ordinaryKriging.predict(xnew, ynew) +} +``` + +## Variogram and Probability Model + +The various variogram models can be interpreted as kernel functions for 2-dimensional coordinates a, b and parameters nugget, range, sill and A. Reparameterized as a linear function, with w = [nugget, (sill-nugget)/range], this becomes: + +- Gaussian: k(a,b) = w[0] + w[1] * ( 1 - exp{ -( ||a-b|| / range )2 / A } ) +- Exponential: k(a,b) = w[0] + w[1] * ( 1 - exp{ -( ||a-b|| / range ) / A } ) +- Spherical: k(a,b) = w[0] + w[1] * ( 1.5 * ( ||a-b|| / range ) - 0.5 * ( ||a-b|| / range )3 ) + +The variance parameter α of the prior distribution for w should be manually set, according to: + +- w ~ N(w|0, αI) + +Using the fitted kernel function hyperparameters and setting K as the Gram matrix, the prior and likelihood for the gaussian process become: + +- y ~ N(y|0, K) +- t|y ~ N(t|y, σ2I) + +The variance parameter σ2 of the likelihood reflects the error in the gaussian process and should be manually set. + + +## Other + +[kriging-wasm example](https://github.com/liuvigongzuoshi/kriging-wasm) - Test example used by wasm compiled with go-kriging algorithm code. + +[go-kriging-service](https://github.com/liuvigongzuoshi/go-kriging-service) - Call the REST service written by the go-kriging algorithm package, which supports concurrent calls by multiple users, and has a simple logging and fault-tolerant recovery mechanism. diff --git a/examples/csv/main.go b/examples/csv/main.go index eb05f7d..0b7ee65 100644 --- a/examples/csv/main.go +++ b/examples/csv/main.go @@ -3,6 +3,7 @@ package main import ( "encoding/csv" "fmt" + "image/color" "image/png" "io/ioutil" @@ -15,18 +16,21 @@ import ( "runtime/pprof" "github.com/liuvigongzuoshi/go-kriging/canvas" - "github.com/liuvigongzuoshi/go-kriging/ordinary" + "github.com/liuvigongzuoshi/go-kriging/ordinarykriging" "github.com/liuvigongzuoshi/go-kriging/pkg/json" ) -const dirPath = "testdata" +const testDataDirPath = "testdata" +const tempDataDirPath = "tempdata" +const cpuProfileFilePath = tempDataDirPath + "/cpu_profile" +const memProfileFilePath = tempDataDirPath + "/mem_profile" func main() { - cpuProfile, _ := os.Create("./testdata/cpu_profile") + cpuProfile, _ := os.Create(cpuProfileFilePath) if err := pprof.StartCPUProfile(cpuProfile); err != nil { log.Fatal(err) } - //memProfile, _ := os.Create("./testdata/mem_profile") + //memProfile, _ := os.Create(memProfileFilePath) //if err := pprof.WriteHeapProfile(memProfile); err != nil { // log.Fatal(err) //} @@ -36,19 +40,20 @@ func main() { //memProfile.Close() }() - data, err := readCsvFile("examples/csv/data/2045.csv") + data, err := readCsvFile("examples/csv/testdata/2045.csv") if err != nil { log.Fatal(err) } - polygon, err := readGeoJsonFile("examples/csv/data/yn.json") + polygon, err := readGeoJsonFile("examples/csv/testdata/yn.json") if err != nil { log.Fatal(err) } - defer timeCost()("训练模型加插值总耗时") + defer timeCost()("训练模型与插值生成网格图片总耗时") - ordinaryKriging := ordinary.NewOrdinary(data["values"], data["x"], data["y"]) - _ = ordinaryKriging.Train(ordinary.Spherical, 0, 100) + ordinaryKriging := ordinarykriging.NewOrdinary(data["values"], data["x"], data["y"]) + _ = ordinaryKriging.Train(ordinarykriging.Spherical, 0, 100) + _ = polygon gridPlot(ordinaryKriging, polygon) //var wg sync.WaitGroup @@ -61,18 +66,17 @@ func main() { // defer wg.Done() // contourRectanglePng(ordinaryKriging) //}() - //wg.Wait() } -func gridPlot(ordinaryKriging *ordinary.Variogram, polygon ordinary.PolygonCoordinates) { +func gridPlot(ordinaryKriging *ordinarykriging.Variogram, polygon ordinarykriging.PolygonCoordinates) { defer timeCost()("插值生成网格图片耗时") gridMatrices := ordinaryKriging.Grid(polygon, 0.01) - ctx := ordinaryKriging.Plot(gridMatrices, 500, 500, gridMatrices.Xlim, gridMatrices.Ylim, ordinary.DefaultGridLevelColor) + ctx := ordinaryKriging.Plot(gridMatrices, 500, 500, gridMatrices.Xlim, gridMatrices.Ylim, ordinarykriging.DefaultGridLevelColor) subTitle := &canvas.TextConfig{ Text: "球面半变异函数模型", - FontName: "testdata/fonts/source-han-sans-sc/regular.ttf", + FontName: testDataDirPath + "/fonts/source-han-sans-sc/regular.ttf", FontSize: 28, Color: color.RGBA{R: 0, G: 0, B: 0, A: 255}, OffsetX: 252, @@ -87,18 +91,18 @@ func gridPlot(ordinaryKriging *ordinary.Variogram, polygon ordinary.PolygonCoord if err != nil { log.Fatal(err) } else { - saveBuffer("grid.png", buffer) + saveBufferFile("grid.png", buffer) } //writeFile("gridMatrices.json", gridMatrices) } -func contourRectanglePng(ordinaryKriging *ordinary.Variogram) { +func contourRectanglePng(ordinaryKriging *ordinarykriging.Variogram) { defer timeCost()("插值生成矩形图片耗时") xWidth, yWidth := 800, 800 contourRectangle := ordinaryKriging.Contour(xWidth, yWidth) - pngPath := fmt.Sprintf("%v/%v.png", dirPath, time.Now().Format("2006-01-02 15:04:05")) - ctx := ordinaryKriging.PlotRectangleContour(contourRectangle, 500, 500, contourRectangle.Xlim, contourRectangle.Ylim, ordinary.DefaultLegendColor) + pngPath := fmt.Sprintf("%v/%v.png", tempDataDirPath, time.Now().Format("2006-01-02 15:04:05")) + ctx := ordinaryKriging.PlotRectangleContour(contourRectangle, 500, 500, contourRectangle.Xlim, contourRectangle.Ylim, ordinarykriging.DefaultLegendColor) img := ordinaryKriging.PlotPng(contourRectangle) err := os.MkdirAll(filepath.Dir(pngPath), os.ModePerm) @@ -116,7 +120,7 @@ func contourRectanglePng(ordinaryKriging *ordinary.Variogram) { if err != nil { log.Fatal(err) } else { - saveBuffer("rectangle.png", buffer) + saveBufferFile("rectangle.png", buffer) } } @@ -134,7 +138,7 @@ func readCsvFile(filePath string) (map[string][]float64, error) { records, err := csv.NewReader(f).ReadAll() if err != nil { - log.Fatal("Unable to parse file as CSV for "+filePath, err) + log.Fatal("Unable to parse file as CSV for\n "+filePath, err) return nil, err } @@ -159,18 +163,18 @@ func readCsvFile(filePath string) (map[string][]float64, error) { data := map[string][]float64{"values": values, "x": lons, "y": lats} //fmt.Printf("values %#v\n lons %#v\n lats %#v\n", values, lons, lats) - // writeFile("data.json", data) + //writeFile("tempdata.json", tempdata) return data, nil } -func readGeoJsonFile(filePath string) (ordinary.PolygonCoordinates, error) { +func readGeoJsonFile(filePath string) (ordinarykriging.PolygonCoordinates, error) { content, err := ioutil.ReadFile(filePath) if err != nil { - log.Fatal("Unable to read input file "+filePath, err) + log.Fatal("Unable to read input file \n"+filePath, err) return nil, err } - var polygonGeometry ordinary.PolygonGeometry + var polygonGeometry ordinarykriging.PolygonGeometry err = json.Unmarshal(content, &polygonGeometry) if err != nil { log.Fatalf("invalid json: %v", err) @@ -189,7 +193,7 @@ func timeCost() func(name string) { } func writeFile(fileName string, v interface{}) { - filePath := fmt.Sprintf("%v/%v %v", dirPath, time.Now().Format("2006-01-02 15-04-05"), fileName) + filePath := fmt.Sprintf("%v/%v %v", tempDataDirPath, time.Now().Format("2006-01-02 15-04-05"), fileName) fmt.Printf("%#v\n", filePath) // fmt.Printf("%#v\n", v) content, err := json.Marshal(v) @@ -199,8 +203,8 @@ func writeFile(fileName string, v interface{}) { ioutil.WriteFile(filePath, content, os.ModePerm) } -func saveBuffer(fileName string, content []byte) { - filePath := fmt.Sprintf("%v/%v %v", dirPath, time.Now().Format("2006-01-02 15-04-05"), fileName) +func saveBufferFile(fileName string, content []byte) { + filePath := fmt.Sprintf("%v/%v %v", tempDataDirPath, time.Now().Format("2006-01-02 15-04-05"), fileName) fmt.Printf("%#v\n", filePath) ioutil.WriteFile(filePath, content, os.ModePerm) } diff --git a/examples/csv/data/100.csv b/examples/csv/testdata/100.csv similarity index 100% rename from examples/csv/data/100.csv rename to examples/csv/testdata/100.csv diff --git a/examples/csv/data/2045.csv b/examples/csv/testdata/2045.csv similarity index 100% rename from examples/csv/data/2045.csv rename to examples/csv/testdata/2045.csv diff --git a/examples/csv/data/yn.json b/examples/csv/testdata/yn.json similarity index 100% rename from examples/csv/data/yn.json rename to examples/csv/testdata/yn.json diff --git a/examples/tinygo/main.go b/examples/tinygo/main.go index bea0cbf..f51cd87 100644 --- a/examples/tinygo/main.go +++ b/examples/tinygo/main.go @@ -1 +1,1843 @@ -package tinygo +package main + +import ( + "github.com/liuvigongzuoshi/go-kriging/ordinarykriging" +) + +// tinygo build -o kriging.wasm -opt z -heap-size 2048M -target wasm ./main.go + +func main() { + println("Instantiate, Kriging WebAssembly from TinyGo! v0.0.4") +} + +//export OrdinaryKrigingFunc +func OrdinaryKrigingFunc() int { + //done := make(chan *ordinary.GridMatrices, 0) + values := []float64{9.6, 5.3, 10.2, 5.4, 12.8, 7.5, 10.5, 18.7, 9.4, 12.4, 13, 10.8, 12, 13.2, 17.5, 14.1, 12.9, 10, 13.1, 10.7, 5.7, 10.4, 8, 10.3, 11, 11.8, 4.7, 11.7, 15.8, 5.3, 10.6, 16.4, 12.9, 12.2, 6.4, 10.6, 12.3, 11.2, 8.9, 17.5, 13.2, 10.7, 10.4, 12.6, 8.1, 6.7, 13, 14.6, 8.1, 8.4, 9.6, 8.5, 5.7, 11.4, 15.8, 10.9, 8, 14.7, 15.5, 11.7, 15.7, 9.9, 12.2, 17.9, 9.5, 16.6, 10.1, 10.1, 12.3, 15.3, 11.3, 14.5, 5.5, 15.4, 10.7, 18.9, 15.5, 13.7, 11.9, 16.3, 14.7, 14.8, 15.1, 20.4, 11.3, 12.1, 9.7, 13.1, 3.6, 11.9, 5.6, 14.4, 12, 13.1, 8.9, 6.7, 9.8, 11.7, 12.1, 15.4, 8, 12.3, 14.2, 13.4, 9.4, 0.6, 13.2, 11.6, 15.3, 12, 15.5, 8.9, 18.9, 13.3, 3.8, 12.5, 10.8, 15.5, 9, 12.8, 12.7, 11.3, 11.8, 12.2, 11.2, 12.2, 19.6, 10.9, 16.1, 9.5, 18.9, 10.9, 13, 13.6, 11.4, 17.5, 12, 13.7, 10.1, 17, 9, 10.9, 12.4, 11.7, 4.9, 12.9, 5.6, 8.6, 8.4, 9.4, 6.5, 9.7, 5.5, 12.6, 13.2, 13.6, 6.2, 9.9, 12, 6.6, 8.9, 18.5, 10.8, 14.6, 8.1, 10.4, 15.6, 9.5, 9.2, 15.6, 13.7, 11.3, 13.4, 11.8, 9.8, 14.5, 9.6, 10.4, 13.3, 9.7, 12.8, 6.9, 7.3, 8.6, 18.4, 6.1, 20.5, 17.1, 11.8, 9.2, 9.9, 9.8, 5.6, 9.8, 19.8, 11.2, 13.1, 12.4, 9, 13, 8.9, 7.7, 14.9, 16.1, 9.9, 7.4, 11.6, 13.5, 2, 4.5, 15.7, 8.7, 9, 13.7, 14.6, 11, 13.3, 8.9, 17.9, 11.6, 15.8, 20.4, 14.8, 14, 10.9, 8.5, 10.5, 15.3, 10.9, 9.4, 13.1, 12.2, 10.3, 10.1, 19, 12, 11.2, 14.1, 11.2, 10.7, 9.4, 11.5, 8.3, 11.4, 6.7, 8.3, 12.7, 15, 17.3, 13.4, 13.8, 11.2, 13.2, 14.4, 10.8, 12.2, 14.7, 13.2, 9.7, 12.2, 12.6, 10.7, 10.3, 12.9, 7.2, 10.7, 13.6, 12.3, 16.6, 14.7, 16.6, 13.1, 8.5, 13.8, 13.4, 7.7, 12.8, 7, 8.5, 16.7, 11, 9.5, 12.2, 8.5, 11.9, 17.8, 11.9, 12, 10, 9.4, 18.3, 20.2, 13.9, 13.2, 10, 6.5, 10.8, 9.4, 8, 9.2, 10.4, 14.2, 10.3, 13.7, 15, 13.9, 3.9, 14, 11.5, 13.3, 12.5, 10.7, 10.8, 15.7, 11.9, 7.6, 9.9, 5.5, 11.2, 14.4, 11.4, 8, 13.8, 9.5, 8.8, 12, 10.5, 7.9, 10, 14.3, 15.1, 11.8, 13.9, 14.7, 10.6, 5, 16.1, 11.1, 10.9, 12.2, 13, 13.5, 11, 10, 8.1, 12.1, 10, 15.1, 13.6, 14.8, 15.3, 12.1, 16.6, 11.3, 14.2, 9.7, 12.1, 7.9, 15.3, 10.9, 15.4, 18.1, 12.3, 10.8, 14.2, 11.2, 19.6, 6, 13.1, 19.1, 10, 15.3, 11.2, 12.4, 12.8, 18.6, 11.7, 12.3, 13.5, 10.4, 11.5, 8.9, 9, 11.9, 11.8, 12.1, 15.1, 9.7, 4.4, 10.8, 12.6, 16.8, 11.4, 12, 11.9, 8.1, 6, 10.2, 13.4, 11.1, 9.3, 11.4, 7.8, 12.5, 11.5, 7.9, 8.1, 10.2, 11.3, 12.8, 12.6, 11.3, 12.4, 10.6, 9.3, 4.5, 13.4, 10.1, 10.4, 13.6, 14.6, 10.4, 19.3, 4.5, 11.5, 12, 11.4, 15.5, 10.9, 10.9, 1.1, 11.4, 11.3, 6.1, 5, 16.8, 15, 7.5, 16.6, 2.5, 12.4, 6.7, 12.8, 5, 10.2, 9.9, 13.4, 12.7, 14.8, 10, 13.9, 7, 18, 8.9, 8.9, 14.9, 2.8, 18, 10.1, 11.7, 10.9, 10.3, 5, 10, 9.8, 9.9, 12.2, 8.1, 11.8, 10.6, 11, 14.8, 11.1, 14.5, 11.8, 13.7, 11.1, 13.8, 11.4, 18.2, 6.1, -3.9, 12.7, 10.2, 9.5, 9.6, 17, 10.4, 8.8, 11.1, 10.1, 12.7, 16.4, 14.3, 9, 14.3, 9.3, 11.6, 11.5, 10.6, 13.4, 10.8, 13.2, 13.7, 9.9, 18.2, 13.1, 8.5, 12.2, 10.8, 10.3, 11.2, 6.4, 11.2, 4.9, 10.4, 3.1, 19.4, 8.4, 14, 10.9, 11.6, 8.1, 12.8, 11.6, 9.5, 17.8, 9.6, 13, 8.5, 8.7, 12.9, 13.5, 11.9, 16.2, 13.9, 10.2, 12.2, 18.2, 13, 12.4, 6, 10.6, 3.2, 14.6, 10.1, 7.3, 10.9, 10.6, 15, 9.1, 10.8, 14.5, 10.8, 16.1, 11.7, 9.3, 9.3, 8.8, 7, 13.9, 10, 10.2, 13.8, 12.6, 7.8, 14, -4, 17.1, 12, 11.5, 12.6, 8.5, 6.5, 15.1, 13.7, 9.2, 11, 12.8, 10.7, 10.5, 10.7, 9.7, 8.3, 15.6, 17.6, 15.4, 8.6, 9.4, 10.6, 11.8, 12.6, 11.2, 15.4, 9.5, 10.8, 10.4, 14.8, 9.8, 8.3, 7.8, 11.1, 3.7, 18.2, 13.7, 14.7, 8.6, 10.3, 12.1, 13, 13.3, 9.7, 10.8, 13.3, 8.9, 9.2, 3.8, 10.1, 10.5, -0.3, 5.4, 14.5, 12.3, 14.7, 8.9, 13.2, 16.5, 11.2, 12.6, 12.1, 14.6, 9, 13.9, 8, 10.7, 10.8, 11.5, 6.7, 9.8, 8.6, 8.9, 9.3, 8.3, 10.3, 13.8, 13.4, 10.9, 17.9, 10.5, 9.4, 16.9, 18.5, 14, 16.9, 13.9, 10.4, 12.5, 13.3, 17.7, 13.4, 10.6, 10.5, 15.7, 8.9, 11.8, 9.5, 12, 6.6, 11.1, 9.6, 9.3, 8.9, 13.9, 15.3, 17.4, 6.1, 10.5, 14.3, 10.3, 8.5, 8, 14.1, 8.1, 11.6, 10.7, 7.1, 12.1, 11.3, 17.9, 12.8, 12.6, 11.4, 3.4, 8.9, 10.9, 12.5, 12.4, 14.1, 10.8, 11.6, 12.1, 8.1, 7.1, 11.6, 5.2, 15, 10.6, 10.5, 4.7, 9.8, 12.7, 3.9, 13.8, 10.5, 11.7, 10.6, 11.3, 9.8, 10.1, 13.2, 11.9, 16.5, 9.2, 12.3, 7.8, 9.6, 11, 17.9, 7.3, 9.7, 8, 12.8, 15.8, 10.8, 15.7, 13.7, 10.6, 8.2, 10, 11.2, 12.8, 10.6, 10.7, 11.7, 12, 10.8, 15.6, 5.3, 13.6, 20.7, 11.6, 6.6, 12, 2.9, 11.3, 14.4, 10.3, 7.9, 14.8, 11.5, 15, 15.5, 9, 13.5, 10.5, 8.7, 10, 15.2, 11.3, 18, 11.7, -3.2, 12.8, 13.7, 11.6, 10, 9.9, 10.9, 12.6, 9.8, 10.8, 11.9, 4.6, 9.6, 13.4, 13.6, 11.3, 10.6, 17.9, 7.9, 14.7, 12, 13.5, 15.2, 8.5, 11.3, 15.6, 13.1, 14.5, 11, 14.7, 10, 6.4, 8.9, 13.1, 18.6, 13.6, 12.1, 3.9, 4.2, 12.9, 9.6, 11.9, 11.3, 15.1, 14.8, 20.6, 13.6, 9.2, 12, 12.5, 15.2, 7.8, 16.3, 11.6, 10.1, 11.7, 10.6, 13.6, 9.7, 4.3, 14.3, 12.6, 10.3, 10.7, 7.6, 7.6, 15.1, 14.7, 11.5, 15.7, 17.1, 5.2, 6.1, 15.1, 10.6, 10.6, 16.6, 11, 15.5, 7.7, 13.8, 7.8, 13.6, 15.2, 13.3, 3.9, 9.7, 16.2, 13.6, 13.1, 10, 11.3, 14.3, 11.4, 15.5, 4.4, 10.8, 14.1, 3.9, 7.9, 14.5, 8.3, 12.6, 13.4, 10.4, 12.3, 9.7, 8.9, 9.4, 13.6, 7.3, 9.9, 17.1, 14.6, 6.9, 11.3, 3.4, 9, 14.9, 10.7, 10.3, 11.9, 0.5, 13.2, 9.1, 5.9, 8.4, 15.5, 7.5, 14.4, 2.5, 13.5, 14.7, 21.2, 14.4, 11.5, 11.7, 17.3, 11.3, 9.5, 12.5, 12.1, 12.8, 9.9, 11.3, 10, 15.1, 19.3, 7.5, 9.3, 12.8, 14.8, 8.4, 12.2, 15.5, 7.9, 14, 12.6, 8.7, 13.1, 14.7, 11.5, 16.9, 13.4, 12.7, 10.5, 16.5, 13.2, 11.8, 5.8, 7, 14.3, 12.4, 11.9, 16, 11.3, 16.7, 13, 13.2, 10.7, 9.5, 17.6, 7.6, 20.2, 7.7, 9.9, 8.5, 8, 5.4, 11.1, 11.2, 19.6, 13.6, 13.2, 14.8, 11.5, 18.7, 11.7, 12.1, 12.3, 12.9, 13.7, 11, 14.4, 3.9, 14.4, 12, 14.5, 12.5, 8.7, 11.6, 13.7, 7, 11.1, 20.2, 13.1, 13.7, 15.2, 11, 10.2, 16, 14.2, 7.7, 15.4, 10.7, 6.8, 7.8, 13.6, 11.4, 14.5, 6.7, 8.3, 8.6, 12.7, 9.8, 0.8, 9, 12.1, 15.8, 10.7, 12.6, 6.4, 10, 9.5, 16.7, 12.5, 3, 3.9, 11.7, 15.1, 14.1, 15.5, 10.5, 9.4, 10.7, 14.7, 9.1, 7, 10.1, 13.1, 9.5, 8.8, 14.3, 9.5, 10.2, 7.6, 7.2, 11.6, 12.2, 9.9, 12.4, 20.8, 11.5, 12, 10.9, 10.1, 13.5, 9.9, 15.3, 9, 12, 12.5, 14.6, 10.8, 12.7, 14.3, 9.2, 6.2, 14.2, 14.4, 10.9, 9.4, 12.5, 12.9, 14.7, 11.4, 10.6, 15.1, 14.2, 11.5, 13.6, 10.1, 11.3, 11.7, 9.7, 11.3, 14.1, 13.4, 10.5, 14.2, 9.3, 11.7, 9, 12.4, 10.9, 6.6, 14.9, 20, 11.2, 12.7, 12.8, 9, 12.1, 13.5, 5.9, 8.5, 6.6, 11, 13.4, 8.7, 5.4, 12, 12.7, 9.4, 8.7, 3.7, 14.5, 15, 13.6, 13.3, 14.3, 8.7, 9, 12.8, 12.1, 11.7, 7.7, 10, 10, 7.4, 15.1, 17.1, 11.2, 16.4, 15.4, 15.1, 13.8, 6.4, 22.7, 18.4, 7.5, 13, 13, 15.9, 8, 15.1, 15.8, 14.9, 17.6, 9.7, 13.3, 15.2, 18.3, 12.5, 16.4, 10.4, 9.4, 13.2, 13.3, 14.4, 20.8, 10.5, 19.8, 15.5, 11.5, 12.6, 9.5, 12.2, 9, 10.6, 11.2, 10.3, 10.3, 7, 7.1, 9.5, 14.8, 11.1, 7.3, 14.6, 20, 12.5, 9.8, 9.4, 8, 20.1, 13.2, 14.5, 21.2, 10.9, 13.3, 7.8, 11.1, 9.7, 10.2, 10.6, 11.8, 17.4, 13.4, 13.1, 14.1, 11.7, 13.6, 13, 11.5, 11.4, 10.7, 12.5, 13, 11.7, 12.5, 13.7, 16, 14.9, 12.2, 11.3, 12.3, 13, 16, 14.4, 9.8, 13.7, 8.9, 13.7, 16.3, 12, 12.4, 14.7, 9.8, 10.1, 13.4, 5.6, 12.4, 9.8, 15.2, 10.9, 11.9, 13, 10.4, 17.8, 13.5, 13.2, 14.5, 6.7, 15.1, 10.6, 12.7, 6.9, 15, 18.9, 14.4, 7.9, 11, 14, 11.8, 7.6, 13.6, 10.5, 11.1, 14.6, 18.3, 5.4, 8, 13.7, 7.2, 13.5, 12.2, 9.9, 11, 10.3, 13.2, 15.7, 9.3, 15.2, 8.6, 9.3, 12.3, 8.2, 13.9, 7, 14.6, 17.5, 15.1, 16.7, 7.3, 14.9, 12.5, 16.5, 11.3, 16.3, 11.5, 18.5, 7.2, 8.4, 7.7, 8.5, 11.5, 9.9, 16.4, 10.7, 10.1, 9.1, 12.5, 14.4, 15.4, 4.6, 9.4, 14, 6.4, 0, 14.2, 9.9, 4.6, 16.4, 12.9, 10.8, 12.8, 12.7, 6.1, 13.6, 6.8, 7.8, 11.4, 7.7, 5.9, 10.1, 5.3, 10.4, 10.1, 5.7, 8.3, 11.2, 4.9, 8.8, 11.8, 13.3, 13.9, 11.6, 14.6, 11.7, -0.9, 13.8, 11.8, 13.4, 12.9, 12.6, 19, 13, 17.2, 11.5, 7.6, 8.7, 16.3, 7.5, 7.6, 12.2, 4.9, 15.4, 12.1, 14.1, 13.2, 4.5, 15, 14, 11.2, 8.8, 17.8, 4.2, 19.8, -1.8, 15.2, 4, 12.4, 9.7, 9.9, 13, -1.6, 13.7, 13.7, 11.9, 13.7, 13.4, 13, 11.4, 16.1, 13.3, 15.2, 14.9, 11.9, 5, 12.8, 4.1, 11.7, 11.6, 6, 9.7, 15.8, 11.1, 10.2, 11.3, 10.5, 16.8, 13.1, 8.7, 7.1, 12, 12.1, 12.7, 11.4, 17.3, 12.6, 15.6, 12.2, 15.7, 10.6, 13.2, 13.8, 7.8, 9.3, 5.9, 2.6, 15.4, 10.5, 11.5, 18.3, 11.4, 12.1, 12.8, 9.8, 5.4, 13.4, 13.1, 7.3, 7.8, 9.6, 2.3, 19.1, 10.2, 13.8, 16.2, 10.8, 7.9, 10.5, 10.1, 6.7, 8.9, 5.9, 9.1, 10.9, 12.6, 16.7, 9.8, 18.5, 13.1, 11.7, 6.2, 6.5, 3.7, 10.3, 15, 13.5, 10.6, 11.1, 6.3, 9.7, 13.3, 11.4, 12.3, 14.7, 8.1, 15.8, 6.8, 10, 8.2, 13.9, 12.2, 13.3, 10.5, 11.8, 13.1, 12.8, 9.6, 11.2, 14, 7.7, 12.9, 10.2, 9.9, 7.9, 16.3, 9.7, 11.7, 15.6, 10.7, 10.6, 9.2, 9.2, 7.1, 11.2, 15.2, 14.6, 11, 9.3, 10.1, 17.8, 19, 8.3, 8.5, 13.7, 10.9, 14.2, 16.1, 19.1, 3, 11.6, 19.3, 12.4, 12.3, 11.8, 10.5, 7.8, 12.8, 10.1, 14.6, 16.5, 12.6, 13, 13.5, 12.4, 10.6, 15.8, 9.7, 13.5, 16.9, 8, 10.2, 11.6, 7, 6.8, 11.8, 11.6, 9.1, 9.8, 14.4, 10.5, 11, 8, 15.2, 16.6, 13.8, 12.8, 16.2, 8.2, 9.2, 8.8, 16, 12, 7.5, 12.1, 21.1, 12.8, 16.1, 12.6, 13.3, 9.7, 15.1, 8.7, 17.7, 13.2, 13.7, 10.7, 8.2, 19.2, 10.7, 14.8, 13, 11.9, 14.5, 10.8, 14.9, 6, 13.4, 15.7, 15.1, 10.4, 16.8, 9.7, 12.8, 16.3, 10.8, 8.5, 12.2, 11.7, 11.4, 10.7, 16.9, 9.2, 16.4, 7, 13.8, 13.5, 15.5, 10.3, 10, 8.4, 12.5, 13.4, 8.4, 13, 10.2, 10.8, 14.1, 14.1, 19.3, 10.6, 11.9, 12.1, 10.1, 10.9, 10, 5.4, 12, 21.2, 13.2, 19.5, 13.6, 11, 10.7, 13.5, 10.9, 9.5, 11.8, 11.8, -7.8, 10.5, 13.6, 9.9, 8.2, 12.7, 14.5, 9.8, 6.2, 10.4, 11.9, 12.6, 12.9, 8.3, 18.6, 14.3, 18.8, 9.1, 11.1, 13.9, 11.1, 10.8, 14.2, 11.5, 15.9, 9.8, 13, 13.8, 12.2, 12.1, 10.6, 9.2, 7.8, 6.7, 10.4, 0, 12, 11.4, 10.8, 7.7, 12.4, 9.9, 12.2, 7.7, 9.1, 11.2, 9.1, 21, 12.7, 12.1, 12.3, 11.1, 10.4, 10.9, 14.6, 13.4, 11.4, 12.6, 3.3, 12.2, 7.7, 10.5, 9.3, 15.7, 12, 19.4, 18.3, 10.3, 15.9, 12, 13.3, 11.6, 10.9, 10, 12.6, 11.2, 9.2, 16.3, 13.9, 15.6, 7.7, 6.9, 13.3, 14.3, 10.2, 15.6, 17.6, 10.5, 9.6, 7, 11.9, 12.6, 11.6, 11.3, 15.5, 8.6, 9.9, 4.3, 8.5, 11.5, 15.8, 16.3, 14.2, 7.5, 10.1, 13.2, 9, 9.7, 9.9, 14.9, 2.6, 8.3, 2.7, 10.3, 12.1, 11.9, 4.6, 9.8, 12.2, 12.8, 11.9, 11.5, 12.7, 13.7, 11.5, 16, 6.5, 11.3, 16.4, 7.8, 9.5, 5.9, -1.9, 8.4, 5.2, 9.5, 10.9, 17.6, 9.7, 10.2, 8.6, 8.1, 9.9, 7.3, 15.4, 12, 10.8, 10.1, 15.6, 3.1, 13.8, 12.7, 13.4, 9.5, 9, 9.5, 8.9, 9.4, 11.7, 8.4, 13.5, 8.1, 12.5, 14.7, 13.3, 14.2, 15.6, 13.9, 15.6, 14.3, 16.5, 10.8, 9.7, 9.2, 13.7, 8.4, 14.7, 11.6, 13.4, 13.1, 3.4, 11.1, 14.2, 12, 11, 14, 12.7, 15, 12.3, 13.2, 7.9, 10.5, 9.7, 10.6, 8.4, 8.5, 20.2, 9.9, 10.1, 10.3, 21.6, 9.7, 13.9, 11, 10.6, 6.6, 19.8, 8.6, 12.4, 6.9, 10.3, 6.9, 13.7, 14.2, 7.1, 15.5, 6, 16.1, 12.4, 12.6, 8.3, 18.2, 14.3, 9.6, 9.5, 6.3, 6, 11.8, 11.5, 15.2, 13.6, 12.3, 10.3, 3.6, 12.6, 11.3, 11.5, 16.6, 9.9, 13.1, 9.8, 17, 7.4, 15.7, 10.8, 11.7, 8.8, 14.3, 4.5, 12.1, 9.8, 8.9, 4.7, 9.2, 14.3, 15.2, 8.8, 9, 16.9, 3.6, 9.8, 8.1, 9.8, 16.6, 11.2, 13.9, 9.2, 13.3, 12.2, 15, 9.3, 11.2, 9.3, 4, 8.7, 15.5, 12.3, 18.5, 8.3, 15.3, 15, 12.2, 8.6, 9.4, 4, 10.5, 12.8, 12.3, 10.8, 14.9, 17.9, 13.9, 9.4, 15.4, 15.3, 7.3, 11.7, 13.6, 12.1, 12, 13.3, 11, 13, 16.7, 19.9, 13.2, 18.3, 15.1, 5.9, 12.7, 17.7, 8.6, 12.8, 11.1, 8, 8.3, 9, -2.5, 14.6, 11.8, 8.9, 12.3, 10.4, 10.3, 12, 12.7, 7.8, 4.2, 8.8, 14.8, 12.1, 11.8, 13.8, 10.8, 7.6, 11.4, 11, 6.4, 13.4, 8.8, 10.4, 13.1, 4.3, 12.7, 10.3, 12.8, 9.9, 12.3, 12.4, 9.4, 12, 11.1, 17.1, 10.7, 11.4, 11, 10.7, 9.5, 11.7, 8.5, 15.3, 11.4, 8.9, 18.9, 9.5, 20.4, 10.8, 10.3, 10.2, 9.7, 12.3, 15.9, 9, 6.8, 11.6, 10.8, 13.4, 8.7, 13.5, 12.3, 11.4, 9.5, 12.4, 12.8, 12.5, 8.3, 11, 10.3, 10.6, 8.7, 18.6, 5.9, 14.7, 4.1, 11.2, 11, 10.4, 16.5, 9, 9.1, 13.1, 11, 5.5, 12.3, 6.7, 7.8, 12.1, 8.8, 18.7, 13.1, 10.7, 11.3, 12.1, 13.7, 20.8, 10, 12.7, 15.2, 6.8, 11.3, 9.6} + lons := []float64{102.68, 102.88, 99.36, 101.23, 102.98, 98.3, 104.25, 102.75, 103.4, 100.19, 97.92, 99.43, 100.65, 100.59, 102.93, 101.59, 105.07, 104.41, 103.38, 103.76, 102.64, 98.38, 102.53, 101.6, 101.64, 100.85, 104.82, 103.68, 99.8, 99.45, 100.06, 101.62, 102.74, 101.27, 103.52, 103.26, 102.67, 99.18, 101.99, 100.65, 104.78, 103.66, 102.45, 102.78, 100.18, 102.47, 100.52, 103.98, 103.7, 101.08, 101.99, 103, 98.59, 104.25, 99.58, 100.1, 99.8, 97.78, 100.28, 101.19, 99.93, 100.6, 100.43, 102.99, 102.85, 100.77, 97.77, 100.46, 101.64, 102.57, 100.42, 99.46, 104.37, 104.31, 99.8, 102.69, 105.51, 102.07, 101.73, 101.88, 99.48, 99.46, 105.07, 101.22, 101.83, 99.8, 102.2, 101.15, 100.8, 102.83, 103.97, 103.05, 102.86, 102.12, 98.49, 100.03, 103.63, 99.57, 102.01, 103.1, 102.92, 102.99, 103.96, 100.38, 101.15, 99.5, 100.35, 103.39, 101.45, 103.32, 102.28, 102.39, 100.9, 100.17, 103.59, 103.77, 102.58, 100.27, 103.67, 103.4, 103.6, 101.95, 102.19, 99.61, 102.75, 102.76, 102.09, 99.55, 102.83, 104.01, 100.77, 98.4, 98.37, 100.87, 102.76, 100.41, 102.98, 104.01, 104.35, 101.63, 102.3, 103.89, 102.52, 101.19, 104.99, 102.74, 99.55, 102.15, 100.16, 103.85, 98.87, 103.33, 100.79, 102.77, 98.91, 100.42, 99.68, 99.07, 101.04, 103.59, 102.32, 104.89, 99.89, 104.52, 100.38, 103.6, 99.38, 102.48, 101.48, 101.01, 97.63, 104.08, 100.08, 100.85, 100.13, 97.71, 102.36, 101.69, 99.63, 103.4, 100.32, 98.7, 100.33, 103.08, 101.87, 99.43, 100.93, 101, 103.75, 102.32, 101.1, 103.35, 99.38, 102.87, 101.67, 99.32, 102.83, 98.88, 102.56, 100.32, 102.03, 99.33, 101.87, 101.52, 102.31, 101.08, 101.02, 99.47, 99.08, 99.12, 100.94, 102.91, 100.3, 98.4, 98.18, 103.82, 102.53, 102.52, 100.57, 100.94, 99.26, 104.84, 98.05, 102.58, 103.01, 103.47, 104.15, 104.7, 103.38, 98.51, 102.75, 101.82, 103.47, 98.25, 101.25, 102.69, 99.71, 99.41, 103.82, 100.58, 100.95, 102.79, 102.77, 102.83, 102.97, 103.62, 104.69, 99.47, 103.29, 99.36, 101.15, 103.26, 103.53, 97.8, 100.86, 102.75, 102.37, 103.26, 102.35, 99.18, 100.51, 103.72, 99.33, 100.59, 103.66, 103.43, 103.27, 102.75, 100.45, 100.57, 103.41, 97.8, 103.19, 102.44, 99.73, 104.44, 103.05, 102.29, 100.18, 104.24, 103.8, 102.86, 104.53, 100.12, 99.93, 105.47, 102.07, 100.66, 102.79, 103.1, 101.58, 101.97, 100.05, 103.23, 102.66, 99.56, 103.35, 103.11, 101.15, 103.13, 100.75, 99.47, 102.36, 102.79, 100.25, 103.68, 100.64, 101.15, 99.95, 101.39, 103.8, 103.15, 102.55, 103.25, 101.91, 98.67, 98.89, 98.55, 102.95, 103.64, 104.24, 99.69, 101.96, 102.64, 104.4, 102.77, 103.44, 99.76, 103.66, 102.92, 103.33, 104.45, 99.85, 99.8, 103.07, 105.21, 102.51, 100, 103.88, 102.67, 97.88, 99.56, 104.08, 101.53, 100.43, 102.25, 102.66, 104.3, 103.54, 102.5, 99.64, 102.16, 101.75, 103.33, 102.63, 101.72, 103.35, 100.45, 105.27, 98.67, 99.54, 101.11, 100.66, 102.66, 102.33, 100.64, 101.31, 99.91, 103.72, 100.72, 98.89, 104.4, 101.08, 101.15, 100.03, 101.78, 103.87, 100.25, 101.42, 103.68, 102.26, 103.56, 104.23, 103.67, 103.85, 102.7, 105.61, 99.7, 100.83, 101.57, 99.23, 101.52, 103.87, 101.66, 102.65, 99.95, 100.49, 100.07, 102.92, 101.77, 102.34, 99.23, 103.21, 102.64, 102.79, 102.84, 102.39, 104.24, 100, 102.71, 99.56, 98.57, 102.73, 102.31, 102.94, 99.41, 97.78, 101.38, 103.42, 101.96, 99.02, 103.83, 101.3, 99.38, 102.06, 100.71, 103.15, 101.93, 102.8, 102.21, 100.04, 100.1, 100.53, 99.67, 105.05, 105.58, 99.67, 102.98, 100.47, 99.51, 103.6, 99.81, 104.26, 100.91, 99.92, 98.87, 102.57, 100.62, 102.42, 103.61, 103.21, 99.95, 101.31, 102.54, 103.07, 100.56, 99.46, 100.63, 100.1, 100.77, 101.99, 98.67, 103.74, 103.43, 104.39, 102.09, 104.31, 103.78, 102.89, 102.53, 100.62, 103.07, 103.38, 100.73, 99.39, 103.14, 103.9, 97.85, 104.37, 100.91, 102.92, 99.13, 97.91, 100.66, 102.53, 103.26, 105.37, 102.46, 102.34, 103.04, 103.07, 103.15, 105.59, 97.65, 103.02, 103.53, 103.96, 101.47, 98.42, 103.13, 103.95, 98, 100.86, 101.64, 102.57, 101.88, 105.16, 103.05, 103.6, 100.73, 100.11, 100.99, 103.84, 103.44, 104.89, 102.84, 99.23, 102.8, 100.54, 100.78, 103.33, 103.05, 102.77, 103.77, 104, 104.09, 102.43, 102.86, 102.91, 102.86, 100.06, 104.5, 99.85, 98.14, 101.75, 101.77, 104.07, 104.39, 103.17, 100.64, 102.17, 105.05, 104.14, 104.51, 104.05, 102.31, 100.22, 102.71, 102.27, 100.16, 101.26, 102.57, 99.64, 102.67, 103.61, 103.72, 102.74, 100.73, 102.62, 99.83, 98.89, 100.7, 100.76, 103.13, 102.71, 102.16, 103.13, 99.93, 101.92, 100.16, 103.14, 102.75, 103.6, 98.99, 104.63, 100.49, 103.72, 103.98, 104.5, 102.46, 102.98, 104.26, 102.33, 102.29, 100.05, 105.63, 101.87, 100.89, 100.9, 102.29, 102.61, 102.69, 101, 104.93, 99.7, 103.83, 101.52, 99.7, 98.9, 99.96, 100.79, 103.55, 104.06, 100.68, 99.97, 104.8, 102.35, 103.35, 99.68, 100, 101.95, 100.11, 103.17, 99.36, 102.43, 102.11, 105.14, 103.42, 103.11, 100.24, 100.14, 104.58, 102.55, 103.13, 102.37, 99.81, 103.34, 101.41, 102.75, 101.2, 100.48, 99.21, 100.15, 102.44, 104.3, 99.92, 104.35, 99.2, 101.04, 99.37, 101.91, 100.79, 99.13, 102.11, 101.05, 104.58, 102.77, 101.33, 100.25, 104, 101.57, 101.34, 104.18, 105.9, 102.23, 99.67, 100.65, 101.68, 103.88, 100.07, 103.26, 98.44, 104.12, 102.97, 103.34, 102.45, 102.74, 103.08, 100.8, 98.56, 100.44, 103.99, 102.59, 103, 101.94, 99.3, 100.03, 101.48, 102.99, 102.86, 98.52, 98.04, 100.14, 99.94, 100.95, 104.97, 100.79, 102.66, 101.71, 99.78, 103.02, 103.64, 104.47, 102.91, 100.28, 101.12, 103.06, 101.51, 103.6, 102.73, 100.75, 102.29, 103.34, 102.22, 103.75, 97.75, 101.56, 104.12, 99.26, 102.54, 103.6, 99.8, 102.84, 103.25, 103.28, 100.06, 103.85, 102.54, 102.93, 100.07, 103.47, 103.25, 102.33, 104.06, 102.42, 101.21, 100.65, 103.25, 101.06, 101.28, 102.58, 98.3, 101.85, 102.05, 104.9, 102.94, 102.23, 97.94, 101.54, 103.26, 100.52, 104.15, 102.06, 103.82, 100.12, 104.41, 99.13, 104.18, 98.89, 103.62, 100.56, 104.11, 104.09, 100.98, 103.22, 104.2, 101.54, 104.73, 102.71, 100.99, 100.85, 104.27, 103.02, 99.97, 103.51, 100.75, 102.44, 102.47, 103.62, 106.04, 104.57, 99.73, 103.18, 103.51, 100.05, 102.58, 98.98, 103.19, 101.23, 100.69, 103.86, 103.13, 104.84, 102.69, 98.87, 104.4, 100.05, 103.39, 103.25, 99.25, 101.16, 104.61, 101.86, 101.86, 102.51, 102.39, 103.39, 103.25, 99.03, 102.57, 99.44, 101.24, 102.94, 100.07, 103.48, 102.25, 102.48, 104.36, 104.85, 104.07, 102.7, 102.19, 103.29, 102.47, 99.68, 102.12, 100.67, 104.8, 102.84, 102.18, 102.66, 101.79, 103.05, 103.32, 102.56, 103.23, 103.4, 98.45, 101.07, 101.47, 105.26, 98.04, 102.91, 99.99, 99.91, 105.1, 99.14, 104.48, 98.58, 103.4, 99.08, 97.56, 104.87, 98.45, 103.04, 103.03, 98.9, 103.43, 100.4, 98.85, 98.77, 104.68, 97.93, 103.05, 102.03, 102, 103.15, 101.51, 99.61, 102.18, 103.15, 102.54, 103.09, 98.31, 102.99, 101.86, 100.66, 103.91, 102.47, 99.84, 101.08, 100.27, 102.85, 98.26, 103.23, 102.95, 102.7, 103.46, 99.15, 98.72, 104.8, 102.45, 100.59, 101.51, 101, 99.05, 103.05, 103.77, 102.21, 102.2, 99.88, 104.22, 102.76, 103.26, 100.89, 102.57, 99.43, 102.41, 103.45, 99.43, 101.25, 102.71, 103.19, 101.8, 103.89, 99.42, 103.52, 100.47, 101.72, 104.36, 100.11, 99.51, 100.92, 104.03, 102.45, 102.51, 102.48, 99.23, 103.43, 105.17, 98.82, 101.82, 104.1, 101.22, 98.4, 99.45, 102.08, 104.32, 99.64, 103, 100.76, 102.18, 98.67, 103.4, 102.55, 102.66, 103.28, 101.37, 100.24, 102.18, 103.1, 99.65, 104.66, 102.79, 103.52, 100.59, 102.84, 105.97, 100.68, 104.37, 103.53, 99.52, 101.65, 101.25, 103.74, 101.01, 98.4, 103.08, 103.91, 100.15, 102.42, 100.67, 101.22, 105.17, 102.79, 104.28, 102.5, 100.86, 98.9, 99.23, 102.29, 102.72, 104.03, 104.46, 104.28, 99.53, 100.07, 102.69, 103.95, 101.36, 99.37, 102.71, 100.18, 100.75, 104.07, 101.76, 99.29, 101.38, 99.65, 103.01, 103.02, 101.9, 98.82, 99.23, 100.24, 103.21, 99.03, 100.19, 103.58, 102.63, 100.69, 99.1, 100.9, 102.99, 101.92, 102.69, 98.77, 102.92, 100.22, 101.29, 102.61, 103.15, 98.92, 102.7, 102.79, 101.89, 101.97, 103.93, 103.33, 99.94, 100.6, 102.42, 99.14, 102.6, 100.62, 101.32, 100.21, 101.14, 100.05, 100.4, 100.47, 99.93, 103.98, 103.12, 102.13, 100.79, 99.96, 100.22, 102.6, 104.8, 102.54, 102.23, 103.08, 102.88, 98.17, 102.74, 103.57, 103.08, 104.01, 101.58, 102.66, 103.39, 104.1, 103.95, 104.49, 99.64, 103.93, 102.88, 101.27, 100.58, 105.23, 102.54, 102.74, 101.67, 98.89, 98.32, 99.77, 100.08, 104.86, 103.78, 101.94, 100.44, 100.19, 103.57, 98.56, 102.66, 101.94, 104.48, 99.38, 99.93, 103.78, 102.76, 103.08, 103.05, 99.01, 102.78, 103.89, 97.85, 100.87, 99.41, 103.23, 100.54, 100.03, 102.23, 102.73, 103.44, 102.21, 100.2, 104.25, 99.88, 102.43, 103.59, 102.65, 101.47, 99.87, 102.87, 99.99, 100.16, 98.95, 99.88, 101.11, 104.29, 102.9, 103.61, 100.66, 102.41, 104.3, 99.66, 103.48, 103.25, 105.15, 102.16, 102.92, 104.01, 100.94, 100.66, 98.08, 100.36, 99.87, 102.12, 103.82, 99.99, 104.31, 104.29, 105.44, 101.39, 105.05, 102.08, 104.98, 101.43, 101.75, 101.67, 101.52, 101.72, 102.84, 100.41, 102.66, 100.22, 100.93, 102.43, 103.16, 103.16, 104.56, 106.08, 105.41, 102.57, 101.56, 99.16, 101.54, 103.02, 104.3, 102.77, 103.05, 100.26, 98.41, 99.45, 102.59, 99.41, 102.63, 102.59, 102.3, 101.13, 103.75, 102.27, 99.13, 97.69, 100.8, 102.73, 100.86, 102.82, 99.97, 100.43, 100.09, 103.84, 104.46, 100.05, 100.58, 104, 101.54, 98.9, 102.55, 100.33, 103.83, 100.49, 104.47, 98.44, 101.55, 102.55, 99.47, 102.74, 102.73, 102.75, 98.22, 101.99, 100.38, 101.08, 97.77, 103.8, 100.35, 99.33, 104.63, 101.18, 104.73, 102.93, 99.76, 103.12, 99.94, 100.73, 104.88, 102.93, 104.16, 100.15, 100.86, 102.77, 101.83, 102.82, 102.15, 102.2, 99.35, 101.63, 100.58, 101.97, 98.92, 103.4, 100.74, 102.33, 102.97, 102.69, 100.67, 101.87, 101.97, 101.05, 102.75, 104.51, 105.15, 102.8, 103.69, 104.04, 102.1, 103.13, 105.06, 100.21, 99.94, 102.8, 100.61, 102.97, 100.28, 102.59, 98.5, 102.77, 104.34, 100.82, 98.91, 101.36, 99.62, 102.85, 103.99, 101.57, 102.66, 97.97, 100.07, 104.64, 105.7, 104.18, 100.65, 98.5, 102.65, 102.76, 99.32, 99.29, 104.25, 99.62, 102, 99.15, 100.32, 101.24, 102.86, 99.74, 102.41, 102.67, 99.53, 103.2, 102.42, 102.5, 104.51, 103.13, 99.6, 103.49, 100.97, 103.54, 99.75, 104.34, 102.9, 105.12, 100.15, 103.2, 101.75, 103.42, 102.81, 105.19, 100.93, 99.13, 102.83, 104.28, 98.87, 100.23, 100.02, 104.87, 99.27, 103.81, 100.92, 102.84, 102.95, 104.65, 100.75, 99.9, 101.86, 99.43, 102.79, 103.32, 103.14, 99.81, 102.03, 101.71, 101.59, 100.54, 102.65, 101.3, 102.98, 104.68, 101.42, 100.18, 104.07, 104.22, 99.99, 98.34, 102.69, 104.62, 102.04, 104.31, 102.75, 102.72, 102.86, 99.68, 100.46, 103.46, 102.6, 100.13, 99.29, 100.78, 99.75, 100.01, 103.63, 102.77, 101.5, 102.43, 104.79, 99.77, 104.46, 99.41, 99.9, 99.08, 104.59, 102.97, 101.55, 103.73, 98.85, 104.54, 97.82, 103.36, 101, 98.87, 104.06, 103.07, 102.56, 102.95, 101.67, 104.71, 101.6, 99.15, 102.52, 102.75, 103.11, 101.44, 98.9, 99.08, 102.78, 103.67, 102.26, 101.76, 101.63, 103.07, 100.96, 102.71, 99.1, 100.2, 101.56, 102.89, 104.38, 103.21, 100.56, 99.96, 102.93, 102.98, 102.5, 100.9, 102.18, 101.36, 100.57, 99.55, 100.86, 99.48, 102.28, 99.65, 100.17, 101.82, 100.37, 102.19, 102.52, 99.07, 103.23, 103.65, 103.4, 102.88, 102.67, 102.93, 104.12, 104.96, 100.61, 102.57, 99.6, 104.9, 104.26, 101.28, 99.24, 99.94, 100.2, 99.31, 104.86, 102.63, 100.33, 99.13, 103.27, 102.5, 103.87, 99.53, 103, 102.63, 101.66, 99.78, 98.68, 98.94, 104.82, 103.95, 103.49, 102.06, 103.78, 102.81, 104.53, 103.11, 102.71, 102.74, 98.17, 104.31, 100.19, 99.44, 103.04, 102.63, 99.95, 101.01, 102.66, 103.55, 99.17, 99.74, 101.36, 98.69, 103.46, 100.19, 102.59, 103.46, 99.35, 102.15, 102.4, 101.46, 103.25, 101.48, 100.08, 102.52, 99.03, 98.21, 99.92, 97.75, 99.6, 100.89, 104.26, 103.7, 100.68, 104.3, 103.35, 100.6, 103.77, 99.93, 104.62, 103.5, 100.13, 101.47, 101.53, 102.72, 99.27, 102.76, 100.15, 104.28, 100.13, 103.04, 100.93, 100.33, 102.64, 103.95, 100.21, 103.58, 102.67, 102.75, 99.18, 98.39, 101.23, 100.04, 103.51, 103.65, 102.08, 104.97, 101, 102.69, 101.48, 99.17, 102.48, 102.85, 102.72, 104.11, 100.17, 102.82, 101.38, 100.54, 105.83, 101.64, 102.27, 100.21, 102.13, 103.62, 103.04, 104.71, 103.32, 102.5, 103.04, 101.26, 103.23, 100.72, 102.16, 100.65, 98.27, 99.18, 101.39, 99.51, 101.79, 104.51, 101.87, 100.88, 101.79, 102.36, 103.24, 99.97, 101.06, 102.78, 102.43, 103.04, 102.67, 102.72, 100.27, 102.31, 103.33, 103.2, 101.67, 98.85, 99.34, 102.63, 102.78, 101.34, 97.73, 100.83, 100.85, 104.32, 103.67, 98.22, 101.12, 102.12, 101.31, 103.56, 102.26, 102.84, 100.29, 102.5, 103.87, 104.96, 102.72, 103.56, 102.23, 101.02, 104.41, 103.12, 104.06, 104.72, 104.03, 100.5, 103.41, 103.06, 99.33, 100.73, 105.41, 101.68, 103.73, 100.52, 101.28, 98.93, 103.5, 102.67, 100.63, 98.19, 102.76, 102.8, 103.28, 104.42, 101.37, 103.14, 102.5, 102.18, 102.38, 100.5, 102.07, 99.07, 105.2, 100.32, 99.45, 98.28, 102.25, 103.85, 101.23, 102.87, 99.3, 98.66, 104.53, 102.7, 102.77, 100.04, 99.37, 103.74, 103.7, 102.47, 103.18, 103.25, 103.28, 103.08, 102.85, 100.63, 102.8, 102.74, 102.98, 102.5, 103.97, 102.62, 99.83, 102.06, 100.86, 105.45, 99.88, 104.9, 103.26, 99.77, 100.1, 102.78, 100.6, 100.74, 105.85, 102.3, 104.62, 104.53, 101.06, 101.32, 104.41, 103.17, 101.25, 101.54, 103.17, 104.81, 97.86, 99.2, 99.38, 103.36, 104.18, 101.33, 100.51, 100.89, 101.78, 100.22, 103.3, 102.31, 102.67, 98.35, 103.05, 102.59, 103.18, 103.01, 102.9, 102.7, 102.56, 102.06, 100.33, 103.2, 99.88, 100.2, 102.32, 101.2, 102.7, 104.33, 103.85, 101.15, 98.87, 98.67, 103.67, 101.2, 100.1, 104.24, 104.94, 98.87, 100.76, 102.7, 103.38, 98.9, 102.69, 99.45, 100.46, 102.74, 102.49, 103.06, 103.33, 98.82, 102.89, 99.03, 98.91, 102.19, 99, 98.52, 103.36, 101.51, 102.28, 103.34, 98.6, 98.78, 103.72, 103.05, 99.83, 103.06, 101.64, 99.13, 99.38, 104.62, 103.28, 105.04, 101.72, 100.13, 103.18, 102.49, 98.83, 100.14, 103.12, 100.05, 101.03, 103.72, 99.97, 103.55, 103.68, 103.45, 99.03, 104.58, 99.31, 104, 101.89, 102.56, 104.12, 101.57, 98.97, 102.79, 98.19, 102.5, 99.39, 102.92, 100.98, 102.66, 100.4, 102.99, 100.02, 100.48, 104.17, 101.58, 100.63, 103.18, 104.09, 99.12, 102.3, 104.16, 100.21, 103, 101.61, 101.55, 102.7, 103.59, 103.95, 100.16, 100.47, 102.47, 104.29, 101.59, 100.79, 102.97, 99.56, 103.86, 99.54, 103.86, 104.25, 100.52, 104.25, 102.47, 100.56, 103.3, 104.09, 102.03, 103.59, 102.67, 101.85, 101.29, 101.49, 99.27, 101.03, 102.83, 101.89, 103.72, 99.41, 100.74, 101.29, 105.24, 99.13, 103.1, 103.1, 101.05, 100.86, 101.19, 103.7, 101.52, 100.23, 99.36, 103.55, 100.72, 99.51, 99.58, 99.28, 104.21, 100.6, 103.43, 99.68, 103.7, 100.03, 100.17, 102.87, 103.81, 105.79, 99.35, 104.27, 101.99, 102.23, 101.91, 101.05, 101.18, 100.87, 103.09, 100.85, 100.47, 103.06, 103.37, 102.43, 101.17, 101.35, 100.6, 101.27, 99.2, 101.86, 101, 103.27, 99.79, 100.03, 102.8, 99.66, 102.93, 102.69, 102.72, 100.04, 100, 101.4, 103.14, 103.5, 101.98, 104.5, 98.63, 102.7, 101.05, 103.73, 102.72, 100.3, 102.76, 99.58, 103.16, 102.03, 101.02, 101.2, 102.87, 103.48, 101.17, 100.95, 98.83, 102.75, 103.08, 102.96, 103.73, 99.24, 102.85, 97.95, 102.68, 98.15, 100.5, 102.96, 101.32, 102.83, 102.68, 98.67, 105.02, 101.37, 102.31, 98.65, 104.68, 104.43, 103.17, 100.28, 102.67, 102.57, 99.85, 103.21, 103.65, 104.41, 103.38, 100.76, 102.66, 104.16, 102.72, 101.59, 101.49, 100.8, 100.34, 100.1, 103.69, 101.37, 103.07, 103.27, 100.3, 102.45, 103.58, 102.81, 104.17, 97.89, 101.96, 99.78, 102.84, 100.8, 101.95, 102.7, 99.18, 104.06, 103.85, 102.8, 102.4, 99.62, 102.45, 100.38, 103.3, 99.89, 101.22, 100.57, 100.68, 103.64, 99.94, 102.79, 102.74, 101.36, 102.89, 102.65, 99.27, 103.43, 102.68, 101.58, 100.72, 98.85, 103.89, 102.51, 100.45, 103.35, 101.06, 102.88, 100.52, 100.07, 102.5, 99.85, 101.96, 103.78, 102.42, 103.03, 105.05, 101.64, 102.71, 103.29, 103.86, 99.87, 104.03, 103.35, 102.96, 102.72, 104.08, 99.58, 103.45, 100.18} + lats := []float64{25.95, 26.04, 25.81, 25.95, 24.85, 25.27, 28.65, 23.01, 25.45, 22.79, 24.08, 23.64, 24.71, 26, 26.92, 24.19, 23.71, 26.61, 27.7, 25.42, 26.05, 24.77, 26, 24.99, 26.14, 24.25, 27.69, 24.06, 22.44, 28.3, 23.72, 24.29, 25.01, 26.63, 27.61, 25.67, 24.96, 25.12, 25.87, 21.69, 23.38, 26.29, 25.55, 24.97, 25.94, 26.05, 24.07, 23.65, 27.38, 26.01, 24.64, 25.94, 25.74, 25.68, 22.16, 23.62, 25.99, 24, 21.92, 26.58, 22.57, 25.54, 25.23, 26.78, 25.11, 22.44, 24.38, 25.38, 23.73, 22.95, 25.35, 24.11, 28.12, 23.21, 24.99, 22.78, 23.75, 23.93, 26.17, 25.96, 22.85, 22.66, 24.26, 21.4, 24.73, 23.8, 25.09, 23.09, 27.43, 24.84, 28.15, 23.88, 23.38, 23.73, 25.36, 27.2, 25.34, 23.29, 24.61, 26.03, 25.62, 24.5, 22.81, 26.17, 24.88, 28.05, 23.96, 24.95, 22.78, 24.93, 23.55, 25.66, 21.84, 24.98, 27.68, 24.53, 25.63, 22.59, 27.25, 25.03, 27.01, 24.54, 24.7, 23.63, 24.46, 25.03, 23.51, 24.71, 23.62, 26.41, 21.97, 24.98, 24.88, 23, 24.65, 24.23, 24.66, 24.17, 28.56, 23.96, 25.51, 24.49, 25.23, 26.7, 27.61, 24.98, 26.3, 25.53, 25.67, 28.21, 28.32, 25.82, 27, 24.98, 24.04, 23.43, 28.58, 25.37, 24.35, 27.36, 25.02, 23.23, 24.7, 22.91, 27.68, 24.7, 22.24, 24.7, 25.39, 22.61, 24.01, 26.22, 24.67, 24.57, 25.76, 23.9, 24.62, 25.45, 22.99, 25.7, 23.6, 25.29, 26.4, 25.88, 23.71, 26.19, 21.85, 22.04, 24.63, 24.89, 25.85, 25.3, 26.87, 25.29, 21.42, 24.72, 26.24, 23.55, 25, 23.33, 24.72, 25.25, 22.64, 21.85, 24.49, 26.13, 26.47, 23.56, 28.95, 28.92, 22.75, 25.75, 24.92, 24.42, 24.2, 24.87, 24.4, 25.77, 22.57, 24.5, 23.65, 22.94, 24.08, 23.52, 25.32, 27.04, 24.64, 23.13, 25.28, 24.98, 24.29, 24.14, 26.62, 24.9, 21.31, 24.72, 25.2, 24.8, 25.18, 24.27, 26.12, 25.03, 25.73, 24.49, 25.43, 28.24, 23.8, 22.28, 23.72, 23.54, 23.15, 25.5, 24.45, 23.96, 24.62, 24.71, 23.29, 24.75, 24.8, 24.73, 25.69, 25.54, 23.24, 25.93, 27.39, 25.81, 24.76, 24.96, 24.58, 21.86, 24.11, 24.26, 25.72, 23.45, 22.61, 27.68, 24.87, 25.88, 24.01, 23.38, 24.77, 25.49, 25.51, 25.72, 24.58, 23.92, 24.97, 23.94, 26.03, 25.04, 21.43, 23.63, 24.07, 24.6, 24.37, 27.49, 25.78, 25.62, 25.4, 26.86, 25.33, 22.52, 24.67, 23.95, 24.35, 22.98, 27.74, 23.52, 23.97, 24.36, 23.17, 25.19, 24.55, 25.92, 26.07, 27.75, 26.72, 25.79, 24.32, 23.78, 25.38, 25.54, 24.11, 24.44, 26.52, 24.74, 25.11, 26.08, 25.68, 27.23, 23.13, 26.17, 23.26, 23.47, 26.03, 27.47, 22.82, 24.85, 28.33, 25.07, 24.29, 24.23, 24.55, 25.28, 27.42, 26.1, 25.3, 23.12, 23.34, 23.24, 22.64, 24.25, 23.24, 25.53, 23.65, 24.84, 24.79, 27.74, 23.92, 24.94, 22.39, 21.91, 24.3, 24.28, 23.33, 24.1, 21.45, 26.54, 24.47, 21.63, 26.76, 23.02, 24.34, 24.29, 24.52, 23.83, 25.5, 26.1, 23.93, 25.17, 24.26, 27.19, 28.55, 25.04, 25.47, 25.94, 23.86, 24.91, 26.74, 26.09, 24.03, 24.1, 25.22, 26.04, 24.66, 26.14, 26.76, 24.15, 23.11, 23.67, 24.96, 25.76, 27.48, 25.03, 24.48, 25.4, 24.99, 28.11, 23.12, 25.05, 23.03, 24.72, 24.33, 24.63, 26.08, 26.44, 24.17, 24.81, 24.5, 24.68, 23.89, 25.75, 21.29, 27.61, 24.86, 24.72, 26.52, 23.44, 24.78, 25.81, 26.72, 24.13, 25.27, 25.97, 27.85, 23.37, 22.45, 25.9, 22.39, 26.66, 24.61, 27.15, 26.11, 26.86, 23.92, 26.9, 23.1, 23.73, 23, 24.76, 22.96, 26.87, 22.13, 25.07, 25.65, 22.06, 27.22, 21.74, 23.63, 25.11, 24.75, 24.87, 27.53, 25.76, 26.32, 24.31, 25.48, 26.39, 24.64, 24.7, 24.73, 24.33, 25.07, 22.62, 25.32, 24.89, 24.7, 24.31, 24.78, 22.09, 25.98, 28.32, 24.83, 26.75, 24.89, 26.54, 23.99, 24.9, 24.99, 25.31, 26.18, 23.68, 23.97, 23.87, 25.38, 23.21, 26.47, 25.91, 24.7, 25.31, 24.92, 24.55, 24.44, 24.25, 25.59, 23.66, 23.36, 25.85, 24.52, 25.28, 25.51, 24.43, 27.83, 24.83, 27.46, 25.04, 27.33, 22.92, 26.9, 23.67, 25.54, 25.26, 25.34, 25.05, 23.2, 28.16, 23.37, 25.25, 24.64, 25.43, 26, 25.03, 24.64, 25.08, 25.85, 25.4, 25.64, 25.36, 26.1, 26.47, 23.65, 27.68, 25.58, 27.64, 23.51, 25.31, 26.87, 25.56, 24.15, 22.9, 25.21, 24.59, 22.51, 25.45, 24.02, 24.9, 25.28, 24.26, 24.96, 27.13, 23.81, 24.35, 24.38, 25.85, 25.06, 25.42, 24.85, 27.9, 25.7, 23.69, 23.26, 25.04, 27.44, 25.72, 24.27, 22.7, 27.21, 24.82, 25.13, 25.34, 25.19, 26.31, 24.54, 25.62, 22.28, 23.63, 25.73, 25.59, 25.33, 25.41, 24.79, 25.04, 25.89, 23.61, 24.2, 24.95, 25.31, 22.4, 24.73, 23.46, 24.32, 27.99, 27.81, 21.93, 24.16, 24.41, 24.5, 27.11, 24.37, 23.35, 24.61, 25.87, 25.11, 23.48, 24.99, 24.28, 27.61, 26.47, 25.69, 27.17, 27.38, 23.38, 24.33, 25.89, 24.77, 22.72, 23.47, 26.16, 24.7, 24.68, 24.52, 25.25, 21.94, 24.44, 25.55, 24.72, 26.07, 26.87, 25.79, 25.1, 25.19, 26.05, 24.47, 24.43, 23.03, 25.38, 25.09, 21.98, 27.3, 27.71, 24.05, 21.93, 22.95, 23.91, 23.31, 24.69, 24.46, 24.17, 22.97, 24.17, 25.74, 24.95, 22.86, 25, 25.06, 24.97, 24.67, 26.22, 24.78, 25.12, 25.47, 28.52, 23.1, 23.47, 22.95, 27.8, 25.43, 23.18, 25.11, 25.62, 25.31, 24.26, 25.34, 23.63, 24.87, 27.41, 24.67, 24.34, 21.24, 23.77, 23, 26.17, 27.5, 25.55, 25.32, 24.34, 24.61, 24.67, 24.84, 25.54, 24.51, 25.01, 26.68, 24.41, 27.55, 23.92, 25.78, 28.04, 27.77, 24.81, 26, 26.48, 23.84, 25.43, 26.93, 23.8, 24.65, 24.56, 25.2, 22.92, 23.49, 26.12, 24.92, 23.02, 24.65, 25.65, 24.4, 25.93, 25.65, 25.68, 25.05, 24.19, 23.15, 25.66, 23.42, 24.52, 24.83, 25.13, 25.67, 25.14, 25.04, 25.38, 25.25, 25.6, 23.88, 25.44, 23.47, 28.42, 23.92, 22.82, 24.41, 28.44, 23.87, 27, 25.31, 24.2, 25.04, 27.58, 23.77, 23.69, 23.4, 23.27, 26.03, 22.45, 24.58, 25.67, 24.88, 23.1, 24.98, 23.59, 25.14, 28.02, 24.84, 22.73, 24.58, 25.21, 25.57, 25.66, 24.19, 25.39, 28.66, 25.25, 27.75, 24.52, 25.45, 23.32, 25.58, 25.36, 23.71, 24.88, 23.26, 25.32, 24.12, 25.82, 25.69, 24.72, 23.61, 24.68, 24.3, 24.56, 24.19, 25.49, 25.69, 24.87, 27.19, 22.82, 23.18, 25.56, 27.76, 27.5, 25.02, 25.2, 24.88, 24.17, 23.88, 23.88, 21.73, 23.75, 25.19, 24.62, 25.04, 23.63, 25.54, 23.46, 24.09, 27.31, 24.71, 25.02, 24.67, 25.33, 27.76, 24.24, 24.19, 25.65, 23.88, 27.72, 23.77, 23.25, 24.43, 24.66, 23.56, 24.75, 27.41, 28.02, 26.94, 24.81, 26.53, 23.33, 25.39, 23.49, 24.83, 23.44, 24.95, 23.25, 23.76, 24.24, 26.14, 25.08, 22.8, 24.51, 23.39, 25.68, 25.34, 24.12, 24.68, 22.61, 27.11, 25.36, 23.72, 26.6, 24.9, 23.79, 25.95, 24.8, 24.94, 25.13, 24.94, 25.67, 26.73, 24.45, 25.22, 26.19, 24.17, 22.49, 23.27, 27.72, 25.79, 27.66, 24.94, 24.06, 24.63, 26.49, 24.93, 26.23, 23.86, 25.33, 27.73, 25.88, 24.25, 27.77, 24.45, 25.03, 24.98, 23.35, 22.77, 23.35, 24.91, 25.32, 21.35, 25.19, 25.79, 23.74, 25, 23.27, 24.48, 25.19, 24.68, 24.42, 22.9, 27.95, 25.98, 25.38, 23.42, 25.18, 24.85, 22.73, 24.62, 23.54, 24.52, 25.49, 26.16, 23.37, 24.76, 23.52, 24.39, 24.16, 25.79, 22.69, 23.65, 26, 25.68, 27.37, 23.99, 24.96, 24.83, 23.21, 24.88, 23.77, 26.46, 24.06, 24.67, 24.46, 22.68, 25.81, 23.1, 25.15, 25.07, 24.64, 27.9, 26.86, 25.5, 24.76, 21.68, 23.63, 24.14, 23.42, 24.89, 21.69, 26.42, 23.97, 26.19, 25.04, 24.3, 25.36, 24.62, 26.59, 23.01, 24.68, 23.48, 24.31, 25.89, 25.11, 22.33, 26.68, 26.09, 23.13, 23.27, 23.3, 22.37, 24.38, 24.91, 25.62, 23.76, 25.47, 24.58, 25.2, 27.6, 27.86, 23.68, 25.04, 22.94, 25.8, 26.36, 25.83, 25.5, 24.6, 28.45, 25.12, 23.84, 22.49, 24.44, 26.16, 28.07, 24.49, 25.62, 23.52, 24.49, 28.07, 27.41, 25.26, 21.96, 23.26, 23.52, 25.41, 26.86, 25.72, 21.88, 25.24, 27.48, 25.94, 21.78, 25.79, 27.99, 23.02, 24.86, 25.44, 26.11, 26.85, 24.72, 23.18, 25.54, 24.39, 22.67, 24.3, 24.46, 25.15, 25.43, 22.92, 25.64, 23.58, 25.17, 24.85, 23.62, 23.74, 26.53, 23.8, 23.55, 25.3, 25.31, 26.22, 23.88, 24.8, 25.25, 25.58, 25.65, 24.22, 24.28, 23.56, 23.95, 23.75, 23.96, 24.68, 24.24, 25.04, 24.28, 25.31, 24.8, 23.65, 23.94, 25.04, 23.25, 25.34, 24.99, 25.99, 25.01, 24.57, 27.75, 24, 22.04, 23.2, 22.86, 24.35, 24.13, 24.34, 23.15, 27.43, 25.02, 26.49, 26.01, 23.7, 24.57, 27.63, 25.05, 24.56, 25.38, 25.21, 26.75, 23.55, 23.32, 23.62, 24.27, 23.95, 25.72, 26.25, 22.93, 24.18, 25.41, 25.66, 25.35, 27.11, 27.79, 23.94, 26.91, 28.01, 22.36, 22.68, 24.74, 23.11, 25.61, 22.65, 22.67, 26.25, 24.88, 22.95, 23.71, 25.15, 24.05, 23.01, 24.37, 21.59, 25.16, 23.46, 23.73, 23.85, 24.33, 21.59, 25.38, 25.57, 24.15, 23.72, 24.77, 22.61, 26.35, 23.89, 23.75, 24.68, 24.49, 23.94, 25.98, 26.02, 25.81, 24.63, 26.19, 25.7, 25.53, 27.7, 24.95, 22.38, 24.99, 25.08, 24.08, 21.68, 24.96, 24.97, 24.58, 24.73, 22.05, 24.18, 22.76, 23.23, 25.44, 23.07, 25.03, 24.42, 26.31, 23.7, 25.49, 24.83, 21.72, 24, 24.43, 23.66, 25.58, 24.65, 24.97, 24.24, 23.78, 24.95, 24.73, 25.05, 24.34, 24.13, 24.39, 24.27, 21.84, 22.68, 24.99, 25.5, 23.92, 22.32, 23.99, 25.5, 23.24, 25.88, 23.95, 24.22, 24.92, 24.64, 24.28, 25.04, 26.31, 23.64, 27.26, 25.01, 24.58, 23.73, 24.37, 24.27, 23.63, 25.27, 22.49, 24.07, 24.2, 24.31, 26.62, 23.87, 25.21, 24.94, 27.45, 24.04, 22.85, 22.95, 25.73, 26.45, 23.9, 24.9, 26.63, 22.91, 25.11, 25.28, 23.46, 21.75, 26.43, 25.9, 25.9, 25.53, 24.11, 24.74, 25.02, 24.54, 25.85, 25.04, 23.5, 25.04, 22.58, 25.41, 26.16, 23.72, 25.18, 24.72, 27.11, 23.6, 23.56, 24.04, 22.13, 25.21, 23.57, 24.91, 23.73, 24.19, 23.35, 23.74, 23.7, 27.17, 24.28, 25.39, 25.39, 23.16, 25.19, 23.26, 25.05, 25.55, 24.55, 24.26, 24.38, 24.02, 26.45, 25.55, 24.23, 26.39, 28.24, 23.6, 25.05, 27.43, 23.35, 24.55, 25.29, 23.73, 24.43, 27.57, 24.3, 25.68, 25.33, 26.62, 28.19, 26.95, 24.83, 27.44, 25.62, 25.44, 27.14, 26.09, 25.29, 27.44, 25.48, 23.17, 23.05, 23.87, 24.83, 24.15, 25.28, 27.56, 23.46, 25.32, 23.08, 25.66, 24.14, 21.3, 23.07, 23, 26.62, 23.91, 27.63, 23.4, 26.18, 27.88, 25.07, 27.63, 23.76, 22.81, 23.56, 23.37, 26.26, 22.22, 24.02, 26.94, 25.05, 22.18, 27.18, 22.01, 27.85, 22.2, 28.01, 24.68, 25.57, 24.79, 24.14, 28.05, 22.77, 23.58, 23.79, 24.03, 23.11, 23.95, 25.03, 22.79, 25.87, 24.78, 24.55, 24.91, 26.7, 26.26, 28.38, 25.26, 23.89, 26.01, 25.47, 22.88, 24.68, 26.47, 25.42, 24.07, 26.16, 23.24, 27.25, 27.37, 24.79, 24.63, 24.49, 26.13, 24.1, 26.01, 22.79, 25.08, 23.29, 26.15, 24.31, 24.41, 28.27, 23.3, 26.62, 27.37, 22.88, 26.07, 24.88, 21.9, 24.66, 23.49, 25.83, 25.27, 27.35, 23.41, 24.47, 27.3, 26.25, 25.61, 27.28, 22.49, 25.16, 23.86, 22.78, 25.57, 27.24, 25.05, 25.24, 25.38, 28.22, 27.49, 27.22, 24.28, 23.61, 23.32, 28.5, 21.7, 23.23, 24.32, 27.78, 26.07, 27.62, 24.64, 24.03, 24.06, 25.52, 23.98, 27.67, 25.45, 24.65, 25.02, 26.03, 23.39, 28.72, 23.73, 27.84, 28.58, 26.28, 24.58, 23.4, 24.37, 25.27, 25.75, 25.01, 25.04, 24.5, 25.6, 23.22, 26.08, 26.37, 25.33, 25.68, 25.46, 23.13, 26.72, 24.82, 24.03, 24.69, 24.62, 25.22, 24.67, 25.85, 24.81, 24.54, 23.3, 24, 25.25, 26.4, 21.55, 21.7, 25.83, 24.82, 24.3, 25.49, 24.55, 22.31, 22.05, 27.77, 24.7, 21.58, 24.93, 26.98, 25.6, 26.08, 26, 24.98, 25.48, 24.45, 21.98, 26.35, 25.05, 23.15, 24.29, 23.73, 23.33, 25.15, 22.8, 22.04, 25.5, 25.11, 25.12, 26.66, 27.32, 25.09, 25.07, 28.59, 24.52, 24.06, 26.04, 26.81, 26.82, 25.9, 23.29, 22.86, 25.05, 24.19, 27.1, 25.19, 25.55, 23.05, 25.08, 26.56, 24.84, 21.66, 24.29, 23.75, 23.01, 23.61, 25.43, 23.38, 26.56, 26.59, 25.27, 22.92, 25.23, 27.09, 21.89, 25.21, 23.5, 24.57, 24.22, 24.15, 25.84, 24.27, 25.84, 26.02, 23.01, 23.26, 24.61, 23.72, 24.69, 24.62, 22.33, 26.61, 25.64, 24.18, 25.34, 25.34, 24.44, 21.99, 24.43, 23.44, 26.25, 25.72, 26.02, 23.72, 25.08, 25.11, 26.05, 24, 24.04, 26.55, 24.88, 25.88, 24.75, 23.99, 23.39, 21.4, 24.64, 24.6, 24.83, 25.26, 25.48, 27.84, 27.48, 24.73, 22.89, 24.5, 21.95, 22.9, 25.44, 25.25, 23.76, 24.91, 24.92, 24.71, 25.25, 28.38, 25.57, 23.45, 25.05, 27.83, 25.18, 24, 24.33, 28.11, 24.42, 24.34, 24.64, 24.97, 25.7, 23.83, 24.29, 21.88, 27.37, 24.31, 23.22, 24.31, 25.23, 24.54, 24.92, 23.76, 25.18, 24.05, 24.57, 24.46, 25.28, 25.53, 25.9, 28.25, 24.27, 25.23, 25.11, 25.03, 24.87, 25.02, 27.34, 23.26, 24.73, 24.71, 26.75, 27.17, 25.25, 26, 21.53, 26.2, 25.11, 24.63, 24.28, 27.84, 24.56, 24, 23.44, 24.67, 23.3, 26.59, 23.75, 27.52, 24.61, 23.79, 22.85, 24.69, 21.74, 23.65, 25.19, 23.23, 24.86, 24.11, 23.63, 28.63, 26.59, 23.8, 24, 27.42, 23.53, 24.63, 23.58, 25.92, 25.99, 23.07, 23.02, 25.18, 22.25, 24.3, 25.35, 27.62, 25.8, 25.02, 24.63, 24.96, 24.69, 23.96, 25.76, 25.51, 25.09, 25.12, 24.19, 22.19, 23.48, 24.97, 26.59, 24.58, 23.03, 25.34, 27.96, 26.24, 23.73, 28.59, 25.45, 27.94, 25.59, 23.93, 25.15, 27.6, 27.03, 26.21, 25.03, 25.1, 26.39, 24.21, 24.88, 25.8, 25.99, 26.13, 25.24, 23.94, 24.57, 25.86, 25.23, 28.49, 25.61, 27.87, 24.82, 24.89, 21.93, 24.96, 25.61, 25.23, 27.6, 26.27, 25.8, 23.06, 23.35, 23.68, 26.21, 22.73, 27.39, 24.92, 23.37, 23.52, 25.96, 27.21, 24.88, 24.69, 25.85, 25.32, 25, 24.14, 27.35, 23.54, 23.14, 24.37, 24.4, 24.56, 23.75, 24.4, 24.14, 22.47, 24.51, 25.83, 24.77, 24.06, 25.97, 24.2, 25.31, 23.53, 24.68, 27.22, 24.84, 23.92, 26.19, 23.42, 23.69, 28.64, 23.36, 26.32, 24.42, 25.45, 24.68, 24.55, 28.25, 26.36, 25.96, 21.53, 25.49, 25.23, 25.48, 22.63, 25.72, 24.35, 24.38, 28.63, 25.37, 22.04, 25.62, 23.46, 28.43, 25.43, 28.04, 23.8, 24.57, 28.19, 23.63, 26.38, 23.56, 23.25, 24.8, 26.37, 22.92, 23.5, 26.09, 24.94, 26.49, 24.54, 24.91, 24.98, 23.63, 23.72, 24.48, 25.09, 27.7, 23.25, 26.02, 25.35, 22.5, 25.92, 26.36, 22.92, 21.89, 25.04, 22.74, 26.12, 24.55, 25.52, 23.83, 25.87, 25.48, 25.45, 26.2, 27.03, 27.31, 22.64, 22.52, 25.34, 27.33, 23.63, 27.18, 28.32, 23.94, 24.94, 22.73, 25, 23.42, 25.16, 25.98, 24.89, 21.96, 27.32, 25.64, 25.15, 26.98, 25.91, 21.95, 26.58, 22.18, 25.34, 22.61, 23.43, 22.92, 25.67, 25.09, 26.34, 25.08, 24.11, 24.94, 23.88, 22.71, 21.64, 24.79, 27.13, 23.28, 23.45, 26.01, 25.26, 22.75, 24.03, 25.11, 23.86, 24.23, 23.7, 23.78, 23.55, 22.82, 21.92, 24.03, 27.49, 24.2, 22.08, 27.4, 24.99, 25.36, 25.45, 26.91, 24.59, 26.08, 24.7, 25.01, 24.71, 24.69, 25.17, 26.83, 24.88, 25.06, 27.89, 27.51, 25.52, 23.17, 24.69, 25.17, 23.7, 25.29, 25.83, 25.52, 24.77, 26.8, 24.17, 26.92, 25.86, 23.2, 27.25, 24.25, 25.73, 25.03, 24.87, 25.82, 23.97, 25.18, 24.32, 24.86, 21.64, 25.34, 24.47, 24.86, 25.13, 25.27, 24.25, 27.97, 23.99, 25.7, 25.34, 26.31, 24.97, 23.63, 25.13, 25.99, 25.91, 24.25, 24.89, 22.89, 24.8, 26.13, 25.74, 26.42, 23.54, 26.84, 24.46, 24.63, 24.27, 23.39, 24.91, 24.95, 26.59, 26.02, 25, 24.99, 25.6, 25.38, 21.47, 26.65, 25.13, 27.57, 25.36, 25.27, 25.12, 22.51, 25.1, 24.77, 24.09, 24.92, 26.34, 24.41, 27.83, 25.85, 23.52, 27.96, 21.73, 23.99, 25.55, 24.04, 24.43, 23.4, 23.02, 25.36, 25.08, 24.1, 25.75, 24.74, 25.71} + model := "spherical" + + //polygon, err := readPolygonBytes([]byte(geoJsonString)) + //if err != nil { + // log.Fatal(err) + //} + + coordinates := ordinarykriging.PolygonCoordinates{ordinarykriging.Ring{ + ordinarykriging.Point{103.614373, 27.00541}, + ordinarykriging.Point{103.653907, 27.022855}, + ordinarykriging.Point{103.675582, 27.051684}, + ordinarykriging.Point{103.705146, 27.049136}, + ordinarykriging.Point{103.730635, 27.021102}, + ordinarykriging.Point{103.754217, 26.963102}, + ordinarykriging.Point{103.775111, 26.950908}, + ordinarykriging.Point{103.777192, 26.934967}, + ordinarykriging.Point{103.765228, 26.916871}, + ordinarykriging.Point{103.774071, 26.866952}, + ordinarykriging.Point{103.722225, 26.851478}, + ordinarykriging.Point{103.70792, 26.829858}, + ordinarykriging.Point{103.705666, 26.794746}, + ordinarykriging.Point{103.720491, 26.770721}, + ordinarykriging.Point{103.725433, 26.742778}, + ordinarykriging.Point{103.749969, 26.725928}, + ordinarykriging.Point{103.767395, 26.73607}, + ordinarykriging.Point{103.773377, 26.716904}, + ordinarykriging.Point{103.759419, 26.689427}, + ordinarykriging.Point{103.760979, 26.648998}, + ordinarykriging.Point{103.748408, 26.624222}, + ordinarykriging.Point{103.77069, 26.597523}, + ordinarykriging.Point{103.764101, 26.586009}, + ordinarykriging.Point{103.814906, 26.553622}, + ordinarykriging.Point{103.819327, 26.530266}, + ordinarykriging.Point{103.840829, 26.531865}, + ordinarykriging.Point{103.865624, 26.512265}, + ordinarykriging.Point{103.887646, 26.517546}, + ordinarykriging.Point{103.91669, 26.513225}, + ordinarykriging.Point{103.955184, 26.521546}, + ordinarykriging.Point{104.00096, 26.519706}, + ordinarykriging.Point{104.008676, 26.511785}, + ordinarykriging.Point{104.042575, 26.514345}, + ordinarykriging.Point{104.052546, 26.507144}, + ordinarykriging.Point{104.071966, 26.519146}, + ordinarykriging.Point{104.064423, 26.56042}, + ordinarykriging.Point{104.068498, 26.573375}, + ordinarykriging.Point{104.093901, 26.596403}, + ordinarykriging.Point{104.121037, 26.63781}, + ordinarykriging.Point{104.160572, 26.64684}, + ordinarykriging.Point{104.174357, 26.635252}, + ordinarykriging.Point{104.190916, 26.638609}, + ordinarykriging.Point{104.203574, 26.62654}, + ordinarykriging.Point{104.229844, 26.619906}, + ordinarykriging.Point{104.248917, 26.62686}, + ordinarykriging.Point{104.271459, 26.619426}, + ordinarykriging.Point{104.289666, 26.633654}, + ordinarykriging.Point{104.312641, 26.612792}, + ordinarykriging.Point{104.348794, 26.619506}, + ordinarykriging.Point{104.365007, 26.642765}, + ordinarykriging.Point{104.379919, 26.648838}, + ordinarykriging.Point{104.398212, 26.685912}, + ordinarykriging.Point{104.398819, 26.707719}, + ordinarykriging.Point{104.421274, 26.712032}, + ordinarykriging.Point{104.441735, 26.68703}, + ordinarykriging.Point{104.442688, 26.67257}, + ordinarykriging.Point{104.467831, 26.644922}, + ordinarykriging.Point{104.458294, 26.610553}, + ordinarykriging.Point{104.463496, 26.595764}, + ordinarykriging.Point{104.487511, 26.579533}, + ordinarykriging.Point{104.500689, 26.589287}, + ordinarykriging.Point{104.542305, 26.58481}, + ordinarykriging.Point{104.556523, 26.590407}, + ordinarykriging.Point{104.579672, 26.568097}, + ordinarykriging.Point{104.570655, 26.524586}, + ordinarykriging.Point{104.59311, 26.522746}, + ordinarykriging.Point{104.615131, 26.508985}, + ordinarykriging.Point{104.638626, 26.478096}, + ordinarykriging.Point{104.632211, 26.451843}, + ordinarykriging.Point{104.642094, 26.439114}, + ordinarykriging.Point{104.664896, 26.434951}, + ordinarykriging.Point{104.665416, 26.396274}, + ordinarykriging.Point{104.680935, 26.378733}, + ordinarykriging.Point{104.680502, 26.364154}, + ordinarykriging.Point{104.658394, 26.3543}, + ordinarykriging.Point{104.659521, 26.335551}, + ordinarykriging.Point{104.62198, 26.32898}, + ordinarykriging.Point{104.591809, 26.317119}, + ordinarykriging.Point{104.580365, 26.292993}, + ordinarykriging.Point{104.555309, 26.273512}, + ordinarykriging.Point{104.542044, 26.253146}, + ordinarykriging.Point{104.549847, 26.216174}, + ordinarykriging.Point{104.528693, 26.175177}, + ordinarykriging.Point{104.519503, 26.168116}, + ordinarykriging.Point{104.518896, 26.132802}, + ordinarykriging.Point{104.526699, 26.100368}, + ordinarykriging.Point{104.50355, 26.072583}, + ordinarykriging.Point{104.459941, 26.085834}, + ordinarykriging.Point{104.456733, 26.072101}, + ordinarykriging.Point{104.472773, 26.053306}, + ordinarykriging.Point{104.462369, 26.029608}, + ordinarykriging.Point{104.470518, 26.009521}, + ordinarykriging.Point{104.462455, 25.985974}, + ordinarykriging.Point{104.443989, 25.95985}, + ordinarykriging.Point{104.438353, 25.92769}, + ordinarykriging.Point{104.414598, 25.909918}, + ordinarykriging.Point{104.418413, 25.892786}, + ordinarykriging.Point{104.434278, 25.895199}, + ordinarykriging.Point{104.441908, 25.869136}, + ordinarykriging.Point{104.423615, 25.842182}, + ordinarykriging.Point{104.430897, 25.82166}, + ordinarykriging.Point{104.40324, 25.798478}, + ordinarykriging.Point{104.397952, 25.761523}, + ordinarykriging.Point{104.373069, 25.731564}, + ordinarykriging.Point{104.328853, 25.760477}, + ordinarykriging.Point{104.322264, 25.732692}, + ordinarykriging.Point{104.323478, 25.703451}, + ordinarykriging.Point{104.311687, 25.647123}, + ordinarykriging.Point{104.312988, 25.632937}, + ordinarykriging.Point{104.331021, 25.615604}, + ordinarykriging.Point{104.334835, 25.598107}, + ordinarykriging.Point{104.357637, 25.600284}, + ordinarykriging.Point{104.368995, 25.58335}, + ordinarykriging.Point{104.389109, 25.595446}, + ordinarykriging.Point{104.421707, 25.58464}, + ordinarykriging.Point{104.423181, 25.563752}, + ordinarykriging.Point{104.434192, 25.555444}, + ordinarykriging.Point{104.436186, 25.52043}, + ordinarykriging.Point{104.418673, 25.499369}, + ordinarykriging.Point{104.434712, 25.47225}, + ordinarykriging.Point{104.449711, 25.495011}, + ordinarykriging.Point{104.481789, 25.494446}, + ordinarykriging.Point{104.524531, 25.526805}, + ordinarykriging.Point{104.547767, 25.516638}, + ordinarykriging.Point{104.556957, 25.524142}, + ordinarykriging.Point{104.540571, 25.402731}, + ordinarykriging.Point{104.559991, 25.394169}, + ordinarykriging.Point{104.567794, 25.402892}, + ordinarykriging.Point{104.615998, 25.364603}, + ordinarykriging.Point{104.645822, 25.356766}, + ordinarykriging.Point{104.640967, 25.294859}, + ordinarykriging.Point{104.662035, 25.284835}, + ordinarykriging.Point{104.671225, 25.293485}, + ordinarykriging.Point{104.707205, 25.29688}, + ordinarykriging.Point{104.709546, 25.281763}, + ordinarykriging.Point{104.735902, 25.267856}, + ordinarykriging.Point{104.754195, 25.275942}, + ordinarykriging.Point{104.779945, 25.270039}, + ordinarykriging.Point{104.796677, 25.253544}, + ordinarykriging.Point{104.817398, 25.261064}, + ordinarykriging.Point{104.827975, 25.237127}, + ordinarykriging.Point{104.807168, 25.224024}, + ordinarykriging.Point{104.815838, 25.198381}, + ordinarykriging.Point{104.808642, 25.19029}, + ordinarykriging.Point{104.823034, 25.171275}, + ordinarykriging.Point{104.80474, 25.161645}, + ordinarykriging.Point{104.777344, 25.186406}, + ordinarykriging.Point{104.7672, 25.204448}, + ordinarykriging.Point{104.745959, 25.213266}, + ordinarykriging.Point{104.724544, 25.195711}, + ordinarykriging.Point{104.734948, 25.174188}, + ordinarykriging.Point{104.718302, 25.140926}, + ordinarykriging.Point{104.695674, 25.121823}, + ordinarykriging.Point{104.686484, 25.076237}, + ordinarykriging.Point{104.670965, 25.066843}, + ordinarykriging.Point{104.619553, 25.060688}, + ordinarykriging.Point{104.683796, 25.054856}, + ordinarykriging.Point{104.700529, 25.036306}, + ordinarykriging.Point{104.713014, 24.996199}, + ordinarykriging.Point{104.687698, 24.988095}, + ordinarykriging.Point{104.687004, 24.974966}, + ordinarykriging.Point{104.663422, 24.963132}, + ordinarykriging.Point{104.663942, 24.951054}, + ordinarykriging.Point{104.638713, 24.918299}, + ordinarykriging.Point{104.635419, 24.903945}, + ordinarykriging.Point{104.596318, 24.88448}, + ordinarykriging.Point{104.53979, 24.813895}, + ordinarykriging.Point{104.542391, 24.755773}, + ordinarykriging.Point{104.520283, 24.727189}, + ordinarykriging.Point{104.499476, 24.668865}, + ordinarykriging.Point{104.475287, 24.645137}, + ordinarykriging.Point{104.505544, 24.626688}, + ordinarykriging.Point{104.50277, 24.590758}, + ordinarykriging.Point{104.515515, 24.564251}, + ordinarykriging.Point{104.52089, 24.535054}, + ordinarykriging.Point{104.534762, 24.535054}, + ordinarykriging.Point{104.549934, 24.518216}, + ordinarykriging.Point{104.547246, 24.488927}, + ordinarykriging.Point{104.567014, 24.472652}, + ordinarykriging.Point{104.578024, 24.420152}, + ordinarykriging.Point{104.616345, 24.42178}, + ordinarykriging.Point{104.62987, 24.397843}, + ordinarykriging.Point{104.61097, 24.377159}, + ordinarykriging.Point{104.660821, 24.355657}, + ordinarykriging.Point{104.683709, 24.330648}, + ordinarykriging.Point{104.708939, 24.321279}, + ordinarykriging.Point{104.721076, 24.340017}, + ordinarykriging.Point{104.703737, 24.421373}, + ordinarykriging.Point{104.717262, 24.442783}, + ordinarykriging.Point{104.752895, 24.435945}, + ordinarykriging.Point{104.752808, 24.455236}, + ordinarykriging.Point{104.768154, 24.459305}, + ordinarykriging.Point{104.784973, 24.443841}, + ordinarykriging.Point{104.836645, 24.44669}, + ordinarykriging.Point{104.913894, 24.426258}, + ordinarykriging.Point{104.929846, 24.410871}, + ordinarykriging.Point{104.979958, 24.412906}, + ordinarykriging.Point{105.019405, 24.438713}, + ordinarykriging.Point{105.054605, 24.439283}, + ordinarykriging.Point{105.108965, 24.412336}, + ordinarykriging.Point{105.102896, 24.38229}, + ordinarykriging.Point{105.116768, 24.37154}, + ordinarykriging.Point{105.144598, 24.375612}, + ordinarykriging.Point{105.18786, 24.347104}, + ordinarykriging.Point{105.19679, 24.326982}, + ordinarykriging.Point{105.171648, 24.299605}, + ordinarykriging.Point{105.168353, 24.277682}, + ordinarykriging.Point{105.179884, 24.252413}, + ordinarykriging.Point{105.201298, 24.248174}, + ordinarykriging.Point{105.215257, 24.214908}, + ordinarykriging.Point{105.23277, 24.219312}, + ordinarykriging.Point{105.243087, 24.206754}, + ordinarykriging.Point{105.229562, 24.165728}, + ordinarykriging.Point{105.182832, 24.167033}, + ordinarykriging.Point{105.181878, 24.132849}, + ordinarykriging.Point{105.200605, 24.105348}, + ordinarykriging.Point{105.234937, 24.074984}, + ordinarykriging.Point{105.260167, 24.061268}, + ordinarykriging.Point{105.293025, 24.07482}, + ordinarykriging.Point{105.273171, 24.09286}, + ordinarykriging.Point{105.293545, 24.113182}, + ordinarykriging.Point{105.318948, 24.117181}, + ordinarykriging.Point{105.345911, 24.086167}, + ordinarykriging.Point{105.396803, 24.064616}, + ordinarykriging.Point{105.413016, 24.038978}, + ordinarykriging.Point{105.461047, 24.029587}, + ordinarykriging.Point{105.494772, 24.017909}, + ordinarykriging.Point{105.509251, 24.024851}, + ordinarykriging.Point{105.504743, 24.044367}, + ordinarykriging.Point{105.518094, 24.075881}, + ordinarykriging.Point{105.517747, 24.096696}, + ordinarykriging.Point{105.545664, 24.123628}, + ordinarykriging.Point{105.595256, 24.137826}, + ordinarykriging.Point{105.628461, 24.126565}, + ordinarykriging.Point{105.628201, 24.10347}, + ordinarykriging.Point{105.643373, 24.063718}, + ordinarykriging.Point{105.649442, 24.033099}, + ordinarykriging.Point{105.675365, 24.03808}, + ordinarykriging.Point{105.700247, 24.065595}, + ordinarykriging.Point{105.739348, 24.059472}, + ordinarykriging.Point{105.765358, 24.073759}, + ordinarykriging.Point{105.790413, 24.069841}, + ordinarykriging.Point{105.801944, 24.052206}, + ordinarykriging.Point{105.789373, 24.039468}, + ordinarykriging.Point{105.796482, 24.023707}, + ordinarykriging.Point{105.841479, 24.030812}, + ordinarykriging.Point{105.859252, 24.056778}, + ordinarykriging.Point{105.892284, 24.040285}, + ordinarykriging.Point{105.90789, 24.069514}, + ordinarykriging.Point{105.902168, 24.099308}, + ordinarykriging.Point{105.910144, 24.114896}, + ordinarykriging.Point{105.933292, 24.123791}, + ordinarykriging.Point{105.96381, 24.11106}, + ordinarykriging.Point{105.998316, 24.124199}, + ordinarykriging.Point{106.011841, 24.099471}, + ordinarykriging.Point{106.024239, 24.103307}, + ordinarykriging.Point{106.052502, 24.084208}, + ordinarykriging.Point{106.054323, 24.049838}, + ordinarykriging.Point{106.075477, 24.028444}, + ordinarykriging.Point{106.096545, 24.017909}, + ordinarykriging.Point{106.090216, 23.99896}, + ordinarykriging.Point{106.127757, 23.956887}, + ordinarykriging.Point{106.139114, 23.921012}, + ordinarykriging.Point{106.1555, 23.893956}, + ordinarykriging.Point{106.192434, 23.878914}, + ordinarykriging.Point{106.192087, 23.862398}, + ordinarykriging.Point{106.17284, 23.861662}, + ordinarykriging.Point{106.19226, 23.824779}, + ordinarykriging.Point{106.155673, 23.813818}, + ordinarykriging.Point{106.13686, 23.795412}, + ordinarykriging.Point{106.14501, 23.744271}, + ordinarykriging.Point{106.157321, 23.724136}, + ordinarykriging.Point{106.149518, 23.665432}, + ordinarykriging.Point{106.137293, 23.632098}, + ordinarykriging.Point{106.120734, 23.605392}, + ordinarykriging.Point{106.124896, 23.585891}, + ordinarykriging.Point{106.141455, 23.569665}, + ordinarykriging.Point{106.120561, 23.559257}, + ordinarykriging.Point{106.107296, 23.533684}, + ordinarykriging.Point{106.086228, 23.524174}, + ordinarykriging.Point{106.072183, 23.495642}, + ordinarykriging.Point{106.03603, 23.482686}, + ordinarykriging.Point{106.01054, 23.455867}, + ordinarykriging.Point{105.991814, 23.448321}, + ordinarykriging.Point{105.997362, 23.474075}, + ordinarykriging.Point{105.986265, 23.489574}, + ordinarykriging.Point{105.959909, 23.494166}, + ordinarykriging.Point{105.935807, 23.508925}, + ordinarykriging.Point{105.912918, 23.499332}, + ordinarykriging.Point{105.892024, 23.52483}, + ordinarykriging.Point{105.852403, 23.526962}, + ordinarykriging.Point{105.813822, 23.502202}, + ordinarykriging.Point{105.806193, 23.467432}, + ordinarykriging.Point{105.758682, 23.459558}, + ordinarykriging.Point{105.738048, 23.430683}, + ordinarykriging.Point{105.6999, 23.401393}, + ordinarykriging.Point{105.671897, 23.408613}, + ordinarykriging.Point{105.647535, 23.39811}, + ordinarykriging.Point{105.668862, 23.387935}, + ordinarykriging.Point{105.694265, 23.363313}, + ordinarykriging.Point{105.674151, 23.348373}, + ordinarykriging.Point{105.700594, 23.328424}, + ordinarykriging.Point{105.671637, 23.326454}, + ordinarykriging.Point{105.666955, 23.346814}, + ordinarykriging.Point{105.593261, 23.312578}, + ordinarykriging.Point{105.56968, 23.282439}, + ordinarykriging.Point{105.560316, 23.257305}, + ordinarykriging.Point{105.531792, 23.248186}, + ordinarykriging.Point{105.526417, 23.234549}, + ordinarykriging.Point{105.546358, 23.200119}, + ordinarykriging.Point{105.54263, 23.184257}, + ordinarykriging.Point{105.501968, 23.202749}, + ordinarykriging.Point{105.4972, 23.220745}, + ordinarykriging.Point{105.475785, 23.249501}, + ordinarykriging.Point{105.459919, 23.259441}, + ordinarykriging.Point{105.439632, 23.296565}, + ordinarykriging.Point{105.41579, 23.283753}, + ordinarykriging.Point{105.393509, 23.308308}, + ordinarykriging.Point{105.373134, 23.317668}, + ordinarykriging.Point{105.355188, 23.341888}, + ordinarykriging.Point{105.349379, 23.368812}, + ordinarykriging.Point{105.325537, 23.390068}, + ordinarykriging.Point{105.279414, 23.339425}, + ordinarykriging.Point{105.261294, 23.338112}, + ordinarykriging.Point{105.26008, 23.317915}, + ordinarykriging.Point{105.244214, 23.289256}, + ordinarykriging.Point{105.238145, 23.264287}, + ordinarykriging.Point{105.182051, 23.278907}, + ordinarykriging.Point{105.122143, 23.247694}, + ordinarykriging.Point{105.108184, 23.245886}, + ordinarykriging.Point{105.093186, 23.261084}, + ordinarykriging.Point{105.055212, 23.245229}, + ordinarykriging.Point{105.036138, 23.224607}, + ordinarykriging.Point{105.003626, 23.213021}, + ordinarykriging.Point{104.997297, 23.196092}, + ordinarykriging.Point{104.973715, 23.197407}, + ordinarykriging.Point{104.958803, 23.188613}, + ordinarykriging.Point{104.948833, 23.152199}, + ordinarykriging.Point{104.920483, 23.164037}, + ordinarykriging.Point{104.912593, 23.175792}, + ordinarykriging.Point{104.886584, 23.168805}, + ordinarykriging.Point{104.874272, 23.123423}, + ordinarykriging.Point{104.856413, 23.123423}, + ordinarykriging.Point{104.80448, 23.110019}, + ordinarykriging.Point{104.807861, 23.080657}, + ordinarykriging.Point{104.816965, 23.072925}, + ordinarykriging.Point{104.82078, 23.032201}, + ordinarykriging.Point{104.837426, 22.994345}, + ordinarykriging.Point{104.860314, 22.970968}, + ordinarykriging.Point{104.861614, 22.940012}, + ordinarykriging.Point{104.846269, 22.926342}, + ordinarykriging.Point{104.772662, 22.893482}, + ordinarykriging.Point{104.760958, 22.862508}, + ordinarykriging.Point{104.732781, 22.852126}, + ordinarykriging.Point{104.737723, 22.826005}, + ordinarykriging.Point{104.674173, 22.817187}, + ordinarykriging.Point{104.657787, 22.830867}, + ordinarykriging.Point{104.620333, 22.834988}, + ordinarykriging.Point{104.614871, 22.813149}, + ordinarykriging.Point{104.595451, 22.846276}, + ordinarykriging.Point{104.579498, 22.846359}, + ordinarykriging.Point{104.559384, 22.828313}, + ordinarykriging.Point{104.527826, 22.81422}, + ordinarykriging.Point{104.525919, 22.802764}, + ordinarykriging.Point{104.501556, 22.776633}, + ordinarykriging.Point{104.456733, 22.747777}, + ordinarykriging.Point{104.422748, 22.734995}, + ordinarykriging.Point{104.402894, 22.702336}, + ordinarykriging.Point{104.376017, 22.690127}, + ordinarykriging.Point{104.344546, 22.704563}, + ordinarykriging.Point{104.340818, 22.719326}, + ordinarykriging.Point{104.322524, 22.728975}, + ordinarykriging.Point{104.299983, 22.72848}, + ordinarykriging.Point{104.272066, 22.738541}, + ordinarykriging.Point{104.256634, 22.773913}, + ordinarykriging.Point{104.274233, 22.827901}, + ordinarykriging.Point{104.261489, 22.841992}, + ordinarykriging.Point{104.224035, 22.826335}, + ordinarykriging.Point{104.168461, 22.81966}, + ordinarykriging.Point{104.13725, 22.803011}, + ordinarykriging.Point{104.117396, 22.808945}, + ordinarykriging.Point{104.093381, 22.773995}, + ordinarykriging.Point{104.067111, 22.753961}, + ordinarykriging.Point{104.04535, 22.728151}, + ordinarykriging.Point{104.031478, 22.684765}, + ordinarykriging.Point{104.036247, 22.666533}, + ordinarykriging.Point{104.030958, 22.62676}, + ordinarykriging.Point{104.009023, 22.572692}, + ordinarykriging.Point{104.015352, 22.542141}, + ordinarykriging.Point{104.008243, 22.5172}, + ordinarykriging.Point{103.9642, 22.502827}, + ordinarykriging.Point{103.930301, 22.534956}, + ordinarykriging.Point{103.889726, 22.566583}, + ordinarykriging.Point{103.875768, 22.566087}, + ordinarykriging.Point{103.863543, 22.584085}, + ordinarykriging.Point{103.826957, 22.613967}, + ordinarykriging.Point{103.769649, 22.68724}, + ordinarykriging.Point{103.75465, 22.686663}, + ordinarykriging.Point{103.740519, 22.708027}, + ordinarykriging.Point{103.708267, 22.738376}, + ordinarykriging.Point{103.685639, 22.75025}, + ordinarykriging.Point{103.664397, 22.782239}, + ordinarykriging.Point{103.643416, 22.794604}, + ordinarykriging.Point{103.620528, 22.783888}, + ordinarykriging.Point{103.612465, 22.756682}, + ordinarykriging.Point{103.584635, 22.72848}, + ordinarykriging.Point{103.567902, 22.700933}, + ordinarykriging.Point{103.58004, 22.668265}, + ordinarykriging.Point{103.573364, 22.641944}, + ordinarykriging.Point{103.554724, 22.633939}, + ordinarykriging.Point{103.533656, 22.593496}, + ordinarykriging.Point{103.508947, 22.601008}, + ordinarykriging.Point{103.458229, 22.658365}, + ordinarykriging.Point{103.460483, 22.676763}, + ordinarykriging.Point{103.435514, 22.698789}, + ordinarykriging.Point{103.432826, 22.732769}, + ordinarykriging.Point{103.441063, 22.752971}, + ordinarykriging.Point{103.415053, 22.773418}, + ordinarykriging.Point{103.390691, 22.778859}, + ordinarykriging.Point{103.375172, 22.794933}, + ordinarykriging.Point{103.323326, 22.807874}, + ordinarykriging.Point{103.321419, 22.778035}, + ordinarykriging.Point{103.287953, 22.731202}, + ordinarykriging.Point{103.290381, 22.70547}, + ordinarykriging.Point{103.282751, 22.678496}, + ordinarykriging.Point{103.248159, 22.665625}, + ordinarykriging.Point{103.216514, 22.643595}, + ordinarykriging.Point{103.19588, 22.648381}, + ordinarykriging.Point{103.166662, 22.609015}, + ordinarykriging.Point{103.164582, 22.580205}, + ordinarykriging.Point{103.183829, 22.557665}, + ordinarykriging.Point{103.157559, 22.53859}, + ordinarykriging.Point{103.139439, 22.537847}, + ordinarykriging.Point{103.118978, 22.518273}, + ordinarykriging.Point{103.083519, 22.508444}, + ordinarykriging.Point{103.072075, 22.488206}, + ordinarykriging.Point{103.081785, 22.454248}, + ordinarykriging.Point{103.071988, 22.445324}, + ordinarykriging.Point{103.030199, 22.44144}, + ordinarykriging.Point{103.009739, 22.458875}, + ordinarykriging.Point{102.993353, 22.460941}, + ordinarykriging.Point{102.985116, 22.478375}, + ordinarykriging.Point{102.928849, 22.483662}, + ordinarykriging.Point{102.924254, 22.503654}, + ordinarykriging.Point{102.892002, 22.534956}, + ordinarykriging.Point{102.874576, 22.571124}, + ordinarykriging.Point{102.880125, 22.586892}, + ordinarykriging.Point{102.85897, 22.607281}, + ordinarykriging.Point{102.823424, 22.623128}, + ordinarykriging.Point{102.801056, 22.620487}, + ordinarykriging.Point{102.787097, 22.641532}, + ordinarykriging.Point{102.758313, 22.650526}, + ordinarykriging.Point{102.750684, 22.666863}, + ordinarykriging.Point{102.737072, 22.66513}, + ordinarykriging.Point{102.692163, 22.699614}, + ordinarykriging.Point{102.657397, 22.688148}, + ordinarykriging.Point{102.607372, 22.730707}, + ordinarykriging.Point{102.570438, 22.700273}, + ordinarykriging.Point{102.565756, 22.717842}, + ordinarykriging.Point{102.511917, 22.773171}, + ordinarykriging.Point{102.498132, 22.777787}, + ordinarykriging.Point{102.459724, 22.762865}, + ordinarykriging.Point{102.456256, 22.731202}, + ordinarykriging.Point{102.436489, 22.699531}, + ordinarykriging.Point{102.407792, 22.682043}, + ordinarykriging.Point{102.384557, 22.679733}, + ordinarykriging.Point{102.403631, 22.645245}, + ordinarykriging.Point{102.41889, 22.638066}, + ordinarykriging.Point{102.404844, 22.629978}, + ordinarykriging.Point{102.376928, 22.593744}, + ordinarykriging.Point{102.347537, 22.585241}, + ordinarykriging.Point{102.356727, 22.56361}, + ordinarykriging.Point{102.322568, 22.554032}, + ordinarykriging.Point{102.256157, 22.457388}, + ordinarykriging.Point{102.270202, 22.419621}, + ordinarykriging.Point{102.236476, 22.426811}, + ordinarykriging.Point{102.179429, 22.430531}, + ordinarykriging.Point{102.167378, 22.425572}, + ordinarykriging.Point{102.14527, 22.397799}, + ordinarykriging.Point{102.12819, 22.417141}, + ordinarykriging.Point{102.131398, 22.430861}, + ordinarykriging.Point{102.087789, 22.439208}, + ordinarykriging.Point{102.046434, 22.457884}, + ordinarykriging.Point{101.978549, 22.427803}, + ordinarykriging.Point{101.93624, 22.43896}, + ordinarykriging.Point{101.90789, 22.437225}, + ordinarykriging.Point{101.911184, 22.396972}, + ordinarykriging.Point{101.901387, 22.384324}, + ordinarykriging.Point{101.86272, 22.389201}, + ordinarykriging.Point{101.823012, 22.426811}, + ordinarykriging.Point{101.824226, 22.456892}, + ordinarykriging.Point{101.792581, 22.482423}, + ordinarykriging.Point{101.782177, 22.501423}, + ordinarykriging.Point{101.764577, 22.506379}, + ordinarykriging.Point{101.715246, 22.478209}, + ordinarykriging.Point{101.677966, 22.477218}, + ordinarykriging.Point{101.667128, 22.432762}, + ordinarykriging.Point{101.648488, 22.400444}, + ordinarykriging.Point{101.67181, 22.372749}, + ordinarykriging.Point{101.648922, 22.362992}, + ordinarykriging.Point{101.647968, 22.33165}, + ordinarykriging.Point{101.635484, 22.314777}, + ordinarykriging.Point{101.625513, 22.282597}, + ordinarykriging.Point{101.604446, 22.270683}, + ordinarykriging.Point{101.564304, 22.269607}, + ordinarykriging.Point{101.547658, 22.231127}, + ordinarykriging.Point{101.596469, 22.161091}, + ordinarykriging.Point{101.602972, 22.132023}, + ordinarykriging.Point{101.573928, 22.115126}, + ordinarykriging.Point{101.587279, 22.078177}, + ordinarykriging.Point{101.616583, 22.034175}, + ordinarykriging.Point{101.626207, 22.006158}, + ordinarykriging.Point{101.60644, 21.967855}, + ordinarykriging.Point{101.654384, 21.946543}, + ordinarykriging.Point{101.662447, 21.935761}, + ordinarykriging.Point{101.687763, 21.942645}, + ordinarykriging.Point{101.703975, 21.929043}, + ordinarykriging.Point{101.700334, 21.897024}, + ordinarykriging.Point{101.714292, 21.881924}, + ordinarykriging.Point{101.735013, 21.875784}, + ordinarykriging.Point{101.740215, 21.845413}, + ordinarykriging.Point{101.777062, 21.826905}, + ordinarykriging.Point{101.760589, 21.791625}, + ordinarykriging.Point{101.759636, 21.766633}, + ordinarykriging.Point{101.747324, 21.73001}, + ordinarykriging.Point{101.767612, 21.716221}, + ordinarykriging.Point{101.771166, 21.660391}, + ordinarykriging.Point{101.779923, 21.640861}, + ordinarykriging.Point{101.807666, 21.644186}, + ordinarykriging.Point{101.828474, 21.61709}, + ordinarykriging.Point{101.804805, 21.577685}, + ordinarykriging.Point{101.789113, 21.572613}, + ordinarykriging.Point{101.755127, 21.584918}, + ordinarykriging.Point{101.745504, 21.570368}, + ordinarykriging.Point{101.758855, 21.562801}, + ordinarykriging.Point{101.75478, 21.542261}, + ordinarykriging.Point{101.772467, 21.513233}, + ordinarykriging.Point{101.741082, 21.482868}, + ordinarykriging.Point{101.750099, 21.409301}, + ordinarykriging.Point{101.739955, 21.40081}, + ordinarykriging.Point{101.730332, 21.336947}, + ordinarykriging.Point{101.745677, 21.297299}, + ordinarykriging.Point{101.766571, 21.286302}, + ordinarykriging.Point{101.791627, 21.285802}, + ordinarykriging.Point{101.803765, 21.26464}, + ordinarykriging.Point{101.833676, 21.252474}, + ordinarykriging.Point{101.83541, 21.208052}, + ordinarykriging.Point{101.795095, 21.208302}, + ordinarykriging.Point{101.78105, 21.172038}, + ordinarykriging.Point{101.764664, 21.147857}, + ordinarykriging.Point{101.740735, 21.141769}, + ordinarykriging.Point{101.702848, 21.146106}, + ordinarykriging.Point{101.696606, 21.168786}, + ordinarykriging.Point{101.672504, 21.194965}, + ordinarykriging.Point{101.637651, 21.19188}, + ordinarykriging.Point{101.605659, 21.172288}, + ordinarykriging.Point{101.588666, 21.19163}, + ordinarykriging.Point{101.600631, 21.212636}, + ordinarykriging.Point{101.601585, 21.23314}, + ordinarykriging.Point{101.532659, 21.25239}, + ordinarykriging.Point{101.476479, 21.24164}, + ordinarykriging.Point{101.445961, 21.227473}, + ordinarykriging.Point{101.387613, 21.225972}, + ordinarykriging.Point{101.340969, 21.196965}, + ordinarykriging.Point{101.290251, 21.178291}, + ordinarykriging.Point{101.222193, 21.23439}, + ordinarykriging.Point{101.228782, 21.25589}, + ordinarykriging.Point{101.246642, 21.275721}, + ordinarykriging.Point{101.249676, 21.296882}, + ordinarykriging.Point{101.183699, 21.334698}, + ordinarykriging.Point{101.142864, 21.409135}, + ordinarykriging.Point{101.185953, 21.415711}, + ordinarykriging.Point{101.195056, 21.425116}, + ordinarykriging.Point{101.192889, 21.474215}, + ordinarykriging.Point{101.225487, 21.50192}, + ordinarykriging.Point{101.210315, 21.508991}, + ordinarykriging.Point{101.208928, 21.557313}, + ordinarykriging.Point{101.179624, 21.555068}, + ordinarykriging.Point{101.145205, 21.561304}, + ordinarykriging.Point{101.149453, 21.587246}, + ordinarykriging.Point{101.166012, 21.588909}, + ordinarykriging.Point{101.16081, 21.643853}, + ordinarykriging.Point{101.15162, 21.67003}, + ordinarykriging.Point{101.136188, 21.671442}, + ordinarykriging.Point{101.117201, 21.692546}, + ordinarykriging.Point{101.120409, 21.70833}, + ordinarykriging.Point{101.111479, 21.748613}, + ordinarykriging.Point{101.123357, 21.771864}, + ordinarykriging.Point{101.090325, 21.773774}, + ordinarykriging.Point{101.019579, 21.720125}, + ordinarykriging.Point{101.014984, 21.707084}, + ordinarykriging.Point{100.967993, 21.695537}, + ordinarykriging.Point{100.940943, 21.697115}, + ordinarykriging.Point{100.914154, 21.682161}, + ordinarykriging.Point{100.887364, 21.685068}, + ordinarykriging.Point{100.844882, 21.634296}, + ordinarykriging.Point{100.834391, 21.633714}, + ordinarykriging.Point{100.804654, 21.609941}, + ordinarykriging.Point{100.783673, 21.567374}, + ordinarykriging.Point{100.753588, 21.555317}, + ordinarykriging.Point{100.730613, 21.518723}, + ordinarykriging.Point{100.691859, 21.510904}, + ordinarykriging.Point{100.669838, 21.487361}, + ordinarykriging.Point{100.644348, 21.482452}, + ordinarykriging.Point{100.578891, 21.451915}, + ordinarykriging.Point{100.557997, 21.450583}, + ordinarykriging.Point{100.526612, 21.471137}, + ordinarykriging.Point{100.48283, 21.459238}, + ordinarykriging.Point{100.464363, 21.478625}, + ordinarykriging.Point{100.43714, 21.532946}, + ordinarykriging.Point{100.423181, 21.540514}, + ordinarykriging.Point{100.389802, 21.52363}, + ordinarykriging.Point{100.350961, 21.529369}, + ordinarykriging.Point{100.316542, 21.489191}, + ordinarykriging.Point{100.292787, 21.477044}, + ordinarykriging.Point{100.280909, 21.482619}, + ordinarykriging.Point{100.247357, 21.463731}, + ordinarykriging.Point{100.229757, 21.471969}, + ordinarykriging.Point{100.206435, 21.509323}, + ordinarykriging.Point{100.180252, 21.514314}, + ordinarykriging.Point{100.168722, 21.483035}, + ordinarykriging.Point{100.126933, 21.508242}, + ordinarykriging.Point{100.12017, 21.543092}, + ordinarykriging.Point{100.122771, 21.567125}, + ordinarykriging.Point{100.108553, 21.583754}, + ordinarykriging.Point{100.111414, 21.599467}, + ordinarykriging.Point{100.135169, 21.616591}, + ordinarykriging.Point{100.153549, 21.647344}, + ordinarykriging.Point{100.169935, 21.646014}, + ordinarykriging.Point{100.169155, 21.664047}, + ordinarykriging.Point{100.147567, 21.687395}, + ordinarykriging.Point{100.118957, 21.703512}, + ordinarykriging.Point{100.097542, 21.704509}, + ordinarykriging.Point{100.046043, 21.669614}, + ordinarykriging.Point{100.030698, 21.674433}, + ordinarykriging.Point{100.033559, 21.69213}, + ordinarykriging.Point{99.991684, 21.703595}, + ordinarykriging.Point{99.983621, 21.716387}, + ordinarykriging.Point{99.959085, 21.79561}, + ordinarykriging.Point{99.944173, 21.821344}, + ordinarykriging.Point{99.946167, 21.861595}, + ordinarykriging.Point{99.964114, 21.885575}, + ordinarykriging.Point{99.959952, 21.907145}, + ordinarykriging.Point{99.98154, 21.91826}, + ordinarykriging.Point{99.981193, 21.934932}, + ordinarykriging.Point{99.998099, 21.968186}, + ordinarykriging.Point{99.992724, 21.986427}, + ordinarykriging.Point{99.965761, 22.014199}, + ordinarykriging.Point{99.958912, 22.037241}, + ordinarykriging.Point{99.972437, 22.052987}, + ordinarykriging.Point{99.871433, 22.066909}, + ordinarykriging.Point{99.869959, 22.02945}, + ordinarykriging.Point{99.834586, 22.028124}, + ordinarykriging.Point{99.824963, 22.043125}, + ordinarykriging.Point{99.763147, 22.067903}, + ordinarykriging.Point{99.721445, 22.060611}, + ordinarykriging.Point{99.712255, 22.036993}, + ordinarykriging.Point{99.690407, 22.04528}, + ordinarykriging.Point{99.696129, 22.067654}, + ordinarykriging.Point{99.676622, 22.074946}, + ordinarykriging.Point{99.648792, 22.100546}, + ordinarykriging.Point{99.612985, 22.093919}, + ordinarykriging.Point{99.592264, 22.112558}, + ordinarykriging.Point{99.575618, 22.094499}, + ordinarykriging.Point{99.562614, 22.113221}, + ordinarykriging.Point{99.516577, 22.099552}, + ordinarykriging.Point{99.487273, 22.128627}, + ordinarykriging.Point{99.471927, 22.130946}, + ordinarykriging.Point{99.448605, 22.113303}, + ordinarykriging.Point{99.399881, 22.100215}, + ordinarykriging.Point{99.365028, 22.104191}, + ordinarykriging.Point{99.354711, 22.095659}, + ordinarykriging.Point{99.300958, 22.100298}, + ordinarykriging.Point{99.292982, 22.11057}, + ordinarykriging.Point{99.272348, 22.100381}, + ordinarykriging.Point{99.256222, 22.112144}, + ordinarykriging.Point{99.220329, 22.111067}, + ordinarykriging.Point{99.187557, 22.139808}, + ordinarykriging.Point{99.169697, 22.14635}, + ordinarykriging.Point{99.158426, 22.165645}, + ordinarykriging.Point{99.18799, 22.163078}, + ordinarykriging.Point{99.174205, 22.177982}, + ordinarykriging.Point{99.208191, 22.232203}, + ordinarykriging.Point{99.235761, 22.250658}, + ordinarykriging.Point{99.233767, 22.296496}, + ordinarykriging.Point{99.254488, 22.329831}, + ordinarykriging.Point{99.277723, 22.344965}, + ordinarykriging.Point{99.276683, 22.36233}, + ordinarykriging.Point{99.253621, 22.380355}, + ordinarykriging.Point{99.25154, 22.393417}, + ordinarykriging.Point{99.282231, 22.401436}, + ordinarykriging.Point{99.302172, 22.416976}, + ordinarykriging.Point{99.312576, 22.437638}, + ordinarykriging.Point{99.333557, 22.445985}, + ordinarykriging.Point{99.381414, 22.50324}, + ordinarykriging.Point{99.35974, 22.520751}, + ordinarykriging.Point{99.359653, 22.535369}, + ordinarykriging.Point{99.386009, 22.573518}, + ordinarykriging.Point{99.371964, 22.601503}, + ordinarykriging.Point{99.361127, 22.662078}, + ordinarykriging.Point{99.348556, 22.672473}, + ordinarykriging.Point{99.339105, 22.709346}, + ordinarykriging.Point{99.31483, 22.737057}, + ordinarykriging.Point{99.326794, 22.751569}, + ordinarykriging.Point{99.386269, 22.762371}, + ordinarykriging.Point{99.386876, 22.788257}, + ordinarykriging.Point{99.401181, 22.826088}, + ordinarykriging.Point{99.419908, 22.827324}, + ordinarykriging.Point{99.442103, 22.844711}, + ordinarykriging.Point{99.462911, 22.844793}, + ordinarykriging.Point{99.436728, 22.91366}, + ordinarykriging.Point{99.446785, 22.934742}, + ordinarykriging.Point{99.506, 22.902789}, + ordinarykriging.Point{99.531489, 22.897106}, + ordinarykriging.Point{99.554464, 22.907072}, + ordinarykriging.Point{99.563307, 22.925601}, + ordinarykriging.Point{99.544927, 22.958784}, + ordinarykriging.Point{99.53357, 22.961418}, + ordinarykriging.Point{99.517097, 23.006773}, + ordinarykriging.Point{99.529408, 23.046024}, + ordinarykriging.Point{99.528021, 23.065604}, + ordinarykriging.Point{99.513976, 23.073172}, + ordinarykriging.Point{99.477476, 23.083043}, + ordinarykriging.Point{99.440716, 23.079177}, + ordinarykriging.Point{99.380634, 23.099903}, + ordinarykriging.Point{99.348556, 23.128685}, + ordinarykriging.Point{99.32532, 23.132385}, + ordinarykriging.Point{99.32532, 23.111006}, + ordinarykriging.Point{99.307721, 23.100808}, + ordinarykriging.Point{99.282145, 23.101137}, + ordinarykriging.Point{99.255442, 23.077943}, + ordinarykriging.Point{99.216687, 23.08954}, + ordinarykriging.Point{99.200561, 23.109196}, + ordinarykriging.Point{99.186776, 23.100561}, + ordinarykriging.Point{99.123573, 23.097272}, + ordinarykriging.Point{99.106494, 23.086579}, + ordinarykriging.Point{99.048406, 23.114706}, + ordinarykriging.Point{99.057509, 23.164448}, + ordinarykriging.Point{99.002803, 23.160256}, + ordinarykriging.Point{98.951824, 23.176942}, + ordinarykriging.Point{98.907174, 23.18549}, + ordinarykriging.Point{98.890442, 23.176449}, + ordinarykriging.Point{98.890008, 23.212035}, + ordinarykriging.Point{98.910816, 23.230934}, + ordinarykriging.Point{98.910556, 23.248926}, + ordinarykriging.Point{98.930236, 23.266751}, + ordinarykriging.Point{98.925294, 23.296483}, + ordinarykriging.Point{98.936912, 23.310114}, + ordinarykriging.Point{98.906914, 23.331708}, + ordinarykriging.Point{98.882032, 23.323662}, + ordinarykriging.Point{98.872842, 23.32982}, + ordinarykriging.Point{98.89469, 23.353463}, + ordinarykriging.Point{98.920613, 23.353873}, + ordinarykriging.Point{98.907261, 23.392284}, + ordinarykriging.Point{98.91255, 23.426335}, + ordinarykriging.Point{98.896164, 23.441266}, + ordinarykriging.Point{98.898505, 23.458574}, + ordinarykriging.Point{98.871802, 23.484572}, + ordinarykriging.Point{98.825851, 23.470056}, + ordinarykriging.Point{98.803657, 23.521223}, + ordinarykriging.Point{98.803743, 23.540569}, + ordinarykriging.Point{98.844665, 23.578926}, + ordinarykriging.Point{98.882119, 23.595314}, + ordinarykriging.Point{98.881945, 23.619974}, + ordinarykriging.Point{98.847266, 23.631934}, + ordinarykriging.Point{98.836082, 23.683693}, + ordinarykriging.Point{98.811893, 23.703097}, + ordinarykriging.Point{98.824117, 23.727492}, + ordinarykriging.Point{98.78623, 23.781422}, + ordinarykriging.Point{98.751378, 23.776267}, + ordinarykriging.Point{98.736812, 23.78764}, + ordinarykriging.Point{98.69511, 23.78494}, + ordinarykriging.Point{98.684793, 23.802039}, + ordinarykriging.Point{98.668841, 23.80073}, + ordinarykriging.Point{98.701439, 23.834348}, + ordinarykriging.Point{98.690862, 23.850623}, + ordinarykriging.Point{98.693723, 23.885781}, + ordinarykriging.Point{98.687828, 23.922075}, + ordinarykriging.Point{98.701093, 23.946346}, + ordinarykriging.Point{98.673176, 23.960646}, + ordinarykriging.Point{98.701179, 23.981479}, + ordinarykriging.Point{98.727622, 23.970368}, + ordinarykriging.Point{98.746783, 23.983276}, + ordinarykriging.Point{98.773919, 24.022237}, + ordinarykriging.Point{98.807471, 24.025177}, + ordinarykriging.Point{98.82117, 24.041673}, + ordinarykriging.Point{98.860271, 24.064452}, + ordinarykriging.Point{98.866773, 24.080779}, + ordinarykriging.Point{98.899892, 24.108939}, + ordinarykriging.Point{98.87683, 24.151533}, + ordinarykriging.Point{98.855329, 24.130727}, + ordinarykriging.Point{98.818482, 24.133501}, + ordinarykriging.Point{98.757707, 24.124362}, + ordinarykriging.Point{98.716525, 24.127626}, + ordinarykriging.Point{98.709502, 24.121261}, + ordinarykriging.Point{98.680545, 24.099798}, + ordinarykriging.Point{98.648207, 24.10649}, + ordinarykriging.Point{98.59376, 24.080534}, + ordinarykriging.Point{98.589945, 24.091146}, + ordinarykriging.Point{98.555439, 24.108694}, + ordinarykriging.Point{98.551018, 24.124689}, + ordinarykriging.Point{98.482179, 24.122567}, + ordinarykriging.Point{98.461632, 24.125913}, + ordinarykriging.Point{98.36609, 24.111468}, + ordinarykriging.Point{98.360368, 24.096859}, + ordinarykriging.Point{98.32855, 24.103226}, + ordinarykriging.Point{98.290403, 24.101593}, + ordinarykriging.Point{98.220177, 24.113427}, + ordinarykriging.Point{98.197289, 24.098329}, + ordinarykriging.Point{98.110504, 24.092697}, + ordinarykriging.Point{98.07383, 24.0758}, + ordinarykriging.Point{98.056577, 24.076779}, + ordinarykriging.Point{97.995455, 24.046327}, + ordinarykriging.Point{97.985138, 24.032037}, + ordinarykriging.Point{97.938321, 24.017337}, + ordinarykriging.Point{97.902168, 24.014234}, + ordinarykriging.Point{97.883441, 23.995203}, + ordinarykriging.Point{97.896792, 23.975679}, + ordinarykriging.Point{97.863153, 23.978865}, + ordinarykriging.Point{97.839311, 23.971431}, + ordinarykriging.Point{97.810094, 23.943405}, + ordinarykriging.Point{97.795875, 23.952066}, + ordinarykriging.Point{97.765878, 23.927632}, + ordinarykriging.Point{97.763884, 23.907199}, + ordinarykriging.Point{97.728251, 23.89551}, + ordinarykriging.Point{97.710998, 23.861498}, + ordinarykriging.Point{97.684208, 23.877033}, + ordinarykriging.Point{97.681, 23.860681}, + ordinarykriging.Point{97.663487, 23.851931}, + ordinarykriging.Point{97.658545, 23.865096}, + ordinarykriging.Point{97.647014, 23.841054}, + ordinarykriging.Point{97.641119, 23.871147}, + ordinarykriging.Point{97.61667, 23.890114}, + ordinarykriging.Point{97.572194, 23.912348}, + ordinarykriging.Point{97.528671, 23.926325}, + ordinarykriging.Point{97.529538, 23.942669}, + ordinarykriging.Point{97.567859, 23.967182}, + ordinarykriging.Point{97.572714, 23.982868}, + ordinarykriging.Point{97.628634, 24.004923}, + ordinarykriging.Point{97.635744, 24.047878}, + ordinarykriging.Point{97.675278, 24.070739}, + ordinarykriging.Point{97.692011, 24.093268}, + ordinarykriging.Point{97.730592, 24.111877}, + ordinarykriging.Point{97.73484, 24.149493}, + ordinarykriging.Point{97.753827, 24.162302}, + ordinarykriging.Point{97.743943, 24.1809}, + ordinarykriging.Point{97.728684, 24.183592}, + ordinarykriging.Point{97.729898, 24.227058}, + ordinarykriging.Point{97.767525, 24.259098}, + ordinarykriging.Point{97.749579, 24.282735}, + ordinarykriging.Point{97.721142, 24.295774}, + ordinarykriging.Point{97.698427, 24.290966}, + ordinarykriging.Point{97.665221, 24.296345}, + ordinarykriging.Point{97.662273, 24.339121}, + ordinarykriging.Point{97.684121, 24.337655}, + ordinarykriging.Point{97.715506, 24.355494}, + ordinarykriging.Point{97.714466, 24.374227}, + ordinarykriging.Point{97.690971, 24.385629}, + ordinarykriging.Point{97.677879, 24.408835}, + ordinarykriging.Point{97.678573, 24.438876}, + ordinarykriging.Point{97.669816, 24.452794}, + ordinarykriging.Point{97.58884, 24.435782}, + ordinarykriging.Point{97.576876, 24.441725}, + ordinarykriging.Point{97.531879, 24.431468}, + ordinarykriging.Point{97.529972, 24.441887}, + ordinarykriging.Point{97.555114, 24.493727}, + ordinarykriging.Point{97.561357, 24.568967}, + ordinarykriging.Point{97.567512, 24.606286}, + ordinarykriging.Point{97.569506, 24.675446}, + ordinarykriging.Point{97.564304, 24.72589}, + ordinarykriging.Point{97.547311, 24.738883}, + ordinarykriging.Point{97.57124, 24.76714}, + ordinarykriging.Point{97.588666, 24.76649}, + ordinarykriging.Point{97.651956, 24.791088}, + ordinarykriging.Point{97.680133, 24.827041}, + ordinarykriging.Point{97.701374, 24.842377}, + ordinarykriging.Point{97.710304, 24.833939}, + ordinarykriging.Point{97.765531, 24.824201}, + ordinarykriging.Point{97.797696, 24.845947}, + ordinarykriging.Point{97.784865, 24.877018}, + ordinarykriging.Point{97.764144, 24.878803}, + ordinarykriging.Point{97.729725, 24.908568}, + ordinarykriging.Point{97.731632, 24.947163}, + ordinarykriging.Point{97.716547, 24.978289}, + ordinarykriging.Point{97.718541, 25.012406}, + ordinarykriging.Point{97.727731, 25.043759}, + ordinarykriging.Point{97.720188, 25.080691}, + ordinarykriging.Point{97.74533, 25.080044}, + ordinarykriging.Point{97.777062, 25.122227}, + ordinarykriging.Point{97.797003, 25.157356}, + ordinarykriging.Point{97.819891, 25.232598}, + ordinarykriging.Point{97.839658, 25.270605}, + ordinarykriging.Point{97.873557, 25.259043}, + ordinarykriging.Point{97.903988, 25.216502}, + ordinarykriging.Point{97.914739, 25.211324}, + ordinarykriging.Point{97.948464, 25.219818}, + ordinarykriging.Point{98.007246, 25.280793}, + ordinarykriging.Point{98.004385, 25.291707}, + ordinarykriging.Point{98.023805, 25.308439}, + ordinarykriging.Point{98.038978, 25.301892}, + ordinarykriging.Point{98.070622, 25.312885}, + ordinarykriging.Point{98.073137, 25.329453}, + ordinarykriging.Point{98.089436, 25.33608}, + ordinarykriging.Point{98.099666, 25.35418}, + ordinarykriging.Point{98.10114, 25.388434}, + ordinarykriging.Point{98.137207, 25.381568}, + ordinarykriging.Point{98.151685, 25.407415}, + ordinarykriging.Point{98.157841, 25.457316}, + ordinarykriging.Point{98.131571, 25.510263}, + ordinarykriging.Point{98.16365, 25.524545}, + ordinarykriging.Point{98.186365, 25.554718}, + ordinarykriging.Point{98.189572, 25.568914}, + ordinarykriging.Point{98.170586, 25.620361}, + ordinarykriging.Point{98.194774, 25.613024}, + ordinarykriging.Point{98.24766, 25.607783}, + ordinarykriging.Point{98.274797, 25.590931}, + ordinarykriging.Point{98.314591, 25.543263}, + ordinarykriging.Point{98.326729, 25.566333}, + ordinarykriging.Point{98.371379, 25.583753}, + ordinarykriging.Point{98.382303, 25.595366}, + ordinarykriging.Point{98.40233, 25.594398}, + ordinarykriging.Point{98.409613, 25.619957}, + ordinarykriging.Point{98.408052, 25.652765}, + ordinarykriging.Point{98.415768, 25.671302}, + ordinarykriging.Point{98.457904, 25.682986}, + ordinarykriging.Point{98.467267, 25.702726}, + ordinarykriging.Point{98.461285, 25.735189}, + ordinarykriging.Point{98.481139, 25.759752}, + ordinarykriging.Point{98.479058, 25.784149}, + ordinarykriging.Point{98.528996, 25.840733}, + ordinarykriging.Point{98.568097, 25.841377}, + ordinarykriging.Point{98.605724, 25.811277}, + ordinarykriging.Point{98.640751, 25.7988}, + ordinarykriging.Point{98.664506, 25.816831}, + ordinarykriging.Point{98.677771, 25.816187}, + ordinarykriging.Point{98.680805, 25.833571}, + ordinarykriging.Point{98.706208, 25.856344}, + ordinarykriging.Point{98.703087, 25.893269}, + ordinarykriging.Point{98.686614, 25.925841}, + ordinarykriging.Point{98.661125, 25.955349}, + ordinarykriging.Point{98.637369, 25.971587}, + ordinarykriging.Point{98.614394, 25.968773}, + ordinarykriging.Point{98.601303, 26.027921}, + ordinarykriging.Point{98.601216, 26.057323}, + ordinarykriging.Point{98.575293, 26.11787}, + ordinarykriging.Point{98.590292, 26.139464}, + ordinarykriging.Point{98.604424, 26.128708}, + ordinarykriging.Point{98.627659, 26.144521}, + ordinarykriging.Point{98.654709, 26.140748}, + ordinarykriging.Point{98.66702, 26.116024}, + ordinarykriging.Point{98.662165, 26.087199}, + ordinarykriging.Point{98.701439, 26.110404}, + ordinarykriging.Point{98.720426, 26.128066}, + ordinarykriging.Point{98.708809, 26.146848}, + ordinarykriging.Point{98.730917, 26.164665}, + ordinarykriging.Point{98.735512, 26.183362}, + ordinarykriging.Point{98.713317, 26.231093}, + ordinarykriging.Point{98.672916, 26.239995}, + ordinarykriging.Point{98.683666, 26.307261}, + ordinarykriging.Point{98.707595, 26.32321}, + ordinarykriging.Point{98.733084, 26.349413}, + ordinarykriging.Point{98.729963, 26.377372}, + ordinarykriging.Point{98.742794, 26.385061}, + ordinarykriging.Point{98.749557, 26.425183}, + ordinarykriging.Point{98.746262, 26.444478}, + ordinarykriging.Point{98.755712, 26.499383}, + ordinarykriging.Point{98.753545, 26.5593}, + ordinarykriging.Point{98.768197, 26.570417}, + ordinarykriging.Point{98.781115, 26.60104}, + ordinarykriging.Point{98.781462, 26.620705}, + ordinarykriging.Point{98.762388, 26.661624}, + ordinarykriging.Point{98.770711, 26.689747}, + ordinarykriging.Point{98.747389, 26.695658}, + ordinarykriging.Point{98.743835, 26.711633}, + ordinarykriging.Point{98.756926, 26.745812}, + ordinarykriging.Point{98.762128, 26.798657}, + ordinarykriging.Point{98.73083, 26.851318}, + ordinarykriging.Point{98.757273, 26.881547}, + ordinarykriging.Point{98.751811, 26.918385}, + ordinarykriging.Point{98.736205, 26.968361}, + ordinarykriging.Point{98.742448, 26.987007}, + ordinarykriging.Point{98.732911, 27.00302}, + ordinarykriging.Point{98.762648, 27.018235}, + ordinarykriging.Point{98.765596, 27.050968}, + ordinarykriging.Point{98.740714, 27.071669}, + ordinarykriging.Point{98.712623, 27.075809}, + ordinarykriging.Point{98.713924, 27.13964}, + ordinarykriging.Point{98.695891, 27.209955}, + ordinarykriging.Point{98.722767, 27.22053}, + ordinarykriging.Point{98.717132, 27.23182}, + ordinarykriging.Point{98.731177, 27.245175}, + ordinarykriging.Point{98.715484, 27.257496}, + ordinarykriging.Point{98.734992, 27.287218}, + ordinarykriging.Point{98.7408, 27.330278}, + ordinarykriging.Point{98.732737, 27.351484}, + ordinarykriging.Point{98.706728, 27.362125}, + ordinarykriging.Point{98.702653, 27.412617}, + ordinarykriging.Point{98.687047, 27.425236}, + ordinarykriging.Point{98.690429, 27.447376}, + ordinarykriging.Point{98.704127, 27.46372}, + ordinarykriging.Point{98.684967, 27.486646}, + ordinarykriging.Point{98.705081, 27.517417}, + ordinarykriging.Point{98.698231, 27.535336}, + ordinarykriging.Point{98.70378, 27.560942}, + ordinarykriging.Point{98.685834, 27.563557}, + ordinarykriging.Point{98.664593, 27.5867}, + ordinarykriging.Point{98.644825, 27.564429}, + ordinarykriging.Point{98.586737, 27.584956}, + ordinarykriging.Point{98.556566, 27.645801}, + ordinarykriging.Point{98.537493, 27.635505}, + ordinarykriging.Point{98.535325, 27.62077}, + ordinarykriging.Point{98.507495, 27.624573}, + ordinarykriging.Point{98.505241, 27.632732}, + ordinarykriging.Point{98.474723, 27.634475}, + ordinarykriging.Point{98.444119, 27.665205}, + ordinarykriging.Point{98.429987, 27.653721}, + ordinarykriging.Point{98.43805, 27.622988}, + ordinarykriging.Point{98.429207, 27.548814}, + ordinarykriging.Point{98.40181, 27.540172}, + ordinarykriging.Point{98.390366, 27.516862}, + ordinarykriging.Point{98.372506, 27.507663}, + ordinarykriging.Point{98.33748, 27.508932}, + ordinarykriging.Point{98.317452, 27.519558}, + ordinarykriging.Point{98.306442, 27.553887}, + ordinarykriging.Point{98.310343, 27.583609}, + ordinarykriging.Point{98.288409, 27.632574}, + ordinarykriging.Point{98.28416, 27.653246}, + ordinarykriging.Point{98.266907, 27.657998}, + ordinarykriging.Point{98.263786, 27.671698}, + ordinarykriging.Point{98.234222, 27.690621}, + ordinarykriging.Point{98.221217, 27.710808}, + ordinarykriging.Point{98.223905, 27.725055}, + ordinarykriging.Point{98.245666, 27.735027}, + ordinarykriging.Point{98.224339, 27.751645}, + ordinarykriging.Point{98.217056, 27.775222}, + ordinarykriging.Point{98.222691, 27.812476}, + ordinarykriging.Point{98.20882, 27.813267}, + ordinarykriging.Point{98.176221, 27.83264}, + ordinarykriging.Point{98.169372, 27.850903}, + ordinarykriging.Point{98.181596, 27.872562}, + ordinarykriging.Point{98.197029, 27.872246}, + ordinarykriging.Point{98.205178, 27.889633}, + ordinarykriging.Point{98.188099, 27.939013}, + ordinarykriging.Point{98.15498, 27.938697}, + ordinarykriging.Point{98.140588, 27.951888}, + ordinarykriging.Point{98.132438, 27.98316}, + ordinarykriging.Point{98.144576, 28.017895}, + ordinarykriging.Point{98.139374, 28.04323}, + ordinarykriging.Point{98.151078, 28.05696}, + ordinarykriging.Point{98.160529, 28.09948}, + ordinarykriging.Point{98.149084, 28.112572}, + ordinarykriging.Point{98.140068, 28.141669}, + ordinarykriging.Point{98.150038, 28.155465}, + ordinarykriging.Point{98.174574, 28.163584}, + ordinarykriging.Point{98.169025, 28.204329}, + ordinarykriging.Point{98.20119, 28.219693}, + ordinarykriging.Point{98.217056, 28.212839}, + ordinarykriging.Point{98.228413, 28.225681}, + ordinarykriging.Point{98.265, 28.239939}, + ordinarykriging.Point{98.244539, 28.27845}, + ordinarykriging.Point{98.236736, 28.309312}, + ordinarykriging.Point{98.207432, 28.330406}, + ordinarykriging.Point{98.209773, 28.358577}, + ordinarykriging.Point{98.229974, 28.347247}, + ordinarykriging.Point{98.234916, 28.370064}, + ordinarykriging.Point{98.27341, 28.380763}, + ordinarykriging.Point{98.281213, 28.393978}, + ordinarykriging.Point{98.300113, 28.385955}, + ordinarykriging.Point{98.304014, 28.359128}, + ordinarykriging.Point{98.321961, 28.346774}, + ordinarykriging.Point{98.318146, 28.324582}, + ordinarykriging.Point{98.338867, 28.296007}, + ordinarykriging.Point{98.353346, 28.292937}, + ordinarykriging.Point{98.377448, 28.245925}, + ordinarykriging.Point{98.377795, 28.207796}, + ordinarykriging.Point{98.370252, 28.183841}, + ordinarykriging.Point{98.390192, 28.164373}, + ordinarykriging.Point{98.389325, 28.114623}, + ordinarykriging.Point{98.400076, 28.104686}, + ordinarykriging.Point{98.428773, 28.104528}, + ordinarykriging.Point{98.459031, 28.131655}, + ordinarykriging.Point{98.464406, 28.151129}, + ordinarykriging.Point{98.507495, 28.14427}, + ordinarykriging.Point{98.525789, 28.170521}, + ordinarykriging.Point{98.559514, 28.182895}, + ordinarykriging.Point{98.58535, 28.181319}, + ordinarykriging.Point{98.626532, 28.165555}, + ordinarykriging.Point{98.650201, 28.200232}, + ordinarykriging.Point{98.696064, 28.215518}, + ordinarykriging.Point{98.712363, 28.229462}, + ordinarykriging.Point{98.710196, 28.288843}, + ordinarykriging.Point{98.719126, 28.310335}, + ordinarykriging.Point{98.746696, 28.321276}, + ordinarykriging.Point{98.753632, 28.336938}, + ordinarykriging.Point{98.734211, 28.368569}, + ordinarykriging.Point{98.705167, 28.39327}, + ordinarykriging.Point{98.706815, 28.412853}, + ordinarykriging.Point{98.692769, 28.431804}, + ordinarykriging.Point{98.673869, 28.478734}, + ordinarykriging.Point{98.62974, 28.487143}, + ordinarykriging.Point{98.620116, 28.511502}, + ordinarykriging.Point{98.633381, 28.531377}, + ordinarykriging.Point{98.631994, 28.566642}, + ordinarykriging.Point{98.613701, 28.611785}, + ordinarykriging.Point{98.62081, 28.620026}, + ordinarykriging.Point{98.594194, 28.669539}, + ordinarykriging.Point{98.59428, 28.682796}, + ordinarykriging.Point{98.634248, 28.68915}, + ordinarykriging.Point{98.637889, 28.700444}, + ordinarykriging.Point{98.666673, 28.712285}, + ordinarykriging.Point{98.681672, 28.730869}, + ordinarykriging.Point{98.678984, 28.771631}, + ordinarykriging.Point{98.663812, 28.785893}, + ordinarykriging.Point{98.652281, 28.815902}, + ordinarykriging.Point{98.668234, 28.843552}, + ordinarykriging.Point{98.653495, 28.857492}, + ordinarykriging.Point{98.643872, 28.893742}, + ordinarykriging.Point{98.656963, 28.927085}, + ordinarykriging.Point{98.633641, 28.940466}, + ordinarykriging.Point{98.63078, 28.972854}, + ordinarykriging.Point{98.655836, 28.976843}, + ordinarykriging.Point{98.707422, 28.965345}, + ordinarykriging.Point{98.722074, 28.98138}, + ordinarykriging.Point{98.76603, 29.005858}, + ordinarykriging.Point{98.78571, 28.99882}, + ordinarykriging.Point{98.785623, 28.987637}, + ordinarykriging.Point{98.815448, 28.948916}, + ordinarykriging.Point{98.810939, 28.929589}, + ordinarykriging.Point{98.821516, 28.920981}, + ordinarykriging.Point{98.817875, 28.896012}, + ordinarykriging.Point{98.829059, 28.845902}, + ordinarykriging.Point{98.828019, 28.821621}, + ordinarykriging.Point{98.851948, 28.798587}, + ordinarykriging.Point{98.875269, 28.808146}, + ordinarykriging.Point{98.896511, 28.799606}, + ordinarykriging.Point{98.922173, 28.806814}, + ordinarykriging.Point{98.922607, 28.823266}, + ordinarykriging.Point{98.972198, 28.834467}, + ordinarykriging.Point{98.965262, 28.851462}, + ordinarykriging.Point{98.973759, 28.864931}, + ordinarykriging.Point{98.917318, 28.887949}, + ordinarykriging.Point{98.917492, 28.915815}, + ordinarykriging.Point{98.926075, 28.978486}, + ordinarykriging.Point{98.952691, 28.987168}, + ordinarykriging.Point{98.959974, 29.003825}, + ordinarykriging.Point{99.015374, 29.042448}, + ordinarykriging.Point{99.006531, 29.07793}, + ordinarykriging.Point{98.991272, 29.105901}, + ordinarykriging.Point{98.96743, 29.128319}, + ordinarykriging.Point{98.961101, 29.16955}, + ordinarykriging.Point{98.974106, 29.181572}, + ordinarykriging.Point{98.976446, 29.20452}, + ordinarykriging.Point{99.024217, 29.188676}, + ordinarykriging.Point{99.037569, 29.20772}, + ordinarykriging.Point{99.074676, 29.210607}, + ordinarykriging.Point{99.093489, 29.223327}, + ordinarykriging.Point{99.113776, 29.221376}, + ordinarykriging.Point{99.119152, 29.198901}, + ordinarykriging.Point{99.1058, 29.166895}, + ordinarykriging.Point{99.115077, 29.154559}, + ordinarykriging.Point{99.108748, 29.138706}, + ordinarykriging.Point{99.117938, 29.102386}, + ordinarykriging.Point{99.11395, 29.072538}, + ordinarykriging.Point{99.118632, 29.033771}, + ordinarykriging.Point{99.127388, 29.018916}, + ordinarykriging.Point{99.122967, 28.998351}, + ordinarykriging.Point{99.131723, 28.949463}, + ordinarykriging.Point{99.123573, 28.890141}, + ordinarykriging.Point{99.104066, 28.841907}, + ordinarykriging.Point{99.104326, 28.814257}, + ordinarykriging.Point{99.117851, 28.779311}, + ordinarykriging.Point{99.114557, 28.762931}, + ordinarykriging.Point{99.13389, 28.734789}, + ordinarykriging.Point{99.126955, 28.699503}, + ordinarykriging.Point{99.142474, 28.676599}, + ordinarykriging.Point{99.147329, 28.641058}, + ordinarykriging.Point{99.164408, 28.632897}, + ordinarykriging.Point{99.172731, 28.613825}, + ordinarykriging.Point{99.166142, 28.595849}, + ordinarykriging.Point{99.183742, 28.588941}, + ordinarykriging.Point{99.17013, 28.565228}, + ordinarykriging.Point{99.172124, 28.545123}, + ordinarykriging.Point{99.191632, 28.49673}, + ordinarykriging.Point{99.183395, 28.472761}, + ordinarykriging.Point{99.18721, 28.439902}, + ordinarykriging.Point{99.165449, 28.424492}, + ordinarykriging.Point{99.174465, 28.403416}, + ordinarykriging.Point{99.202382, 28.374548}, + ordinarykriging.Point{99.200908, 28.3644}, + ordinarykriging.Point{99.230819, 28.348978}, + ordinarykriging.Point{99.238449, 28.317026}, + ordinarykriging.Point{99.280584, 28.298054}, + ordinarykriging.Point{99.289514, 28.286087}, + ordinarykriging.Point{99.281538, 28.259944}, + ordinarykriging.Point{99.299571, 28.259078}, + ordinarykriging.Point{99.30668, 28.227571}, + ordinarykriging.Point{99.332516, 28.216621}, + ordinarykriging.Point{99.361127, 28.181082}, + ordinarykriging.Point{99.375952, 28.180846}, + ordinarykriging.Point{99.402395, 28.150735}, + ordinarykriging.Point{99.38835, 28.183368}, + ordinarykriging.Point{99.388003, 28.21536}, + ordinarykriging.Point{99.40569, 28.262307}, + ordinarykriging.Point{99.417654, 28.266717}, + ordinarykriging.Point{99.413839, 28.29278}, + ordinarykriging.Point{99.393118, 28.317734}, + ordinarykriging.Point{99.408984, 28.331744}, + ordinarykriging.Point{99.40699, 28.35779}, + ordinarykriging.Point{99.420862, 28.368805}, + ordinarykriging.Point{99.437335, 28.39854}, + ordinarykriging.Point{99.431526, 28.415684}, + ordinarykriging.Point{99.417827, 28.416707}, + ordinarykriging.Point{99.404476, 28.444226}, + ordinarykriging.Point{99.426497, 28.45256}, + ordinarykriging.Point{99.414013, 28.476769}, + ordinarykriging.Point{99.395633, 28.493115}, + ordinarykriging.Point{99.402829, 28.514173}, + ordinarykriging.Point{99.394592, 28.52415}, + ordinarykriging.Point{99.402915, 28.545751}, + ordinarykriging.Point{99.426757, 28.555333}, + ordinarykriging.Point{99.463431, 28.549207}, + ordinarykriging.Point{99.466032, 28.579755}, + ordinarykriging.Point{99.49707, 28.602836}, + ordinarykriging.Point{99.496723, 28.616259}, + ordinarykriging.Point{99.518224, 28.613825}, + ordinarykriging.Point{99.540766, 28.623558}, + ordinarykriging.Point{99.542586, 28.670638}, + ordinarykriging.Point{99.531662, 28.679972}, + ordinarykriging.Point{99.55377, 28.710403}, + ordinarykriging.Point{99.601108, 28.7264}, + ordinarykriging.Point{99.615846, 28.742158}, + ordinarykriging.Point{99.605789, 28.771552}, + ordinarykriging.Point{99.622522, 28.795297}, + ordinarykriging.Point{99.625557, 28.814648}, + ordinarykriging.Point{99.678356, 28.810261}, + ordinarykriging.Point{99.717804, 28.846293}, + ordinarykriging.Point{99.723612, 28.810731}, + ordinarykriging.Point{99.722745, 28.755955}, + ordinarykriging.Point{99.736444, 28.73471}, + ordinarykriging.Point{99.733149, 28.7195}, + ordinarykriging.Point{99.756471, 28.700365}, + ordinarykriging.Point{99.794445, 28.69911}, + ordinarykriging.Point{99.841696, 28.65322}, + ordinarykriging.Point{99.8345, 28.628031}, + ordinarykriging.Point{99.873254, 28.631798}, + ordinarykriging.Point{99.88045, 28.607703}, + ordinarykriging.Point{99.918684, 28.599068}, + ordinarykriging.Point{99.961599, 28.561537}, + ordinarykriging.Point{99.96446, 28.539625}, + ordinarykriging.Point{99.987002, 28.524464}, + ordinarykriging.Point{99.982407, 28.503252}, + ordinarykriging.Point{100.000874, 28.464901}, + ordinarykriging.Point{100.045263, 28.446192}, + ordinarykriging.Point{100.060956, 28.447686}, + ordinarykriging.Point{100.074654, 28.424334}, + ordinarykriging.Point{100.060956, 28.405854}, + ordinarykriging.Point{100.054193, 28.376594}, + ordinarykriging.Point{100.065551, 28.370221}, + ordinarykriging.Point{100.13647, 28.350079}, + ordinarykriging.Point{100.172623, 28.321118}, + ordinarykriging.Point{100.168722, 28.296322}, + ordinarykriging.Point{100.147567, 28.288764}, + ordinarykriging.Point{100.188402, 28.252777}, + ordinarykriging.Point{100.16352, 28.233479}, + ordinarykriging.Point{100.168201, 28.220717}, + ordinarykriging.Point{100.153289, 28.208269}, + ordinarykriging.Point{100.10968, 28.203541}, + ordinarykriging.Point{100.091994, 28.182343}, + ordinarykriging.Point{100.06399, 28.193691}, + ordinarykriging.Point{100.050292, 28.181791}, + ordinarykriging.Point{100.033299, 28.184629}, + ordinarykriging.Point{100.021161, 28.147424}, + ordinarykriging.Point{100.039714, 28.13063}, + ordinarykriging.Point{100.056534, 28.097903}, + ordinarykriging.Point{100.078035, 28.04173}, + ordinarykriging.Point{100.086445, 28.030603}, + ordinarykriging.Point{100.120951, 28.018685}, + ordinarykriging.Point{100.137163, 27.996818}, + ordinarykriging.Point{100.196205, 27.937354}, + ordinarykriging.Point{100.169935, 27.90765}, + ordinarykriging.Point{100.21051, 27.877225}, + ordinarykriging.Point{100.257847, 27.864974}, + ordinarykriging.Point{100.294868, 27.869559}, + ordinarykriging.Point{100.309173, 27.859125}, + ordinarykriging.Point{100.308566, 27.830426}, + ordinarykriging.Point{100.286024, 27.805912}, + ordinarykriging.Point{100.302844, 27.792388}, + ordinarykriging.Point{100.307092, 27.748638}, + ordinarykriging.Point{100.299463, 27.736135}, + ordinarykriging.Point{100.327726, 27.720465}, + ordinarykriging.Point{100.344372, 27.734315}, + ordinarykriging.Point{100.350788, 27.755997}, + ordinarykriging.Point{100.374717, 27.754573}, + ordinarykriging.Point{100.376971, 27.775618}, + ordinarykriging.Point{100.392837, 27.787483}, + ordinarykriging.Point{100.41191, 27.816351}, + ordinarykriging.Point{100.414685, 27.840073}, + ordinarykriging.Point{100.443208, 27.866239}, + ordinarykriging.Point{100.473726, 27.859678}, + ordinarykriging.Point{100.495661, 27.844658}, + ordinarykriging.Point{100.504331, 27.85201}, + ordinarykriging.Point{100.51118, 27.827659}, + ordinarykriging.Point{100.536582, 27.824654}, + ordinarykriging.Point{100.546379, 27.808601}, + ordinarykriging.Point{100.559904, 27.824101}, + ordinarykriging.Point{100.609496, 27.859994}, + ordinarykriging.Point{100.609062, 27.876198}, + ordinarykriging.Point{100.634638, 27.915393}, + ordinarykriging.Point{100.654405, 27.910494}, + ordinarykriging.Point{100.681282, 27.922266}, + ordinarykriging.Point{100.70313, 27.888922}, + ordinarykriging.Point{100.70209, 27.867029}, + ordinarykriging.Point{100.719516, 27.858255}, + ordinarykriging.Point{100.70391, 27.818565}, + ordinarykriging.Point{100.709459, 27.798557}, + ordinarykriging.Point{100.757403, 27.766757}, + ordinarykriging.Point{100.77613, 27.739934}, + ordinarykriging.Point{100.781505, 27.69363}, + ordinarykriging.Point{100.789048, 27.684367}, + ordinarykriging.Point{100.836472, 27.681675}, + ordinarykriging.Point{100.848436, 27.670668}, + ordinarykriging.Point{100.832224, 27.650395}, + ordinarykriging.Point{100.851818, 27.643346}, + ordinarykriging.Point{100.828149, 27.6157}, + ordinarykriging.Point{100.855285, 27.623622}, + ordinarykriging.Point{100.854072, 27.596605}, + ordinarykriging.Point{100.868117, 27.591851}, + ordinarykriging.Point{100.912073, 27.521699}, + ordinarykriging.Point{100.901582, 27.486249}, + ordinarykriging.Point{100.901322, 27.453406}, + ordinarykriging.Point{100.921263, 27.471336}, + ordinarykriging.Point{100.936782, 27.469194}, + ordinarykriging.Point{100.957676, 27.439997}, + ordinarykriging.Point{100.952127, 27.426268}, + ordinarykriging.Point{100.995217, 27.368239}, + ordinarykriging.Point{100.99669, 27.355058}, + ordinarykriging.Point{101.020272, 27.344495}, + ordinarykriging.Point{101.010215, 27.312246}, + ordinarykriging.Point{101.029983, 27.294608}, + ordinarykriging.Point{101.028075, 27.266556}, + ordinarykriging.Point{101.042554, 27.247003}, + ordinarykriging.Point{101.04238, 27.221643}, + ordinarykriging.Point{101.060327, 27.198345}, + ordinarykriging.Point{101.074892, 27.19413}, + ordinarykriging.Point{101.118675, 27.208683}, + ordinarykriging.Point{101.170434, 27.195641}, + ordinarykriging.Point{101.170347, 27.175121}, + ordinarykriging.Point{101.145291, 27.10375}, + ordinarykriging.Point{101.156822, 27.095949}, + ordinarykriging.Point{101.137402, 27.022377}, + ordinarykriging.Point{101.227221, 26.984377}, + ordinarykriging.Point{101.227048, 26.958958}, + ordinarykriging.Point{101.264501, 26.955531}, + ordinarykriging.Point{101.255572, 26.923886}, + ordinarykriging.Point{101.267796, 26.902998}, + ordinarykriging.Point{101.293979, 26.89614}, + ordinarykriging.Point{101.311579, 26.902918}, + ordinarykriging.Point{101.323283, 26.888246}, + ordinarykriging.Point{101.365418, 26.8837}, + ordinarykriging.Point{101.374695, 26.865357}, + ordinarykriging.Point{101.399317, 26.841905}, + ordinarykriging.Point{101.372007, 26.800333}, + ordinarykriging.Point{101.379897, 26.786446}, + ordinarykriging.Point{101.357789, 26.770641}, + ordinarykriging.Point{101.390214, 26.749964}, + ordinarykriging.Point{101.389694, 26.723213}, + ordinarykriging.Point{101.421339, 26.72481}, + ordinarykriging.Point{101.436077, 26.740542}, + ordinarykriging.Point{101.457058, 26.729762}, + ordinarykriging.Point{101.459139, 26.747409}, + ordinarykriging.Point{101.445961, 26.774233}, + ordinarykriging.Point{101.460613, 26.786605}, + ordinarykriging.Point{101.4972, 26.770481}, + ordinarykriging.Point{101.512632, 26.769683}, + ordinarykriging.Point{101.510638, 26.754435}, + ordinarykriging.Point{101.492171, 26.74645}, + ordinarykriging.Point{101.498934, 26.732237}, + ordinarykriging.Point{101.472751, 26.721456}, + ordinarykriging.Point{101.454457, 26.703646}, + ordinarykriging.Point{101.454024, 26.691184}, + ordinarykriging.Point{101.481247, 26.673209}, + ordinarykriging.Point{101.461047, 26.640767}, + ordinarykriging.Point{101.462174, 26.607116}, + ordinarykriging.Point{101.452117, 26.60096}, + ordinarykriging.Point{101.400271, 26.605117}, + ordinarykriging.Point{101.396023, 26.592006}, + ordinarykriging.Point{101.4066, 26.556341}, + ordinarykriging.Point{101.422899, 26.531706}, + ordinarykriging.Point{101.438505, 26.538505}, + ordinarykriging.Point{101.440326, 26.511865}, + ordinarykriging.Point{101.458706, 26.495462}, + ordinarykriging.Point{101.50691, 26.499703}, + ordinarykriging.Point{101.529972, 26.467211}, + ordinarykriging.Point{101.563871, 26.455525}, + ordinarykriging.Point{101.588146, 26.425823}, + ordinarykriging.Point{101.620225, 26.408607}, + ordinarykriging.Point{101.619011, 26.396595}, + ordinarykriging.Point{101.637564, 26.389066}, + ordinarykriging.Point{101.63557, 26.357585}, + ordinarykriging.Point{101.660626, 26.346849}, + ordinarykriging.Point{101.640339, 26.318882}, + ordinarykriging.Point{101.660366, 26.310868}, + ordinarykriging.Point{101.646928, 26.305177}, + ordinarykriging.Point{101.621005, 26.312871}, + ordinarykriging.Point{101.597423, 26.303414}, + ordinarykriging.Point{101.586239, 26.279686}, + ordinarykriging.Point{101.594475, 26.261566}, + ordinarykriging.Point{101.615716, 26.252264}, + ordinarykriging.Point{101.630368, 26.224837}, + ordinarykriging.Point{101.649962, 26.234301}, + ordinarykriging.Point{101.671637, 26.231895}, + ordinarykriging.Point{101.690017, 26.241679}, + ordinarykriging.Point{101.705016, 26.224435}, + ordinarykriging.Point{101.735707, 26.219944}, + ordinarykriging.Point{101.77316, 26.168276}, + ordinarykriging.Point{101.80758, 26.156319}, + ordinarykriging.Point{101.799083, 26.146929}, + ordinarykriging.Point{101.796569, 26.11482}, + ordinarykriging.Point{101.819544, 26.087119}, + ordinarykriging.Point{101.839918, 26.082381}, + ordinarykriging.Point{101.83541, 26.045836}, + ordinarykriging.Point{101.858038, 26.04937}, + ordinarykriging.Point{101.89974, 26.099244}, + ordinarykriging.Point{101.922888, 26.107995}, + ordinarykriging.Point{101.954707, 26.084469}, + ordinarykriging.Point{102.020771, 26.096273}, + ordinarykriging.Point{102.052589, 26.075474}, + ordinarykriging.Point{102.084321, 26.065194}, + ordinarykriging.Point{102.107816, 26.068246}, + ordinarykriging.Point{102.115532, 26.085272}, + ordinarykriging.Point{102.130964, 26.087119}, + ordinarykriging.Point{102.137033, 26.108317}, + ordinarykriging.Point{102.152292, 26.109601}, + ordinarykriging.Point{102.175094, 26.147009}, + ordinarykriging.Point{102.199629, 26.158486}, + ordinarykriging.Point{102.236476, 26.185127}, + ordinarykriging.Point{102.244886, 26.21088}, + ordinarykriging.Point{102.257457, 26.220104}, + ordinarykriging.Point{102.282773, 26.220184}, + ordinarykriging.Point{102.349011, 26.244726}, + ordinarykriging.Point{102.396088, 26.297642}, + ordinarykriging.Point{102.43805, 26.300047}, + ordinarykriging.Point{102.541914, 26.338515}, + ordinarykriging.Point{102.551625, 26.362151}, + ordinarykriging.Point{102.571132, 26.362632}, + ordinarykriging.Point{102.629393, 26.336833}, + ordinarykriging.Point{102.638583, 26.307662}, + ordinarykriging.Point{102.611273, 26.282331}, + ordinarykriging.Point{102.601303, 26.249057}, + ordinarykriging.Point{102.620116, 26.245769}, + ordinarykriging.Point{102.659131, 26.221388}, + ordinarykriging.Point{102.674563, 26.205425}, + ordinarykriging.Point{102.719733, 26.218179}, + ordinarykriging.Point{102.723547, 26.245689}, + ordinarykriging.Point{102.739933, 26.268622}, + ordinarykriging.Point{102.764816, 26.277681}, + ordinarykriging.Point{102.78519, 26.298925}, + ordinarykriging.Point{102.833394, 26.30662}, + ordinarykriging.Point{102.867467, 26.338996}, + ordinarykriging.Point{102.879518, 26.365516}, + ordinarykriging.Point{102.89469, 26.338515}, + ordinarykriging.Point{102.971591, 26.340278}, + ordinarykriging.Point{102.985116, 26.345727}, + ordinarykriging.Point{102.998208, 26.371925}, + ordinarykriging.Point{102.988324, 26.409088}, + ordinarykriging.Point{102.998121, 26.450322}, + ordinarykriging.Point{102.989885, 26.482658}, + ordinarykriging.Point{103.031847, 26.4869}, + ordinarykriging.Point{103.052481, 26.514585}, + ordinarykriging.Point{103.054562, 26.541864}, + ordinarykriging.Point{103.036702, 26.555382}, + ordinarykriging.Point{103.019362, 26.594324}, + ordinarykriging.Point{103.029679, 26.60168}, + ordinarykriging.Point{103.024391, 26.641246}, + ordinarykriging.Point{103.027425, 26.662583}, + ordinarykriging.Point{103.00523, 26.68048}, + ordinarykriging.Point{103.010432, 26.701329}, + ordinarykriging.Point{102.983642, 26.765612}, + ordinarykriging.Point{102.991705, 26.774632}, + ordinarykriging.Point{102.962748, 26.840548}, + ordinarykriging.Point{102.947402, 26.844298}, + ordinarykriging.Point{102.909429, 26.902679}, + ordinarykriging.Point{102.896597, 26.91137}, + ordinarykriging.Point{102.888881, 26.951625}, + ordinarykriging.Point{102.894863, 27.001586}, + ordinarykriging.Point{102.872582, 27.022695}, + ordinarykriging.Point{102.885326, 27.059567}, + ordinarykriging.Point{102.898938, 27.076287}, + ordinarykriging.Point{102.913503, 27.140038}, + ordinarykriging.Point{102.902233, 27.19588}, + ordinarykriging.Point{102.900499, 27.237305}, + ordinarykriging.Point{102.882986, 27.259324}, + ordinarykriging.Point{102.882119, 27.293337}, + ordinarykriging.Point{102.900065, 27.317648}, + ordinarykriging.Point{102.911423, 27.349101}, + ordinarykriging.Point{102.944975, 27.410474}, + ordinarykriging.Point{102.955292, 27.411426}, + ordinarykriging.Point{102.962488, 27.389914}, + ordinarykriging.Point{102.98529, 27.367366}, + ordinarykriging.Point{103.025864, 27.382531}, + ordinarykriging.Point{103.055602, 27.409521}, + ordinarykriging.Point{103.079531, 27.397297}, + ordinarykriging.Point{103.111609, 27.401028}, + ordinarykriging.Point{103.142907, 27.421903}, + ordinarykriging.Point{103.144554, 27.45055}, + ordinarykriging.Point{103.190331, 27.523522}, + ordinarykriging.Point{103.204463, 27.529152}, + ordinarykriging.Point{103.218161, 27.562131}, + ordinarykriging.Point{103.236194, 27.570453}, + ordinarykriging.Point{103.278677, 27.561893}, + ordinarykriging.Point{103.295583, 27.566966}, + ordinarykriging.Point{103.298531, 27.601201}, + ordinarykriging.Point{103.280411, 27.617998}, + ordinarykriging.Point{103.31457, 27.655305}, + ordinarykriging.Point{103.349769, 27.678428}, + ordinarykriging.Point{103.370057, 27.708671}, + ordinarykriging.Point{103.393032, 27.709383}, + ordinarykriging.Point{103.420862, 27.742941}, + ordinarykriging.Point{103.448172, 27.755126}, + ordinarykriging.Point{103.459789, 27.777595}, + ordinarykriging.Point{103.489527, 27.79745}, + ordinarykriging.Point{103.508601, 27.839124}, + ordinarykriging.Point{103.499931, 27.877542}, + ordinarykriging.Point{103.502965, 27.911758}, + ordinarykriging.Point{103.541979, 27.953625}, + ordinarykriging.Point{103.556718, 27.955205}, + ordinarykriging.Point{103.563221, 27.977632}, + ordinarykriging.Point{103.541719, 27.966419}, + ordinarykriging.Point{103.515536, 27.965551}, + ordinarykriging.Point{103.49889, 27.984107}, + ordinarykriging.Point{103.496116, 28.022473}, + ordinarykriging.Point{103.47921, 28.033996}, + ordinarykriging.Point{103.459443, 28.021368}, + ordinarykriging.Point{103.430832, 28.04465}, + ordinarykriging.Point{103.432913, 28.072187}, + ordinarykriging.Point{103.453634, 28.087728}, + ordinarykriging.Point{103.455021, 28.123691}, + ordinarykriging.Point{103.47028, 28.122193}, + ordinarykriging.Point{103.533136, 28.16855}, + ordinarykriging.Point{103.552643, 28.191248}, + ordinarykriging.Point{103.573191, 28.230959}, + ordinarykriging.Point{103.618101, 28.243641}, + ordinarykriging.Point{103.632406, 28.260023}, + ordinarykriging.Point{103.649485, 28.25703}, + ordinarykriging.Point{103.694655, 28.227335}, + ordinarykriging.Point{103.702025, 28.198971}, + ordinarykriging.Point{103.721272, 28.201965}, + ordinarykriging.Point{103.739998, 28.236}, + ordinarykriging.Point{103.770776, 28.233558}, + ordinarykriging.Point{103.785862, 28.254037}, + ordinarykriging.Point{103.812998, 28.265142}, + ordinarykriging.Point{103.828951, 28.284985}, + ordinarykriging.Point{103.868919, 28.300337}, + ordinarykriging.Point{103.875595, 28.32222}, + ordinarykriging.Point{103.8534, 28.356768}, + ordinarykriging.Point{103.859815, 28.383516}, + ordinarykriging.Point{103.851232, 28.406719}, + ordinarykriging.Point{103.828951, 28.439824}, + ordinarykriging.Point{103.830251, 28.458377}, + ordinarykriging.Point{103.810397, 28.495394}, + ordinarykriging.Point{103.783694, 28.526585}, + ordinarykriging.Point{103.800687, 28.533812}, + ordinarykriging.Point{103.801381, 28.561851}, + ordinarykriging.Point{103.835453, 28.582581}, + ordinarykriging.Point{103.834846, 28.622302}, + ordinarykriging.Point{103.851146, 28.667107}, + ordinarykriging.Point{103.873687, 28.65275}, + ordinarykriging.Point{103.874641, 28.626462}, + ordinarykriging.Point{103.896315, 28.619712}, + ordinarykriging.Point{103.909927, 28.631249}, + ordinarykriging.Point{103.936717, 28.622616}, + ordinarykriging.Point{103.942526, 28.603071}, + ordinarykriging.Point{104.059568, 28.627639}, + ordinarykriging.Point{104.089653, 28.604013}, + ordinarykriging.Point{104.103351, 28.60629}, + ordinarykriging.Point{104.125199, 28.637292}, + ordinarykriging.Point{104.170369, 28.64302}, + ordinarykriging.Point{104.190396, 28.634153}, + ordinarykriging.Point{104.231058, 28.635801}, + ordinarykriging.Point{104.241461, 28.660831}, + ordinarykriging.Point{104.252645, 28.660674}, + ordinarykriging.Point{104.269638, 28.635173}, + ordinarykriging.Point{104.296428, 28.634388}, + ordinarykriging.Point{104.314895, 28.615631}, + ordinarykriging.Point{104.343939, 28.64098}, + ordinarykriging.Point{104.37411, 28.649297}, + ordinarykriging.Point{104.404888, 28.640666}, + ordinarykriging.Point{104.425262, 28.626697}, + ordinarykriging.Point{104.417286, 28.598047}, + ordinarykriging.Point{104.387721, 28.598911}, + ordinarykriging.Point{104.368388, 28.585957}, + ordinarykriging.Point{104.35677, 28.555726}, + ordinarykriging.Point{104.330934, 28.559731}, + ordinarykriging.Point{104.323478, 28.541196}, + ordinarykriging.Point{104.287758, 28.532556}, + ordinarykriging.Point{104.262009, 28.536954}, + ordinarykriging.Point{104.248311, 28.528392}, + ordinarykriging.Point{104.248657, 28.509616}, + ordinarykriging.Point{104.266691, 28.502073}, + ordinarykriging.Point{104.261142, 28.482585}, + ordinarykriging.Point{104.269812, 28.468359}, + ordinarykriging.Point{104.258368, 28.453188}, + ordinarykriging.Point{104.267644, 28.420481}, + ordinarykriging.Point{104.2549, 28.410101}, + ordinarykriging.Point{104.278395, 28.346617}, + ordinarykriging.Point{104.30189, 28.328517}, + ordinarykriging.Point{104.290012, 28.314743}, + ordinarykriging.Point{104.313941, 28.306635}, + ordinarykriging.Point{104.340991, 28.332688}, + ordinarykriging.Point{104.358244, 28.338905}, + ordinarykriging.Point{104.384774, 28.330091}, + ordinarykriging.Point{104.393617, 28.289945}, + ordinarykriging.Point{104.408269, 28.269867}, + ordinarykriging.Point{104.447283, 28.271205}, + ordinarykriging.Point{104.444075, 28.259235}, + ordinarykriging.Point{104.460808, 28.24435}, + ordinarykriging.Point{104.435839, 28.209293}, + ordinarykriging.Point{104.402287, 28.202832}, + ordinarykriging.Point{104.406362, 28.173358}, + ordinarykriging.Point{104.444682, 28.162087}, + ordinarykriging.Point{104.451011, 28.116358}, + ordinarykriging.Point{104.433758, 28.113913}, + ordinarykriging.Point{104.421447, 28.097193}, + ordinarykriging.Point{104.40064, 28.091514}, + ordinarykriging.Point{104.398125, 28.068795}, + ordinarykriging.Point{104.376451, 28.052304}, + ordinarykriging.Point{104.341425, 28.057907}, + ordinarykriging.Point{104.304058, 28.050726}, + ordinarykriging.Point{104.298769, 28.043861}, + ordinarykriging.Point{104.326599, 28.025473}, + ordinarykriging.Point{104.356163, 28.018448}, + ordinarykriging.Point{104.378792, 27.993739}, + ordinarykriging.Point{104.383473, 27.968709}, + ordinarykriging.Point{104.40116, 27.952283}, + ordinarykriging.Point{104.451965, 27.926216}, + ordinarykriging.Point{104.468177, 27.907413}, + ordinarykriging.Point{104.496181, 27.896903}, + ordinarykriging.Point{104.509533, 27.8777}, + ordinarykriging.Point{104.526699, 27.889475}, + ordinarykriging.Point{104.558344, 27.867978}, + ordinarykriging.Point{104.557997, 27.852643}, + ordinarykriging.Point{104.580885, 27.842049}, + ordinarykriging.Point{104.607935, 27.858176}, + ordinarykriging.Point{104.633598, 27.850903}, + ordinarykriging.Point{104.679114, 27.882284}, + ordinarykriging.Point{104.743705, 27.90204}, + ordinarykriging.Point{104.76668, 27.884733}, + ordinarykriging.Point{104.79529, 27.900538}, + ordinarykriging.Point{104.858407, 27.902435}, + ordinarykriging.Point{104.887017, 27.913022}, + ordinarykriging.Point{104.894733, 27.934906}, + ordinarykriging.Point{104.921089, 27.941699}, + ordinarykriging.Point{104.903056, 27.960417}, + ordinarykriging.Point{104.929239, 27.984976}, + ordinarykriging.Point{104.947099, 27.980554}, + ordinarykriging.Point{104.946926, 27.994845}, + ordinarykriging.Point{104.975016, 28.019869}, + ordinarykriging.Point{104.976316, 28.060116}, + ordinarykriging.Point{105.011082, 28.066743}, + ordinarykriging.Point{105.059113, 28.09814}, + ordinarykriging.Point{105.078274, 28.08331}, + ordinarykriging.Point{105.108098, 28.081102}, + ordinarykriging.Point{105.144251, 28.066664}, + ordinarykriging.Point{105.166359, 28.07195}, + ordinarykriging.Point{105.185519, 28.056802}, + ordinarykriging.Point{105.183785, 28.04031}, + ordinarykriging.Point{105.167573, 28.023657}, + ordinarykriging.Point{105.184392, 27.996424}, + ordinarykriging.Point{105.215604, 27.990581}, + ordinarykriging.Point{105.248809, 28.008107}, + ordinarykriging.Point{105.27083, 27.995792}, + ordinarykriging.Point{105.26875, 27.98316}, + ordinarykriging.Point{105.283402, 27.959944}, + ordinarykriging.Point{105.280887, 27.929139}, + ordinarykriging.Point{105.264155, 27.9116}, + ordinarykriging.Point{105.248202, 27.912469}, + ordinarykriging.Point{105.232683, 27.892952}, + ordinarykriging.Point{105.250196, 27.844816}, + ordinarykriging.Point{105.24118, 27.830822}, + ordinarykriging.Point{105.274385, 27.817142}, + ordinarykriging.Point{105.31418, 27.819435}, + ordinarykriging.Point{105.273865, 27.795235}, + ordinarykriging.Point{105.292939, 27.771267}, + ordinarykriging.Point{105.28791, 27.742387}, + ordinarykriging.Point{105.290511, 27.71247}, + ordinarykriging.Point{105.305683, 27.707879}, + ordinarykriging.Point{105.301348, 27.682783}, + ordinarykriging.Point{105.309845, 27.654989}, + ordinarykriging.Point{105.295019, 27.632891}, + ordinarykriging.Point{105.304296, 27.611897}, + ordinarykriging.Point{105.257912, 27.583688}, + ordinarykriging.Point{105.234764, 27.540172}, + ordinarykriging.Point{105.246728, 27.545167}, + ordinarykriging.Point{105.260167, 27.519637}, + ordinarykriging.Point{105.248029, 27.494657}, + ordinarykriging.Point{105.235891, 27.490532}, + ordinarykriging.Point{105.239012, 27.469829}, + ordinarykriging.Point{105.226094, 27.441108}, + ordinarykriging.Point{105.23277, 27.436346}, + ordinarykriging.Point{105.213263, 27.401107}, + ordinarykriging.Point{105.182658, 27.367604}, + ordinarykriging.Point{105.184739, 27.392455}, + ordinarykriging.Point{105.167226, 27.408807}, + ordinarykriging.Point{105.150927, 27.404997}, + ordinarykriging.Point{105.121449, 27.41849}, + ordinarykriging.Point{105.097174, 27.411903}, + ordinarykriging.Point{105.070384, 27.419046}, + ordinarykriging.Point{105.031456, 27.400234}, + ordinarykriging.Point{105.012123, 27.380229}, + ordinarykriging.Point{104.943804, 27.346639}, + ordinarykriging.Point{104.913547, 27.327101}, + ordinarykriging.Point{104.904097, 27.306049}, + ordinarykriging.Point{104.871238, 27.290873}, + ordinarykriging.Point{104.850517, 27.304301}, + ordinarykriging.Point{104.856499, 27.332581}, + ordinarykriging.Point{104.826068, 27.352357}, + ordinarykriging.Point{104.808989, 27.35474}, + ordinarykriging.Point{104.789135, 27.321064}, + ordinarykriging.Point{104.771015, 27.317409}, + ordinarykriging.Point{104.754369, 27.345369}, + ordinarykriging.Point{104.735642, 27.334647}, + ordinarykriging.Point{104.722637, 27.34243}, + ordinarykriging.Point{104.686137, 27.334805}, + ordinarykriging.Point{104.680242, 27.319634}, + ordinarykriging.Point{104.630824, 27.317886}, + ordinarykriging.Point{104.611316, 27.307002}, + ordinarykriging.Point{104.594757, 27.311292}, + ordinarykriging.Point{104.570221, 27.331708}, + ordinarykriging.Point{104.539357, 27.329722}, + ordinarykriging.Point{104.507625, 27.387533}, + ordinarykriging.Point{104.517249, 27.400393}, + ordinarykriging.Point{104.490892, 27.401901}, + ordinarykriging.Point{104.497655, 27.411585}, + ordinarykriging.Point{104.467137, 27.414284}, + ordinarykriging.Point{104.416592, 27.435553}, + ordinarykriging.Point{104.410176, 27.457929}, + ordinarykriging.Point{104.353129, 27.466894}, + ordinarykriging.Point{104.332755, 27.444044}, + ordinarykriging.Point{104.342638, 27.436346}, + ordinarykriging.Point{104.322438, 27.407854}, + ordinarykriging.Point{104.308826, 27.407299}, + ordinarykriging.Point{104.295821, 27.374671}, + ordinarykriging.Point{104.270419, 27.360934}, + ordinarykriging.Point{104.247877, 27.336394}, + ordinarykriging.Point{104.259928, 27.308353}, + ordinarykriging.Point{104.250391, 27.291509}, + ordinarykriging.Point{104.210857, 27.29723}, + ordinarykriging.Point{104.21918, 27.279828}, + ordinarykriging.Point{104.190483, 27.287695}, + ordinarykriging.Point{104.174184, 27.263059}, + ordinarykriging.Point{104.131528, 27.306605}, + ordinarykriging.Point{104.134216, 27.322335}, + ordinarykriging.Point{104.113841, 27.337982}, + ordinarykriging.Point{104.084364, 27.330993}, + ordinarykriging.Point{104.057834, 27.355613}, + ordinarykriging.Point{104.029831, 27.368001}, + ordinarykriging.Point{104.01752, 27.384516}, + ordinarykriging.Point{104.015266, 27.429284}, + ordinarykriging.Point{103.992637, 27.419681}, + ordinarykriging.Point{103.956484, 27.425395}, + ordinarykriging.Point{103.932469, 27.443964}, + ordinarykriging.Point{103.92588, 27.413887}, + ordinarykriging.Point{103.904899, 27.384595}, + ordinarykriging.Point{103.903338, 27.349737}, + ordinarykriging.Point{103.885738, 27.330755}, + ordinarykriging.Point{103.874034, 27.330357}, + ordinarykriging.Point{103.865451, 27.281735}, + ordinarykriging.Point{103.84551, 27.287536}, + ordinarykriging.Point{103.824876, 27.264172}, + ordinarykriging.Point{103.802334, 27.267272}, + ordinarykriging.Point{103.801381, 27.250739}, + ordinarykriging.Point{103.764534, 27.212022}, + ordinarykriging.Point{103.749622, 27.211307}, + ordinarykriging.Point{103.696216, 27.12667}, + ordinarykriging.Point{103.674715, 27.131126}, + ordinarykriging.Point{103.624516, 27.112186}, + ordinarykriging.Point{103.620441, 27.096745}, + ordinarykriging.Point{103.6533, 27.092606}, + ordinarykriging.Point{103.659802, 27.065778}, + ordinarykriging.Point{103.617927, 27.07979}, + ordinarykriging.Point{103.601454, 27.062195}, + ordinarykriging.Point{103.623649, 27.035359}, + ordinarykriging.Point{103.628158, 27.016084}, + ordinarykriging.Point{103.614373, 27.00541}, + }} + polygon := ordinarykriging.PolygonGeometry{Type: "", Coordinates: coordinates} + + //go func() { + // gridMatrices := RunOrdinaryKriging(values, lons, lats, model, 0, 100, polygon.Coordinates) + // done <- gridMatrices + //}() + + //gridMatrices := <-done + + //<-done + + OrdinaryKriging(values, lons, lats, model, 0, 100, 0.01, polygon.Coordinates) + + //gridBuffer, err := json.Marshal(gridMatrices) + //if err != nil { + // log.Fatal(err) + //} + + return 1 +} + +func OrdinaryKriging(values, lons, lats []float64, model string, sigma2, alpha, width float64, polygon ordinarykriging.PolygonCoordinates) *ordinarykriging.GridMatrices { + ordinaryKriging := ordinarykriging.NewOrdinary(values, lons, lats) + _ = ordinaryKriging.Train(ordinarykriging.ModelType(model), sigma2, alpha) + return ordinaryKriging.Grid(polygon, width) +} + +func OrdinaryKrigingTrain(values, lons, lats []float64, model string, sigma2 float64, alpha float64) *ordinarykriging.Variogram { + ordinaryKriging := ordinarykriging.NewOrdinary(values, lons, lats) + variogram := ordinaryKriging.Train(ordinarykriging.ModelType(model), sigma2, alpha) + return variogram +} diff --git a/examples/wasm/main.go b/examples/wasm/main.go index fdcbca9..bbc5874 100644 --- a/examples/wasm/main.go +++ b/examples/wasm/main.go @@ -7,19 +7,20 @@ import ( "syscall/js" - "github.com/liuvigongzuoshi/go-kriging/ordinary" + "github.com/liuvigongzuoshi/go-kriging/ordinarykriging" ) +// GOOS=js GOARCH=wasm go build -o kriging.wasm + func main() { - fmt.Println("Instantiate, kriging WebAssembly!") + fmt.Println("Instantiate, kriging WebAssembly! v0.0.6") done := make(chan int, 0) - js.Global().Set("RunOrdinaryKriging", js.FuncOf(RunOrdinaryKrigingFunc)) - js.Global().Set("RunOrdinaryKrigingTrain", js.FuncOf(RunOrdinaryKrigingTrainFunc)) + js.Global().Set("OrdinaryKriging", js.FuncOf(OrdinaryKrigingFunc)) + js.Global().Set("OrdinaryKrigingTrain", js.FuncOf(OrdinaryKrigingTrainFunc)) <-done } -func RunOrdinaryKrigingFunc(this js.Value, args []js.Value) interface{} { - done := make(chan *ordinary.GridMatrices, 1) +func OrdinaryKrigingFunc(this js.Value, args []js.Value) interface{} { values := make([]float64, args[0].Length()) for i := 0; i < len(values); i++ { values[i] = args[0].Index(i).Float() @@ -35,19 +36,15 @@ func RunOrdinaryKrigingFunc(this js.Value, args []js.Value) interface{} { model := args[3].String() sigma2 := args[4].Float() alpha := args[5].Float() + width := args[6].Float() - geoJsonString := args[6].String() + geoJsonString := args[7].String() polygon, err := readPolygonBytes([]byte(geoJsonString)) if err != nil { log.Fatal(err) } - go func() { - gridMatrices := RunOrdinaryKriging(values, lons, lats, model, sigma2, alpha, polygon) - done <- gridMatrices - }() - - gridMatrices := <-done + gridMatrices := RunOrdinaryKriging(values, lons, lats, model, sigma2, alpha, width, polygon) gridBuffer, err := json.Marshal(gridMatrices) if err != nil { @@ -59,8 +56,7 @@ func RunOrdinaryKrigingFunc(this js.Value, args []js.Value) interface{} { return string(gridBuffer) } -func RunOrdinaryKrigingTrainFunc(this js.Value, args []js.Value) interface{} { - //done := make(chan *ordinary.Variogram, 1) +func OrdinaryKrigingTrainFunc(this js.Value, args []js.Value) interface{} { values := make([]float64, args[0].Length()) for i := 0; i < len(values); i++ { values[i] = args[0].Index(i).Float() @@ -77,13 +73,6 @@ func RunOrdinaryKrigingTrainFunc(this js.Value, args []js.Value) interface{} { sigma2 := args[4].Float() alpha := args[5].Float() - //go func() { - // variogram := RunOrdinaryKrigingTrain(values, lons, lats, model, sigma2, alpha) - // done <- variogram - //}() - // - //variogram := <-done - variogram := RunOrdinaryKrigingTrain(values, lons, lats, model, sigma2, alpha) variogramBuffer, err := json.Marshal(variogram) if err != nil { @@ -94,20 +83,20 @@ func RunOrdinaryKrigingTrainFunc(this js.Value, args []js.Value) interface{} { return string(variogramBuffer) } -func RunOrdinaryKrigingTrain(values, lons, lats []float64, model string, sigma2 float64, alpha float64) *ordinary.Variogram { - ordinaryKriging := ordinary.NewOrdinary(values, lons, lats) - variogram := ordinaryKriging.Train(ordinary.ModelType(model), sigma2, alpha) +func RunOrdinaryKrigingTrain(values, lons, lats []float64, model string, sigma2 float64, alpha float64) *ordinarykriging.Variogram { + ordinaryKriging := ordinarykriging.NewOrdinary(values, lons, lats) + variogram := ordinaryKriging.Train(ordinarykriging.ModelType(model), sigma2, alpha) return variogram } -func RunOrdinaryKriging(values, lons, lats []float64, model string, sigma2 float64, alpha float64, polygon ordinary.PolygonCoordinates) *ordinary.GridMatrices { - ordinaryKriging := ordinary.NewOrdinary(values, lons, lats) - _ = ordinaryKriging.Train(ordinary.ModelType(model), sigma2, alpha) - return ordinaryKriging.Grid(polygon, 0.01) +func RunOrdinaryKriging(values, lons, lats []float64, model string, sigma2, alpha, width float64, polygon ordinarykriging.PolygonCoordinates) *ordinarykriging.GridMatrices { + ordinaryKriging := ordinarykriging.NewOrdinary(values, lons, lats) + _ = ordinaryKriging.Train(ordinarykriging.ModelType(model), sigma2, alpha) + return ordinaryKriging.Grid(polygon, width) } -func readPolygonBytes(content []byte) (ordinary.PolygonCoordinates, error) { - var polygonGeometry ordinary.PolygonGeometry +func readPolygonBytes(content []byte) (ordinarykriging.PolygonCoordinates, error) { + var polygonGeometry ordinarykriging.PolygonGeometry err := json.Unmarshal(content, &polygonGeometry) if err != nil { log.Fatalf("invalid json: %v", err) @@ -116,3 +105,1809 @@ func readPolygonBytes(content []byte) (ordinary.PolygonCoordinates, error) { return polygonGeometry.Coordinates, nil } + +func OrdinaryKrigingFuncWithData(this js.Value, args []js.Value) interface{} { + values := []float64{9.6, 5.3, 10.2, 5.4, 12.8, 7.5, 10.5, 18.7, 9.4, 12.4, 13, 10.8, 12, 13.2, 17.5, 14.1, 12.9, 10, 13.1, 10.7, 5.7, 10.4, 8, 10.3, 11, 11.8, 4.7, 11.7, 15.8, 5.3, 10.6, 16.4, 12.9, 12.2, 6.4, 10.6, 12.3, 11.2, 8.9, 17.5, 13.2, 10.7, 10.4, 12.6, 8.1, 6.7, 13, 14.6, 8.1, 8.4, 9.6, 8.5, 5.7, 11.4, 15.8, 10.9, 8, 14.7, 15.5, 11.7, 15.7, 9.9, 12.2, 17.9, 9.5, 16.6, 10.1, 10.1, 12.3, 15.3, 11.3, 14.5, 5.5, 15.4, 10.7, 18.9, 15.5, 13.7, 11.9, 16.3, 14.7, 14.8, 15.1, 20.4, 11.3, 12.1, 9.7, 13.1, 3.6, 11.9, 5.6, 14.4, 12, 13.1, 8.9, 6.7, 9.8, 11.7, 12.1, 15.4, 8, 12.3, 14.2, 13.4, 9.4, 0.6, 13.2, 11.6, 15.3, 12, 15.5, 8.9, 18.9, 13.3, 3.8, 12.5, 10.8, 15.5, 9, 12.8, 12.7, 11.3, 11.8, 12.2, 11.2, 12.2, 19.6, 10.9, 16.1, 9.5, 18.9, 10.9, 13, 13.6, 11.4, 17.5, 12, 13.7, 10.1, 17, 9, 10.9, 12.4, 11.7, 4.9, 12.9, 5.6, 8.6, 8.4, 9.4, 6.5, 9.7, 5.5, 12.6, 13.2, 13.6, 6.2, 9.9, 12, 6.6, 8.9, 18.5, 10.8, 14.6, 8.1, 10.4, 15.6, 9.5, 9.2, 15.6, 13.7, 11.3, 13.4, 11.8, 9.8, 14.5, 9.6, 10.4, 13.3, 9.7, 12.8, 6.9, 7.3, 8.6, 18.4, 6.1, 20.5, 17.1, 11.8, 9.2, 9.9, 9.8, 5.6, 9.8, 19.8, 11.2, 13.1, 12.4, 9, 13, 8.9, 7.7, 14.9, 16.1, 9.9, 7.4, 11.6, 13.5, 2, 4.5, 15.7, 8.7, 9, 13.7, 14.6, 11, 13.3, 8.9, 17.9, 11.6, 15.8, 20.4, 14.8, 14, 10.9, 8.5, 10.5, 15.3, 10.9, 9.4, 13.1, 12.2, 10.3, 10.1, 19, 12, 11.2, 14.1, 11.2, 10.7, 9.4, 11.5, 8.3, 11.4, 6.7, 8.3, 12.7, 15, 17.3, 13.4, 13.8, 11.2, 13.2, 14.4, 10.8, 12.2, 14.7, 13.2, 9.7, 12.2, 12.6, 10.7, 10.3, 12.9, 7.2, 10.7, 13.6, 12.3, 16.6, 14.7, 16.6, 13.1, 8.5, 13.8, 13.4, 7.7, 12.8, 7, 8.5, 16.7, 11, 9.5, 12.2, 8.5, 11.9, 17.8, 11.9, 12, 10, 9.4, 18.3, 20.2, 13.9, 13.2, 10, 6.5, 10.8, 9.4, 8, 9.2, 10.4, 14.2, 10.3, 13.7, 15, 13.9, 3.9, 14, 11.5, 13.3, 12.5, 10.7, 10.8, 15.7, 11.9, 7.6, 9.9, 5.5, 11.2, 14.4, 11.4, 8, 13.8, 9.5, 8.8, 12, 10.5, 7.9, 10, 14.3, 15.1, 11.8, 13.9, 14.7, 10.6, 5, 16.1, 11.1, 10.9, 12.2, 13, 13.5, 11, 10, 8.1, 12.1, 10, 15.1, 13.6, 14.8, 15.3, 12.1, 16.6, 11.3, 14.2, 9.7, 12.1, 7.9, 15.3, 10.9, 15.4, 18.1, 12.3, 10.8, 14.2, 11.2, 19.6, 6, 13.1, 19.1, 10, 15.3, 11.2, 12.4, 12.8, 18.6, 11.7, 12.3, 13.5, 10.4, 11.5, 8.9, 9, 11.9, 11.8, 12.1, 15.1, 9.7, 4.4, 10.8, 12.6, 16.8, 11.4, 12, 11.9, 8.1, 6, 10.2, 13.4, 11.1, 9.3, 11.4, 7.8, 12.5, 11.5, 7.9, 8.1, 10.2, 11.3, 12.8, 12.6, 11.3, 12.4, 10.6, 9.3, 4.5, 13.4, 10.1, 10.4, 13.6, 14.6, 10.4, 19.3, 4.5, 11.5, 12, 11.4, 15.5, 10.9, 10.9, 1.1, 11.4, 11.3, 6.1, 5, 16.8, 15, 7.5, 16.6, 2.5, 12.4, 6.7, 12.8, 5, 10.2, 9.9, 13.4, 12.7, 14.8, 10, 13.9, 7, 18, 8.9, 8.9, 14.9, 2.8, 18, 10.1, 11.7, 10.9, 10.3, 5, 10, 9.8, 9.9, 12.2, 8.1, 11.8, 10.6, 11, 14.8, 11.1, 14.5, 11.8, 13.7, 11.1, 13.8, 11.4, 18.2, 6.1, -3.9, 12.7, 10.2, 9.5, 9.6, 17, 10.4, 8.8, 11.1, 10.1, 12.7, 16.4, 14.3, 9, 14.3, 9.3, 11.6, 11.5, 10.6, 13.4, 10.8, 13.2, 13.7, 9.9, 18.2, 13.1, 8.5, 12.2, 10.8, 10.3, 11.2, 6.4, 11.2, 4.9, 10.4, 3.1, 19.4, 8.4, 14, 10.9, 11.6, 8.1, 12.8, 11.6, 9.5, 17.8, 9.6, 13, 8.5, 8.7, 12.9, 13.5, 11.9, 16.2, 13.9, 10.2, 12.2, 18.2, 13, 12.4, 6, 10.6, 3.2, 14.6, 10.1, 7.3, 10.9, 10.6, 15, 9.1, 10.8, 14.5, 10.8, 16.1, 11.7, 9.3, 9.3, 8.8, 7, 13.9, 10, 10.2, 13.8, 12.6, 7.8, 14, -4, 17.1, 12, 11.5, 12.6, 8.5, 6.5, 15.1, 13.7, 9.2, 11, 12.8, 10.7, 10.5, 10.7, 9.7, 8.3, 15.6, 17.6, 15.4, 8.6, 9.4, 10.6, 11.8, 12.6, 11.2, 15.4, 9.5, 10.8, 10.4, 14.8, 9.8, 8.3, 7.8, 11.1, 3.7, 18.2, 13.7, 14.7, 8.6, 10.3, 12.1, 13, 13.3, 9.7, 10.8, 13.3, 8.9, 9.2, 3.8, 10.1, 10.5, -0.3, 5.4, 14.5, 12.3, 14.7, 8.9, 13.2, 16.5, 11.2, 12.6, 12.1, 14.6, 9, 13.9, 8, 10.7, 10.8, 11.5, 6.7, 9.8, 8.6, 8.9, 9.3, 8.3, 10.3, 13.8, 13.4, 10.9, 17.9, 10.5, 9.4, 16.9, 18.5, 14, 16.9, 13.9, 10.4, 12.5, 13.3, 17.7, 13.4, 10.6, 10.5, 15.7, 8.9, 11.8, 9.5, 12, 6.6, 11.1, 9.6, 9.3, 8.9, 13.9, 15.3, 17.4, 6.1, 10.5, 14.3, 10.3, 8.5, 8, 14.1, 8.1, 11.6, 10.7, 7.1, 12.1, 11.3, 17.9, 12.8, 12.6, 11.4, 3.4, 8.9, 10.9, 12.5, 12.4, 14.1, 10.8, 11.6, 12.1, 8.1, 7.1, 11.6, 5.2, 15, 10.6, 10.5, 4.7, 9.8, 12.7, 3.9, 13.8, 10.5, 11.7, 10.6, 11.3, 9.8, 10.1, 13.2, 11.9, 16.5, 9.2, 12.3, 7.8, 9.6, 11, 17.9, 7.3, 9.7, 8, 12.8, 15.8, 10.8, 15.7, 13.7, 10.6, 8.2, 10, 11.2, 12.8, 10.6, 10.7, 11.7, 12, 10.8, 15.6, 5.3, 13.6, 20.7, 11.6, 6.6, 12, 2.9, 11.3, 14.4, 10.3, 7.9, 14.8, 11.5, 15, 15.5, 9, 13.5, 10.5, 8.7, 10, 15.2, 11.3, 18, 11.7, -3.2, 12.8, 13.7, 11.6, 10, 9.9, 10.9, 12.6, 9.8, 10.8, 11.9, 4.6, 9.6, 13.4, 13.6, 11.3, 10.6, 17.9, 7.9, 14.7, 12, 13.5, 15.2, 8.5, 11.3, 15.6, 13.1, 14.5, 11, 14.7, 10, 6.4, 8.9, 13.1, 18.6, 13.6, 12.1, 3.9, 4.2, 12.9, 9.6, 11.9, 11.3, 15.1, 14.8, 20.6, 13.6, 9.2, 12, 12.5, 15.2, 7.8, 16.3, 11.6, 10.1, 11.7, 10.6, 13.6, 9.7, 4.3, 14.3, 12.6, 10.3, 10.7, 7.6, 7.6, 15.1, 14.7, 11.5, 15.7, 17.1, 5.2, 6.1, 15.1, 10.6, 10.6, 16.6, 11, 15.5, 7.7, 13.8, 7.8, 13.6, 15.2, 13.3, 3.9, 9.7, 16.2, 13.6, 13.1, 10, 11.3, 14.3, 11.4, 15.5, 4.4, 10.8, 14.1, 3.9, 7.9, 14.5, 8.3, 12.6, 13.4, 10.4, 12.3, 9.7, 8.9, 9.4, 13.6, 7.3, 9.9, 17.1, 14.6, 6.9, 11.3, 3.4, 9, 14.9, 10.7, 10.3, 11.9, 0.5, 13.2, 9.1, 5.9, 8.4, 15.5, 7.5, 14.4, 2.5, 13.5, 14.7, 21.2, 14.4, 11.5, 11.7, 17.3, 11.3, 9.5, 12.5, 12.1, 12.8, 9.9, 11.3, 10, 15.1, 19.3, 7.5, 9.3, 12.8, 14.8, 8.4, 12.2, 15.5, 7.9, 14, 12.6, 8.7, 13.1, 14.7, 11.5, 16.9, 13.4, 12.7, 10.5, 16.5, 13.2, 11.8, 5.8, 7, 14.3, 12.4, 11.9, 16, 11.3, 16.7, 13, 13.2, 10.7, 9.5, 17.6, 7.6, 20.2, 7.7, 9.9, 8.5, 8, 5.4, 11.1, 11.2, 19.6, 13.6, 13.2, 14.8, 11.5, 18.7, 11.7, 12.1, 12.3, 12.9, 13.7, 11, 14.4, 3.9, 14.4, 12, 14.5, 12.5, 8.7, 11.6, 13.7, 7, 11.1, 20.2, 13.1, 13.7, 15.2, 11, 10.2, 16, 14.2, 7.7, 15.4, 10.7, 6.8, 7.8, 13.6, 11.4, 14.5, 6.7, 8.3, 8.6, 12.7, 9.8, 0.8, 9, 12.1, 15.8, 10.7, 12.6, 6.4, 10, 9.5, 16.7, 12.5, 3, 3.9, 11.7, 15.1, 14.1, 15.5, 10.5, 9.4, 10.7, 14.7, 9.1, 7, 10.1, 13.1, 9.5, 8.8, 14.3, 9.5, 10.2, 7.6, 7.2, 11.6, 12.2, 9.9, 12.4, 20.8, 11.5, 12, 10.9, 10.1, 13.5, 9.9, 15.3, 9, 12, 12.5, 14.6, 10.8, 12.7, 14.3, 9.2, 6.2, 14.2, 14.4, 10.9, 9.4, 12.5, 12.9, 14.7, 11.4, 10.6, 15.1, 14.2, 11.5, 13.6, 10.1, 11.3, 11.7, 9.7, 11.3, 14.1, 13.4, 10.5, 14.2, 9.3, 11.7, 9, 12.4, 10.9, 6.6, 14.9, 20, 11.2, 12.7, 12.8, 9, 12.1, 13.5, 5.9, 8.5, 6.6, 11, 13.4, 8.7, 5.4, 12, 12.7, 9.4, 8.7, 3.7, 14.5, 15, 13.6, 13.3, 14.3, 8.7, 9, 12.8, 12.1, 11.7, 7.7, 10, 10, 7.4, 15.1, 17.1, 11.2, 16.4, 15.4, 15.1, 13.8, 6.4, 22.7, 18.4, 7.5, 13, 13, 15.9, 8, 15.1, 15.8, 14.9, 17.6, 9.7, 13.3, 15.2, 18.3, 12.5, 16.4, 10.4, 9.4, 13.2, 13.3, 14.4, 20.8, 10.5, 19.8, 15.5, 11.5, 12.6, 9.5, 12.2, 9, 10.6, 11.2, 10.3, 10.3, 7, 7.1, 9.5, 14.8, 11.1, 7.3, 14.6, 20, 12.5, 9.8, 9.4, 8, 20.1, 13.2, 14.5, 21.2, 10.9, 13.3, 7.8, 11.1, 9.7, 10.2, 10.6, 11.8, 17.4, 13.4, 13.1, 14.1, 11.7, 13.6, 13, 11.5, 11.4, 10.7, 12.5, 13, 11.7, 12.5, 13.7, 16, 14.9, 12.2, 11.3, 12.3, 13, 16, 14.4, 9.8, 13.7, 8.9, 13.7, 16.3, 12, 12.4, 14.7, 9.8, 10.1, 13.4, 5.6, 12.4, 9.8, 15.2, 10.9, 11.9, 13, 10.4, 17.8, 13.5, 13.2, 14.5, 6.7, 15.1, 10.6, 12.7, 6.9, 15, 18.9, 14.4, 7.9, 11, 14, 11.8, 7.6, 13.6, 10.5, 11.1, 14.6, 18.3, 5.4, 8, 13.7, 7.2, 13.5, 12.2, 9.9, 11, 10.3, 13.2, 15.7, 9.3, 15.2, 8.6, 9.3, 12.3, 8.2, 13.9, 7, 14.6, 17.5, 15.1, 16.7, 7.3, 14.9, 12.5, 16.5, 11.3, 16.3, 11.5, 18.5, 7.2, 8.4, 7.7, 8.5, 11.5, 9.9, 16.4, 10.7, 10.1, 9.1, 12.5, 14.4, 15.4, 4.6, 9.4, 14, 6.4, 0, 14.2, 9.9, 4.6, 16.4, 12.9, 10.8, 12.8, 12.7, 6.1, 13.6, 6.8, 7.8, 11.4, 7.7, 5.9, 10.1, 5.3, 10.4, 10.1, 5.7, 8.3, 11.2, 4.9, 8.8, 11.8, 13.3, 13.9, 11.6, 14.6, 11.7, -0.9, 13.8, 11.8, 13.4, 12.9, 12.6, 19, 13, 17.2, 11.5, 7.6, 8.7, 16.3, 7.5, 7.6, 12.2, 4.9, 15.4, 12.1, 14.1, 13.2, 4.5, 15, 14, 11.2, 8.8, 17.8, 4.2, 19.8, -1.8, 15.2, 4, 12.4, 9.7, 9.9, 13, -1.6, 13.7, 13.7, 11.9, 13.7, 13.4, 13, 11.4, 16.1, 13.3, 15.2, 14.9, 11.9, 5, 12.8, 4.1, 11.7, 11.6, 6, 9.7, 15.8, 11.1, 10.2, 11.3, 10.5, 16.8, 13.1, 8.7, 7.1, 12, 12.1, 12.7, 11.4, 17.3, 12.6, 15.6, 12.2, 15.7, 10.6, 13.2, 13.8, 7.8, 9.3, 5.9, 2.6, 15.4, 10.5, 11.5, 18.3, 11.4, 12.1, 12.8, 9.8, 5.4, 13.4, 13.1, 7.3, 7.8, 9.6, 2.3, 19.1, 10.2, 13.8, 16.2, 10.8, 7.9, 10.5, 10.1, 6.7, 8.9, 5.9, 9.1, 10.9, 12.6, 16.7, 9.8, 18.5, 13.1, 11.7, 6.2, 6.5, 3.7, 10.3, 15, 13.5, 10.6, 11.1, 6.3, 9.7, 13.3, 11.4, 12.3, 14.7, 8.1, 15.8, 6.8, 10, 8.2, 13.9, 12.2, 13.3, 10.5, 11.8, 13.1, 12.8, 9.6, 11.2, 14, 7.7, 12.9, 10.2, 9.9, 7.9, 16.3, 9.7, 11.7, 15.6, 10.7, 10.6, 9.2, 9.2, 7.1, 11.2, 15.2, 14.6, 11, 9.3, 10.1, 17.8, 19, 8.3, 8.5, 13.7, 10.9, 14.2, 16.1, 19.1, 3, 11.6, 19.3, 12.4, 12.3, 11.8, 10.5, 7.8, 12.8, 10.1, 14.6, 16.5, 12.6, 13, 13.5, 12.4, 10.6, 15.8, 9.7, 13.5, 16.9, 8, 10.2, 11.6, 7, 6.8, 11.8, 11.6, 9.1, 9.8, 14.4, 10.5, 11, 8, 15.2, 16.6, 13.8, 12.8, 16.2, 8.2, 9.2, 8.8, 16, 12, 7.5, 12.1, 21.1, 12.8, 16.1, 12.6, 13.3, 9.7, 15.1, 8.7, 17.7, 13.2, 13.7, 10.7, 8.2, 19.2, 10.7, 14.8, 13, 11.9, 14.5, 10.8, 14.9, 6, 13.4, 15.7, 15.1, 10.4, 16.8, 9.7, 12.8, 16.3, 10.8, 8.5, 12.2, 11.7, 11.4, 10.7, 16.9, 9.2, 16.4, 7, 13.8, 13.5, 15.5, 10.3, 10, 8.4, 12.5, 13.4, 8.4, 13, 10.2, 10.8, 14.1, 14.1, 19.3, 10.6, 11.9, 12.1, 10.1, 10.9, 10, 5.4, 12, 21.2, 13.2, 19.5, 13.6, 11, 10.7, 13.5, 10.9, 9.5, 11.8, 11.8, -7.8, 10.5, 13.6, 9.9, 8.2, 12.7, 14.5, 9.8, 6.2, 10.4, 11.9, 12.6, 12.9, 8.3, 18.6, 14.3, 18.8, 9.1, 11.1, 13.9, 11.1, 10.8, 14.2, 11.5, 15.9, 9.8, 13, 13.8, 12.2, 12.1, 10.6, 9.2, 7.8, 6.7, 10.4, 0, 12, 11.4, 10.8, 7.7, 12.4, 9.9, 12.2, 7.7, 9.1, 11.2, 9.1, 21, 12.7, 12.1, 12.3, 11.1, 10.4, 10.9, 14.6, 13.4, 11.4, 12.6, 3.3, 12.2, 7.7, 10.5, 9.3, 15.7, 12, 19.4, 18.3, 10.3, 15.9, 12, 13.3, 11.6, 10.9, 10, 12.6, 11.2, 9.2, 16.3, 13.9, 15.6, 7.7, 6.9, 13.3, 14.3, 10.2, 15.6, 17.6, 10.5, 9.6, 7, 11.9, 12.6, 11.6, 11.3, 15.5, 8.6, 9.9, 4.3, 8.5, 11.5, 15.8, 16.3, 14.2, 7.5, 10.1, 13.2, 9, 9.7, 9.9, 14.9, 2.6, 8.3, 2.7, 10.3, 12.1, 11.9, 4.6, 9.8, 12.2, 12.8, 11.9, 11.5, 12.7, 13.7, 11.5, 16, 6.5, 11.3, 16.4, 7.8, 9.5, 5.9, -1.9, 8.4, 5.2, 9.5, 10.9, 17.6, 9.7, 10.2, 8.6, 8.1, 9.9, 7.3, 15.4, 12, 10.8, 10.1, 15.6, 3.1, 13.8, 12.7, 13.4, 9.5, 9, 9.5, 8.9, 9.4, 11.7, 8.4, 13.5, 8.1, 12.5, 14.7, 13.3, 14.2, 15.6, 13.9, 15.6, 14.3, 16.5, 10.8, 9.7, 9.2, 13.7, 8.4, 14.7, 11.6, 13.4, 13.1, 3.4, 11.1, 14.2, 12, 11, 14, 12.7, 15, 12.3, 13.2, 7.9, 10.5, 9.7, 10.6, 8.4, 8.5, 20.2, 9.9, 10.1, 10.3, 21.6, 9.7, 13.9, 11, 10.6, 6.6, 19.8, 8.6, 12.4, 6.9, 10.3, 6.9, 13.7, 14.2, 7.1, 15.5, 6, 16.1, 12.4, 12.6, 8.3, 18.2, 14.3, 9.6, 9.5, 6.3, 6, 11.8, 11.5, 15.2, 13.6, 12.3, 10.3, 3.6, 12.6, 11.3, 11.5, 16.6, 9.9, 13.1, 9.8, 17, 7.4, 15.7, 10.8, 11.7, 8.8, 14.3, 4.5, 12.1, 9.8, 8.9, 4.7, 9.2, 14.3, 15.2, 8.8, 9, 16.9, 3.6, 9.8, 8.1, 9.8, 16.6, 11.2, 13.9, 9.2, 13.3, 12.2, 15, 9.3, 11.2, 9.3, 4, 8.7, 15.5, 12.3, 18.5, 8.3, 15.3, 15, 12.2, 8.6, 9.4, 4, 10.5, 12.8, 12.3, 10.8, 14.9, 17.9, 13.9, 9.4, 15.4, 15.3, 7.3, 11.7, 13.6, 12.1, 12, 13.3, 11, 13, 16.7, 19.9, 13.2, 18.3, 15.1, 5.9, 12.7, 17.7, 8.6, 12.8, 11.1, 8, 8.3, 9, -2.5, 14.6, 11.8, 8.9, 12.3, 10.4, 10.3, 12, 12.7, 7.8, 4.2, 8.8, 14.8, 12.1, 11.8, 13.8, 10.8, 7.6, 11.4, 11, 6.4, 13.4, 8.8, 10.4, 13.1, 4.3, 12.7, 10.3, 12.8, 9.9, 12.3, 12.4, 9.4, 12, 11.1, 17.1, 10.7, 11.4, 11, 10.7, 9.5, 11.7, 8.5, 15.3, 11.4, 8.9, 18.9, 9.5, 20.4, 10.8, 10.3, 10.2, 9.7, 12.3, 15.9, 9, 6.8, 11.6, 10.8, 13.4, 8.7, 13.5, 12.3, 11.4, 9.5, 12.4, 12.8, 12.5, 8.3, 11, 10.3, 10.6, 8.7, 18.6, 5.9, 14.7, 4.1, 11.2, 11, 10.4, 16.5, 9, 9.1, 13.1, 11, 5.5, 12.3, 6.7, 7.8, 12.1, 8.8, 18.7, 13.1, 10.7, 11.3, 12.1, 13.7, 20.8, 10, 12.7, 15.2, 6.8, 11.3, 9.6} + lons := []float64{102.68, 102.88, 99.36, 101.23, 102.98, 98.3, 104.25, 102.75, 103.4, 100.19, 97.92, 99.43, 100.65, 100.59, 102.93, 101.59, 105.07, 104.41, 103.38, 103.76, 102.64, 98.38, 102.53, 101.6, 101.64, 100.85, 104.82, 103.68, 99.8, 99.45, 100.06, 101.62, 102.74, 101.27, 103.52, 103.26, 102.67, 99.18, 101.99, 100.65, 104.78, 103.66, 102.45, 102.78, 100.18, 102.47, 100.52, 103.98, 103.7, 101.08, 101.99, 103, 98.59, 104.25, 99.58, 100.1, 99.8, 97.78, 100.28, 101.19, 99.93, 100.6, 100.43, 102.99, 102.85, 100.77, 97.77, 100.46, 101.64, 102.57, 100.42, 99.46, 104.37, 104.31, 99.8, 102.69, 105.51, 102.07, 101.73, 101.88, 99.48, 99.46, 105.07, 101.22, 101.83, 99.8, 102.2, 101.15, 100.8, 102.83, 103.97, 103.05, 102.86, 102.12, 98.49, 100.03, 103.63, 99.57, 102.01, 103.1, 102.92, 102.99, 103.96, 100.38, 101.15, 99.5, 100.35, 103.39, 101.45, 103.32, 102.28, 102.39, 100.9, 100.17, 103.59, 103.77, 102.58, 100.27, 103.67, 103.4, 103.6, 101.95, 102.19, 99.61, 102.75, 102.76, 102.09, 99.55, 102.83, 104.01, 100.77, 98.4, 98.37, 100.87, 102.76, 100.41, 102.98, 104.01, 104.35, 101.63, 102.3, 103.89, 102.52, 101.19, 104.99, 102.74, 99.55, 102.15, 100.16, 103.85, 98.87, 103.33, 100.79, 102.77, 98.91, 100.42, 99.68, 99.07, 101.04, 103.59, 102.32, 104.89, 99.89, 104.52, 100.38, 103.6, 99.38, 102.48, 101.48, 101.01, 97.63, 104.08, 100.08, 100.85, 100.13, 97.71, 102.36, 101.69, 99.63, 103.4, 100.32, 98.7, 100.33, 103.08, 101.87, 99.43, 100.93, 101, 103.75, 102.32, 101.1, 103.35, 99.38, 102.87, 101.67, 99.32, 102.83, 98.88, 102.56, 100.32, 102.03, 99.33, 101.87, 101.52, 102.31, 101.08, 101.02, 99.47, 99.08, 99.12, 100.94, 102.91, 100.3, 98.4, 98.18, 103.82, 102.53, 102.52, 100.57, 100.94, 99.26, 104.84, 98.05, 102.58, 103.01, 103.47, 104.15, 104.7, 103.38, 98.51, 102.75, 101.82, 103.47, 98.25, 101.25, 102.69, 99.71, 99.41, 103.82, 100.58, 100.95, 102.79, 102.77, 102.83, 102.97, 103.62, 104.69, 99.47, 103.29, 99.36, 101.15, 103.26, 103.53, 97.8, 100.86, 102.75, 102.37, 103.26, 102.35, 99.18, 100.51, 103.72, 99.33, 100.59, 103.66, 103.43, 103.27, 102.75, 100.45, 100.57, 103.41, 97.8, 103.19, 102.44, 99.73, 104.44, 103.05, 102.29, 100.18, 104.24, 103.8, 102.86, 104.53, 100.12, 99.93, 105.47, 102.07, 100.66, 102.79, 103.1, 101.58, 101.97, 100.05, 103.23, 102.66, 99.56, 103.35, 103.11, 101.15, 103.13, 100.75, 99.47, 102.36, 102.79, 100.25, 103.68, 100.64, 101.15, 99.95, 101.39, 103.8, 103.15, 102.55, 103.25, 101.91, 98.67, 98.89, 98.55, 102.95, 103.64, 104.24, 99.69, 101.96, 102.64, 104.4, 102.77, 103.44, 99.76, 103.66, 102.92, 103.33, 104.45, 99.85, 99.8, 103.07, 105.21, 102.51, 100, 103.88, 102.67, 97.88, 99.56, 104.08, 101.53, 100.43, 102.25, 102.66, 104.3, 103.54, 102.5, 99.64, 102.16, 101.75, 103.33, 102.63, 101.72, 103.35, 100.45, 105.27, 98.67, 99.54, 101.11, 100.66, 102.66, 102.33, 100.64, 101.31, 99.91, 103.72, 100.72, 98.89, 104.4, 101.08, 101.15, 100.03, 101.78, 103.87, 100.25, 101.42, 103.68, 102.26, 103.56, 104.23, 103.67, 103.85, 102.7, 105.61, 99.7, 100.83, 101.57, 99.23, 101.52, 103.87, 101.66, 102.65, 99.95, 100.49, 100.07, 102.92, 101.77, 102.34, 99.23, 103.21, 102.64, 102.79, 102.84, 102.39, 104.24, 100, 102.71, 99.56, 98.57, 102.73, 102.31, 102.94, 99.41, 97.78, 101.38, 103.42, 101.96, 99.02, 103.83, 101.3, 99.38, 102.06, 100.71, 103.15, 101.93, 102.8, 102.21, 100.04, 100.1, 100.53, 99.67, 105.05, 105.58, 99.67, 102.98, 100.47, 99.51, 103.6, 99.81, 104.26, 100.91, 99.92, 98.87, 102.57, 100.62, 102.42, 103.61, 103.21, 99.95, 101.31, 102.54, 103.07, 100.56, 99.46, 100.63, 100.1, 100.77, 101.99, 98.67, 103.74, 103.43, 104.39, 102.09, 104.31, 103.78, 102.89, 102.53, 100.62, 103.07, 103.38, 100.73, 99.39, 103.14, 103.9, 97.85, 104.37, 100.91, 102.92, 99.13, 97.91, 100.66, 102.53, 103.26, 105.37, 102.46, 102.34, 103.04, 103.07, 103.15, 105.59, 97.65, 103.02, 103.53, 103.96, 101.47, 98.42, 103.13, 103.95, 98, 100.86, 101.64, 102.57, 101.88, 105.16, 103.05, 103.6, 100.73, 100.11, 100.99, 103.84, 103.44, 104.89, 102.84, 99.23, 102.8, 100.54, 100.78, 103.33, 103.05, 102.77, 103.77, 104, 104.09, 102.43, 102.86, 102.91, 102.86, 100.06, 104.5, 99.85, 98.14, 101.75, 101.77, 104.07, 104.39, 103.17, 100.64, 102.17, 105.05, 104.14, 104.51, 104.05, 102.31, 100.22, 102.71, 102.27, 100.16, 101.26, 102.57, 99.64, 102.67, 103.61, 103.72, 102.74, 100.73, 102.62, 99.83, 98.89, 100.7, 100.76, 103.13, 102.71, 102.16, 103.13, 99.93, 101.92, 100.16, 103.14, 102.75, 103.6, 98.99, 104.63, 100.49, 103.72, 103.98, 104.5, 102.46, 102.98, 104.26, 102.33, 102.29, 100.05, 105.63, 101.87, 100.89, 100.9, 102.29, 102.61, 102.69, 101, 104.93, 99.7, 103.83, 101.52, 99.7, 98.9, 99.96, 100.79, 103.55, 104.06, 100.68, 99.97, 104.8, 102.35, 103.35, 99.68, 100, 101.95, 100.11, 103.17, 99.36, 102.43, 102.11, 105.14, 103.42, 103.11, 100.24, 100.14, 104.58, 102.55, 103.13, 102.37, 99.81, 103.34, 101.41, 102.75, 101.2, 100.48, 99.21, 100.15, 102.44, 104.3, 99.92, 104.35, 99.2, 101.04, 99.37, 101.91, 100.79, 99.13, 102.11, 101.05, 104.58, 102.77, 101.33, 100.25, 104, 101.57, 101.34, 104.18, 105.9, 102.23, 99.67, 100.65, 101.68, 103.88, 100.07, 103.26, 98.44, 104.12, 102.97, 103.34, 102.45, 102.74, 103.08, 100.8, 98.56, 100.44, 103.99, 102.59, 103, 101.94, 99.3, 100.03, 101.48, 102.99, 102.86, 98.52, 98.04, 100.14, 99.94, 100.95, 104.97, 100.79, 102.66, 101.71, 99.78, 103.02, 103.64, 104.47, 102.91, 100.28, 101.12, 103.06, 101.51, 103.6, 102.73, 100.75, 102.29, 103.34, 102.22, 103.75, 97.75, 101.56, 104.12, 99.26, 102.54, 103.6, 99.8, 102.84, 103.25, 103.28, 100.06, 103.85, 102.54, 102.93, 100.07, 103.47, 103.25, 102.33, 104.06, 102.42, 101.21, 100.65, 103.25, 101.06, 101.28, 102.58, 98.3, 101.85, 102.05, 104.9, 102.94, 102.23, 97.94, 101.54, 103.26, 100.52, 104.15, 102.06, 103.82, 100.12, 104.41, 99.13, 104.18, 98.89, 103.62, 100.56, 104.11, 104.09, 100.98, 103.22, 104.2, 101.54, 104.73, 102.71, 100.99, 100.85, 104.27, 103.02, 99.97, 103.51, 100.75, 102.44, 102.47, 103.62, 106.04, 104.57, 99.73, 103.18, 103.51, 100.05, 102.58, 98.98, 103.19, 101.23, 100.69, 103.86, 103.13, 104.84, 102.69, 98.87, 104.4, 100.05, 103.39, 103.25, 99.25, 101.16, 104.61, 101.86, 101.86, 102.51, 102.39, 103.39, 103.25, 99.03, 102.57, 99.44, 101.24, 102.94, 100.07, 103.48, 102.25, 102.48, 104.36, 104.85, 104.07, 102.7, 102.19, 103.29, 102.47, 99.68, 102.12, 100.67, 104.8, 102.84, 102.18, 102.66, 101.79, 103.05, 103.32, 102.56, 103.23, 103.4, 98.45, 101.07, 101.47, 105.26, 98.04, 102.91, 99.99, 99.91, 105.1, 99.14, 104.48, 98.58, 103.4, 99.08, 97.56, 104.87, 98.45, 103.04, 103.03, 98.9, 103.43, 100.4, 98.85, 98.77, 104.68, 97.93, 103.05, 102.03, 102, 103.15, 101.51, 99.61, 102.18, 103.15, 102.54, 103.09, 98.31, 102.99, 101.86, 100.66, 103.91, 102.47, 99.84, 101.08, 100.27, 102.85, 98.26, 103.23, 102.95, 102.7, 103.46, 99.15, 98.72, 104.8, 102.45, 100.59, 101.51, 101, 99.05, 103.05, 103.77, 102.21, 102.2, 99.88, 104.22, 102.76, 103.26, 100.89, 102.57, 99.43, 102.41, 103.45, 99.43, 101.25, 102.71, 103.19, 101.8, 103.89, 99.42, 103.52, 100.47, 101.72, 104.36, 100.11, 99.51, 100.92, 104.03, 102.45, 102.51, 102.48, 99.23, 103.43, 105.17, 98.82, 101.82, 104.1, 101.22, 98.4, 99.45, 102.08, 104.32, 99.64, 103, 100.76, 102.18, 98.67, 103.4, 102.55, 102.66, 103.28, 101.37, 100.24, 102.18, 103.1, 99.65, 104.66, 102.79, 103.52, 100.59, 102.84, 105.97, 100.68, 104.37, 103.53, 99.52, 101.65, 101.25, 103.74, 101.01, 98.4, 103.08, 103.91, 100.15, 102.42, 100.67, 101.22, 105.17, 102.79, 104.28, 102.5, 100.86, 98.9, 99.23, 102.29, 102.72, 104.03, 104.46, 104.28, 99.53, 100.07, 102.69, 103.95, 101.36, 99.37, 102.71, 100.18, 100.75, 104.07, 101.76, 99.29, 101.38, 99.65, 103.01, 103.02, 101.9, 98.82, 99.23, 100.24, 103.21, 99.03, 100.19, 103.58, 102.63, 100.69, 99.1, 100.9, 102.99, 101.92, 102.69, 98.77, 102.92, 100.22, 101.29, 102.61, 103.15, 98.92, 102.7, 102.79, 101.89, 101.97, 103.93, 103.33, 99.94, 100.6, 102.42, 99.14, 102.6, 100.62, 101.32, 100.21, 101.14, 100.05, 100.4, 100.47, 99.93, 103.98, 103.12, 102.13, 100.79, 99.96, 100.22, 102.6, 104.8, 102.54, 102.23, 103.08, 102.88, 98.17, 102.74, 103.57, 103.08, 104.01, 101.58, 102.66, 103.39, 104.1, 103.95, 104.49, 99.64, 103.93, 102.88, 101.27, 100.58, 105.23, 102.54, 102.74, 101.67, 98.89, 98.32, 99.77, 100.08, 104.86, 103.78, 101.94, 100.44, 100.19, 103.57, 98.56, 102.66, 101.94, 104.48, 99.38, 99.93, 103.78, 102.76, 103.08, 103.05, 99.01, 102.78, 103.89, 97.85, 100.87, 99.41, 103.23, 100.54, 100.03, 102.23, 102.73, 103.44, 102.21, 100.2, 104.25, 99.88, 102.43, 103.59, 102.65, 101.47, 99.87, 102.87, 99.99, 100.16, 98.95, 99.88, 101.11, 104.29, 102.9, 103.61, 100.66, 102.41, 104.3, 99.66, 103.48, 103.25, 105.15, 102.16, 102.92, 104.01, 100.94, 100.66, 98.08, 100.36, 99.87, 102.12, 103.82, 99.99, 104.31, 104.29, 105.44, 101.39, 105.05, 102.08, 104.98, 101.43, 101.75, 101.67, 101.52, 101.72, 102.84, 100.41, 102.66, 100.22, 100.93, 102.43, 103.16, 103.16, 104.56, 106.08, 105.41, 102.57, 101.56, 99.16, 101.54, 103.02, 104.3, 102.77, 103.05, 100.26, 98.41, 99.45, 102.59, 99.41, 102.63, 102.59, 102.3, 101.13, 103.75, 102.27, 99.13, 97.69, 100.8, 102.73, 100.86, 102.82, 99.97, 100.43, 100.09, 103.84, 104.46, 100.05, 100.58, 104, 101.54, 98.9, 102.55, 100.33, 103.83, 100.49, 104.47, 98.44, 101.55, 102.55, 99.47, 102.74, 102.73, 102.75, 98.22, 101.99, 100.38, 101.08, 97.77, 103.8, 100.35, 99.33, 104.63, 101.18, 104.73, 102.93, 99.76, 103.12, 99.94, 100.73, 104.88, 102.93, 104.16, 100.15, 100.86, 102.77, 101.83, 102.82, 102.15, 102.2, 99.35, 101.63, 100.58, 101.97, 98.92, 103.4, 100.74, 102.33, 102.97, 102.69, 100.67, 101.87, 101.97, 101.05, 102.75, 104.51, 105.15, 102.8, 103.69, 104.04, 102.1, 103.13, 105.06, 100.21, 99.94, 102.8, 100.61, 102.97, 100.28, 102.59, 98.5, 102.77, 104.34, 100.82, 98.91, 101.36, 99.62, 102.85, 103.99, 101.57, 102.66, 97.97, 100.07, 104.64, 105.7, 104.18, 100.65, 98.5, 102.65, 102.76, 99.32, 99.29, 104.25, 99.62, 102, 99.15, 100.32, 101.24, 102.86, 99.74, 102.41, 102.67, 99.53, 103.2, 102.42, 102.5, 104.51, 103.13, 99.6, 103.49, 100.97, 103.54, 99.75, 104.34, 102.9, 105.12, 100.15, 103.2, 101.75, 103.42, 102.81, 105.19, 100.93, 99.13, 102.83, 104.28, 98.87, 100.23, 100.02, 104.87, 99.27, 103.81, 100.92, 102.84, 102.95, 104.65, 100.75, 99.9, 101.86, 99.43, 102.79, 103.32, 103.14, 99.81, 102.03, 101.71, 101.59, 100.54, 102.65, 101.3, 102.98, 104.68, 101.42, 100.18, 104.07, 104.22, 99.99, 98.34, 102.69, 104.62, 102.04, 104.31, 102.75, 102.72, 102.86, 99.68, 100.46, 103.46, 102.6, 100.13, 99.29, 100.78, 99.75, 100.01, 103.63, 102.77, 101.5, 102.43, 104.79, 99.77, 104.46, 99.41, 99.9, 99.08, 104.59, 102.97, 101.55, 103.73, 98.85, 104.54, 97.82, 103.36, 101, 98.87, 104.06, 103.07, 102.56, 102.95, 101.67, 104.71, 101.6, 99.15, 102.52, 102.75, 103.11, 101.44, 98.9, 99.08, 102.78, 103.67, 102.26, 101.76, 101.63, 103.07, 100.96, 102.71, 99.1, 100.2, 101.56, 102.89, 104.38, 103.21, 100.56, 99.96, 102.93, 102.98, 102.5, 100.9, 102.18, 101.36, 100.57, 99.55, 100.86, 99.48, 102.28, 99.65, 100.17, 101.82, 100.37, 102.19, 102.52, 99.07, 103.23, 103.65, 103.4, 102.88, 102.67, 102.93, 104.12, 104.96, 100.61, 102.57, 99.6, 104.9, 104.26, 101.28, 99.24, 99.94, 100.2, 99.31, 104.86, 102.63, 100.33, 99.13, 103.27, 102.5, 103.87, 99.53, 103, 102.63, 101.66, 99.78, 98.68, 98.94, 104.82, 103.95, 103.49, 102.06, 103.78, 102.81, 104.53, 103.11, 102.71, 102.74, 98.17, 104.31, 100.19, 99.44, 103.04, 102.63, 99.95, 101.01, 102.66, 103.55, 99.17, 99.74, 101.36, 98.69, 103.46, 100.19, 102.59, 103.46, 99.35, 102.15, 102.4, 101.46, 103.25, 101.48, 100.08, 102.52, 99.03, 98.21, 99.92, 97.75, 99.6, 100.89, 104.26, 103.7, 100.68, 104.3, 103.35, 100.6, 103.77, 99.93, 104.62, 103.5, 100.13, 101.47, 101.53, 102.72, 99.27, 102.76, 100.15, 104.28, 100.13, 103.04, 100.93, 100.33, 102.64, 103.95, 100.21, 103.58, 102.67, 102.75, 99.18, 98.39, 101.23, 100.04, 103.51, 103.65, 102.08, 104.97, 101, 102.69, 101.48, 99.17, 102.48, 102.85, 102.72, 104.11, 100.17, 102.82, 101.38, 100.54, 105.83, 101.64, 102.27, 100.21, 102.13, 103.62, 103.04, 104.71, 103.32, 102.5, 103.04, 101.26, 103.23, 100.72, 102.16, 100.65, 98.27, 99.18, 101.39, 99.51, 101.79, 104.51, 101.87, 100.88, 101.79, 102.36, 103.24, 99.97, 101.06, 102.78, 102.43, 103.04, 102.67, 102.72, 100.27, 102.31, 103.33, 103.2, 101.67, 98.85, 99.34, 102.63, 102.78, 101.34, 97.73, 100.83, 100.85, 104.32, 103.67, 98.22, 101.12, 102.12, 101.31, 103.56, 102.26, 102.84, 100.29, 102.5, 103.87, 104.96, 102.72, 103.56, 102.23, 101.02, 104.41, 103.12, 104.06, 104.72, 104.03, 100.5, 103.41, 103.06, 99.33, 100.73, 105.41, 101.68, 103.73, 100.52, 101.28, 98.93, 103.5, 102.67, 100.63, 98.19, 102.76, 102.8, 103.28, 104.42, 101.37, 103.14, 102.5, 102.18, 102.38, 100.5, 102.07, 99.07, 105.2, 100.32, 99.45, 98.28, 102.25, 103.85, 101.23, 102.87, 99.3, 98.66, 104.53, 102.7, 102.77, 100.04, 99.37, 103.74, 103.7, 102.47, 103.18, 103.25, 103.28, 103.08, 102.85, 100.63, 102.8, 102.74, 102.98, 102.5, 103.97, 102.62, 99.83, 102.06, 100.86, 105.45, 99.88, 104.9, 103.26, 99.77, 100.1, 102.78, 100.6, 100.74, 105.85, 102.3, 104.62, 104.53, 101.06, 101.32, 104.41, 103.17, 101.25, 101.54, 103.17, 104.81, 97.86, 99.2, 99.38, 103.36, 104.18, 101.33, 100.51, 100.89, 101.78, 100.22, 103.3, 102.31, 102.67, 98.35, 103.05, 102.59, 103.18, 103.01, 102.9, 102.7, 102.56, 102.06, 100.33, 103.2, 99.88, 100.2, 102.32, 101.2, 102.7, 104.33, 103.85, 101.15, 98.87, 98.67, 103.67, 101.2, 100.1, 104.24, 104.94, 98.87, 100.76, 102.7, 103.38, 98.9, 102.69, 99.45, 100.46, 102.74, 102.49, 103.06, 103.33, 98.82, 102.89, 99.03, 98.91, 102.19, 99, 98.52, 103.36, 101.51, 102.28, 103.34, 98.6, 98.78, 103.72, 103.05, 99.83, 103.06, 101.64, 99.13, 99.38, 104.62, 103.28, 105.04, 101.72, 100.13, 103.18, 102.49, 98.83, 100.14, 103.12, 100.05, 101.03, 103.72, 99.97, 103.55, 103.68, 103.45, 99.03, 104.58, 99.31, 104, 101.89, 102.56, 104.12, 101.57, 98.97, 102.79, 98.19, 102.5, 99.39, 102.92, 100.98, 102.66, 100.4, 102.99, 100.02, 100.48, 104.17, 101.58, 100.63, 103.18, 104.09, 99.12, 102.3, 104.16, 100.21, 103, 101.61, 101.55, 102.7, 103.59, 103.95, 100.16, 100.47, 102.47, 104.29, 101.59, 100.79, 102.97, 99.56, 103.86, 99.54, 103.86, 104.25, 100.52, 104.25, 102.47, 100.56, 103.3, 104.09, 102.03, 103.59, 102.67, 101.85, 101.29, 101.49, 99.27, 101.03, 102.83, 101.89, 103.72, 99.41, 100.74, 101.29, 105.24, 99.13, 103.1, 103.1, 101.05, 100.86, 101.19, 103.7, 101.52, 100.23, 99.36, 103.55, 100.72, 99.51, 99.58, 99.28, 104.21, 100.6, 103.43, 99.68, 103.7, 100.03, 100.17, 102.87, 103.81, 105.79, 99.35, 104.27, 101.99, 102.23, 101.91, 101.05, 101.18, 100.87, 103.09, 100.85, 100.47, 103.06, 103.37, 102.43, 101.17, 101.35, 100.6, 101.27, 99.2, 101.86, 101, 103.27, 99.79, 100.03, 102.8, 99.66, 102.93, 102.69, 102.72, 100.04, 100, 101.4, 103.14, 103.5, 101.98, 104.5, 98.63, 102.7, 101.05, 103.73, 102.72, 100.3, 102.76, 99.58, 103.16, 102.03, 101.02, 101.2, 102.87, 103.48, 101.17, 100.95, 98.83, 102.75, 103.08, 102.96, 103.73, 99.24, 102.85, 97.95, 102.68, 98.15, 100.5, 102.96, 101.32, 102.83, 102.68, 98.67, 105.02, 101.37, 102.31, 98.65, 104.68, 104.43, 103.17, 100.28, 102.67, 102.57, 99.85, 103.21, 103.65, 104.41, 103.38, 100.76, 102.66, 104.16, 102.72, 101.59, 101.49, 100.8, 100.34, 100.1, 103.69, 101.37, 103.07, 103.27, 100.3, 102.45, 103.58, 102.81, 104.17, 97.89, 101.96, 99.78, 102.84, 100.8, 101.95, 102.7, 99.18, 104.06, 103.85, 102.8, 102.4, 99.62, 102.45, 100.38, 103.3, 99.89, 101.22, 100.57, 100.68, 103.64, 99.94, 102.79, 102.74, 101.36, 102.89, 102.65, 99.27, 103.43, 102.68, 101.58, 100.72, 98.85, 103.89, 102.51, 100.45, 103.35, 101.06, 102.88, 100.52, 100.07, 102.5, 99.85, 101.96, 103.78, 102.42, 103.03, 105.05, 101.64, 102.71, 103.29, 103.86, 99.87, 104.03, 103.35, 102.96, 102.72, 104.08, 99.58, 103.45, 100.18} + lats := []float64{25.95, 26.04, 25.81, 25.95, 24.85, 25.27, 28.65, 23.01, 25.45, 22.79, 24.08, 23.64, 24.71, 26, 26.92, 24.19, 23.71, 26.61, 27.7, 25.42, 26.05, 24.77, 26, 24.99, 26.14, 24.25, 27.69, 24.06, 22.44, 28.3, 23.72, 24.29, 25.01, 26.63, 27.61, 25.67, 24.96, 25.12, 25.87, 21.69, 23.38, 26.29, 25.55, 24.97, 25.94, 26.05, 24.07, 23.65, 27.38, 26.01, 24.64, 25.94, 25.74, 25.68, 22.16, 23.62, 25.99, 24, 21.92, 26.58, 22.57, 25.54, 25.23, 26.78, 25.11, 22.44, 24.38, 25.38, 23.73, 22.95, 25.35, 24.11, 28.12, 23.21, 24.99, 22.78, 23.75, 23.93, 26.17, 25.96, 22.85, 22.66, 24.26, 21.4, 24.73, 23.8, 25.09, 23.09, 27.43, 24.84, 28.15, 23.88, 23.38, 23.73, 25.36, 27.2, 25.34, 23.29, 24.61, 26.03, 25.62, 24.5, 22.81, 26.17, 24.88, 28.05, 23.96, 24.95, 22.78, 24.93, 23.55, 25.66, 21.84, 24.98, 27.68, 24.53, 25.63, 22.59, 27.25, 25.03, 27.01, 24.54, 24.7, 23.63, 24.46, 25.03, 23.51, 24.71, 23.62, 26.41, 21.97, 24.98, 24.88, 23, 24.65, 24.23, 24.66, 24.17, 28.56, 23.96, 25.51, 24.49, 25.23, 26.7, 27.61, 24.98, 26.3, 25.53, 25.67, 28.21, 28.32, 25.82, 27, 24.98, 24.04, 23.43, 28.58, 25.37, 24.35, 27.36, 25.02, 23.23, 24.7, 22.91, 27.68, 24.7, 22.24, 24.7, 25.39, 22.61, 24.01, 26.22, 24.67, 24.57, 25.76, 23.9, 24.62, 25.45, 22.99, 25.7, 23.6, 25.29, 26.4, 25.88, 23.71, 26.19, 21.85, 22.04, 24.63, 24.89, 25.85, 25.3, 26.87, 25.29, 21.42, 24.72, 26.24, 23.55, 25, 23.33, 24.72, 25.25, 22.64, 21.85, 24.49, 26.13, 26.47, 23.56, 28.95, 28.92, 22.75, 25.75, 24.92, 24.42, 24.2, 24.87, 24.4, 25.77, 22.57, 24.5, 23.65, 22.94, 24.08, 23.52, 25.32, 27.04, 24.64, 23.13, 25.28, 24.98, 24.29, 24.14, 26.62, 24.9, 21.31, 24.72, 25.2, 24.8, 25.18, 24.27, 26.12, 25.03, 25.73, 24.49, 25.43, 28.24, 23.8, 22.28, 23.72, 23.54, 23.15, 25.5, 24.45, 23.96, 24.62, 24.71, 23.29, 24.75, 24.8, 24.73, 25.69, 25.54, 23.24, 25.93, 27.39, 25.81, 24.76, 24.96, 24.58, 21.86, 24.11, 24.26, 25.72, 23.45, 22.61, 27.68, 24.87, 25.88, 24.01, 23.38, 24.77, 25.49, 25.51, 25.72, 24.58, 23.92, 24.97, 23.94, 26.03, 25.04, 21.43, 23.63, 24.07, 24.6, 24.37, 27.49, 25.78, 25.62, 25.4, 26.86, 25.33, 22.52, 24.67, 23.95, 24.35, 22.98, 27.74, 23.52, 23.97, 24.36, 23.17, 25.19, 24.55, 25.92, 26.07, 27.75, 26.72, 25.79, 24.32, 23.78, 25.38, 25.54, 24.11, 24.44, 26.52, 24.74, 25.11, 26.08, 25.68, 27.23, 23.13, 26.17, 23.26, 23.47, 26.03, 27.47, 22.82, 24.85, 28.33, 25.07, 24.29, 24.23, 24.55, 25.28, 27.42, 26.1, 25.3, 23.12, 23.34, 23.24, 22.64, 24.25, 23.24, 25.53, 23.65, 24.84, 24.79, 27.74, 23.92, 24.94, 22.39, 21.91, 24.3, 24.28, 23.33, 24.1, 21.45, 26.54, 24.47, 21.63, 26.76, 23.02, 24.34, 24.29, 24.52, 23.83, 25.5, 26.1, 23.93, 25.17, 24.26, 27.19, 28.55, 25.04, 25.47, 25.94, 23.86, 24.91, 26.74, 26.09, 24.03, 24.1, 25.22, 26.04, 24.66, 26.14, 26.76, 24.15, 23.11, 23.67, 24.96, 25.76, 27.48, 25.03, 24.48, 25.4, 24.99, 28.11, 23.12, 25.05, 23.03, 24.72, 24.33, 24.63, 26.08, 26.44, 24.17, 24.81, 24.5, 24.68, 23.89, 25.75, 21.29, 27.61, 24.86, 24.72, 26.52, 23.44, 24.78, 25.81, 26.72, 24.13, 25.27, 25.97, 27.85, 23.37, 22.45, 25.9, 22.39, 26.66, 24.61, 27.15, 26.11, 26.86, 23.92, 26.9, 23.1, 23.73, 23, 24.76, 22.96, 26.87, 22.13, 25.07, 25.65, 22.06, 27.22, 21.74, 23.63, 25.11, 24.75, 24.87, 27.53, 25.76, 26.32, 24.31, 25.48, 26.39, 24.64, 24.7, 24.73, 24.33, 25.07, 22.62, 25.32, 24.89, 24.7, 24.31, 24.78, 22.09, 25.98, 28.32, 24.83, 26.75, 24.89, 26.54, 23.99, 24.9, 24.99, 25.31, 26.18, 23.68, 23.97, 23.87, 25.38, 23.21, 26.47, 25.91, 24.7, 25.31, 24.92, 24.55, 24.44, 24.25, 25.59, 23.66, 23.36, 25.85, 24.52, 25.28, 25.51, 24.43, 27.83, 24.83, 27.46, 25.04, 27.33, 22.92, 26.9, 23.67, 25.54, 25.26, 25.34, 25.05, 23.2, 28.16, 23.37, 25.25, 24.64, 25.43, 26, 25.03, 24.64, 25.08, 25.85, 25.4, 25.64, 25.36, 26.1, 26.47, 23.65, 27.68, 25.58, 27.64, 23.51, 25.31, 26.87, 25.56, 24.15, 22.9, 25.21, 24.59, 22.51, 25.45, 24.02, 24.9, 25.28, 24.26, 24.96, 27.13, 23.81, 24.35, 24.38, 25.85, 25.06, 25.42, 24.85, 27.9, 25.7, 23.69, 23.26, 25.04, 27.44, 25.72, 24.27, 22.7, 27.21, 24.82, 25.13, 25.34, 25.19, 26.31, 24.54, 25.62, 22.28, 23.63, 25.73, 25.59, 25.33, 25.41, 24.79, 25.04, 25.89, 23.61, 24.2, 24.95, 25.31, 22.4, 24.73, 23.46, 24.32, 27.99, 27.81, 21.93, 24.16, 24.41, 24.5, 27.11, 24.37, 23.35, 24.61, 25.87, 25.11, 23.48, 24.99, 24.28, 27.61, 26.47, 25.69, 27.17, 27.38, 23.38, 24.33, 25.89, 24.77, 22.72, 23.47, 26.16, 24.7, 24.68, 24.52, 25.25, 21.94, 24.44, 25.55, 24.72, 26.07, 26.87, 25.79, 25.1, 25.19, 26.05, 24.47, 24.43, 23.03, 25.38, 25.09, 21.98, 27.3, 27.71, 24.05, 21.93, 22.95, 23.91, 23.31, 24.69, 24.46, 24.17, 22.97, 24.17, 25.74, 24.95, 22.86, 25, 25.06, 24.97, 24.67, 26.22, 24.78, 25.12, 25.47, 28.52, 23.1, 23.47, 22.95, 27.8, 25.43, 23.18, 25.11, 25.62, 25.31, 24.26, 25.34, 23.63, 24.87, 27.41, 24.67, 24.34, 21.24, 23.77, 23, 26.17, 27.5, 25.55, 25.32, 24.34, 24.61, 24.67, 24.84, 25.54, 24.51, 25.01, 26.68, 24.41, 27.55, 23.92, 25.78, 28.04, 27.77, 24.81, 26, 26.48, 23.84, 25.43, 26.93, 23.8, 24.65, 24.56, 25.2, 22.92, 23.49, 26.12, 24.92, 23.02, 24.65, 25.65, 24.4, 25.93, 25.65, 25.68, 25.05, 24.19, 23.15, 25.66, 23.42, 24.52, 24.83, 25.13, 25.67, 25.14, 25.04, 25.38, 25.25, 25.6, 23.88, 25.44, 23.47, 28.42, 23.92, 22.82, 24.41, 28.44, 23.87, 27, 25.31, 24.2, 25.04, 27.58, 23.77, 23.69, 23.4, 23.27, 26.03, 22.45, 24.58, 25.67, 24.88, 23.1, 24.98, 23.59, 25.14, 28.02, 24.84, 22.73, 24.58, 25.21, 25.57, 25.66, 24.19, 25.39, 28.66, 25.25, 27.75, 24.52, 25.45, 23.32, 25.58, 25.36, 23.71, 24.88, 23.26, 25.32, 24.12, 25.82, 25.69, 24.72, 23.61, 24.68, 24.3, 24.56, 24.19, 25.49, 25.69, 24.87, 27.19, 22.82, 23.18, 25.56, 27.76, 27.5, 25.02, 25.2, 24.88, 24.17, 23.88, 23.88, 21.73, 23.75, 25.19, 24.62, 25.04, 23.63, 25.54, 23.46, 24.09, 27.31, 24.71, 25.02, 24.67, 25.33, 27.76, 24.24, 24.19, 25.65, 23.88, 27.72, 23.77, 23.25, 24.43, 24.66, 23.56, 24.75, 27.41, 28.02, 26.94, 24.81, 26.53, 23.33, 25.39, 23.49, 24.83, 23.44, 24.95, 23.25, 23.76, 24.24, 26.14, 25.08, 22.8, 24.51, 23.39, 25.68, 25.34, 24.12, 24.68, 22.61, 27.11, 25.36, 23.72, 26.6, 24.9, 23.79, 25.95, 24.8, 24.94, 25.13, 24.94, 25.67, 26.73, 24.45, 25.22, 26.19, 24.17, 22.49, 23.27, 27.72, 25.79, 27.66, 24.94, 24.06, 24.63, 26.49, 24.93, 26.23, 23.86, 25.33, 27.73, 25.88, 24.25, 27.77, 24.45, 25.03, 24.98, 23.35, 22.77, 23.35, 24.91, 25.32, 21.35, 25.19, 25.79, 23.74, 25, 23.27, 24.48, 25.19, 24.68, 24.42, 22.9, 27.95, 25.98, 25.38, 23.42, 25.18, 24.85, 22.73, 24.62, 23.54, 24.52, 25.49, 26.16, 23.37, 24.76, 23.52, 24.39, 24.16, 25.79, 22.69, 23.65, 26, 25.68, 27.37, 23.99, 24.96, 24.83, 23.21, 24.88, 23.77, 26.46, 24.06, 24.67, 24.46, 22.68, 25.81, 23.1, 25.15, 25.07, 24.64, 27.9, 26.86, 25.5, 24.76, 21.68, 23.63, 24.14, 23.42, 24.89, 21.69, 26.42, 23.97, 26.19, 25.04, 24.3, 25.36, 24.62, 26.59, 23.01, 24.68, 23.48, 24.31, 25.89, 25.11, 22.33, 26.68, 26.09, 23.13, 23.27, 23.3, 22.37, 24.38, 24.91, 25.62, 23.76, 25.47, 24.58, 25.2, 27.6, 27.86, 23.68, 25.04, 22.94, 25.8, 26.36, 25.83, 25.5, 24.6, 28.45, 25.12, 23.84, 22.49, 24.44, 26.16, 28.07, 24.49, 25.62, 23.52, 24.49, 28.07, 27.41, 25.26, 21.96, 23.26, 23.52, 25.41, 26.86, 25.72, 21.88, 25.24, 27.48, 25.94, 21.78, 25.79, 27.99, 23.02, 24.86, 25.44, 26.11, 26.85, 24.72, 23.18, 25.54, 24.39, 22.67, 24.3, 24.46, 25.15, 25.43, 22.92, 25.64, 23.58, 25.17, 24.85, 23.62, 23.74, 26.53, 23.8, 23.55, 25.3, 25.31, 26.22, 23.88, 24.8, 25.25, 25.58, 25.65, 24.22, 24.28, 23.56, 23.95, 23.75, 23.96, 24.68, 24.24, 25.04, 24.28, 25.31, 24.8, 23.65, 23.94, 25.04, 23.25, 25.34, 24.99, 25.99, 25.01, 24.57, 27.75, 24, 22.04, 23.2, 22.86, 24.35, 24.13, 24.34, 23.15, 27.43, 25.02, 26.49, 26.01, 23.7, 24.57, 27.63, 25.05, 24.56, 25.38, 25.21, 26.75, 23.55, 23.32, 23.62, 24.27, 23.95, 25.72, 26.25, 22.93, 24.18, 25.41, 25.66, 25.35, 27.11, 27.79, 23.94, 26.91, 28.01, 22.36, 22.68, 24.74, 23.11, 25.61, 22.65, 22.67, 26.25, 24.88, 22.95, 23.71, 25.15, 24.05, 23.01, 24.37, 21.59, 25.16, 23.46, 23.73, 23.85, 24.33, 21.59, 25.38, 25.57, 24.15, 23.72, 24.77, 22.61, 26.35, 23.89, 23.75, 24.68, 24.49, 23.94, 25.98, 26.02, 25.81, 24.63, 26.19, 25.7, 25.53, 27.7, 24.95, 22.38, 24.99, 25.08, 24.08, 21.68, 24.96, 24.97, 24.58, 24.73, 22.05, 24.18, 22.76, 23.23, 25.44, 23.07, 25.03, 24.42, 26.31, 23.7, 25.49, 24.83, 21.72, 24, 24.43, 23.66, 25.58, 24.65, 24.97, 24.24, 23.78, 24.95, 24.73, 25.05, 24.34, 24.13, 24.39, 24.27, 21.84, 22.68, 24.99, 25.5, 23.92, 22.32, 23.99, 25.5, 23.24, 25.88, 23.95, 24.22, 24.92, 24.64, 24.28, 25.04, 26.31, 23.64, 27.26, 25.01, 24.58, 23.73, 24.37, 24.27, 23.63, 25.27, 22.49, 24.07, 24.2, 24.31, 26.62, 23.87, 25.21, 24.94, 27.45, 24.04, 22.85, 22.95, 25.73, 26.45, 23.9, 24.9, 26.63, 22.91, 25.11, 25.28, 23.46, 21.75, 26.43, 25.9, 25.9, 25.53, 24.11, 24.74, 25.02, 24.54, 25.85, 25.04, 23.5, 25.04, 22.58, 25.41, 26.16, 23.72, 25.18, 24.72, 27.11, 23.6, 23.56, 24.04, 22.13, 25.21, 23.57, 24.91, 23.73, 24.19, 23.35, 23.74, 23.7, 27.17, 24.28, 25.39, 25.39, 23.16, 25.19, 23.26, 25.05, 25.55, 24.55, 24.26, 24.38, 24.02, 26.45, 25.55, 24.23, 26.39, 28.24, 23.6, 25.05, 27.43, 23.35, 24.55, 25.29, 23.73, 24.43, 27.57, 24.3, 25.68, 25.33, 26.62, 28.19, 26.95, 24.83, 27.44, 25.62, 25.44, 27.14, 26.09, 25.29, 27.44, 25.48, 23.17, 23.05, 23.87, 24.83, 24.15, 25.28, 27.56, 23.46, 25.32, 23.08, 25.66, 24.14, 21.3, 23.07, 23, 26.62, 23.91, 27.63, 23.4, 26.18, 27.88, 25.07, 27.63, 23.76, 22.81, 23.56, 23.37, 26.26, 22.22, 24.02, 26.94, 25.05, 22.18, 27.18, 22.01, 27.85, 22.2, 28.01, 24.68, 25.57, 24.79, 24.14, 28.05, 22.77, 23.58, 23.79, 24.03, 23.11, 23.95, 25.03, 22.79, 25.87, 24.78, 24.55, 24.91, 26.7, 26.26, 28.38, 25.26, 23.89, 26.01, 25.47, 22.88, 24.68, 26.47, 25.42, 24.07, 26.16, 23.24, 27.25, 27.37, 24.79, 24.63, 24.49, 26.13, 24.1, 26.01, 22.79, 25.08, 23.29, 26.15, 24.31, 24.41, 28.27, 23.3, 26.62, 27.37, 22.88, 26.07, 24.88, 21.9, 24.66, 23.49, 25.83, 25.27, 27.35, 23.41, 24.47, 27.3, 26.25, 25.61, 27.28, 22.49, 25.16, 23.86, 22.78, 25.57, 27.24, 25.05, 25.24, 25.38, 28.22, 27.49, 27.22, 24.28, 23.61, 23.32, 28.5, 21.7, 23.23, 24.32, 27.78, 26.07, 27.62, 24.64, 24.03, 24.06, 25.52, 23.98, 27.67, 25.45, 24.65, 25.02, 26.03, 23.39, 28.72, 23.73, 27.84, 28.58, 26.28, 24.58, 23.4, 24.37, 25.27, 25.75, 25.01, 25.04, 24.5, 25.6, 23.22, 26.08, 26.37, 25.33, 25.68, 25.46, 23.13, 26.72, 24.82, 24.03, 24.69, 24.62, 25.22, 24.67, 25.85, 24.81, 24.54, 23.3, 24, 25.25, 26.4, 21.55, 21.7, 25.83, 24.82, 24.3, 25.49, 24.55, 22.31, 22.05, 27.77, 24.7, 21.58, 24.93, 26.98, 25.6, 26.08, 26, 24.98, 25.48, 24.45, 21.98, 26.35, 25.05, 23.15, 24.29, 23.73, 23.33, 25.15, 22.8, 22.04, 25.5, 25.11, 25.12, 26.66, 27.32, 25.09, 25.07, 28.59, 24.52, 24.06, 26.04, 26.81, 26.82, 25.9, 23.29, 22.86, 25.05, 24.19, 27.1, 25.19, 25.55, 23.05, 25.08, 26.56, 24.84, 21.66, 24.29, 23.75, 23.01, 23.61, 25.43, 23.38, 26.56, 26.59, 25.27, 22.92, 25.23, 27.09, 21.89, 25.21, 23.5, 24.57, 24.22, 24.15, 25.84, 24.27, 25.84, 26.02, 23.01, 23.26, 24.61, 23.72, 24.69, 24.62, 22.33, 26.61, 25.64, 24.18, 25.34, 25.34, 24.44, 21.99, 24.43, 23.44, 26.25, 25.72, 26.02, 23.72, 25.08, 25.11, 26.05, 24, 24.04, 26.55, 24.88, 25.88, 24.75, 23.99, 23.39, 21.4, 24.64, 24.6, 24.83, 25.26, 25.48, 27.84, 27.48, 24.73, 22.89, 24.5, 21.95, 22.9, 25.44, 25.25, 23.76, 24.91, 24.92, 24.71, 25.25, 28.38, 25.57, 23.45, 25.05, 27.83, 25.18, 24, 24.33, 28.11, 24.42, 24.34, 24.64, 24.97, 25.7, 23.83, 24.29, 21.88, 27.37, 24.31, 23.22, 24.31, 25.23, 24.54, 24.92, 23.76, 25.18, 24.05, 24.57, 24.46, 25.28, 25.53, 25.9, 28.25, 24.27, 25.23, 25.11, 25.03, 24.87, 25.02, 27.34, 23.26, 24.73, 24.71, 26.75, 27.17, 25.25, 26, 21.53, 26.2, 25.11, 24.63, 24.28, 27.84, 24.56, 24, 23.44, 24.67, 23.3, 26.59, 23.75, 27.52, 24.61, 23.79, 22.85, 24.69, 21.74, 23.65, 25.19, 23.23, 24.86, 24.11, 23.63, 28.63, 26.59, 23.8, 24, 27.42, 23.53, 24.63, 23.58, 25.92, 25.99, 23.07, 23.02, 25.18, 22.25, 24.3, 25.35, 27.62, 25.8, 25.02, 24.63, 24.96, 24.69, 23.96, 25.76, 25.51, 25.09, 25.12, 24.19, 22.19, 23.48, 24.97, 26.59, 24.58, 23.03, 25.34, 27.96, 26.24, 23.73, 28.59, 25.45, 27.94, 25.59, 23.93, 25.15, 27.6, 27.03, 26.21, 25.03, 25.1, 26.39, 24.21, 24.88, 25.8, 25.99, 26.13, 25.24, 23.94, 24.57, 25.86, 25.23, 28.49, 25.61, 27.87, 24.82, 24.89, 21.93, 24.96, 25.61, 25.23, 27.6, 26.27, 25.8, 23.06, 23.35, 23.68, 26.21, 22.73, 27.39, 24.92, 23.37, 23.52, 25.96, 27.21, 24.88, 24.69, 25.85, 25.32, 25, 24.14, 27.35, 23.54, 23.14, 24.37, 24.4, 24.56, 23.75, 24.4, 24.14, 22.47, 24.51, 25.83, 24.77, 24.06, 25.97, 24.2, 25.31, 23.53, 24.68, 27.22, 24.84, 23.92, 26.19, 23.42, 23.69, 28.64, 23.36, 26.32, 24.42, 25.45, 24.68, 24.55, 28.25, 26.36, 25.96, 21.53, 25.49, 25.23, 25.48, 22.63, 25.72, 24.35, 24.38, 28.63, 25.37, 22.04, 25.62, 23.46, 28.43, 25.43, 28.04, 23.8, 24.57, 28.19, 23.63, 26.38, 23.56, 23.25, 24.8, 26.37, 22.92, 23.5, 26.09, 24.94, 26.49, 24.54, 24.91, 24.98, 23.63, 23.72, 24.48, 25.09, 27.7, 23.25, 26.02, 25.35, 22.5, 25.92, 26.36, 22.92, 21.89, 25.04, 22.74, 26.12, 24.55, 25.52, 23.83, 25.87, 25.48, 25.45, 26.2, 27.03, 27.31, 22.64, 22.52, 25.34, 27.33, 23.63, 27.18, 28.32, 23.94, 24.94, 22.73, 25, 23.42, 25.16, 25.98, 24.89, 21.96, 27.32, 25.64, 25.15, 26.98, 25.91, 21.95, 26.58, 22.18, 25.34, 22.61, 23.43, 22.92, 25.67, 25.09, 26.34, 25.08, 24.11, 24.94, 23.88, 22.71, 21.64, 24.79, 27.13, 23.28, 23.45, 26.01, 25.26, 22.75, 24.03, 25.11, 23.86, 24.23, 23.7, 23.78, 23.55, 22.82, 21.92, 24.03, 27.49, 24.2, 22.08, 27.4, 24.99, 25.36, 25.45, 26.91, 24.59, 26.08, 24.7, 25.01, 24.71, 24.69, 25.17, 26.83, 24.88, 25.06, 27.89, 27.51, 25.52, 23.17, 24.69, 25.17, 23.7, 25.29, 25.83, 25.52, 24.77, 26.8, 24.17, 26.92, 25.86, 23.2, 27.25, 24.25, 25.73, 25.03, 24.87, 25.82, 23.97, 25.18, 24.32, 24.86, 21.64, 25.34, 24.47, 24.86, 25.13, 25.27, 24.25, 27.97, 23.99, 25.7, 25.34, 26.31, 24.97, 23.63, 25.13, 25.99, 25.91, 24.25, 24.89, 22.89, 24.8, 26.13, 25.74, 26.42, 23.54, 26.84, 24.46, 24.63, 24.27, 23.39, 24.91, 24.95, 26.59, 26.02, 25, 24.99, 25.6, 25.38, 21.47, 26.65, 25.13, 27.57, 25.36, 25.27, 25.12, 22.51, 25.1, 24.77, 24.09, 24.92, 26.34, 24.41, 27.83, 25.85, 23.52, 27.96, 21.73, 23.99, 25.55, 24.04, 24.43, 23.4, 23.02, 25.36, 25.08, 24.1, 25.75, 24.74, 25.71} + model := "spherical" + + coordinates := ordinarykriging.PolygonCoordinates{ordinarykriging.Ring{ + ordinarykriging.Point{103.614373, 27.00541}, + ordinarykriging.Point{103.653907, 27.022855}, + ordinarykriging.Point{103.675582, 27.051684}, + ordinarykriging.Point{103.705146, 27.049136}, + ordinarykriging.Point{103.730635, 27.021102}, + ordinarykriging.Point{103.754217, 26.963102}, + ordinarykriging.Point{103.775111, 26.950908}, + ordinarykriging.Point{103.777192, 26.934967}, + ordinarykriging.Point{103.765228, 26.916871}, + ordinarykriging.Point{103.774071, 26.866952}, + ordinarykriging.Point{103.722225, 26.851478}, + ordinarykriging.Point{103.70792, 26.829858}, + ordinarykriging.Point{103.705666, 26.794746}, + ordinarykriging.Point{103.720491, 26.770721}, + ordinarykriging.Point{103.725433, 26.742778}, + ordinarykriging.Point{103.749969, 26.725928}, + ordinarykriging.Point{103.767395, 26.73607}, + ordinarykriging.Point{103.773377, 26.716904}, + ordinarykriging.Point{103.759419, 26.689427}, + ordinarykriging.Point{103.760979, 26.648998}, + ordinarykriging.Point{103.748408, 26.624222}, + ordinarykriging.Point{103.77069, 26.597523}, + ordinarykriging.Point{103.764101, 26.586009}, + ordinarykriging.Point{103.814906, 26.553622}, + ordinarykriging.Point{103.819327, 26.530266}, + ordinarykriging.Point{103.840829, 26.531865}, + ordinarykriging.Point{103.865624, 26.512265}, + ordinarykriging.Point{103.887646, 26.517546}, + ordinarykriging.Point{103.91669, 26.513225}, + ordinarykriging.Point{103.955184, 26.521546}, + ordinarykriging.Point{104.00096, 26.519706}, + ordinarykriging.Point{104.008676, 26.511785}, + ordinarykriging.Point{104.042575, 26.514345}, + ordinarykriging.Point{104.052546, 26.507144}, + ordinarykriging.Point{104.071966, 26.519146}, + ordinarykriging.Point{104.064423, 26.56042}, + ordinarykriging.Point{104.068498, 26.573375}, + ordinarykriging.Point{104.093901, 26.596403}, + ordinarykriging.Point{104.121037, 26.63781}, + ordinarykriging.Point{104.160572, 26.64684}, + ordinarykriging.Point{104.174357, 26.635252}, + ordinarykriging.Point{104.190916, 26.638609}, + ordinarykriging.Point{104.203574, 26.62654}, + ordinarykriging.Point{104.229844, 26.619906}, + ordinarykriging.Point{104.248917, 26.62686}, + ordinarykriging.Point{104.271459, 26.619426}, + ordinarykriging.Point{104.289666, 26.633654}, + ordinarykriging.Point{104.312641, 26.612792}, + ordinarykriging.Point{104.348794, 26.619506}, + ordinarykriging.Point{104.365007, 26.642765}, + ordinarykriging.Point{104.379919, 26.648838}, + ordinarykriging.Point{104.398212, 26.685912}, + ordinarykriging.Point{104.398819, 26.707719}, + ordinarykriging.Point{104.421274, 26.712032}, + ordinarykriging.Point{104.441735, 26.68703}, + ordinarykriging.Point{104.442688, 26.67257}, + ordinarykriging.Point{104.467831, 26.644922}, + ordinarykriging.Point{104.458294, 26.610553}, + ordinarykriging.Point{104.463496, 26.595764}, + ordinarykriging.Point{104.487511, 26.579533}, + ordinarykriging.Point{104.500689, 26.589287}, + ordinarykriging.Point{104.542305, 26.58481}, + ordinarykriging.Point{104.556523, 26.590407}, + ordinarykriging.Point{104.579672, 26.568097}, + ordinarykriging.Point{104.570655, 26.524586}, + ordinarykriging.Point{104.59311, 26.522746}, + ordinarykriging.Point{104.615131, 26.508985}, + ordinarykriging.Point{104.638626, 26.478096}, + ordinarykriging.Point{104.632211, 26.451843}, + ordinarykriging.Point{104.642094, 26.439114}, + ordinarykriging.Point{104.664896, 26.434951}, + ordinarykriging.Point{104.665416, 26.396274}, + ordinarykriging.Point{104.680935, 26.378733}, + ordinarykriging.Point{104.680502, 26.364154}, + ordinarykriging.Point{104.658394, 26.3543}, + ordinarykriging.Point{104.659521, 26.335551}, + ordinarykriging.Point{104.62198, 26.32898}, + ordinarykriging.Point{104.591809, 26.317119}, + ordinarykriging.Point{104.580365, 26.292993}, + ordinarykriging.Point{104.555309, 26.273512}, + ordinarykriging.Point{104.542044, 26.253146}, + ordinarykriging.Point{104.549847, 26.216174}, + ordinarykriging.Point{104.528693, 26.175177}, + ordinarykriging.Point{104.519503, 26.168116}, + ordinarykriging.Point{104.518896, 26.132802}, + ordinarykriging.Point{104.526699, 26.100368}, + ordinarykriging.Point{104.50355, 26.072583}, + ordinarykriging.Point{104.459941, 26.085834}, + ordinarykriging.Point{104.456733, 26.072101}, + ordinarykriging.Point{104.472773, 26.053306}, + ordinarykriging.Point{104.462369, 26.029608}, + ordinarykriging.Point{104.470518, 26.009521}, + ordinarykriging.Point{104.462455, 25.985974}, + ordinarykriging.Point{104.443989, 25.95985}, + ordinarykriging.Point{104.438353, 25.92769}, + ordinarykriging.Point{104.414598, 25.909918}, + ordinarykriging.Point{104.418413, 25.892786}, + ordinarykriging.Point{104.434278, 25.895199}, + ordinarykriging.Point{104.441908, 25.869136}, + ordinarykriging.Point{104.423615, 25.842182}, + ordinarykriging.Point{104.430897, 25.82166}, + ordinarykriging.Point{104.40324, 25.798478}, + ordinarykriging.Point{104.397952, 25.761523}, + ordinarykriging.Point{104.373069, 25.731564}, + ordinarykriging.Point{104.328853, 25.760477}, + ordinarykriging.Point{104.322264, 25.732692}, + ordinarykriging.Point{104.323478, 25.703451}, + ordinarykriging.Point{104.311687, 25.647123}, + ordinarykriging.Point{104.312988, 25.632937}, + ordinarykriging.Point{104.331021, 25.615604}, + ordinarykriging.Point{104.334835, 25.598107}, + ordinarykriging.Point{104.357637, 25.600284}, + ordinarykriging.Point{104.368995, 25.58335}, + ordinarykriging.Point{104.389109, 25.595446}, + ordinarykriging.Point{104.421707, 25.58464}, + ordinarykriging.Point{104.423181, 25.563752}, + ordinarykriging.Point{104.434192, 25.555444}, + ordinarykriging.Point{104.436186, 25.52043}, + ordinarykriging.Point{104.418673, 25.499369}, + ordinarykriging.Point{104.434712, 25.47225}, + ordinarykriging.Point{104.449711, 25.495011}, + ordinarykriging.Point{104.481789, 25.494446}, + ordinarykriging.Point{104.524531, 25.526805}, + ordinarykriging.Point{104.547767, 25.516638}, + ordinarykriging.Point{104.556957, 25.524142}, + ordinarykriging.Point{104.540571, 25.402731}, + ordinarykriging.Point{104.559991, 25.394169}, + ordinarykriging.Point{104.567794, 25.402892}, + ordinarykriging.Point{104.615998, 25.364603}, + ordinarykriging.Point{104.645822, 25.356766}, + ordinarykriging.Point{104.640967, 25.294859}, + ordinarykriging.Point{104.662035, 25.284835}, + ordinarykriging.Point{104.671225, 25.293485}, + ordinarykriging.Point{104.707205, 25.29688}, + ordinarykriging.Point{104.709546, 25.281763}, + ordinarykriging.Point{104.735902, 25.267856}, + ordinarykriging.Point{104.754195, 25.275942}, + ordinarykriging.Point{104.779945, 25.270039}, + ordinarykriging.Point{104.796677, 25.253544}, + ordinarykriging.Point{104.817398, 25.261064}, + ordinarykriging.Point{104.827975, 25.237127}, + ordinarykriging.Point{104.807168, 25.224024}, + ordinarykriging.Point{104.815838, 25.198381}, + ordinarykriging.Point{104.808642, 25.19029}, + ordinarykriging.Point{104.823034, 25.171275}, + ordinarykriging.Point{104.80474, 25.161645}, + ordinarykriging.Point{104.777344, 25.186406}, + ordinarykriging.Point{104.7672, 25.204448}, + ordinarykriging.Point{104.745959, 25.213266}, + ordinarykriging.Point{104.724544, 25.195711}, + ordinarykriging.Point{104.734948, 25.174188}, + ordinarykriging.Point{104.718302, 25.140926}, + ordinarykriging.Point{104.695674, 25.121823}, + ordinarykriging.Point{104.686484, 25.076237}, + ordinarykriging.Point{104.670965, 25.066843}, + ordinarykriging.Point{104.619553, 25.060688}, + ordinarykriging.Point{104.683796, 25.054856}, + ordinarykriging.Point{104.700529, 25.036306}, + ordinarykriging.Point{104.713014, 24.996199}, + ordinarykriging.Point{104.687698, 24.988095}, + ordinarykriging.Point{104.687004, 24.974966}, + ordinarykriging.Point{104.663422, 24.963132}, + ordinarykriging.Point{104.663942, 24.951054}, + ordinarykriging.Point{104.638713, 24.918299}, + ordinarykriging.Point{104.635419, 24.903945}, + ordinarykriging.Point{104.596318, 24.88448}, + ordinarykriging.Point{104.53979, 24.813895}, + ordinarykriging.Point{104.542391, 24.755773}, + ordinarykriging.Point{104.520283, 24.727189}, + ordinarykriging.Point{104.499476, 24.668865}, + ordinarykriging.Point{104.475287, 24.645137}, + ordinarykriging.Point{104.505544, 24.626688}, + ordinarykriging.Point{104.50277, 24.590758}, + ordinarykriging.Point{104.515515, 24.564251}, + ordinarykriging.Point{104.52089, 24.535054}, + ordinarykriging.Point{104.534762, 24.535054}, + ordinarykriging.Point{104.549934, 24.518216}, + ordinarykriging.Point{104.547246, 24.488927}, + ordinarykriging.Point{104.567014, 24.472652}, + ordinarykriging.Point{104.578024, 24.420152}, + ordinarykriging.Point{104.616345, 24.42178}, + ordinarykriging.Point{104.62987, 24.397843}, + ordinarykriging.Point{104.61097, 24.377159}, + ordinarykriging.Point{104.660821, 24.355657}, + ordinarykriging.Point{104.683709, 24.330648}, + ordinarykriging.Point{104.708939, 24.321279}, + ordinarykriging.Point{104.721076, 24.340017}, + ordinarykriging.Point{104.703737, 24.421373}, + ordinarykriging.Point{104.717262, 24.442783}, + ordinarykriging.Point{104.752895, 24.435945}, + ordinarykriging.Point{104.752808, 24.455236}, + ordinarykriging.Point{104.768154, 24.459305}, + ordinarykriging.Point{104.784973, 24.443841}, + ordinarykriging.Point{104.836645, 24.44669}, + ordinarykriging.Point{104.913894, 24.426258}, + ordinarykriging.Point{104.929846, 24.410871}, + ordinarykriging.Point{104.979958, 24.412906}, + ordinarykriging.Point{105.019405, 24.438713}, + ordinarykriging.Point{105.054605, 24.439283}, + ordinarykriging.Point{105.108965, 24.412336}, + ordinarykriging.Point{105.102896, 24.38229}, + ordinarykriging.Point{105.116768, 24.37154}, + ordinarykriging.Point{105.144598, 24.375612}, + ordinarykriging.Point{105.18786, 24.347104}, + ordinarykriging.Point{105.19679, 24.326982}, + ordinarykriging.Point{105.171648, 24.299605}, + ordinarykriging.Point{105.168353, 24.277682}, + ordinarykriging.Point{105.179884, 24.252413}, + ordinarykriging.Point{105.201298, 24.248174}, + ordinarykriging.Point{105.215257, 24.214908}, + ordinarykriging.Point{105.23277, 24.219312}, + ordinarykriging.Point{105.243087, 24.206754}, + ordinarykriging.Point{105.229562, 24.165728}, + ordinarykriging.Point{105.182832, 24.167033}, + ordinarykriging.Point{105.181878, 24.132849}, + ordinarykriging.Point{105.200605, 24.105348}, + ordinarykriging.Point{105.234937, 24.074984}, + ordinarykriging.Point{105.260167, 24.061268}, + ordinarykriging.Point{105.293025, 24.07482}, + ordinarykriging.Point{105.273171, 24.09286}, + ordinarykriging.Point{105.293545, 24.113182}, + ordinarykriging.Point{105.318948, 24.117181}, + ordinarykriging.Point{105.345911, 24.086167}, + ordinarykriging.Point{105.396803, 24.064616}, + ordinarykriging.Point{105.413016, 24.038978}, + ordinarykriging.Point{105.461047, 24.029587}, + ordinarykriging.Point{105.494772, 24.017909}, + ordinarykriging.Point{105.509251, 24.024851}, + ordinarykriging.Point{105.504743, 24.044367}, + ordinarykriging.Point{105.518094, 24.075881}, + ordinarykriging.Point{105.517747, 24.096696}, + ordinarykriging.Point{105.545664, 24.123628}, + ordinarykriging.Point{105.595256, 24.137826}, + ordinarykriging.Point{105.628461, 24.126565}, + ordinarykriging.Point{105.628201, 24.10347}, + ordinarykriging.Point{105.643373, 24.063718}, + ordinarykriging.Point{105.649442, 24.033099}, + ordinarykriging.Point{105.675365, 24.03808}, + ordinarykriging.Point{105.700247, 24.065595}, + ordinarykriging.Point{105.739348, 24.059472}, + ordinarykriging.Point{105.765358, 24.073759}, + ordinarykriging.Point{105.790413, 24.069841}, + ordinarykriging.Point{105.801944, 24.052206}, + ordinarykriging.Point{105.789373, 24.039468}, + ordinarykriging.Point{105.796482, 24.023707}, + ordinarykriging.Point{105.841479, 24.030812}, + ordinarykriging.Point{105.859252, 24.056778}, + ordinarykriging.Point{105.892284, 24.040285}, + ordinarykriging.Point{105.90789, 24.069514}, + ordinarykriging.Point{105.902168, 24.099308}, + ordinarykriging.Point{105.910144, 24.114896}, + ordinarykriging.Point{105.933292, 24.123791}, + ordinarykriging.Point{105.96381, 24.11106}, + ordinarykriging.Point{105.998316, 24.124199}, + ordinarykriging.Point{106.011841, 24.099471}, + ordinarykriging.Point{106.024239, 24.103307}, + ordinarykriging.Point{106.052502, 24.084208}, + ordinarykriging.Point{106.054323, 24.049838}, + ordinarykriging.Point{106.075477, 24.028444}, + ordinarykriging.Point{106.096545, 24.017909}, + ordinarykriging.Point{106.090216, 23.99896}, + ordinarykriging.Point{106.127757, 23.956887}, + ordinarykriging.Point{106.139114, 23.921012}, + ordinarykriging.Point{106.1555, 23.893956}, + ordinarykriging.Point{106.192434, 23.878914}, + ordinarykriging.Point{106.192087, 23.862398}, + ordinarykriging.Point{106.17284, 23.861662}, + ordinarykriging.Point{106.19226, 23.824779}, + ordinarykriging.Point{106.155673, 23.813818}, + ordinarykriging.Point{106.13686, 23.795412}, + ordinarykriging.Point{106.14501, 23.744271}, + ordinarykriging.Point{106.157321, 23.724136}, + ordinarykriging.Point{106.149518, 23.665432}, + ordinarykriging.Point{106.137293, 23.632098}, + ordinarykriging.Point{106.120734, 23.605392}, + ordinarykriging.Point{106.124896, 23.585891}, + ordinarykriging.Point{106.141455, 23.569665}, + ordinarykriging.Point{106.120561, 23.559257}, + ordinarykriging.Point{106.107296, 23.533684}, + ordinarykriging.Point{106.086228, 23.524174}, + ordinarykriging.Point{106.072183, 23.495642}, + ordinarykriging.Point{106.03603, 23.482686}, + ordinarykriging.Point{106.01054, 23.455867}, + ordinarykriging.Point{105.991814, 23.448321}, + ordinarykriging.Point{105.997362, 23.474075}, + ordinarykriging.Point{105.986265, 23.489574}, + ordinarykriging.Point{105.959909, 23.494166}, + ordinarykriging.Point{105.935807, 23.508925}, + ordinarykriging.Point{105.912918, 23.499332}, + ordinarykriging.Point{105.892024, 23.52483}, + ordinarykriging.Point{105.852403, 23.526962}, + ordinarykriging.Point{105.813822, 23.502202}, + ordinarykriging.Point{105.806193, 23.467432}, + ordinarykriging.Point{105.758682, 23.459558}, + ordinarykriging.Point{105.738048, 23.430683}, + ordinarykriging.Point{105.6999, 23.401393}, + ordinarykriging.Point{105.671897, 23.408613}, + ordinarykriging.Point{105.647535, 23.39811}, + ordinarykriging.Point{105.668862, 23.387935}, + ordinarykriging.Point{105.694265, 23.363313}, + ordinarykriging.Point{105.674151, 23.348373}, + ordinarykriging.Point{105.700594, 23.328424}, + ordinarykriging.Point{105.671637, 23.326454}, + ordinarykriging.Point{105.666955, 23.346814}, + ordinarykriging.Point{105.593261, 23.312578}, + ordinarykriging.Point{105.56968, 23.282439}, + ordinarykriging.Point{105.560316, 23.257305}, + ordinarykriging.Point{105.531792, 23.248186}, + ordinarykriging.Point{105.526417, 23.234549}, + ordinarykriging.Point{105.546358, 23.200119}, + ordinarykriging.Point{105.54263, 23.184257}, + ordinarykriging.Point{105.501968, 23.202749}, + ordinarykriging.Point{105.4972, 23.220745}, + ordinarykriging.Point{105.475785, 23.249501}, + ordinarykriging.Point{105.459919, 23.259441}, + ordinarykriging.Point{105.439632, 23.296565}, + ordinarykriging.Point{105.41579, 23.283753}, + ordinarykriging.Point{105.393509, 23.308308}, + ordinarykriging.Point{105.373134, 23.317668}, + ordinarykriging.Point{105.355188, 23.341888}, + ordinarykriging.Point{105.349379, 23.368812}, + ordinarykriging.Point{105.325537, 23.390068}, + ordinarykriging.Point{105.279414, 23.339425}, + ordinarykriging.Point{105.261294, 23.338112}, + ordinarykriging.Point{105.26008, 23.317915}, + ordinarykriging.Point{105.244214, 23.289256}, + ordinarykriging.Point{105.238145, 23.264287}, + ordinarykriging.Point{105.182051, 23.278907}, + ordinarykriging.Point{105.122143, 23.247694}, + ordinarykriging.Point{105.108184, 23.245886}, + ordinarykriging.Point{105.093186, 23.261084}, + ordinarykriging.Point{105.055212, 23.245229}, + ordinarykriging.Point{105.036138, 23.224607}, + ordinarykriging.Point{105.003626, 23.213021}, + ordinarykriging.Point{104.997297, 23.196092}, + ordinarykriging.Point{104.973715, 23.197407}, + ordinarykriging.Point{104.958803, 23.188613}, + ordinarykriging.Point{104.948833, 23.152199}, + ordinarykriging.Point{104.920483, 23.164037}, + ordinarykriging.Point{104.912593, 23.175792}, + ordinarykriging.Point{104.886584, 23.168805}, + ordinarykriging.Point{104.874272, 23.123423}, + ordinarykriging.Point{104.856413, 23.123423}, + ordinarykriging.Point{104.80448, 23.110019}, + ordinarykriging.Point{104.807861, 23.080657}, + ordinarykriging.Point{104.816965, 23.072925}, + ordinarykriging.Point{104.82078, 23.032201}, + ordinarykriging.Point{104.837426, 22.994345}, + ordinarykriging.Point{104.860314, 22.970968}, + ordinarykriging.Point{104.861614, 22.940012}, + ordinarykriging.Point{104.846269, 22.926342}, + ordinarykriging.Point{104.772662, 22.893482}, + ordinarykriging.Point{104.760958, 22.862508}, + ordinarykriging.Point{104.732781, 22.852126}, + ordinarykriging.Point{104.737723, 22.826005}, + ordinarykriging.Point{104.674173, 22.817187}, + ordinarykriging.Point{104.657787, 22.830867}, + ordinarykriging.Point{104.620333, 22.834988}, + ordinarykriging.Point{104.614871, 22.813149}, + ordinarykriging.Point{104.595451, 22.846276}, + ordinarykriging.Point{104.579498, 22.846359}, + ordinarykriging.Point{104.559384, 22.828313}, + ordinarykriging.Point{104.527826, 22.81422}, + ordinarykriging.Point{104.525919, 22.802764}, + ordinarykriging.Point{104.501556, 22.776633}, + ordinarykriging.Point{104.456733, 22.747777}, + ordinarykriging.Point{104.422748, 22.734995}, + ordinarykriging.Point{104.402894, 22.702336}, + ordinarykriging.Point{104.376017, 22.690127}, + ordinarykriging.Point{104.344546, 22.704563}, + ordinarykriging.Point{104.340818, 22.719326}, + ordinarykriging.Point{104.322524, 22.728975}, + ordinarykriging.Point{104.299983, 22.72848}, + ordinarykriging.Point{104.272066, 22.738541}, + ordinarykriging.Point{104.256634, 22.773913}, + ordinarykriging.Point{104.274233, 22.827901}, + ordinarykriging.Point{104.261489, 22.841992}, + ordinarykriging.Point{104.224035, 22.826335}, + ordinarykriging.Point{104.168461, 22.81966}, + ordinarykriging.Point{104.13725, 22.803011}, + ordinarykriging.Point{104.117396, 22.808945}, + ordinarykriging.Point{104.093381, 22.773995}, + ordinarykriging.Point{104.067111, 22.753961}, + ordinarykriging.Point{104.04535, 22.728151}, + ordinarykriging.Point{104.031478, 22.684765}, + ordinarykriging.Point{104.036247, 22.666533}, + ordinarykriging.Point{104.030958, 22.62676}, + ordinarykriging.Point{104.009023, 22.572692}, + ordinarykriging.Point{104.015352, 22.542141}, + ordinarykriging.Point{104.008243, 22.5172}, + ordinarykriging.Point{103.9642, 22.502827}, + ordinarykriging.Point{103.930301, 22.534956}, + ordinarykriging.Point{103.889726, 22.566583}, + ordinarykriging.Point{103.875768, 22.566087}, + ordinarykriging.Point{103.863543, 22.584085}, + ordinarykriging.Point{103.826957, 22.613967}, + ordinarykriging.Point{103.769649, 22.68724}, + ordinarykriging.Point{103.75465, 22.686663}, + ordinarykriging.Point{103.740519, 22.708027}, + ordinarykriging.Point{103.708267, 22.738376}, + ordinarykriging.Point{103.685639, 22.75025}, + ordinarykriging.Point{103.664397, 22.782239}, + ordinarykriging.Point{103.643416, 22.794604}, + ordinarykriging.Point{103.620528, 22.783888}, + ordinarykriging.Point{103.612465, 22.756682}, + ordinarykriging.Point{103.584635, 22.72848}, + ordinarykriging.Point{103.567902, 22.700933}, + ordinarykriging.Point{103.58004, 22.668265}, + ordinarykriging.Point{103.573364, 22.641944}, + ordinarykriging.Point{103.554724, 22.633939}, + ordinarykriging.Point{103.533656, 22.593496}, + ordinarykriging.Point{103.508947, 22.601008}, + ordinarykriging.Point{103.458229, 22.658365}, + ordinarykriging.Point{103.460483, 22.676763}, + ordinarykriging.Point{103.435514, 22.698789}, + ordinarykriging.Point{103.432826, 22.732769}, + ordinarykriging.Point{103.441063, 22.752971}, + ordinarykriging.Point{103.415053, 22.773418}, + ordinarykriging.Point{103.390691, 22.778859}, + ordinarykriging.Point{103.375172, 22.794933}, + ordinarykriging.Point{103.323326, 22.807874}, + ordinarykriging.Point{103.321419, 22.778035}, + ordinarykriging.Point{103.287953, 22.731202}, + ordinarykriging.Point{103.290381, 22.70547}, + ordinarykriging.Point{103.282751, 22.678496}, + ordinarykriging.Point{103.248159, 22.665625}, + ordinarykriging.Point{103.216514, 22.643595}, + ordinarykriging.Point{103.19588, 22.648381}, + ordinarykriging.Point{103.166662, 22.609015}, + ordinarykriging.Point{103.164582, 22.580205}, + ordinarykriging.Point{103.183829, 22.557665}, + ordinarykriging.Point{103.157559, 22.53859}, + ordinarykriging.Point{103.139439, 22.537847}, + ordinarykriging.Point{103.118978, 22.518273}, + ordinarykriging.Point{103.083519, 22.508444}, + ordinarykriging.Point{103.072075, 22.488206}, + ordinarykriging.Point{103.081785, 22.454248}, + ordinarykriging.Point{103.071988, 22.445324}, + ordinarykriging.Point{103.030199, 22.44144}, + ordinarykriging.Point{103.009739, 22.458875}, + ordinarykriging.Point{102.993353, 22.460941}, + ordinarykriging.Point{102.985116, 22.478375}, + ordinarykriging.Point{102.928849, 22.483662}, + ordinarykriging.Point{102.924254, 22.503654}, + ordinarykriging.Point{102.892002, 22.534956}, + ordinarykriging.Point{102.874576, 22.571124}, + ordinarykriging.Point{102.880125, 22.586892}, + ordinarykriging.Point{102.85897, 22.607281}, + ordinarykriging.Point{102.823424, 22.623128}, + ordinarykriging.Point{102.801056, 22.620487}, + ordinarykriging.Point{102.787097, 22.641532}, + ordinarykriging.Point{102.758313, 22.650526}, + ordinarykriging.Point{102.750684, 22.666863}, + ordinarykriging.Point{102.737072, 22.66513}, + ordinarykriging.Point{102.692163, 22.699614}, + ordinarykriging.Point{102.657397, 22.688148}, + ordinarykriging.Point{102.607372, 22.730707}, + ordinarykriging.Point{102.570438, 22.700273}, + ordinarykriging.Point{102.565756, 22.717842}, + ordinarykriging.Point{102.511917, 22.773171}, + ordinarykriging.Point{102.498132, 22.777787}, + ordinarykriging.Point{102.459724, 22.762865}, + ordinarykriging.Point{102.456256, 22.731202}, + ordinarykriging.Point{102.436489, 22.699531}, + ordinarykriging.Point{102.407792, 22.682043}, + ordinarykriging.Point{102.384557, 22.679733}, + ordinarykriging.Point{102.403631, 22.645245}, + ordinarykriging.Point{102.41889, 22.638066}, + ordinarykriging.Point{102.404844, 22.629978}, + ordinarykriging.Point{102.376928, 22.593744}, + ordinarykriging.Point{102.347537, 22.585241}, + ordinarykriging.Point{102.356727, 22.56361}, + ordinarykriging.Point{102.322568, 22.554032}, + ordinarykriging.Point{102.256157, 22.457388}, + ordinarykriging.Point{102.270202, 22.419621}, + ordinarykriging.Point{102.236476, 22.426811}, + ordinarykriging.Point{102.179429, 22.430531}, + ordinarykriging.Point{102.167378, 22.425572}, + ordinarykriging.Point{102.14527, 22.397799}, + ordinarykriging.Point{102.12819, 22.417141}, + ordinarykriging.Point{102.131398, 22.430861}, + ordinarykriging.Point{102.087789, 22.439208}, + ordinarykriging.Point{102.046434, 22.457884}, + ordinarykriging.Point{101.978549, 22.427803}, + ordinarykriging.Point{101.93624, 22.43896}, + ordinarykriging.Point{101.90789, 22.437225}, + ordinarykriging.Point{101.911184, 22.396972}, + ordinarykriging.Point{101.901387, 22.384324}, + ordinarykriging.Point{101.86272, 22.389201}, + ordinarykriging.Point{101.823012, 22.426811}, + ordinarykriging.Point{101.824226, 22.456892}, + ordinarykriging.Point{101.792581, 22.482423}, + ordinarykriging.Point{101.782177, 22.501423}, + ordinarykriging.Point{101.764577, 22.506379}, + ordinarykriging.Point{101.715246, 22.478209}, + ordinarykriging.Point{101.677966, 22.477218}, + ordinarykriging.Point{101.667128, 22.432762}, + ordinarykriging.Point{101.648488, 22.400444}, + ordinarykriging.Point{101.67181, 22.372749}, + ordinarykriging.Point{101.648922, 22.362992}, + ordinarykriging.Point{101.647968, 22.33165}, + ordinarykriging.Point{101.635484, 22.314777}, + ordinarykriging.Point{101.625513, 22.282597}, + ordinarykriging.Point{101.604446, 22.270683}, + ordinarykriging.Point{101.564304, 22.269607}, + ordinarykriging.Point{101.547658, 22.231127}, + ordinarykriging.Point{101.596469, 22.161091}, + ordinarykriging.Point{101.602972, 22.132023}, + ordinarykriging.Point{101.573928, 22.115126}, + ordinarykriging.Point{101.587279, 22.078177}, + ordinarykriging.Point{101.616583, 22.034175}, + ordinarykriging.Point{101.626207, 22.006158}, + ordinarykriging.Point{101.60644, 21.967855}, + ordinarykriging.Point{101.654384, 21.946543}, + ordinarykriging.Point{101.662447, 21.935761}, + ordinarykriging.Point{101.687763, 21.942645}, + ordinarykriging.Point{101.703975, 21.929043}, + ordinarykriging.Point{101.700334, 21.897024}, + ordinarykriging.Point{101.714292, 21.881924}, + ordinarykriging.Point{101.735013, 21.875784}, + ordinarykriging.Point{101.740215, 21.845413}, + ordinarykriging.Point{101.777062, 21.826905}, + ordinarykriging.Point{101.760589, 21.791625}, + ordinarykriging.Point{101.759636, 21.766633}, + ordinarykriging.Point{101.747324, 21.73001}, + ordinarykriging.Point{101.767612, 21.716221}, + ordinarykriging.Point{101.771166, 21.660391}, + ordinarykriging.Point{101.779923, 21.640861}, + ordinarykriging.Point{101.807666, 21.644186}, + ordinarykriging.Point{101.828474, 21.61709}, + ordinarykriging.Point{101.804805, 21.577685}, + ordinarykriging.Point{101.789113, 21.572613}, + ordinarykriging.Point{101.755127, 21.584918}, + ordinarykriging.Point{101.745504, 21.570368}, + ordinarykriging.Point{101.758855, 21.562801}, + ordinarykriging.Point{101.75478, 21.542261}, + ordinarykriging.Point{101.772467, 21.513233}, + ordinarykriging.Point{101.741082, 21.482868}, + ordinarykriging.Point{101.750099, 21.409301}, + ordinarykriging.Point{101.739955, 21.40081}, + ordinarykriging.Point{101.730332, 21.336947}, + ordinarykriging.Point{101.745677, 21.297299}, + ordinarykriging.Point{101.766571, 21.286302}, + ordinarykriging.Point{101.791627, 21.285802}, + ordinarykriging.Point{101.803765, 21.26464}, + ordinarykriging.Point{101.833676, 21.252474}, + ordinarykriging.Point{101.83541, 21.208052}, + ordinarykriging.Point{101.795095, 21.208302}, + ordinarykriging.Point{101.78105, 21.172038}, + ordinarykriging.Point{101.764664, 21.147857}, + ordinarykriging.Point{101.740735, 21.141769}, + ordinarykriging.Point{101.702848, 21.146106}, + ordinarykriging.Point{101.696606, 21.168786}, + ordinarykriging.Point{101.672504, 21.194965}, + ordinarykriging.Point{101.637651, 21.19188}, + ordinarykriging.Point{101.605659, 21.172288}, + ordinarykriging.Point{101.588666, 21.19163}, + ordinarykriging.Point{101.600631, 21.212636}, + ordinarykriging.Point{101.601585, 21.23314}, + ordinarykriging.Point{101.532659, 21.25239}, + ordinarykriging.Point{101.476479, 21.24164}, + ordinarykriging.Point{101.445961, 21.227473}, + ordinarykriging.Point{101.387613, 21.225972}, + ordinarykriging.Point{101.340969, 21.196965}, + ordinarykriging.Point{101.290251, 21.178291}, + ordinarykriging.Point{101.222193, 21.23439}, + ordinarykriging.Point{101.228782, 21.25589}, + ordinarykriging.Point{101.246642, 21.275721}, + ordinarykriging.Point{101.249676, 21.296882}, + ordinarykriging.Point{101.183699, 21.334698}, + ordinarykriging.Point{101.142864, 21.409135}, + ordinarykriging.Point{101.185953, 21.415711}, + ordinarykriging.Point{101.195056, 21.425116}, + ordinarykriging.Point{101.192889, 21.474215}, + ordinarykriging.Point{101.225487, 21.50192}, + ordinarykriging.Point{101.210315, 21.508991}, + ordinarykriging.Point{101.208928, 21.557313}, + ordinarykriging.Point{101.179624, 21.555068}, + ordinarykriging.Point{101.145205, 21.561304}, + ordinarykriging.Point{101.149453, 21.587246}, + ordinarykriging.Point{101.166012, 21.588909}, + ordinarykriging.Point{101.16081, 21.643853}, + ordinarykriging.Point{101.15162, 21.67003}, + ordinarykriging.Point{101.136188, 21.671442}, + ordinarykriging.Point{101.117201, 21.692546}, + ordinarykriging.Point{101.120409, 21.70833}, + ordinarykriging.Point{101.111479, 21.748613}, + ordinarykriging.Point{101.123357, 21.771864}, + ordinarykriging.Point{101.090325, 21.773774}, + ordinarykriging.Point{101.019579, 21.720125}, + ordinarykriging.Point{101.014984, 21.707084}, + ordinarykriging.Point{100.967993, 21.695537}, + ordinarykriging.Point{100.940943, 21.697115}, + ordinarykriging.Point{100.914154, 21.682161}, + ordinarykriging.Point{100.887364, 21.685068}, + ordinarykriging.Point{100.844882, 21.634296}, + ordinarykriging.Point{100.834391, 21.633714}, + ordinarykriging.Point{100.804654, 21.609941}, + ordinarykriging.Point{100.783673, 21.567374}, + ordinarykriging.Point{100.753588, 21.555317}, + ordinarykriging.Point{100.730613, 21.518723}, + ordinarykriging.Point{100.691859, 21.510904}, + ordinarykriging.Point{100.669838, 21.487361}, + ordinarykriging.Point{100.644348, 21.482452}, + ordinarykriging.Point{100.578891, 21.451915}, + ordinarykriging.Point{100.557997, 21.450583}, + ordinarykriging.Point{100.526612, 21.471137}, + ordinarykriging.Point{100.48283, 21.459238}, + ordinarykriging.Point{100.464363, 21.478625}, + ordinarykriging.Point{100.43714, 21.532946}, + ordinarykriging.Point{100.423181, 21.540514}, + ordinarykriging.Point{100.389802, 21.52363}, + ordinarykriging.Point{100.350961, 21.529369}, + ordinarykriging.Point{100.316542, 21.489191}, + ordinarykriging.Point{100.292787, 21.477044}, + ordinarykriging.Point{100.280909, 21.482619}, + ordinarykriging.Point{100.247357, 21.463731}, + ordinarykriging.Point{100.229757, 21.471969}, + ordinarykriging.Point{100.206435, 21.509323}, + ordinarykriging.Point{100.180252, 21.514314}, + ordinarykriging.Point{100.168722, 21.483035}, + ordinarykriging.Point{100.126933, 21.508242}, + ordinarykriging.Point{100.12017, 21.543092}, + ordinarykriging.Point{100.122771, 21.567125}, + ordinarykriging.Point{100.108553, 21.583754}, + ordinarykriging.Point{100.111414, 21.599467}, + ordinarykriging.Point{100.135169, 21.616591}, + ordinarykriging.Point{100.153549, 21.647344}, + ordinarykriging.Point{100.169935, 21.646014}, + ordinarykriging.Point{100.169155, 21.664047}, + ordinarykriging.Point{100.147567, 21.687395}, + ordinarykriging.Point{100.118957, 21.703512}, + ordinarykriging.Point{100.097542, 21.704509}, + ordinarykriging.Point{100.046043, 21.669614}, + ordinarykriging.Point{100.030698, 21.674433}, + ordinarykriging.Point{100.033559, 21.69213}, + ordinarykriging.Point{99.991684, 21.703595}, + ordinarykriging.Point{99.983621, 21.716387}, + ordinarykriging.Point{99.959085, 21.79561}, + ordinarykriging.Point{99.944173, 21.821344}, + ordinarykriging.Point{99.946167, 21.861595}, + ordinarykriging.Point{99.964114, 21.885575}, + ordinarykriging.Point{99.959952, 21.907145}, + ordinarykriging.Point{99.98154, 21.91826}, + ordinarykriging.Point{99.981193, 21.934932}, + ordinarykriging.Point{99.998099, 21.968186}, + ordinarykriging.Point{99.992724, 21.986427}, + ordinarykriging.Point{99.965761, 22.014199}, + ordinarykriging.Point{99.958912, 22.037241}, + ordinarykriging.Point{99.972437, 22.052987}, + ordinarykriging.Point{99.871433, 22.066909}, + ordinarykriging.Point{99.869959, 22.02945}, + ordinarykriging.Point{99.834586, 22.028124}, + ordinarykriging.Point{99.824963, 22.043125}, + ordinarykriging.Point{99.763147, 22.067903}, + ordinarykriging.Point{99.721445, 22.060611}, + ordinarykriging.Point{99.712255, 22.036993}, + ordinarykriging.Point{99.690407, 22.04528}, + ordinarykriging.Point{99.696129, 22.067654}, + ordinarykriging.Point{99.676622, 22.074946}, + ordinarykriging.Point{99.648792, 22.100546}, + ordinarykriging.Point{99.612985, 22.093919}, + ordinarykriging.Point{99.592264, 22.112558}, + ordinarykriging.Point{99.575618, 22.094499}, + ordinarykriging.Point{99.562614, 22.113221}, + ordinarykriging.Point{99.516577, 22.099552}, + ordinarykriging.Point{99.487273, 22.128627}, + ordinarykriging.Point{99.471927, 22.130946}, + ordinarykriging.Point{99.448605, 22.113303}, + ordinarykriging.Point{99.399881, 22.100215}, + ordinarykriging.Point{99.365028, 22.104191}, + ordinarykriging.Point{99.354711, 22.095659}, + ordinarykriging.Point{99.300958, 22.100298}, + ordinarykriging.Point{99.292982, 22.11057}, + ordinarykriging.Point{99.272348, 22.100381}, + ordinarykriging.Point{99.256222, 22.112144}, + ordinarykriging.Point{99.220329, 22.111067}, + ordinarykriging.Point{99.187557, 22.139808}, + ordinarykriging.Point{99.169697, 22.14635}, + ordinarykriging.Point{99.158426, 22.165645}, + ordinarykriging.Point{99.18799, 22.163078}, + ordinarykriging.Point{99.174205, 22.177982}, + ordinarykriging.Point{99.208191, 22.232203}, + ordinarykriging.Point{99.235761, 22.250658}, + ordinarykriging.Point{99.233767, 22.296496}, + ordinarykriging.Point{99.254488, 22.329831}, + ordinarykriging.Point{99.277723, 22.344965}, + ordinarykriging.Point{99.276683, 22.36233}, + ordinarykriging.Point{99.253621, 22.380355}, + ordinarykriging.Point{99.25154, 22.393417}, + ordinarykriging.Point{99.282231, 22.401436}, + ordinarykriging.Point{99.302172, 22.416976}, + ordinarykriging.Point{99.312576, 22.437638}, + ordinarykriging.Point{99.333557, 22.445985}, + ordinarykriging.Point{99.381414, 22.50324}, + ordinarykriging.Point{99.35974, 22.520751}, + ordinarykriging.Point{99.359653, 22.535369}, + ordinarykriging.Point{99.386009, 22.573518}, + ordinarykriging.Point{99.371964, 22.601503}, + ordinarykriging.Point{99.361127, 22.662078}, + ordinarykriging.Point{99.348556, 22.672473}, + ordinarykriging.Point{99.339105, 22.709346}, + ordinarykriging.Point{99.31483, 22.737057}, + ordinarykriging.Point{99.326794, 22.751569}, + ordinarykriging.Point{99.386269, 22.762371}, + ordinarykriging.Point{99.386876, 22.788257}, + ordinarykriging.Point{99.401181, 22.826088}, + ordinarykriging.Point{99.419908, 22.827324}, + ordinarykriging.Point{99.442103, 22.844711}, + ordinarykriging.Point{99.462911, 22.844793}, + ordinarykriging.Point{99.436728, 22.91366}, + ordinarykriging.Point{99.446785, 22.934742}, + ordinarykriging.Point{99.506, 22.902789}, + ordinarykriging.Point{99.531489, 22.897106}, + ordinarykriging.Point{99.554464, 22.907072}, + ordinarykriging.Point{99.563307, 22.925601}, + ordinarykriging.Point{99.544927, 22.958784}, + ordinarykriging.Point{99.53357, 22.961418}, + ordinarykriging.Point{99.517097, 23.006773}, + ordinarykriging.Point{99.529408, 23.046024}, + ordinarykriging.Point{99.528021, 23.065604}, + ordinarykriging.Point{99.513976, 23.073172}, + ordinarykriging.Point{99.477476, 23.083043}, + ordinarykriging.Point{99.440716, 23.079177}, + ordinarykriging.Point{99.380634, 23.099903}, + ordinarykriging.Point{99.348556, 23.128685}, + ordinarykriging.Point{99.32532, 23.132385}, + ordinarykriging.Point{99.32532, 23.111006}, + ordinarykriging.Point{99.307721, 23.100808}, + ordinarykriging.Point{99.282145, 23.101137}, + ordinarykriging.Point{99.255442, 23.077943}, + ordinarykriging.Point{99.216687, 23.08954}, + ordinarykriging.Point{99.200561, 23.109196}, + ordinarykriging.Point{99.186776, 23.100561}, + ordinarykriging.Point{99.123573, 23.097272}, + ordinarykriging.Point{99.106494, 23.086579}, + ordinarykriging.Point{99.048406, 23.114706}, + ordinarykriging.Point{99.057509, 23.164448}, + ordinarykriging.Point{99.002803, 23.160256}, + ordinarykriging.Point{98.951824, 23.176942}, + ordinarykriging.Point{98.907174, 23.18549}, + ordinarykriging.Point{98.890442, 23.176449}, + ordinarykriging.Point{98.890008, 23.212035}, + ordinarykriging.Point{98.910816, 23.230934}, + ordinarykriging.Point{98.910556, 23.248926}, + ordinarykriging.Point{98.930236, 23.266751}, + ordinarykriging.Point{98.925294, 23.296483}, + ordinarykriging.Point{98.936912, 23.310114}, + ordinarykriging.Point{98.906914, 23.331708}, + ordinarykriging.Point{98.882032, 23.323662}, + ordinarykriging.Point{98.872842, 23.32982}, + ordinarykriging.Point{98.89469, 23.353463}, + ordinarykriging.Point{98.920613, 23.353873}, + ordinarykriging.Point{98.907261, 23.392284}, + ordinarykriging.Point{98.91255, 23.426335}, + ordinarykriging.Point{98.896164, 23.441266}, + ordinarykriging.Point{98.898505, 23.458574}, + ordinarykriging.Point{98.871802, 23.484572}, + ordinarykriging.Point{98.825851, 23.470056}, + ordinarykriging.Point{98.803657, 23.521223}, + ordinarykriging.Point{98.803743, 23.540569}, + ordinarykriging.Point{98.844665, 23.578926}, + ordinarykriging.Point{98.882119, 23.595314}, + ordinarykriging.Point{98.881945, 23.619974}, + ordinarykriging.Point{98.847266, 23.631934}, + ordinarykriging.Point{98.836082, 23.683693}, + ordinarykriging.Point{98.811893, 23.703097}, + ordinarykriging.Point{98.824117, 23.727492}, + ordinarykriging.Point{98.78623, 23.781422}, + ordinarykriging.Point{98.751378, 23.776267}, + ordinarykriging.Point{98.736812, 23.78764}, + ordinarykriging.Point{98.69511, 23.78494}, + ordinarykriging.Point{98.684793, 23.802039}, + ordinarykriging.Point{98.668841, 23.80073}, + ordinarykriging.Point{98.701439, 23.834348}, + ordinarykriging.Point{98.690862, 23.850623}, + ordinarykriging.Point{98.693723, 23.885781}, + ordinarykriging.Point{98.687828, 23.922075}, + ordinarykriging.Point{98.701093, 23.946346}, + ordinarykriging.Point{98.673176, 23.960646}, + ordinarykriging.Point{98.701179, 23.981479}, + ordinarykriging.Point{98.727622, 23.970368}, + ordinarykriging.Point{98.746783, 23.983276}, + ordinarykriging.Point{98.773919, 24.022237}, + ordinarykriging.Point{98.807471, 24.025177}, + ordinarykriging.Point{98.82117, 24.041673}, + ordinarykriging.Point{98.860271, 24.064452}, + ordinarykriging.Point{98.866773, 24.080779}, + ordinarykriging.Point{98.899892, 24.108939}, + ordinarykriging.Point{98.87683, 24.151533}, + ordinarykriging.Point{98.855329, 24.130727}, + ordinarykriging.Point{98.818482, 24.133501}, + ordinarykriging.Point{98.757707, 24.124362}, + ordinarykriging.Point{98.716525, 24.127626}, + ordinarykriging.Point{98.709502, 24.121261}, + ordinarykriging.Point{98.680545, 24.099798}, + ordinarykriging.Point{98.648207, 24.10649}, + ordinarykriging.Point{98.59376, 24.080534}, + ordinarykriging.Point{98.589945, 24.091146}, + ordinarykriging.Point{98.555439, 24.108694}, + ordinarykriging.Point{98.551018, 24.124689}, + ordinarykriging.Point{98.482179, 24.122567}, + ordinarykriging.Point{98.461632, 24.125913}, + ordinarykriging.Point{98.36609, 24.111468}, + ordinarykriging.Point{98.360368, 24.096859}, + ordinarykriging.Point{98.32855, 24.103226}, + ordinarykriging.Point{98.290403, 24.101593}, + ordinarykriging.Point{98.220177, 24.113427}, + ordinarykriging.Point{98.197289, 24.098329}, + ordinarykriging.Point{98.110504, 24.092697}, + ordinarykriging.Point{98.07383, 24.0758}, + ordinarykriging.Point{98.056577, 24.076779}, + ordinarykriging.Point{97.995455, 24.046327}, + ordinarykriging.Point{97.985138, 24.032037}, + ordinarykriging.Point{97.938321, 24.017337}, + ordinarykriging.Point{97.902168, 24.014234}, + ordinarykriging.Point{97.883441, 23.995203}, + ordinarykriging.Point{97.896792, 23.975679}, + ordinarykriging.Point{97.863153, 23.978865}, + ordinarykriging.Point{97.839311, 23.971431}, + ordinarykriging.Point{97.810094, 23.943405}, + ordinarykriging.Point{97.795875, 23.952066}, + ordinarykriging.Point{97.765878, 23.927632}, + ordinarykriging.Point{97.763884, 23.907199}, + ordinarykriging.Point{97.728251, 23.89551}, + ordinarykriging.Point{97.710998, 23.861498}, + ordinarykriging.Point{97.684208, 23.877033}, + ordinarykriging.Point{97.681, 23.860681}, + ordinarykriging.Point{97.663487, 23.851931}, + ordinarykriging.Point{97.658545, 23.865096}, + ordinarykriging.Point{97.647014, 23.841054}, + ordinarykriging.Point{97.641119, 23.871147}, + ordinarykriging.Point{97.61667, 23.890114}, + ordinarykriging.Point{97.572194, 23.912348}, + ordinarykriging.Point{97.528671, 23.926325}, + ordinarykriging.Point{97.529538, 23.942669}, + ordinarykriging.Point{97.567859, 23.967182}, + ordinarykriging.Point{97.572714, 23.982868}, + ordinarykriging.Point{97.628634, 24.004923}, + ordinarykriging.Point{97.635744, 24.047878}, + ordinarykriging.Point{97.675278, 24.070739}, + ordinarykriging.Point{97.692011, 24.093268}, + ordinarykriging.Point{97.730592, 24.111877}, + ordinarykriging.Point{97.73484, 24.149493}, + ordinarykriging.Point{97.753827, 24.162302}, + ordinarykriging.Point{97.743943, 24.1809}, + ordinarykriging.Point{97.728684, 24.183592}, + ordinarykriging.Point{97.729898, 24.227058}, + ordinarykriging.Point{97.767525, 24.259098}, + ordinarykriging.Point{97.749579, 24.282735}, + ordinarykriging.Point{97.721142, 24.295774}, + ordinarykriging.Point{97.698427, 24.290966}, + ordinarykriging.Point{97.665221, 24.296345}, + ordinarykriging.Point{97.662273, 24.339121}, + ordinarykriging.Point{97.684121, 24.337655}, + ordinarykriging.Point{97.715506, 24.355494}, + ordinarykriging.Point{97.714466, 24.374227}, + ordinarykriging.Point{97.690971, 24.385629}, + ordinarykriging.Point{97.677879, 24.408835}, + ordinarykriging.Point{97.678573, 24.438876}, + ordinarykriging.Point{97.669816, 24.452794}, + ordinarykriging.Point{97.58884, 24.435782}, + ordinarykriging.Point{97.576876, 24.441725}, + ordinarykriging.Point{97.531879, 24.431468}, + ordinarykriging.Point{97.529972, 24.441887}, + ordinarykriging.Point{97.555114, 24.493727}, + ordinarykriging.Point{97.561357, 24.568967}, + ordinarykriging.Point{97.567512, 24.606286}, + ordinarykriging.Point{97.569506, 24.675446}, + ordinarykriging.Point{97.564304, 24.72589}, + ordinarykriging.Point{97.547311, 24.738883}, + ordinarykriging.Point{97.57124, 24.76714}, + ordinarykriging.Point{97.588666, 24.76649}, + ordinarykriging.Point{97.651956, 24.791088}, + ordinarykriging.Point{97.680133, 24.827041}, + ordinarykriging.Point{97.701374, 24.842377}, + ordinarykriging.Point{97.710304, 24.833939}, + ordinarykriging.Point{97.765531, 24.824201}, + ordinarykriging.Point{97.797696, 24.845947}, + ordinarykriging.Point{97.784865, 24.877018}, + ordinarykriging.Point{97.764144, 24.878803}, + ordinarykriging.Point{97.729725, 24.908568}, + ordinarykriging.Point{97.731632, 24.947163}, + ordinarykriging.Point{97.716547, 24.978289}, + ordinarykriging.Point{97.718541, 25.012406}, + ordinarykriging.Point{97.727731, 25.043759}, + ordinarykriging.Point{97.720188, 25.080691}, + ordinarykriging.Point{97.74533, 25.080044}, + ordinarykriging.Point{97.777062, 25.122227}, + ordinarykriging.Point{97.797003, 25.157356}, + ordinarykriging.Point{97.819891, 25.232598}, + ordinarykriging.Point{97.839658, 25.270605}, + ordinarykriging.Point{97.873557, 25.259043}, + ordinarykriging.Point{97.903988, 25.216502}, + ordinarykriging.Point{97.914739, 25.211324}, + ordinarykriging.Point{97.948464, 25.219818}, + ordinarykriging.Point{98.007246, 25.280793}, + ordinarykriging.Point{98.004385, 25.291707}, + ordinarykriging.Point{98.023805, 25.308439}, + ordinarykriging.Point{98.038978, 25.301892}, + ordinarykriging.Point{98.070622, 25.312885}, + ordinarykriging.Point{98.073137, 25.329453}, + ordinarykriging.Point{98.089436, 25.33608}, + ordinarykriging.Point{98.099666, 25.35418}, + ordinarykriging.Point{98.10114, 25.388434}, + ordinarykriging.Point{98.137207, 25.381568}, + ordinarykriging.Point{98.151685, 25.407415}, + ordinarykriging.Point{98.157841, 25.457316}, + ordinarykriging.Point{98.131571, 25.510263}, + ordinarykriging.Point{98.16365, 25.524545}, + ordinarykriging.Point{98.186365, 25.554718}, + ordinarykriging.Point{98.189572, 25.568914}, + ordinarykriging.Point{98.170586, 25.620361}, + ordinarykriging.Point{98.194774, 25.613024}, + ordinarykriging.Point{98.24766, 25.607783}, + ordinarykriging.Point{98.274797, 25.590931}, + ordinarykriging.Point{98.314591, 25.543263}, + ordinarykriging.Point{98.326729, 25.566333}, + ordinarykriging.Point{98.371379, 25.583753}, + ordinarykriging.Point{98.382303, 25.595366}, + ordinarykriging.Point{98.40233, 25.594398}, + ordinarykriging.Point{98.409613, 25.619957}, + ordinarykriging.Point{98.408052, 25.652765}, + ordinarykriging.Point{98.415768, 25.671302}, + ordinarykriging.Point{98.457904, 25.682986}, + ordinarykriging.Point{98.467267, 25.702726}, + ordinarykriging.Point{98.461285, 25.735189}, + ordinarykriging.Point{98.481139, 25.759752}, + ordinarykriging.Point{98.479058, 25.784149}, + ordinarykriging.Point{98.528996, 25.840733}, + ordinarykriging.Point{98.568097, 25.841377}, + ordinarykriging.Point{98.605724, 25.811277}, + ordinarykriging.Point{98.640751, 25.7988}, + ordinarykriging.Point{98.664506, 25.816831}, + ordinarykriging.Point{98.677771, 25.816187}, + ordinarykriging.Point{98.680805, 25.833571}, + ordinarykriging.Point{98.706208, 25.856344}, + ordinarykriging.Point{98.703087, 25.893269}, + ordinarykriging.Point{98.686614, 25.925841}, + ordinarykriging.Point{98.661125, 25.955349}, + ordinarykriging.Point{98.637369, 25.971587}, + ordinarykriging.Point{98.614394, 25.968773}, + ordinarykriging.Point{98.601303, 26.027921}, + ordinarykriging.Point{98.601216, 26.057323}, + ordinarykriging.Point{98.575293, 26.11787}, + ordinarykriging.Point{98.590292, 26.139464}, + ordinarykriging.Point{98.604424, 26.128708}, + ordinarykriging.Point{98.627659, 26.144521}, + ordinarykriging.Point{98.654709, 26.140748}, + ordinarykriging.Point{98.66702, 26.116024}, + ordinarykriging.Point{98.662165, 26.087199}, + ordinarykriging.Point{98.701439, 26.110404}, + ordinarykriging.Point{98.720426, 26.128066}, + ordinarykriging.Point{98.708809, 26.146848}, + ordinarykriging.Point{98.730917, 26.164665}, + ordinarykriging.Point{98.735512, 26.183362}, + ordinarykriging.Point{98.713317, 26.231093}, + ordinarykriging.Point{98.672916, 26.239995}, + ordinarykriging.Point{98.683666, 26.307261}, + ordinarykriging.Point{98.707595, 26.32321}, + ordinarykriging.Point{98.733084, 26.349413}, + ordinarykriging.Point{98.729963, 26.377372}, + ordinarykriging.Point{98.742794, 26.385061}, + ordinarykriging.Point{98.749557, 26.425183}, + ordinarykriging.Point{98.746262, 26.444478}, + ordinarykriging.Point{98.755712, 26.499383}, + ordinarykriging.Point{98.753545, 26.5593}, + ordinarykriging.Point{98.768197, 26.570417}, + ordinarykriging.Point{98.781115, 26.60104}, + ordinarykriging.Point{98.781462, 26.620705}, + ordinarykriging.Point{98.762388, 26.661624}, + ordinarykriging.Point{98.770711, 26.689747}, + ordinarykriging.Point{98.747389, 26.695658}, + ordinarykriging.Point{98.743835, 26.711633}, + ordinarykriging.Point{98.756926, 26.745812}, + ordinarykriging.Point{98.762128, 26.798657}, + ordinarykriging.Point{98.73083, 26.851318}, + ordinarykriging.Point{98.757273, 26.881547}, + ordinarykriging.Point{98.751811, 26.918385}, + ordinarykriging.Point{98.736205, 26.968361}, + ordinarykriging.Point{98.742448, 26.987007}, + ordinarykriging.Point{98.732911, 27.00302}, + ordinarykriging.Point{98.762648, 27.018235}, + ordinarykriging.Point{98.765596, 27.050968}, + ordinarykriging.Point{98.740714, 27.071669}, + ordinarykriging.Point{98.712623, 27.075809}, + ordinarykriging.Point{98.713924, 27.13964}, + ordinarykriging.Point{98.695891, 27.209955}, + ordinarykriging.Point{98.722767, 27.22053}, + ordinarykriging.Point{98.717132, 27.23182}, + ordinarykriging.Point{98.731177, 27.245175}, + ordinarykriging.Point{98.715484, 27.257496}, + ordinarykriging.Point{98.734992, 27.287218}, + ordinarykriging.Point{98.7408, 27.330278}, + ordinarykriging.Point{98.732737, 27.351484}, + ordinarykriging.Point{98.706728, 27.362125}, + ordinarykriging.Point{98.702653, 27.412617}, + ordinarykriging.Point{98.687047, 27.425236}, + ordinarykriging.Point{98.690429, 27.447376}, + ordinarykriging.Point{98.704127, 27.46372}, + ordinarykriging.Point{98.684967, 27.486646}, + ordinarykriging.Point{98.705081, 27.517417}, + ordinarykriging.Point{98.698231, 27.535336}, + ordinarykriging.Point{98.70378, 27.560942}, + ordinarykriging.Point{98.685834, 27.563557}, + ordinarykriging.Point{98.664593, 27.5867}, + ordinarykriging.Point{98.644825, 27.564429}, + ordinarykriging.Point{98.586737, 27.584956}, + ordinarykriging.Point{98.556566, 27.645801}, + ordinarykriging.Point{98.537493, 27.635505}, + ordinarykriging.Point{98.535325, 27.62077}, + ordinarykriging.Point{98.507495, 27.624573}, + ordinarykriging.Point{98.505241, 27.632732}, + ordinarykriging.Point{98.474723, 27.634475}, + ordinarykriging.Point{98.444119, 27.665205}, + ordinarykriging.Point{98.429987, 27.653721}, + ordinarykriging.Point{98.43805, 27.622988}, + ordinarykriging.Point{98.429207, 27.548814}, + ordinarykriging.Point{98.40181, 27.540172}, + ordinarykriging.Point{98.390366, 27.516862}, + ordinarykriging.Point{98.372506, 27.507663}, + ordinarykriging.Point{98.33748, 27.508932}, + ordinarykriging.Point{98.317452, 27.519558}, + ordinarykriging.Point{98.306442, 27.553887}, + ordinarykriging.Point{98.310343, 27.583609}, + ordinarykriging.Point{98.288409, 27.632574}, + ordinarykriging.Point{98.28416, 27.653246}, + ordinarykriging.Point{98.266907, 27.657998}, + ordinarykriging.Point{98.263786, 27.671698}, + ordinarykriging.Point{98.234222, 27.690621}, + ordinarykriging.Point{98.221217, 27.710808}, + ordinarykriging.Point{98.223905, 27.725055}, + ordinarykriging.Point{98.245666, 27.735027}, + ordinarykriging.Point{98.224339, 27.751645}, + ordinarykriging.Point{98.217056, 27.775222}, + ordinarykriging.Point{98.222691, 27.812476}, + ordinarykriging.Point{98.20882, 27.813267}, + ordinarykriging.Point{98.176221, 27.83264}, + ordinarykriging.Point{98.169372, 27.850903}, + ordinarykriging.Point{98.181596, 27.872562}, + ordinarykriging.Point{98.197029, 27.872246}, + ordinarykriging.Point{98.205178, 27.889633}, + ordinarykriging.Point{98.188099, 27.939013}, + ordinarykriging.Point{98.15498, 27.938697}, + ordinarykriging.Point{98.140588, 27.951888}, + ordinarykriging.Point{98.132438, 27.98316}, + ordinarykriging.Point{98.144576, 28.017895}, + ordinarykriging.Point{98.139374, 28.04323}, + ordinarykriging.Point{98.151078, 28.05696}, + ordinarykriging.Point{98.160529, 28.09948}, + ordinarykriging.Point{98.149084, 28.112572}, + ordinarykriging.Point{98.140068, 28.141669}, + ordinarykriging.Point{98.150038, 28.155465}, + ordinarykriging.Point{98.174574, 28.163584}, + ordinarykriging.Point{98.169025, 28.204329}, + ordinarykriging.Point{98.20119, 28.219693}, + ordinarykriging.Point{98.217056, 28.212839}, + ordinarykriging.Point{98.228413, 28.225681}, + ordinarykriging.Point{98.265, 28.239939}, + ordinarykriging.Point{98.244539, 28.27845}, + ordinarykriging.Point{98.236736, 28.309312}, + ordinarykriging.Point{98.207432, 28.330406}, + ordinarykriging.Point{98.209773, 28.358577}, + ordinarykriging.Point{98.229974, 28.347247}, + ordinarykriging.Point{98.234916, 28.370064}, + ordinarykriging.Point{98.27341, 28.380763}, + ordinarykriging.Point{98.281213, 28.393978}, + ordinarykriging.Point{98.300113, 28.385955}, + ordinarykriging.Point{98.304014, 28.359128}, + ordinarykriging.Point{98.321961, 28.346774}, + ordinarykriging.Point{98.318146, 28.324582}, + ordinarykriging.Point{98.338867, 28.296007}, + ordinarykriging.Point{98.353346, 28.292937}, + ordinarykriging.Point{98.377448, 28.245925}, + ordinarykriging.Point{98.377795, 28.207796}, + ordinarykriging.Point{98.370252, 28.183841}, + ordinarykriging.Point{98.390192, 28.164373}, + ordinarykriging.Point{98.389325, 28.114623}, + ordinarykriging.Point{98.400076, 28.104686}, + ordinarykriging.Point{98.428773, 28.104528}, + ordinarykriging.Point{98.459031, 28.131655}, + ordinarykriging.Point{98.464406, 28.151129}, + ordinarykriging.Point{98.507495, 28.14427}, + ordinarykriging.Point{98.525789, 28.170521}, + ordinarykriging.Point{98.559514, 28.182895}, + ordinarykriging.Point{98.58535, 28.181319}, + ordinarykriging.Point{98.626532, 28.165555}, + ordinarykriging.Point{98.650201, 28.200232}, + ordinarykriging.Point{98.696064, 28.215518}, + ordinarykriging.Point{98.712363, 28.229462}, + ordinarykriging.Point{98.710196, 28.288843}, + ordinarykriging.Point{98.719126, 28.310335}, + ordinarykriging.Point{98.746696, 28.321276}, + ordinarykriging.Point{98.753632, 28.336938}, + ordinarykriging.Point{98.734211, 28.368569}, + ordinarykriging.Point{98.705167, 28.39327}, + ordinarykriging.Point{98.706815, 28.412853}, + ordinarykriging.Point{98.692769, 28.431804}, + ordinarykriging.Point{98.673869, 28.478734}, + ordinarykriging.Point{98.62974, 28.487143}, + ordinarykriging.Point{98.620116, 28.511502}, + ordinarykriging.Point{98.633381, 28.531377}, + ordinarykriging.Point{98.631994, 28.566642}, + ordinarykriging.Point{98.613701, 28.611785}, + ordinarykriging.Point{98.62081, 28.620026}, + ordinarykriging.Point{98.594194, 28.669539}, + ordinarykriging.Point{98.59428, 28.682796}, + ordinarykriging.Point{98.634248, 28.68915}, + ordinarykriging.Point{98.637889, 28.700444}, + ordinarykriging.Point{98.666673, 28.712285}, + ordinarykriging.Point{98.681672, 28.730869}, + ordinarykriging.Point{98.678984, 28.771631}, + ordinarykriging.Point{98.663812, 28.785893}, + ordinarykriging.Point{98.652281, 28.815902}, + ordinarykriging.Point{98.668234, 28.843552}, + ordinarykriging.Point{98.653495, 28.857492}, + ordinarykriging.Point{98.643872, 28.893742}, + ordinarykriging.Point{98.656963, 28.927085}, + ordinarykriging.Point{98.633641, 28.940466}, + ordinarykriging.Point{98.63078, 28.972854}, + ordinarykriging.Point{98.655836, 28.976843}, + ordinarykriging.Point{98.707422, 28.965345}, + ordinarykriging.Point{98.722074, 28.98138}, + ordinarykriging.Point{98.76603, 29.005858}, + ordinarykriging.Point{98.78571, 28.99882}, + ordinarykriging.Point{98.785623, 28.987637}, + ordinarykriging.Point{98.815448, 28.948916}, + ordinarykriging.Point{98.810939, 28.929589}, + ordinarykriging.Point{98.821516, 28.920981}, + ordinarykriging.Point{98.817875, 28.896012}, + ordinarykriging.Point{98.829059, 28.845902}, + ordinarykriging.Point{98.828019, 28.821621}, + ordinarykriging.Point{98.851948, 28.798587}, + ordinarykriging.Point{98.875269, 28.808146}, + ordinarykriging.Point{98.896511, 28.799606}, + ordinarykriging.Point{98.922173, 28.806814}, + ordinarykriging.Point{98.922607, 28.823266}, + ordinarykriging.Point{98.972198, 28.834467}, + ordinarykriging.Point{98.965262, 28.851462}, + ordinarykriging.Point{98.973759, 28.864931}, + ordinarykriging.Point{98.917318, 28.887949}, + ordinarykriging.Point{98.917492, 28.915815}, + ordinarykriging.Point{98.926075, 28.978486}, + ordinarykriging.Point{98.952691, 28.987168}, + ordinarykriging.Point{98.959974, 29.003825}, + ordinarykriging.Point{99.015374, 29.042448}, + ordinarykriging.Point{99.006531, 29.07793}, + ordinarykriging.Point{98.991272, 29.105901}, + ordinarykriging.Point{98.96743, 29.128319}, + ordinarykriging.Point{98.961101, 29.16955}, + ordinarykriging.Point{98.974106, 29.181572}, + ordinarykriging.Point{98.976446, 29.20452}, + ordinarykriging.Point{99.024217, 29.188676}, + ordinarykriging.Point{99.037569, 29.20772}, + ordinarykriging.Point{99.074676, 29.210607}, + ordinarykriging.Point{99.093489, 29.223327}, + ordinarykriging.Point{99.113776, 29.221376}, + ordinarykriging.Point{99.119152, 29.198901}, + ordinarykriging.Point{99.1058, 29.166895}, + ordinarykriging.Point{99.115077, 29.154559}, + ordinarykriging.Point{99.108748, 29.138706}, + ordinarykriging.Point{99.117938, 29.102386}, + ordinarykriging.Point{99.11395, 29.072538}, + ordinarykriging.Point{99.118632, 29.033771}, + ordinarykriging.Point{99.127388, 29.018916}, + ordinarykriging.Point{99.122967, 28.998351}, + ordinarykriging.Point{99.131723, 28.949463}, + ordinarykriging.Point{99.123573, 28.890141}, + ordinarykriging.Point{99.104066, 28.841907}, + ordinarykriging.Point{99.104326, 28.814257}, + ordinarykriging.Point{99.117851, 28.779311}, + ordinarykriging.Point{99.114557, 28.762931}, + ordinarykriging.Point{99.13389, 28.734789}, + ordinarykriging.Point{99.126955, 28.699503}, + ordinarykriging.Point{99.142474, 28.676599}, + ordinarykriging.Point{99.147329, 28.641058}, + ordinarykriging.Point{99.164408, 28.632897}, + ordinarykriging.Point{99.172731, 28.613825}, + ordinarykriging.Point{99.166142, 28.595849}, + ordinarykriging.Point{99.183742, 28.588941}, + ordinarykriging.Point{99.17013, 28.565228}, + ordinarykriging.Point{99.172124, 28.545123}, + ordinarykriging.Point{99.191632, 28.49673}, + ordinarykriging.Point{99.183395, 28.472761}, + ordinarykriging.Point{99.18721, 28.439902}, + ordinarykriging.Point{99.165449, 28.424492}, + ordinarykriging.Point{99.174465, 28.403416}, + ordinarykriging.Point{99.202382, 28.374548}, + ordinarykriging.Point{99.200908, 28.3644}, + ordinarykriging.Point{99.230819, 28.348978}, + ordinarykriging.Point{99.238449, 28.317026}, + ordinarykriging.Point{99.280584, 28.298054}, + ordinarykriging.Point{99.289514, 28.286087}, + ordinarykriging.Point{99.281538, 28.259944}, + ordinarykriging.Point{99.299571, 28.259078}, + ordinarykriging.Point{99.30668, 28.227571}, + ordinarykriging.Point{99.332516, 28.216621}, + ordinarykriging.Point{99.361127, 28.181082}, + ordinarykriging.Point{99.375952, 28.180846}, + ordinarykriging.Point{99.402395, 28.150735}, + ordinarykriging.Point{99.38835, 28.183368}, + ordinarykriging.Point{99.388003, 28.21536}, + ordinarykriging.Point{99.40569, 28.262307}, + ordinarykriging.Point{99.417654, 28.266717}, + ordinarykriging.Point{99.413839, 28.29278}, + ordinarykriging.Point{99.393118, 28.317734}, + ordinarykriging.Point{99.408984, 28.331744}, + ordinarykriging.Point{99.40699, 28.35779}, + ordinarykriging.Point{99.420862, 28.368805}, + ordinarykriging.Point{99.437335, 28.39854}, + ordinarykriging.Point{99.431526, 28.415684}, + ordinarykriging.Point{99.417827, 28.416707}, + ordinarykriging.Point{99.404476, 28.444226}, + ordinarykriging.Point{99.426497, 28.45256}, + ordinarykriging.Point{99.414013, 28.476769}, + ordinarykriging.Point{99.395633, 28.493115}, + ordinarykriging.Point{99.402829, 28.514173}, + ordinarykriging.Point{99.394592, 28.52415}, + ordinarykriging.Point{99.402915, 28.545751}, + ordinarykriging.Point{99.426757, 28.555333}, + ordinarykriging.Point{99.463431, 28.549207}, + ordinarykriging.Point{99.466032, 28.579755}, + ordinarykriging.Point{99.49707, 28.602836}, + ordinarykriging.Point{99.496723, 28.616259}, + ordinarykriging.Point{99.518224, 28.613825}, + ordinarykriging.Point{99.540766, 28.623558}, + ordinarykriging.Point{99.542586, 28.670638}, + ordinarykriging.Point{99.531662, 28.679972}, + ordinarykriging.Point{99.55377, 28.710403}, + ordinarykriging.Point{99.601108, 28.7264}, + ordinarykriging.Point{99.615846, 28.742158}, + ordinarykriging.Point{99.605789, 28.771552}, + ordinarykriging.Point{99.622522, 28.795297}, + ordinarykriging.Point{99.625557, 28.814648}, + ordinarykriging.Point{99.678356, 28.810261}, + ordinarykriging.Point{99.717804, 28.846293}, + ordinarykriging.Point{99.723612, 28.810731}, + ordinarykriging.Point{99.722745, 28.755955}, + ordinarykriging.Point{99.736444, 28.73471}, + ordinarykriging.Point{99.733149, 28.7195}, + ordinarykriging.Point{99.756471, 28.700365}, + ordinarykriging.Point{99.794445, 28.69911}, + ordinarykriging.Point{99.841696, 28.65322}, + ordinarykriging.Point{99.8345, 28.628031}, + ordinarykriging.Point{99.873254, 28.631798}, + ordinarykriging.Point{99.88045, 28.607703}, + ordinarykriging.Point{99.918684, 28.599068}, + ordinarykriging.Point{99.961599, 28.561537}, + ordinarykriging.Point{99.96446, 28.539625}, + ordinarykriging.Point{99.987002, 28.524464}, + ordinarykriging.Point{99.982407, 28.503252}, + ordinarykriging.Point{100.000874, 28.464901}, + ordinarykriging.Point{100.045263, 28.446192}, + ordinarykriging.Point{100.060956, 28.447686}, + ordinarykriging.Point{100.074654, 28.424334}, + ordinarykriging.Point{100.060956, 28.405854}, + ordinarykriging.Point{100.054193, 28.376594}, + ordinarykriging.Point{100.065551, 28.370221}, + ordinarykriging.Point{100.13647, 28.350079}, + ordinarykriging.Point{100.172623, 28.321118}, + ordinarykriging.Point{100.168722, 28.296322}, + ordinarykriging.Point{100.147567, 28.288764}, + ordinarykriging.Point{100.188402, 28.252777}, + ordinarykriging.Point{100.16352, 28.233479}, + ordinarykriging.Point{100.168201, 28.220717}, + ordinarykriging.Point{100.153289, 28.208269}, + ordinarykriging.Point{100.10968, 28.203541}, + ordinarykriging.Point{100.091994, 28.182343}, + ordinarykriging.Point{100.06399, 28.193691}, + ordinarykriging.Point{100.050292, 28.181791}, + ordinarykriging.Point{100.033299, 28.184629}, + ordinarykriging.Point{100.021161, 28.147424}, + ordinarykriging.Point{100.039714, 28.13063}, + ordinarykriging.Point{100.056534, 28.097903}, + ordinarykriging.Point{100.078035, 28.04173}, + ordinarykriging.Point{100.086445, 28.030603}, + ordinarykriging.Point{100.120951, 28.018685}, + ordinarykriging.Point{100.137163, 27.996818}, + ordinarykriging.Point{100.196205, 27.937354}, + ordinarykriging.Point{100.169935, 27.90765}, + ordinarykriging.Point{100.21051, 27.877225}, + ordinarykriging.Point{100.257847, 27.864974}, + ordinarykriging.Point{100.294868, 27.869559}, + ordinarykriging.Point{100.309173, 27.859125}, + ordinarykriging.Point{100.308566, 27.830426}, + ordinarykriging.Point{100.286024, 27.805912}, + ordinarykriging.Point{100.302844, 27.792388}, + ordinarykriging.Point{100.307092, 27.748638}, + ordinarykriging.Point{100.299463, 27.736135}, + ordinarykriging.Point{100.327726, 27.720465}, + ordinarykriging.Point{100.344372, 27.734315}, + ordinarykriging.Point{100.350788, 27.755997}, + ordinarykriging.Point{100.374717, 27.754573}, + ordinarykriging.Point{100.376971, 27.775618}, + ordinarykriging.Point{100.392837, 27.787483}, + ordinarykriging.Point{100.41191, 27.816351}, + ordinarykriging.Point{100.414685, 27.840073}, + ordinarykriging.Point{100.443208, 27.866239}, + ordinarykriging.Point{100.473726, 27.859678}, + ordinarykriging.Point{100.495661, 27.844658}, + ordinarykriging.Point{100.504331, 27.85201}, + ordinarykriging.Point{100.51118, 27.827659}, + ordinarykriging.Point{100.536582, 27.824654}, + ordinarykriging.Point{100.546379, 27.808601}, + ordinarykriging.Point{100.559904, 27.824101}, + ordinarykriging.Point{100.609496, 27.859994}, + ordinarykriging.Point{100.609062, 27.876198}, + ordinarykriging.Point{100.634638, 27.915393}, + ordinarykriging.Point{100.654405, 27.910494}, + ordinarykriging.Point{100.681282, 27.922266}, + ordinarykriging.Point{100.70313, 27.888922}, + ordinarykriging.Point{100.70209, 27.867029}, + ordinarykriging.Point{100.719516, 27.858255}, + ordinarykriging.Point{100.70391, 27.818565}, + ordinarykriging.Point{100.709459, 27.798557}, + ordinarykriging.Point{100.757403, 27.766757}, + ordinarykriging.Point{100.77613, 27.739934}, + ordinarykriging.Point{100.781505, 27.69363}, + ordinarykriging.Point{100.789048, 27.684367}, + ordinarykriging.Point{100.836472, 27.681675}, + ordinarykriging.Point{100.848436, 27.670668}, + ordinarykriging.Point{100.832224, 27.650395}, + ordinarykriging.Point{100.851818, 27.643346}, + ordinarykriging.Point{100.828149, 27.6157}, + ordinarykriging.Point{100.855285, 27.623622}, + ordinarykriging.Point{100.854072, 27.596605}, + ordinarykriging.Point{100.868117, 27.591851}, + ordinarykriging.Point{100.912073, 27.521699}, + ordinarykriging.Point{100.901582, 27.486249}, + ordinarykriging.Point{100.901322, 27.453406}, + ordinarykriging.Point{100.921263, 27.471336}, + ordinarykriging.Point{100.936782, 27.469194}, + ordinarykriging.Point{100.957676, 27.439997}, + ordinarykriging.Point{100.952127, 27.426268}, + ordinarykriging.Point{100.995217, 27.368239}, + ordinarykriging.Point{100.99669, 27.355058}, + ordinarykriging.Point{101.020272, 27.344495}, + ordinarykriging.Point{101.010215, 27.312246}, + ordinarykriging.Point{101.029983, 27.294608}, + ordinarykriging.Point{101.028075, 27.266556}, + ordinarykriging.Point{101.042554, 27.247003}, + ordinarykriging.Point{101.04238, 27.221643}, + ordinarykriging.Point{101.060327, 27.198345}, + ordinarykriging.Point{101.074892, 27.19413}, + ordinarykriging.Point{101.118675, 27.208683}, + ordinarykriging.Point{101.170434, 27.195641}, + ordinarykriging.Point{101.170347, 27.175121}, + ordinarykriging.Point{101.145291, 27.10375}, + ordinarykriging.Point{101.156822, 27.095949}, + ordinarykriging.Point{101.137402, 27.022377}, + ordinarykriging.Point{101.227221, 26.984377}, + ordinarykriging.Point{101.227048, 26.958958}, + ordinarykriging.Point{101.264501, 26.955531}, + ordinarykriging.Point{101.255572, 26.923886}, + ordinarykriging.Point{101.267796, 26.902998}, + ordinarykriging.Point{101.293979, 26.89614}, + ordinarykriging.Point{101.311579, 26.902918}, + ordinarykriging.Point{101.323283, 26.888246}, + ordinarykriging.Point{101.365418, 26.8837}, + ordinarykriging.Point{101.374695, 26.865357}, + ordinarykriging.Point{101.399317, 26.841905}, + ordinarykriging.Point{101.372007, 26.800333}, + ordinarykriging.Point{101.379897, 26.786446}, + ordinarykriging.Point{101.357789, 26.770641}, + ordinarykriging.Point{101.390214, 26.749964}, + ordinarykriging.Point{101.389694, 26.723213}, + ordinarykriging.Point{101.421339, 26.72481}, + ordinarykriging.Point{101.436077, 26.740542}, + ordinarykriging.Point{101.457058, 26.729762}, + ordinarykriging.Point{101.459139, 26.747409}, + ordinarykriging.Point{101.445961, 26.774233}, + ordinarykriging.Point{101.460613, 26.786605}, + ordinarykriging.Point{101.4972, 26.770481}, + ordinarykriging.Point{101.512632, 26.769683}, + ordinarykriging.Point{101.510638, 26.754435}, + ordinarykriging.Point{101.492171, 26.74645}, + ordinarykriging.Point{101.498934, 26.732237}, + ordinarykriging.Point{101.472751, 26.721456}, + ordinarykriging.Point{101.454457, 26.703646}, + ordinarykriging.Point{101.454024, 26.691184}, + ordinarykriging.Point{101.481247, 26.673209}, + ordinarykriging.Point{101.461047, 26.640767}, + ordinarykriging.Point{101.462174, 26.607116}, + ordinarykriging.Point{101.452117, 26.60096}, + ordinarykriging.Point{101.400271, 26.605117}, + ordinarykriging.Point{101.396023, 26.592006}, + ordinarykriging.Point{101.4066, 26.556341}, + ordinarykriging.Point{101.422899, 26.531706}, + ordinarykriging.Point{101.438505, 26.538505}, + ordinarykriging.Point{101.440326, 26.511865}, + ordinarykriging.Point{101.458706, 26.495462}, + ordinarykriging.Point{101.50691, 26.499703}, + ordinarykriging.Point{101.529972, 26.467211}, + ordinarykriging.Point{101.563871, 26.455525}, + ordinarykriging.Point{101.588146, 26.425823}, + ordinarykriging.Point{101.620225, 26.408607}, + ordinarykriging.Point{101.619011, 26.396595}, + ordinarykriging.Point{101.637564, 26.389066}, + ordinarykriging.Point{101.63557, 26.357585}, + ordinarykriging.Point{101.660626, 26.346849}, + ordinarykriging.Point{101.640339, 26.318882}, + ordinarykriging.Point{101.660366, 26.310868}, + ordinarykriging.Point{101.646928, 26.305177}, + ordinarykriging.Point{101.621005, 26.312871}, + ordinarykriging.Point{101.597423, 26.303414}, + ordinarykriging.Point{101.586239, 26.279686}, + ordinarykriging.Point{101.594475, 26.261566}, + ordinarykriging.Point{101.615716, 26.252264}, + ordinarykriging.Point{101.630368, 26.224837}, + ordinarykriging.Point{101.649962, 26.234301}, + ordinarykriging.Point{101.671637, 26.231895}, + ordinarykriging.Point{101.690017, 26.241679}, + ordinarykriging.Point{101.705016, 26.224435}, + ordinarykriging.Point{101.735707, 26.219944}, + ordinarykriging.Point{101.77316, 26.168276}, + ordinarykriging.Point{101.80758, 26.156319}, + ordinarykriging.Point{101.799083, 26.146929}, + ordinarykriging.Point{101.796569, 26.11482}, + ordinarykriging.Point{101.819544, 26.087119}, + ordinarykriging.Point{101.839918, 26.082381}, + ordinarykriging.Point{101.83541, 26.045836}, + ordinarykriging.Point{101.858038, 26.04937}, + ordinarykriging.Point{101.89974, 26.099244}, + ordinarykriging.Point{101.922888, 26.107995}, + ordinarykriging.Point{101.954707, 26.084469}, + ordinarykriging.Point{102.020771, 26.096273}, + ordinarykriging.Point{102.052589, 26.075474}, + ordinarykriging.Point{102.084321, 26.065194}, + ordinarykriging.Point{102.107816, 26.068246}, + ordinarykriging.Point{102.115532, 26.085272}, + ordinarykriging.Point{102.130964, 26.087119}, + ordinarykriging.Point{102.137033, 26.108317}, + ordinarykriging.Point{102.152292, 26.109601}, + ordinarykriging.Point{102.175094, 26.147009}, + ordinarykriging.Point{102.199629, 26.158486}, + ordinarykriging.Point{102.236476, 26.185127}, + ordinarykriging.Point{102.244886, 26.21088}, + ordinarykriging.Point{102.257457, 26.220104}, + ordinarykriging.Point{102.282773, 26.220184}, + ordinarykriging.Point{102.349011, 26.244726}, + ordinarykriging.Point{102.396088, 26.297642}, + ordinarykriging.Point{102.43805, 26.300047}, + ordinarykriging.Point{102.541914, 26.338515}, + ordinarykriging.Point{102.551625, 26.362151}, + ordinarykriging.Point{102.571132, 26.362632}, + ordinarykriging.Point{102.629393, 26.336833}, + ordinarykriging.Point{102.638583, 26.307662}, + ordinarykriging.Point{102.611273, 26.282331}, + ordinarykriging.Point{102.601303, 26.249057}, + ordinarykriging.Point{102.620116, 26.245769}, + ordinarykriging.Point{102.659131, 26.221388}, + ordinarykriging.Point{102.674563, 26.205425}, + ordinarykriging.Point{102.719733, 26.218179}, + ordinarykriging.Point{102.723547, 26.245689}, + ordinarykriging.Point{102.739933, 26.268622}, + ordinarykriging.Point{102.764816, 26.277681}, + ordinarykriging.Point{102.78519, 26.298925}, + ordinarykriging.Point{102.833394, 26.30662}, + ordinarykriging.Point{102.867467, 26.338996}, + ordinarykriging.Point{102.879518, 26.365516}, + ordinarykriging.Point{102.89469, 26.338515}, + ordinarykriging.Point{102.971591, 26.340278}, + ordinarykriging.Point{102.985116, 26.345727}, + ordinarykriging.Point{102.998208, 26.371925}, + ordinarykriging.Point{102.988324, 26.409088}, + ordinarykriging.Point{102.998121, 26.450322}, + ordinarykriging.Point{102.989885, 26.482658}, + ordinarykriging.Point{103.031847, 26.4869}, + ordinarykriging.Point{103.052481, 26.514585}, + ordinarykriging.Point{103.054562, 26.541864}, + ordinarykriging.Point{103.036702, 26.555382}, + ordinarykriging.Point{103.019362, 26.594324}, + ordinarykriging.Point{103.029679, 26.60168}, + ordinarykriging.Point{103.024391, 26.641246}, + ordinarykriging.Point{103.027425, 26.662583}, + ordinarykriging.Point{103.00523, 26.68048}, + ordinarykriging.Point{103.010432, 26.701329}, + ordinarykriging.Point{102.983642, 26.765612}, + ordinarykriging.Point{102.991705, 26.774632}, + ordinarykriging.Point{102.962748, 26.840548}, + ordinarykriging.Point{102.947402, 26.844298}, + ordinarykriging.Point{102.909429, 26.902679}, + ordinarykriging.Point{102.896597, 26.91137}, + ordinarykriging.Point{102.888881, 26.951625}, + ordinarykriging.Point{102.894863, 27.001586}, + ordinarykriging.Point{102.872582, 27.022695}, + ordinarykriging.Point{102.885326, 27.059567}, + ordinarykriging.Point{102.898938, 27.076287}, + ordinarykriging.Point{102.913503, 27.140038}, + ordinarykriging.Point{102.902233, 27.19588}, + ordinarykriging.Point{102.900499, 27.237305}, + ordinarykriging.Point{102.882986, 27.259324}, + ordinarykriging.Point{102.882119, 27.293337}, + ordinarykriging.Point{102.900065, 27.317648}, + ordinarykriging.Point{102.911423, 27.349101}, + ordinarykriging.Point{102.944975, 27.410474}, + ordinarykriging.Point{102.955292, 27.411426}, + ordinarykriging.Point{102.962488, 27.389914}, + ordinarykriging.Point{102.98529, 27.367366}, + ordinarykriging.Point{103.025864, 27.382531}, + ordinarykriging.Point{103.055602, 27.409521}, + ordinarykriging.Point{103.079531, 27.397297}, + ordinarykriging.Point{103.111609, 27.401028}, + ordinarykriging.Point{103.142907, 27.421903}, + ordinarykriging.Point{103.144554, 27.45055}, + ordinarykriging.Point{103.190331, 27.523522}, + ordinarykriging.Point{103.204463, 27.529152}, + ordinarykriging.Point{103.218161, 27.562131}, + ordinarykriging.Point{103.236194, 27.570453}, + ordinarykriging.Point{103.278677, 27.561893}, + ordinarykriging.Point{103.295583, 27.566966}, + ordinarykriging.Point{103.298531, 27.601201}, + ordinarykriging.Point{103.280411, 27.617998}, + ordinarykriging.Point{103.31457, 27.655305}, + ordinarykriging.Point{103.349769, 27.678428}, + ordinarykriging.Point{103.370057, 27.708671}, + ordinarykriging.Point{103.393032, 27.709383}, + ordinarykriging.Point{103.420862, 27.742941}, + ordinarykriging.Point{103.448172, 27.755126}, + ordinarykriging.Point{103.459789, 27.777595}, + ordinarykriging.Point{103.489527, 27.79745}, + ordinarykriging.Point{103.508601, 27.839124}, + ordinarykriging.Point{103.499931, 27.877542}, + ordinarykriging.Point{103.502965, 27.911758}, + ordinarykriging.Point{103.541979, 27.953625}, + ordinarykriging.Point{103.556718, 27.955205}, + ordinarykriging.Point{103.563221, 27.977632}, + ordinarykriging.Point{103.541719, 27.966419}, + ordinarykriging.Point{103.515536, 27.965551}, + ordinarykriging.Point{103.49889, 27.984107}, + ordinarykriging.Point{103.496116, 28.022473}, + ordinarykriging.Point{103.47921, 28.033996}, + ordinarykriging.Point{103.459443, 28.021368}, + ordinarykriging.Point{103.430832, 28.04465}, + ordinarykriging.Point{103.432913, 28.072187}, + ordinarykriging.Point{103.453634, 28.087728}, + ordinarykriging.Point{103.455021, 28.123691}, + ordinarykriging.Point{103.47028, 28.122193}, + ordinarykriging.Point{103.533136, 28.16855}, + ordinarykriging.Point{103.552643, 28.191248}, + ordinarykriging.Point{103.573191, 28.230959}, + ordinarykriging.Point{103.618101, 28.243641}, + ordinarykriging.Point{103.632406, 28.260023}, + ordinarykriging.Point{103.649485, 28.25703}, + ordinarykriging.Point{103.694655, 28.227335}, + ordinarykriging.Point{103.702025, 28.198971}, + ordinarykriging.Point{103.721272, 28.201965}, + ordinarykriging.Point{103.739998, 28.236}, + ordinarykriging.Point{103.770776, 28.233558}, + ordinarykriging.Point{103.785862, 28.254037}, + ordinarykriging.Point{103.812998, 28.265142}, + ordinarykriging.Point{103.828951, 28.284985}, + ordinarykriging.Point{103.868919, 28.300337}, + ordinarykriging.Point{103.875595, 28.32222}, + ordinarykriging.Point{103.8534, 28.356768}, + ordinarykriging.Point{103.859815, 28.383516}, + ordinarykriging.Point{103.851232, 28.406719}, + ordinarykriging.Point{103.828951, 28.439824}, + ordinarykriging.Point{103.830251, 28.458377}, + ordinarykriging.Point{103.810397, 28.495394}, + ordinarykriging.Point{103.783694, 28.526585}, + ordinarykriging.Point{103.800687, 28.533812}, + ordinarykriging.Point{103.801381, 28.561851}, + ordinarykriging.Point{103.835453, 28.582581}, + ordinarykriging.Point{103.834846, 28.622302}, + ordinarykriging.Point{103.851146, 28.667107}, + ordinarykriging.Point{103.873687, 28.65275}, + ordinarykriging.Point{103.874641, 28.626462}, + ordinarykriging.Point{103.896315, 28.619712}, + ordinarykriging.Point{103.909927, 28.631249}, + ordinarykriging.Point{103.936717, 28.622616}, + ordinarykriging.Point{103.942526, 28.603071}, + ordinarykriging.Point{104.059568, 28.627639}, + ordinarykriging.Point{104.089653, 28.604013}, + ordinarykriging.Point{104.103351, 28.60629}, + ordinarykriging.Point{104.125199, 28.637292}, + ordinarykriging.Point{104.170369, 28.64302}, + ordinarykriging.Point{104.190396, 28.634153}, + ordinarykriging.Point{104.231058, 28.635801}, + ordinarykriging.Point{104.241461, 28.660831}, + ordinarykriging.Point{104.252645, 28.660674}, + ordinarykriging.Point{104.269638, 28.635173}, + ordinarykriging.Point{104.296428, 28.634388}, + ordinarykriging.Point{104.314895, 28.615631}, + ordinarykriging.Point{104.343939, 28.64098}, + ordinarykriging.Point{104.37411, 28.649297}, + ordinarykriging.Point{104.404888, 28.640666}, + ordinarykriging.Point{104.425262, 28.626697}, + ordinarykriging.Point{104.417286, 28.598047}, + ordinarykriging.Point{104.387721, 28.598911}, + ordinarykriging.Point{104.368388, 28.585957}, + ordinarykriging.Point{104.35677, 28.555726}, + ordinarykriging.Point{104.330934, 28.559731}, + ordinarykriging.Point{104.323478, 28.541196}, + ordinarykriging.Point{104.287758, 28.532556}, + ordinarykriging.Point{104.262009, 28.536954}, + ordinarykriging.Point{104.248311, 28.528392}, + ordinarykriging.Point{104.248657, 28.509616}, + ordinarykriging.Point{104.266691, 28.502073}, + ordinarykriging.Point{104.261142, 28.482585}, + ordinarykriging.Point{104.269812, 28.468359}, + ordinarykriging.Point{104.258368, 28.453188}, + ordinarykriging.Point{104.267644, 28.420481}, + ordinarykriging.Point{104.2549, 28.410101}, + ordinarykriging.Point{104.278395, 28.346617}, + ordinarykriging.Point{104.30189, 28.328517}, + ordinarykriging.Point{104.290012, 28.314743}, + ordinarykriging.Point{104.313941, 28.306635}, + ordinarykriging.Point{104.340991, 28.332688}, + ordinarykriging.Point{104.358244, 28.338905}, + ordinarykriging.Point{104.384774, 28.330091}, + ordinarykriging.Point{104.393617, 28.289945}, + ordinarykriging.Point{104.408269, 28.269867}, + ordinarykriging.Point{104.447283, 28.271205}, + ordinarykriging.Point{104.444075, 28.259235}, + ordinarykriging.Point{104.460808, 28.24435}, + ordinarykriging.Point{104.435839, 28.209293}, + ordinarykriging.Point{104.402287, 28.202832}, + ordinarykriging.Point{104.406362, 28.173358}, + ordinarykriging.Point{104.444682, 28.162087}, + ordinarykriging.Point{104.451011, 28.116358}, + ordinarykriging.Point{104.433758, 28.113913}, + ordinarykriging.Point{104.421447, 28.097193}, + ordinarykriging.Point{104.40064, 28.091514}, + ordinarykriging.Point{104.398125, 28.068795}, + ordinarykriging.Point{104.376451, 28.052304}, + ordinarykriging.Point{104.341425, 28.057907}, + ordinarykriging.Point{104.304058, 28.050726}, + ordinarykriging.Point{104.298769, 28.043861}, + ordinarykriging.Point{104.326599, 28.025473}, + ordinarykriging.Point{104.356163, 28.018448}, + ordinarykriging.Point{104.378792, 27.993739}, + ordinarykriging.Point{104.383473, 27.968709}, + ordinarykriging.Point{104.40116, 27.952283}, + ordinarykriging.Point{104.451965, 27.926216}, + ordinarykriging.Point{104.468177, 27.907413}, + ordinarykriging.Point{104.496181, 27.896903}, + ordinarykriging.Point{104.509533, 27.8777}, + ordinarykriging.Point{104.526699, 27.889475}, + ordinarykriging.Point{104.558344, 27.867978}, + ordinarykriging.Point{104.557997, 27.852643}, + ordinarykriging.Point{104.580885, 27.842049}, + ordinarykriging.Point{104.607935, 27.858176}, + ordinarykriging.Point{104.633598, 27.850903}, + ordinarykriging.Point{104.679114, 27.882284}, + ordinarykriging.Point{104.743705, 27.90204}, + ordinarykriging.Point{104.76668, 27.884733}, + ordinarykriging.Point{104.79529, 27.900538}, + ordinarykriging.Point{104.858407, 27.902435}, + ordinarykriging.Point{104.887017, 27.913022}, + ordinarykriging.Point{104.894733, 27.934906}, + ordinarykriging.Point{104.921089, 27.941699}, + ordinarykriging.Point{104.903056, 27.960417}, + ordinarykriging.Point{104.929239, 27.984976}, + ordinarykriging.Point{104.947099, 27.980554}, + ordinarykriging.Point{104.946926, 27.994845}, + ordinarykriging.Point{104.975016, 28.019869}, + ordinarykriging.Point{104.976316, 28.060116}, + ordinarykriging.Point{105.011082, 28.066743}, + ordinarykriging.Point{105.059113, 28.09814}, + ordinarykriging.Point{105.078274, 28.08331}, + ordinarykriging.Point{105.108098, 28.081102}, + ordinarykriging.Point{105.144251, 28.066664}, + ordinarykriging.Point{105.166359, 28.07195}, + ordinarykriging.Point{105.185519, 28.056802}, + ordinarykriging.Point{105.183785, 28.04031}, + ordinarykriging.Point{105.167573, 28.023657}, + ordinarykriging.Point{105.184392, 27.996424}, + ordinarykriging.Point{105.215604, 27.990581}, + ordinarykriging.Point{105.248809, 28.008107}, + ordinarykriging.Point{105.27083, 27.995792}, + ordinarykriging.Point{105.26875, 27.98316}, + ordinarykriging.Point{105.283402, 27.959944}, + ordinarykriging.Point{105.280887, 27.929139}, + ordinarykriging.Point{105.264155, 27.9116}, + ordinarykriging.Point{105.248202, 27.912469}, + ordinarykriging.Point{105.232683, 27.892952}, + ordinarykriging.Point{105.250196, 27.844816}, + ordinarykriging.Point{105.24118, 27.830822}, + ordinarykriging.Point{105.274385, 27.817142}, + ordinarykriging.Point{105.31418, 27.819435}, + ordinarykriging.Point{105.273865, 27.795235}, + ordinarykriging.Point{105.292939, 27.771267}, + ordinarykriging.Point{105.28791, 27.742387}, + ordinarykriging.Point{105.290511, 27.71247}, + ordinarykriging.Point{105.305683, 27.707879}, + ordinarykriging.Point{105.301348, 27.682783}, + ordinarykriging.Point{105.309845, 27.654989}, + ordinarykriging.Point{105.295019, 27.632891}, + ordinarykriging.Point{105.304296, 27.611897}, + ordinarykriging.Point{105.257912, 27.583688}, + ordinarykriging.Point{105.234764, 27.540172}, + ordinarykriging.Point{105.246728, 27.545167}, + ordinarykriging.Point{105.260167, 27.519637}, + ordinarykriging.Point{105.248029, 27.494657}, + ordinarykriging.Point{105.235891, 27.490532}, + ordinarykriging.Point{105.239012, 27.469829}, + ordinarykriging.Point{105.226094, 27.441108}, + ordinarykriging.Point{105.23277, 27.436346}, + ordinarykriging.Point{105.213263, 27.401107}, + ordinarykriging.Point{105.182658, 27.367604}, + ordinarykriging.Point{105.184739, 27.392455}, + ordinarykriging.Point{105.167226, 27.408807}, + ordinarykriging.Point{105.150927, 27.404997}, + ordinarykriging.Point{105.121449, 27.41849}, + ordinarykriging.Point{105.097174, 27.411903}, + ordinarykriging.Point{105.070384, 27.419046}, + ordinarykriging.Point{105.031456, 27.400234}, + ordinarykriging.Point{105.012123, 27.380229}, + ordinarykriging.Point{104.943804, 27.346639}, + ordinarykriging.Point{104.913547, 27.327101}, + ordinarykriging.Point{104.904097, 27.306049}, + ordinarykriging.Point{104.871238, 27.290873}, + ordinarykriging.Point{104.850517, 27.304301}, + ordinarykriging.Point{104.856499, 27.332581}, + ordinarykriging.Point{104.826068, 27.352357}, + ordinarykriging.Point{104.808989, 27.35474}, + ordinarykriging.Point{104.789135, 27.321064}, + ordinarykriging.Point{104.771015, 27.317409}, + ordinarykriging.Point{104.754369, 27.345369}, + ordinarykriging.Point{104.735642, 27.334647}, + ordinarykriging.Point{104.722637, 27.34243}, + ordinarykriging.Point{104.686137, 27.334805}, + ordinarykriging.Point{104.680242, 27.319634}, + ordinarykriging.Point{104.630824, 27.317886}, + ordinarykriging.Point{104.611316, 27.307002}, + ordinarykriging.Point{104.594757, 27.311292}, + ordinarykriging.Point{104.570221, 27.331708}, + ordinarykriging.Point{104.539357, 27.329722}, + ordinarykriging.Point{104.507625, 27.387533}, + ordinarykriging.Point{104.517249, 27.400393}, + ordinarykriging.Point{104.490892, 27.401901}, + ordinarykriging.Point{104.497655, 27.411585}, + ordinarykriging.Point{104.467137, 27.414284}, + ordinarykriging.Point{104.416592, 27.435553}, + ordinarykriging.Point{104.410176, 27.457929}, + ordinarykriging.Point{104.353129, 27.466894}, + ordinarykriging.Point{104.332755, 27.444044}, + ordinarykriging.Point{104.342638, 27.436346}, + ordinarykriging.Point{104.322438, 27.407854}, + ordinarykriging.Point{104.308826, 27.407299}, + ordinarykriging.Point{104.295821, 27.374671}, + ordinarykriging.Point{104.270419, 27.360934}, + ordinarykriging.Point{104.247877, 27.336394}, + ordinarykriging.Point{104.259928, 27.308353}, + ordinarykriging.Point{104.250391, 27.291509}, + ordinarykriging.Point{104.210857, 27.29723}, + ordinarykriging.Point{104.21918, 27.279828}, + ordinarykriging.Point{104.190483, 27.287695}, + ordinarykriging.Point{104.174184, 27.263059}, + ordinarykriging.Point{104.131528, 27.306605}, + ordinarykriging.Point{104.134216, 27.322335}, + ordinarykriging.Point{104.113841, 27.337982}, + ordinarykriging.Point{104.084364, 27.330993}, + ordinarykriging.Point{104.057834, 27.355613}, + ordinarykriging.Point{104.029831, 27.368001}, + ordinarykriging.Point{104.01752, 27.384516}, + ordinarykriging.Point{104.015266, 27.429284}, + ordinarykriging.Point{103.992637, 27.419681}, + ordinarykriging.Point{103.956484, 27.425395}, + ordinarykriging.Point{103.932469, 27.443964}, + ordinarykriging.Point{103.92588, 27.413887}, + ordinarykriging.Point{103.904899, 27.384595}, + ordinarykriging.Point{103.903338, 27.349737}, + ordinarykriging.Point{103.885738, 27.330755}, + ordinarykriging.Point{103.874034, 27.330357}, + ordinarykriging.Point{103.865451, 27.281735}, + ordinarykriging.Point{103.84551, 27.287536}, + ordinarykriging.Point{103.824876, 27.264172}, + ordinarykriging.Point{103.802334, 27.267272}, + ordinarykriging.Point{103.801381, 27.250739}, + ordinarykriging.Point{103.764534, 27.212022}, + ordinarykriging.Point{103.749622, 27.211307}, + ordinarykriging.Point{103.696216, 27.12667}, + ordinarykriging.Point{103.674715, 27.131126}, + ordinarykriging.Point{103.624516, 27.112186}, + ordinarykriging.Point{103.620441, 27.096745}, + ordinarykriging.Point{103.6533, 27.092606}, + ordinarykriging.Point{103.659802, 27.065778}, + ordinarykriging.Point{103.617927, 27.07979}, + ordinarykriging.Point{103.601454, 27.062195}, + ordinarykriging.Point{103.623649, 27.035359}, + ordinarykriging.Point{103.628158, 27.016084}, + ordinarykriging.Point{103.614373, 27.00541}, + }} + polygon := ordinarykriging.PolygonGeometry{Type: "", Coordinates: coordinates} + + RunOrdinaryKriging(values, lons, lats, model, 0, 100, 0.01, polygon.Coordinates) + + //gridBuffer, err := json.Marshal(gridMatrices) + //if err != nil { + // log.Fatal(err) + //} + + //js.Global().Get("console").Call("log", "wasm geoJsonString: ", js.ValueOf(geoJsonString)) + //js.Global().Get("console").Call("log", "wasm gridMatrices: ", string(gridBuffer)) + return 1 +} diff --git a/go.mod b/go.mod index 8e84ab2..b1edce6 100644 --- a/go.mod +++ b/go.mod @@ -8,4 +8,5 @@ require ( github.com/json-iterator/go v1.1.10 github.com/spf13/cobra v1.1.1 golang.org/x/image v0.0.0-20190802002840-cff245a6509b + gonum.org/v1/gonum v0.8.2 ) diff --git a/go.sum b/go.sum index ed7a3ea..aab151d 100644 --- a/go.sum +++ b/go.sum @@ -14,6 +14,7 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= @@ -37,6 +38,7 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -103,6 +105,7 @@ github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -188,11 +191,15 @@ golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -248,8 +255,10 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -265,6 +274,11 @@ golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -301,3 +315,4 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/ordinary/example_test.go b/ordinary/example_test.go deleted file mode 100644 index c117cb4..0000000 --- a/ordinary/example_test.go +++ /dev/null @@ -1,67 +0,0 @@ -package ordinary_test - -import ( - "fmt" - - "github.com/liuvigongzuoshi/go-kriging/ordinary" -) - -var ( - values = FloatList{45.986076009952846, 46.223032113384235, 52.821454425024626, 89.19253247046487, 31.062802427638776} - lats = FloatList{117.99598607600996, 117.99622303211338, 118.00282145442502, 118.03919253247047, 117.98106280242764} - lons = FloatList{31.995986076009952, 31.99622303211338, 32.002821454425025, 32.03919253247046, 31.981062802427637} -) - -type FloatList []float64 - -func (t FloatList) min() float64 { - min := float64(0) - for i := 0; i < len(t); i++ { - if min == 0 || min > t[i] { - min = t[i] - } - } - - return min -} - -func (t FloatList) max() float64 { - max := float64(0) - for i := 0; i < len(t); i++ { - if max < t[i] { - max = t[i] - } - } - - return max -} - -func Example_OrdinaryKriging_Exponential() { - ordinaryKriging := ordinary.NewOrdinary(values, lats, lons) - ordinaryKriging.Train(ordinary.Exponential, 0, 100) - contourRectangle := ordinaryKriging.Contour(200, 200) - fmt.Printf("%#v", contourRectangle.Contour[:10]) - // Output: - // []float64{31.062802427638875, 31.674435068380763, 32.278056119942775, 32.873804573541605, 33.461820447530116, 34.04224482718795, 34.615219901523936, 35.18088899653787, 35.73939660436959, 36.29088840795853} - -} - -func Example_OrdinaryKriging_Spherical() { - ordinaryKriging := ordinary.NewOrdinary(values, lats, lons) - ordinaryKriging.Train(ordinary.Spherical, 0, 100) - contourRectangle := ordinaryKriging.Contour(200, 200) - fmt.Printf("%#v", contourRectangle.Contour[:10]) - // Output: - // []float64{31.062802427638914, 31.355686136987902, 31.64907050717433, 31.94263698074654, 32.23631166433025, 32.5301127079549, 32.82405871070649, 33.11816872323253, 33.41246224930141, 33.70695924637675} - -} - -func Example_OrdinaryKriging_Gaussian() { - ordinaryKriging := ordinary.NewOrdinary(values, lats, lons) - ordinaryKriging.Train(ordinary.Gaussian, 0, 100) - contourRectangle := ordinaryKriging.Contour(200, 200) - fmt.Printf("%#v", contourRectangle.Contour[:10]) - // Output: - // []float64{31.062802429121923, 31.194182744748254, 31.328955440993354, 31.467084512481577, 31.60853363388739, 31.75326617591121, 31.90124522123483, 32.05243358038846, 32.206793807474796, 32.36428821590181} - -} diff --git a/ordinary/matrix.go b/ordinary/matrix.go deleted file mode 100644 index e5b7f7e..0000000 --- a/ordinary/matrix.go +++ /dev/null @@ -1,225 +0,0 @@ -package ordinary - -import "math" - -// krigingMatrixTranspose The matrix is reversed, and the horizontal matrix becomes the vertical matrix -// 矩阵颠倒,横向矩阵变成纵向矩阵 -func krigingMatrixTranspose(X []float64, n, m int) []float64 { - Z := make([]float64, m*n) - for i := 0; i < n; i++ { - for j := 0; j < m; j++ { - Z[j*n+i] = X[i*m+j] - } - } - - return Z -} - -// krigingMatrixMultiply naive matrix multiplication -// 矩阵相乘, 横向矩阵乘纵向矩阵 -func krigingMatrixMultiply(X, Y []float64, n, m, p int) []float64 { - Z := make([]float64, n*p) - for i := 0; i < n; i++ { - for j := 0; j < p; j++ { - Z[i*p+j] = 0 - for k := 0; k < m; k++ { - Z[i*p+j] += X[i*m+k] * Y[k*p+j] - } - } - } - return Z -} - -// krigingMatrixAdd -// 矩阵相加 -func krigingMatrixAdd(X, Y []float64, n, m int) []float64 { - Z := make([]float64, n*m) - for i := 0; i < n; i++ { - for j := 0; j < m; j++ { - Z[i*m+j] = X[i*m+j] + Y[i*m+j] - } - } - - return Z -} - -// krigingMatrixDiag matrix algebra -func krigingMatrixDiag(c float64, n int) []float64 { - Z := make([]float64, n*n) - for i := 0; i < n; i++ { - Z[i*n+i] = c - } - return Z -} - -// krigingMatrixChol cholesky decomposition -// Cholesky 分解 -func krigingMatrixChol(X []float64, n int) bool { - p := make([]float64, n) - - for i := 0; i < n; i++ { - p[i] = X[i*n+i] - } - - for i := 0; i < n; i++ { - for j := 0; j < i; j++ { - p[i] -= X[i*n+j] * X[i*n+j] - } - if p[i] <= 0 { - return false - } - p[i] = math.Sqrt(p[i]) - for j := i + 1; j < n; j++ { - for k := 0; k < i; k++ { - X[j*n+i] -= X[j*n+k] * X[i*n+k] - X[j*n+i] /= p[i] - } - } - } - - for i := 0; i < n; i++ { - X[i*n+i] = p[i] - } - return true -} - -// krigingMatrixChol2inv inversion of cholesky decomposition -// cholesky分解的求逆 -func krigingMatrixChol2inv(X []float64, n int) { - var i, j, k int - var sum float64 - - for i = 0; i < n; i++ { - X[i*n+i] = 1 / X[i*n+i] - for j = i + 1; j < n; j++ { - sum = 0 - for k = i; k < j; k++ { - sum -= X[j*n+k] * X[k*n+i] - } - X[j*n+i] = sum / X[j*n+j] - } - } - - for i = 0; i < n; i++ { - for j = i + 1; j < n; j++ { - X[i*n+j] = 0 - } - } - - for i = 0; i < n; i++ { - X[i*n+i] *= X[i*n+i] - for k = i + 1; k < n; k++ { - X[i*n+i] += X[k*n+i] * X[k*n+i] - } - - for j = i + 1; j < n; j++ { - for k = j; k < n; k++ { - X[i*n+j] += X[k*n+i] * X[k*n+j] - } - } - } - - for i = 0; i < n; i++ { - for j = 0; j < i; j++ { - X[i*n+j] = X[j*n+i] - } - } -} - -// krigingMatrixSolve inversion via gauss-jordan elimination -// 高斯-若尔当消元法 -func krigingMatrixSolve(X []float64, n int) bool { - var b = make([]float64, n*n) - var indexC = make([]int, n) - var indexR = make([]int, n) - var ipiV = make([]int, n) - var iCol, iRow, iRowXn, iColXn int - var dum, pivinv float64 - - for i := 0; i < n; i++ { - _iXn := i * n - for j := 0; j < n; j++ { - if i == j { - b[_iXn+j] = 1 - } else { - b[_iXn+j] = 0 - } - } - } - - for i := 0; i < n; i++ { - var big float64 = 0 - for j := 0; j < n; j++ { - if ipiV[j] != 1 { - _jXn := j * n - for k := 0; k < n; k++ { - if ipiV[k] == 0 { - absoluteValue := math.Abs(X[_jXn+k]) - if absoluteValue >= big { - big = absoluteValue - iRow = j - iCol = k - iRowXn = iRow * n - iColXn = iCol * n - } - } - } - } - } - - ipiV[iCol]++ - - if iRow != iCol { - for l := 0; l < n; l++ { - x := iRowXn + l - y := iColXn + l - X[x], X[y] = X[y], X[x] - b[x], b[y] = b[y], b[x] - } - } - indexR[i] = iRow - indexC[i] = iCol - - _iColXnAddiCol := iColXn + iCol - - if X[_iColXnAddiCol] == 0 { - return false - } // Singular - - pivinv = 1 / X[_iColXnAddiCol] - X[_iColXnAddiCol] = 1 - for l := 0; l < n; l++ { - _a := iColXn + l - X[_a] *= pivinv - b[_a] *= pivinv - } - - for ll := 0; ll < n; ll++ { - if ll != iCol { - _a := ll * n - _b := _a + iCol - dum = X[_b] - X[_b] = 0 - for l := 0; l < n; l++ { - _c := _a + l - _d := iColXn + l - X[_c] -= X[_d] * dum - b[_c] -= b[_d] * dum - } - } - } - } - - for l := n - 1; l >= 0; l-- { - if indexR[l] != indexC[l] { - for k := 0; k < n; k++ { - _kXn := k * n - _a := _kXn + indexR[l] - _b := _kXn + indexC[l] - X[_a], X[_b] = X[_b], X[_a] - } - } - } - - return true -} diff --git a/ordinary/ordinary_test.go b/ordinary/ordinary_test.go deleted file mode 100644 index 6ddb745..0000000 --- a/ordinary/ordinary_test.go +++ /dev/null @@ -1,75 +0,0 @@ -package ordinary_test - -import ( - "fmt" - "image/png" - "math/rand" - "os" - "path/filepath" - "testing" - "time" - - "github.com/liuvigongzuoshi/go-kriging/ordinary" -) - -const pngDirPath = "testdata" - -func randFloats(min, max float64, n int) []float64 { - s := rand.NewSource(time.Now().Unix()) - r := rand.New(s) - res := make([]float64, n) - for i := range res { - res[i] = min + r.Float64()*(max-min) - } - return res -} - -func generateData(count int) (FloatList, FloatList, FloatList) { - var values, lats, lons FloatList - values = append(values, randFloats(0, 100, count)...) - lats = append(lats, randFloats(117.95, 118.05, count)...) - lons = append(lons, randFloats(31.95, 32.05, count)...) - return values, lats, lons -} - -func TestGenerateData(t *testing.T) { - values, lats, lons := generateData(100) - fmt.Printf("values %v\n", values) - fmt.Printf("lats %v\n", lats) - fmt.Printf("lons %v\n", lons) -} - -func TestTrain(t *testing.T) { - values, lats, lons := generateData(100) - ordinaryKriging := ordinary.NewOrdinary(values, lats, lons) - ordinaryKriging.Train(ordinary.Exponential, 0, 100) -} - -func TestPredict(t *testing.T) { - values, lats, lons := generateData(100) - ordinaryKriging := ordinary.NewOrdinary(values, lats, lons) - ordinaryKriging.Train(ordinary.Exponential, 0, 100) - ordinaryKriging.Contour(200, 2000) -} - -func TestOrdinaryKriging(t *testing.T) { - values, lats, lons := generateData(100) - - ordinaryKriging := ordinary.NewOrdinary(values, lats, lons) - ordinaryKriging.Train(ordinary.Exponential, 0, 100) - - contourRectangle := ordinaryKriging.Contour(500, 500) - pngPath := fmt.Sprintf("%v/%v.png", pngDirPath, time.Now().Format("2006-01-02 15:04:05")) - img := ordinaryKriging.PlotPng(contourRectangle) - - err := os.MkdirAll(filepath.Dir(pngPath), os.ModePerm) - if err != nil { - return - } - file, err := os.Create(pngPath) - if err != nil { - return - } - defer file.Close() - png.Encode(file, img) -} diff --git a/ordinarykriging/example_test.go b/ordinarykriging/example_test.go new file mode 100644 index 0000000..8616d70 --- /dev/null +++ b/ordinarykriging/example_test.go @@ -0,0 +1,67 @@ +package ordinarykriging_test + +import ( + "fmt" + + "github.com/liuvigongzuoshi/go-kriging/ordinarykriging" +) + +var ( + values = FloatList{45.986076009952846, 46.223032113384235, 52.821454425024626, 89.19253247046487, 31.062802427638776} + lats = FloatList{117.99598607600996, 117.99622303211338, 118.00282145442502, 118.03919253247047, 117.98106280242764} + lons = FloatList{31.995986076009952, 31.99622303211338, 32.002821454425025, 32.03919253247046, 31.981062802427637} +) + +type FloatList []float64 + +func (t FloatList) min() float64 { + min := float64(0) + for i := 0; i < len(t); i++ { + if min == 0 || min > t[i] { + min = t[i] + } + } + + return min +} + +func (t FloatList) max() float64 { + max := float64(0) + for i := 0; i < len(t); i++ { + if max < t[i] { + max = t[i] + } + } + + return max +} + +func ExampleVariogram_Contour_Exponential() { + ordinaryKriging := ordinarykriging.NewOrdinary(values, lats, lons) + ordinaryKriging.Train(ordinarykriging.Exponential, 0, 100) + contourRectangle := ordinaryKriging.Contour(200, 200) + fmt.Printf("%#v", contourRectangle.Contour[:10]) + // Output: + // []float64{31.062802427639, 31.67443506838088, 32.27805611994289, 32.87380457354172, 33.461820447530236, 34.042244827188064, 34.61521990152406, 35.18088899653797, 35.73939660436969, 36.29088840795865} + +} + +func ExampleVariogram_Contour_Spherical() { + ordinaryKriging := ordinarykriging.NewOrdinary(values, lats, lons) + ordinaryKriging.Train(ordinarykriging.Spherical, 0, 100) + contourRectangle := ordinaryKriging.Contour(200, 200) + fmt.Printf("%#v", contourRectangle.Contour[:10]) + // Output: + // []float64{31.062802427637955, 31.35568613698695, 31.649070507173384, 31.942636980745615, 32.23631166432933, 32.53011270795399, 32.82405871070559, 33.11816872323164, 33.41246224930053, 33.70695924637588} + +} + +func ExampleVariogram_Contour_Gaussian() { + ordinaryKriging := ordinarykriging.NewOrdinary(values, lats, lons) + ordinaryKriging.Train(ordinarykriging.Gaussian, 0, 100) + contourRectangle := ordinaryKriging.Contour(200, 200) + fmt.Printf("%#v", contourRectangle.Contour[:10]) + // Output: + // []float64{31.062802438363697, 31.19418275387546, 31.32895545000455, 31.467084521380848, 31.60853364267539, 31.753266184588494, 31.901245229805934, 32.052433588854164, 32.206793815838, 32.36428822416533} + +} diff --git a/ordinary/math.go b/ordinarykriging/math.go similarity index 96% rename from ordinary/math.go rename to ordinarykriging/math.go index 7e48d06..ad27136 100644 --- a/ordinary/math.go +++ b/ordinarykriging/math.go @@ -1,4 +1,4 @@ -package ordinary +package ordinarykriging import "math" diff --git a/ordinarykriging/matrix-inverse.go b/ordinarykriging/matrix-inverse.go new file mode 100644 index 0000000..63963d4 --- /dev/null +++ b/ordinarykriging/matrix-inverse.go @@ -0,0 +1,235 @@ +package ordinarykriging + +import ( + "gonum.org/v1/gonum/mat" + "math" +) + +// gaussJordanInversion inversion via gauss-jordan elimination +// 矩阵求逆 高斯-若尔当消元法 +func gaussJordanInversion(X []float64, n int) bool { + // m 是列数, n 是行数 + var m = n + var b = make([]float64, n*n) + var indexC = make([]int, n) + var indexR = make([]int, n) + var ipiV = make([]int, n) + var iCol, iRow int + var dum, pivinv float64 + + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if i == j { + b[i*n+j] = 1 + } else { + b[i*n+j] = 0 + } + } + } + + for j := 0; j < n; j++ { + ipiV[j] = 0 + } + + for i := 0; i < n; i++ { + var big float64 = 0 + for j := 0; j < n; j++ { + if ipiV[j] != 1 { + for k := 0; k < n; k++ { + if ipiV[k] == 0 { + absoluteValue := math.Abs(X[j*n+k]) + if absoluteValue >= big { + big = absoluteValue + iRow = j + iCol = k + } + } + } + } + } + ipiV[iCol]++ + if iRow != iCol { + for l := 0; l < n; l++ { + X[iRow*n+l], X[iCol*n+l] = X[iCol*n+l], X[iRow*n+l] + } + for l := 0; l < m; l++ { + b[iRow*n+l], b[iCol*n+l] = b[iCol*n+l], b[iRow*n+l] + } + } + indexR[i] = iRow + indexC[i] = iCol + + if X[iCol*n+iCol] == 0 { + return false + } // Singular + + pivinv = 1 / X[iCol*n+iCol] + X[iCol*n+iCol] = 1 + for l := 0; l < n; l++ { + X[iCol*n+l] *= pivinv + } + for l := 0; l < m; l++ { + b[iCol*n+l] *= pivinv + } + + for ll := 0; ll < n; ll++ { + if ll != iCol { + dum = X[ll*n+iCol] + X[ll*n+iCol] = 0 + for l := 0; l < n; l++ { + X[ll*n+l] -= X[iCol*n+l] * dum + } + for l := 0; l < m; l++ { + b[ll*n+l] -= b[iCol*n+l] * dum + } + } + } + } + + for l := n - 1; l >= 0; l-- { + if indexR[l] != indexC[l] { + for k := 0; k < n; k++ { + X[k*n+indexR[l]], X[k*n+indexC[l]] = X[k*n+indexC[l]], X[k*n+indexR[l]] + } + } + } + + return true +} + +// matrixInverseByCol 矩阵求逆 列主元消去法 +// https://github.com/zourongcsu/matrxi-algorithm/blob/master/inverse_matrix.cpp +func matrixInverseByCol(a [][]float64) ([][]float64, bool) { + // eMat 返回 n 阶单位矩阵 + var eMat = func(n int) ([][]float64, bool) { + /* + 返回n阶单位矩阵 + 输入 : + n 阶数 + 输出 : + sol 解值 + err 解出标志:false-未解出或达到步数上限; + true-全部解出 + */ + sol := make([][]float64, n) + for i := 0; i < n; i++ { + sol[i] = make([]float64, n) + } + var err bool = false + + //判断阶数 + if n < 1 { + return nil, err + } + + //分配元素 + for i := 0; i < n; i++ { + sol[i][i] = 1.0 + } + + err = true + return sol, err + } + // maxAbs 向量第一个绝对值最大值及其位置 + var maxAbs = func(a []float64) (float64, int, bool) { + var sol float64 + var ii int + var err bool = false + + n := len(a) + ii = 0 + sol = a[ii] + for i := 1; i < n; i++ { + if math.Abs(sol) < math.Abs(a[i]) { + ii = i + sol = a[i] + } + } + + err = true + return sol, ii, err + } + + var err bool = false + n := len(a) + temp0, _ := eMat(n) + b := temp0 + sol := b + temp1 := make([]float64, n) + + //判断是否方阵 + if len(a) != len(a[0]) { + return sol, err + } + + //主元消去 + for i := 0; i < n; i++ { + //求第i列的主元素并调整行顺序 + aCol := make([]float64, n-i) + for iCol := i; iCol < n; iCol++ { + aCol[iCol-i] = a[iCol][i] + } + _, ii, _ := maxAbs(aCol) + if ii+i != i { + temp1 = a[ii+i] + a[ii+i] = a[i] + a[i] = temp1 + temp1 = b[ii+i] + b[ii+i] = b[i] + b[i] = temp1 + } + + //列消去 + //本行主元置一 + mul := a[i][i] + for j := 0; j < n; j++ { + a[i][j] = a[i][j] / mul + b[i][j] = b[i][j] / mul + } + //其它列置零 + for j := 0; j < n; j++ { + if j != i { + mul = a[j][i] / a[i][i] + for k := 0; k < n; k++ { + a[j][k] = a[j][k] - a[i][k]*mul + b[j][k] = b[j][k] - b[i][k]*mul + } + } + } + } + + sol = b + err = true + return sol, err +} + +func matrixInverseByCol_(x []float64, n int) ([]float64, bool) { + a := make([][]float64, n) + for i := 0; i < n; i++ { + a[i] = x[i*n : i*n+n] + } + aa, ok := matrixInverseByCol(a) + if !ok { + return x, false + } + + var xx []float64 + for i := 0; i < n; i++ { + xx = append(xx, aa[i]...) + } + + return xx, false +} + +func matrixInverse(x []float64, n int) ([]float64, bool) { + a := mat.NewDense(n, n, x) + var ia mat.Dense + + // Take the inverse of a and place the result in ia. + err := ia.Inverse(a) + if err != nil { + return x, false + } + + return ia.RawMatrix().Data, true +} diff --git a/ordinarykriging/matrix.go b/ordinarykriging/matrix.go new file mode 100644 index 0000000..c3d5bdc --- /dev/null +++ b/ordinarykriging/matrix.go @@ -0,0 +1,129 @@ +package ordinarykriging + +import ( + "math" +) + +// matrixTranspose The matrix is reversed, and the horizontal matrix becomes the vertical matrix +// 矩阵颠倒,横向矩阵变成纵向矩阵 +func matrixTranspose(X []float64, n, m int) []float64 { + Z := make([]float64, m*n) + for i := 0; i < n; i++ { + for j := 0; j < m; j++ { + Z[j*n+i] = X[i*m+j] + } + } + + return Z +} + +// matrixMultiply naive matrix multiplication +// 矩阵相乘, 横向矩阵乘纵向矩阵 +func matrixMultiply(X, Y []float64, n, m, p int) []float64 { + Z := make([]float64, n*p) + for i := 0; i < n; i++ { + for j := 0; j < p; j++ { + Z[i*p+j] = 0 + for k := 0; k < m; k++ { + Z[i*p+j] += X[i*m+k] * Y[k*p+j] + } + } + } + return Z +} + +// matrixAdd +// 矩阵相加 +func matrixAdd(X, Y []float64, n, m int) []float64 { + Z := make([]float64, n*m) + for i := 0; i < n; i++ { + for j := 0; j < m; j++ { + Z[i*m+j] = X[i*m+j] + Y[i*m+j] + } + } + + return Z +} + +// matrixDiag matrix algebra +func matrixDiag(c float64, n int) []float64 { + Z := make([]float64, n*n) + for i := 0; i < n; i++ { + Z[i*n+i] = c + } + return Z +} + +// matrixChol cholesky decomposition +// Cholesky 分解 +func matrixChol(X []float64, n int) bool { + p := make([]float64, n) + + for i := 0; i < n; i++ { + p[i] = X[i*n+i] + } + + for i := 0; i < n; i++ { + for j := 0; j < i; j++ { + p[i] -= X[i*n+j] * X[i*n+j] + } + if p[i] <= 0 { + return false + } + p[i] = math.Sqrt(p[i]) + for j := i + 1; j < n; j++ { + for k := 0; k < i; k++ { + X[j*n+i] -= X[j*n+k] * X[i*n+k] + X[j*n+i] /= p[i] + } + } + } + + for i := 0; i < n; i++ { + X[i*n+i] = p[i] + } + return true +} + +// matrixChol2inv inversion of cholesky decomposition +// cholesky 分解的求逆 +func matrixChol2inv(X []float64, n int) { + var i, j, k int + var sum float64 + + for i = 0; i < n; i++ { + X[i*n+i] = 1 / X[i*n+i] + for j = i + 1; j < n; j++ { + sum = 0 + for k = i; k < j; k++ { + sum -= X[j*n+k] * X[k*n+i] + } + X[j*n+i] = sum / X[j*n+j] + } + } + + for i = 0; i < n; i++ { + for j = i + 1; j < n; j++ { + X[i*n+j] = 0 + } + } + + for i = 0; i < n; i++ { + X[i*n+i] *= X[i*n+i] + for k = i + 1; k < n; k++ { + X[i*n+i] += X[k*n+i] * X[k*n+i] + } + + for j = i + 1; j < n; j++ { + for k = j; k < n; k++ { + X[i*n+j] += X[k*n+i] * X[k*n+j] + } + } + } + + for i = 0; i < n; i++ { + for j = 0; j < i; j++ { + X[i*n+j] = X[j*n+i] + } + } +} diff --git a/ordinary/ordinary.go b/ordinarykriging/ordinarykriging.go similarity index 95% rename from ordinary/ordinary.go rename to ordinarykriging/ordinarykriging.go index a8c7c2e..e0285fa 100644 --- a/ordinary/ordinary.go +++ b/ordinarykriging/ordinarykriging.go @@ -1,8 +1,8 @@ -// Package ordinary +// Package ordinarykriging // Ordinary Kriging(OK) // 普通克里金 -package ordinary +package ordinarykriging import ( "github.com/liuvigongzuoshi/go-kriging/canvas" @@ -177,19 +177,19 @@ func (variogram *Variogram) Train(model ModelType, sigma2 float64, alpha float64 } // Least squares - var Xt = krigingMatrixTranspose(X, n, 2) - var Z = krigingMatrixMultiply(Xt, X, 2, n, 2) - Z = krigingMatrixAdd(Z, krigingMatrixDiag(float64(1)/alpha, 2), 2, 2) + var Xt = matrixTranspose(X, n, 2) + var Z = matrixMultiply(Xt, X, 2, n, 2) + Z = matrixAdd(Z, matrixDiag(float64(1)/alpha, 2), 2, 2) var cloneZ = make([]float64, len(Z)) copy(cloneZ, Z) - if krigingMatrixChol(Z, 2) { - krigingMatrixChol2inv(Z, 2) + if matrixChol(Z, 2) { + matrixChol2inv(Z, 2) } else { - krigingMatrixSolve(cloneZ, 2) - Z = cloneZ + // TODO false + Z, _ = matrixInverse(cloneZ, 2) } - var W = krigingMatrixMultiply(krigingMatrixMultiply(Z, Xt, 2, 2, n), Y, 2, n, 1) + var W = matrixMultiply(matrixMultiply(Z, Xt, 2, 2, n), Y, 2, n, 1) // Variogram parameters variogram.Nugget = W[0] @@ -216,19 +216,19 @@ func (variogram *Variogram) Train(model ModelType, sigma2 float64, alpha float64 } // Inverse penalized Gram matrix projected to target vector - var C = krigingMatrixAdd(K, krigingMatrixDiag(sigma2, n), n, n) + var C = matrixAdd(K, matrixDiag(sigma2, n), n, n) var cloneC = make([]float64, len(C)) copy(cloneC, C) - if krigingMatrixChol(C, n) { - krigingMatrixChol2inv(C, n) + if matrixChol(C, n) { + matrixChol2inv(C, n) } else { - krigingMatrixSolve(cloneC, n) - C = cloneC + // TODO false + C, _ = matrixInverse(cloneC, n) } // Copy unprojected inverted matrix as K 复制未投影的逆矩阵为K K = C - var M = krigingMatrixMultiply(C, variogram.t, n, n, 1) + var M = matrixMultiply(C, variogram.t, n, n, 1) variogram.K = K variogram.M = M @@ -249,7 +249,7 @@ func (variogram *Variogram) Predict(x, y float64) float64 { ) } - return krigingMatrixMultiply(k, variogram.M, 1, variogram.N, 1)[0] + return matrixMultiply(k, variogram.M, 1, variogram.N, 1)[0] } func (variogram *Variogram) Variance(x, y float64) { diff --git a/ordinarykriging/ordinarykriging_test.go b/ordinarykriging/ordinarykriging_test.go new file mode 100644 index 0000000..4cbc258 --- /dev/null +++ b/ordinarykriging/ordinarykriging_test.go @@ -0,0 +1,86 @@ +package ordinarykriging_test + +import ( + "fmt" + "image/png" + "math/rand" + "os" + "path/filepath" + "testing" + "time" + + "github.com/liuvigongzuoshi/go-kriging/ordinarykriging" +) + +const pngDirPath = "tempdata" + +var ( + randomValues, randomLats, randomLons = generateData(100) +) + +func randFloats(min, max float64, n int) []float64 { + s := rand.NewSource(time.Now().Unix()) + r := rand.New(s) + res := make([]float64, n) + for i := range res { + res[i] = min + r.Float64()*(max-min) + } + return res +} + +func generateData(count int) (FloatList, FloatList, FloatList) { + var randomValues, randomLats, randomLons FloatList + randomValues = append(randomValues, randFloats(0, 100, count)...) + randomLats = append(randomLats, randFloats(117.95, 118.05, count)...) + randomLons = append(randomLons, randFloats(31.95, 32.05, count)...) + return randomValues, randomLats, randomLons +} + +func TestVariogram_Plot(t *testing.T) { + ordinaryKriging := ordinarykriging.NewOrdinary(randomValues, randomLats, randomLons) + ordinaryKriging.Train(ordinarykriging.Exponential, 0, 100) + + contourRectangle := ordinaryKriging.Contour(500, 500) + pngPath := fmt.Sprintf("%v/%v.png", pngDirPath, time.Now().Format("2006-01-02 15:04:05")) + img := ordinaryKriging.PlotPng(contourRectangle) + + err := os.MkdirAll(filepath.Dir(pngPath), os.ModePerm) + if err != nil { + return + } + file, err := os.Create(pngPath) + if err != nil { + return + } + defer file.Close() + png.Encode(file, img) +} + +func BenchmarkVariogram_Train_Exponential(b *testing.B) { + for n := 0; n < b.N; n++ { + ordinaryKriging := ordinarykriging.NewOrdinary(randomValues, randomLats, randomLons) + ordinaryKriging.Train(ordinarykriging.Exponential, 0, 100) + } +} + +func BenchmarkVariogram_Train_Spherical(b *testing.B) { + for n := 0; n < b.N; n++ { + ordinaryKriging := ordinarykriging.NewOrdinary(randomValues, randomLats, randomLons) + ordinaryKriging.Train(ordinarykriging.Spherical, 0, 100) + } +} + +func BenchmarkVariogram_Train_Gaussian(b *testing.B) { + for n := 0; n < b.N; n++ { + ordinaryKriging := ordinarykriging.NewOrdinary(randomValues, randomLats, randomLons) + ordinaryKriging.Train(ordinarykriging.Gaussian, 0, 100) + } +} + +func BenchmarkVariogram_Contour(b *testing.B) { + ordinaryKriging := ordinarykriging.NewOrdinary(randomValues, randomLats, randomLons) + ordinaryKriging.Train(ordinarykriging.Exponential, 0, 100) + for n := 0; n < b.N; n++ { + ordinaryKriging.Contour(600, 600) + } +} diff --git a/ordinary/parallel.go b/ordinarykriging/parallel.go similarity index 75% rename from ordinary/parallel.go rename to ordinarykriging/parallel.go index 0b7b603..d20257f 100644 --- a/ordinary/parallel.go +++ b/ordinarykriging/parallel.go @@ -1,15 +1,15 @@ -package ordinary +package ordinarykriging import ( "context" "sync" ) -// GroupFunc 调用函数 -type GroupFunc func() error +// groupFunc 调用函数 +type groupFunc func() error -// NewParallel 创建 -func NewParallel(ctx context.Context, handles ...GroupFunc) error { +// newParallel 创建 +func newParallel(ctx context.Context, handles ...groupFunc) error { errChan := make(chan error) doneChan := make(chan *struct{}) @@ -50,8 +50,8 @@ func NewParallel(ctx context.Context, handles ...GroupFunc) error { } } -// Merge 扇入函数(组件),把多个 channel 中的数据发送到一个 channel 中 -func Merge(ins ...<-chan string) <-chan string { +// merge 扇入函数(组件),把多个 channel 中的数据发送到一个 channel 中 +func merge(ins ...<-chan string) <-chan string { var wg sync.WaitGroup out := make(chan string) diff --git a/ordinary/type.go b/ordinarykriging/type.go similarity index 97% rename from ordinary/type.go rename to ordinarykriging/type.go index 3a602e0..75e1859 100644 --- a/ordinary/type.go +++ b/ordinarykriging/type.go @@ -1,4 +1,4 @@ -package ordinary +package ordinarykriging import "image/color" @@ -55,7 +55,7 @@ func (t DistanceList) Swap(i, j int) { } type GridMatrices struct { - Data [][]float64 `json:"data"` + Data [][]float64 `json:"tempdata"` Width float64 `json:"width"` Xlim [2]float64 `json:"xLim"` Ylim [2]float64 `json:"yLim"` diff --git a/testdata/fonts/source-han-sans-sc/light.ttf b/testdata/fonts/source-han-sans-sc/light.ttf new file mode 100644 index 0000000..0c4b78c Binary files /dev/null and b/testdata/fonts/source-han-sans-sc/light.ttf differ diff --git a/testdata/fonts/source-han-sans-sc/medium.ttf b/testdata/fonts/source-han-sans-sc/medium.ttf new file mode 100644 index 0000000..ca36cb6 Binary files /dev/null and b/testdata/fonts/source-han-sans-sc/medium.ttf differ diff --git a/testdata/fonts/source-han-sans-sc/regular.ttf b/testdata/fonts/source-han-sans-sc/regular.ttf new file mode 100644 index 0000000..4f381c9 Binary files /dev/null and b/testdata/fonts/source-han-sans-sc/regular.ttf differ