コード例 #1
0
ファイル: stat.go プロジェクト: tiborv/hilbert-geohash
func RunMaxDistancepLng(n, p int) {
	fmt.Printf("\nRunning %v iterations, using %v MAX DISTANCE LNG points...", n, p)
	resultsHilb := make([]float64, n)
	resultsZ := make([]float64, n)
	levenshteinDiff := make([]float64, n)
	for i := 0; i < n; i++ { //Repeat n times
		h1 := make([]hash.Hash, p/2)
		h2 := make([]hash.Hash, p/2)

		rand.Seed(time.Now().UTC().UnixNano())

		for i := 0; i < p/2; i++ { // Create p/2 amount of points on one side
			randLat := rand.Float64() * point.MAX_LATITUDE
			randLng := 1.0 * point.MAX_LONGITUDE
			p := point.NewPoint(randLat, randLng, 0, 0)
			hash, _ := hash.NewHashPoint(p)
			h1[i] = hash
		}
		for i := 0; i < p/2; i++ { // Create p/2 amount of points on other side
			randLat := rand.Float64() * point.MAX_LATITUDE
			randLng := -1.0 * point.MAX_LONGITUDE
			p := point.NewPoint(randLat, randLng, 0, 0)
			hash, _ := hash.NewHashPoint(p)
			h2[i] = hash
		}

		resultsHilb[i], resultsZ[i] = compareHashes(h1, h2, false)
		levenshteinDiff[i] = compareLevenshtein(h1, h2, false)
	}
	PrintResults(resultsHilb, resultsZ, levenshteinDiff)

}
コード例 #2
0
ファイル: handlers.go プロジェクト: tiborv/hilbert-geohash
func api(api *gin.RouterGroup) {
	api.POST("/point", func(c *gin.Context) {
		p := point.Point{}
		err := c.Bind(&p)
		hash, err := hash.NewHashPoint(p)
		if err != nil || !p.IsValid() {
			c.JSON(http.StatusBadRequest, "Invalid point")
		} else {
			c.JSON(http.StatusOK, gin.H{
				"point":  p,
				"hash":   reverseString(hash.String),
				"zorder": reverseString(hash.GetZorder().HashString(32)),
			})
		}
	})

	api.POST("/hash", func(c *gin.Context) {
		hash := &hash.Hash{}
		err := c.Bind(&hash)
		hash.String = reverseString(hash.String)
		if err != nil || hash.InitFromString() != nil {
			c.JSON(http.StatusBadRequest, "Invalid hash")
		} else {
			c.JSON(http.StatusOK, gin.H{
				"hash":   reverseString(hash.String),
				"point":  hash.GenPoint(),
				"zorder": reverseString(hash.GetZorder().HashString(32)),
			})
		}
	})
}
コード例 #3
0
ファイル: stat.go プロジェクト: tiborv/hilbert-geohash
func RunRandomPoints(n, p int) {
	fmt.Printf("\nRunning %v iterations, using %v RANDOM points...", n, p)
	resultsHilb := make([]float64, n)
	resultsZ := make([]float64, n)
	levenshteinDiff := make([]float64, n)
	for i := 0; i < n; i++ { //Repeat n times
		hashes := make([]hash.Hash, p)
		rand.Seed(time.Now().UTC().UnixNano())

		for i := 0; i < p; i++ { // Use p amount of points
			randLat := rand.Float64() * point.MAX_LATITUDE
			randLng := rand.Float64() * point.MAX_LONGITUDE
			p := point.NewPoint(randLat, randLng, 0, 0)
			hash, _ := hash.NewHashPoint(p)
			hashes[i] = hash
		}

		resultsHilb[i], resultsZ[i] = compareHashes(hashes, hashes, true)
		levenshteinDiff[i] = compareLevenshtein(hashes, hashes, true)

	}
	PrintResults(resultsHilb, resultsZ, levenshteinDiff)
}