ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
python-geohex
 aita (twitter id: @ryoaita)
? aita (twitter id: @ryoaita)
python-geohex
? GeoHex v2 Python
? aita
? https://bitbucket.org/__aita__/python-
  geohex

? PyPI                      ......
Geohex
GeoHex
? twitter id: @sa2da
? JavaScript
? aita                 v2   JavaScript

?
?
python-geohex
python-geohex
GeoHex

?       Hex

?
? Hex
? Hex
http://geohex.net/
v2

?                 v1

?                                 Level:0         1m
    60cm          Level:24   25

?                                           1:4



?      3   1311
GeoHex
?                   v1, v2, v3

?
?   python-geohex      v2

?   v1

?   v3       JavaScript

?                                ( v2   85

?   v1, v2   v3
http://geogames.net/
JS



?
?

?
? namespace
(function (win) { //

// namspace GeoHex;
if (!win.GeoHex) win.GeoHex = function(){};
// version: 2.03
GeoHex.version = "2.03";

// *** Share with all instances ***
var h_key =
"abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWX
YZ";
var h_base = 20037508.34;
var h_deg = Math.PI*(30/180);
var h_k = Math.tan(h_deg);

// private static
var _zoneCache = {};
var h_l = xy2loc(h_x - 2 * h_size, h_y).lon;
   var h_r = xy2loc(h_x + 2 * h_size, h_y).lon;
   var h_cl = xy2loc(h_x - 1 * h_size, h_y).lon;
   var h_cr = xy2loc(h_x + 1 * h_size, h_y).lon;
   return [
      {lat: h_lat, lon: h_l},
      {lat: h_top, lon: h_cl},
      {lat: h_top, lon: h_cr},
      {lat: h_lat, lon: h_r},
      {lat: h_btm, lon: h_cr},
      {lat: h_btm, lon: h_cl}
   ];
};
// var h_x_100000 = Math.?oor(h_x_abs/777600000);
  var h_x_10000 = Math.?oor((h_x_abs%777600000)/12960000);
  var h_x_1000 = Math.?oor((h_x_abs%12960000)/216000);
  var h_x_100 = Math.?oor((h_x_abs%216000)/3600);
  var h_x_10 = Math.?oor((h_x_abs%3600)/60);
  var h_x_1 = Math.?oor((h_x_abs%3600)%60);
// var h_y_100000 = Math.?oor(h_y_abs/777600000);
  var h_y_10000 = Math.?oor((h_y_abs%777600000)/12960000);
  var h_y_1000 = Math.?oor((h_y_abs%12960000)/216000);
  var h_y_100 = Math.?oor((h_y_abs%216000)/3600);
  var h_y_10 = Math.?oor((h_y_abs%3600)/60);
  var h_y_1 = Math.?oor((h_y_abs%3600)%60);

      if(h_max >=60/2) h_code += h_key.charAt(h_x_10) + h_key.charAt(h_y_10);
     h_code += h_key.charAt(h_x_1) + h_key.charAt(h_y_1);

     if (!!_zoneCache[h_code]) return _zoneCache[h_code];
     return (_zoneCache[h_code] = new Zone(z_loc_y, z_loc_x, h_x, h_y, h_code));
if (h_max >= 12960000 / 2) {
   h_x = h_key.indexOf(code.charAt(1)) * 12960000 +
       h_key.indexOf(code.charAt(3)) * 216000 +
       h_key.indexOf(code.charAt(5)) * 3600 +
       h_key.indexOf(code.charAt(7)) * 60 +
       h_key.indexOf(code.charAt(9));
   h_y = h_key.indexOf(code.charAt(2)) * 12960000 +
       h_key.indexOf(code.charAt(4)) * 216000 +
       h_key.indexOf(code.charAt(6)) * 3600 +
       h_key.indexOf(code.charAt(8)) * 60 +
       h_key.indexOf(code.charAt(10));
} else if (h_max >= 216000 / 2) {
   h_x = h_key.indexOf(code.charAt(1)) * 216000 +
       h_key.indexOf(code.charAt(3)) * 3600 +
       h_key.indexOf(code.charAt(5)) * 60 +
       h_key.indexOf(code.charAt(7));
   h_y = h_key.indexOf(code.charAt(2)) * 216000 +
       h_key.indexOf(code.charAt(4)) * 3600 +
       h_key.indexOf(code.charAt(6)) * 60 +
       h_key.indexOf(code.charAt(8));
JSer   desune
aita
#?agboy
><
python-geohex
python-geohex
? Python
? Apache License
? JavaScript
?            GeoHex
?

?   geodjango



?
?
python-geohex


? aita   GeoHex



?
? __eq__
?
#?agboy
><
de


class RandomZoneTest(unittest.TestCase):

   def testLocationToCode(self):
       for i in range(10000):
           lat = 85 * random.random()
           lon = 85 * random.random()
           level = random.randint(0,24)
           zone = geohex2.get_zone_by_location(lat, lon, level)
           code_zone = geohex2.get_zone_by_code(zone.code)
           self.assertEqual(zone, code_zone)


   def testLocationToXY(self):
       for i in range(10000):
           lat = 90 * random.random()
           lon = 90 * random.random()
           level = random.randint(0,24)
           zone = geohex2.get_zone_by_location(lat, lon, level)
           xy_zone = geohex2.get_zone_by_xy(zone.x, zone.y, zone.level)
           self.assertEqual(zone, xy_zone)
python-geohex

More Related Content

python-geohex

  • 2. ? aita (twitter id: @ryoaita)
  • 3. python-geohex ? GeoHex v2 Python ? aita ? https://bitbucket.org/__aita__/python- geohex ? PyPI ......
  • 5. GeoHex ? twitter id: @sa2da ? JavaScript ? aita v2 JavaScript ? ?
  • 8. GeoHex ? Hex ? ? Hex ? Hex
  • 10. v2 ? v1 ? Level:0 1m 60cm Level:24 25 ? 1:4 ? 3 1311
  • 11. GeoHex ? v1, v2, v3 ? ? python-geohex v2 ? v1 ? v3 JavaScript ? ( v2 85 ? v1, v2 v3
  • 14. (function (win) { // // namspace GeoHex; if (!win.GeoHex) win.GeoHex = function(){}; // version: 2.03 GeoHex.version = "2.03"; // *** Share with all instances *** var h_key = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWX YZ"; var h_base = 20037508.34; var h_deg = Math.PI*(30/180); var h_k = Math.tan(h_deg); // private static var _zoneCache = {};
  • 15. var h_l = xy2loc(h_x - 2 * h_size, h_y).lon; var h_r = xy2loc(h_x + 2 * h_size, h_y).lon; var h_cl = xy2loc(h_x - 1 * h_size, h_y).lon; var h_cr = xy2loc(h_x + 1 * h_size, h_y).lon; return [ {lat: h_lat, lon: h_l}, {lat: h_top, lon: h_cl}, {lat: h_top, lon: h_cr}, {lat: h_lat, lon: h_r}, {lat: h_btm, lon: h_cr}, {lat: h_btm, lon: h_cl} ]; };
  • 16. // var h_x_100000 = Math.?oor(h_x_abs/777600000); var h_x_10000 = Math.?oor((h_x_abs%777600000)/12960000); var h_x_1000 = Math.?oor((h_x_abs%12960000)/216000); var h_x_100 = Math.?oor((h_x_abs%216000)/3600); var h_x_10 = Math.?oor((h_x_abs%3600)/60); var h_x_1 = Math.?oor((h_x_abs%3600)%60); // var h_y_100000 = Math.?oor(h_y_abs/777600000); var h_y_10000 = Math.?oor((h_y_abs%777600000)/12960000); var h_y_1000 = Math.?oor((h_y_abs%12960000)/216000); var h_y_100 = Math.?oor((h_y_abs%216000)/3600); var h_y_10 = Math.?oor((h_y_abs%3600)/60); var h_y_1 = Math.?oor((h_y_abs%3600)%60); if(h_max >=60/2) h_code += h_key.charAt(h_x_10) + h_key.charAt(h_y_10); h_code += h_key.charAt(h_x_1) + h_key.charAt(h_y_1); if (!!_zoneCache[h_code]) return _zoneCache[h_code]; return (_zoneCache[h_code] = new Zone(z_loc_y, z_loc_x, h_x, h_y, h_code));
  • 17. if (h_max >= 12960000 / 2) { h_x = h_key.indexOf(code.charAt(1)) * 12960000 + h_key.indexOf(code.charAt(3)) * 216000 + h_key.indexOf(code.charAt(5)) * 3600 + h_key.indexOf(code.charAt(7)) * 60 + h_key.indexOf(code.charAt(9)); h_y = h_key.indexOf(code.charAt(2)) * 12960000 + h_key.indexOf(code.charAt(4)) * 216000 + h_key.indexOf(code.charAt(6)) * 3600 + h_key.indexOf(code.charAt(8)) * 60 + h_key.indexOf(code.charAt(10)); } else if (h_max >= 216000 / 2) { h_x = h_key.indexOf(code.charAt(1)) * 216000 + h_key.indexOf(code.charAt(3)) * 3600 + h_key.indexOf(code.charAt(5)) * 60 + h_key.indexOf(code.charAt(7)); h_y = h_key.indexOf(code.charAt(2)) * 216000 + h_key.indexOf(code.charAt(4)) * 3600 + h_key.indexOf(code.charAt(6)) * 60 + h_key.indexOf(code.charAt(8));
  • 18. JSer desune
  • 19. aita
  • 21. ><
  • 23. python-geohex ? Python ? Apache License ? JavaScript ? GeoHex
  • 24. ? ? geodjango ? ?
  • 25. python-geohex ? aita GeoHex ? ? __eq__ ?
  • 27. ><
  • 28. de class RandomZoneTest(unittest.TestCase): def testLocationToCode(self): for i in range(10000): lat = 85 * random.random() lon = 85 * random.random() level = random.randint(0,24) zone = geohex2.get_zone_by_location(lat, lon, level) code_zone = geohex2.get_zone_by_code(zone.code) self.assertEqual(zone, code_zone) def testLocationToXY(self): for i in range(10000): lat = 90 * random.random() lon = 90 * random.random() level = random.randint(0,24) zone = geohex2.get_zone_by_location(lat, lon, level) xy_zone = geohex2.get_zone_by_xy(zone.x, zone.y, zone.level) self.assertEqual(zone, xy_zone)

Editor's Notes