PageRenderTime 60ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/servicios/google/google.php

https://gitlab.com/asosab/ws-geo
PHP | 250 lines | 150 code | 28 blank | 72 comment | 24 complexity | 8c833e53acf91f6388fb7b6c0bbcac46 MD5 | raw file
  1. <?php
  2. require_once $_SERVER["DOCUMENT_ROOT"] ."/controlador/color.php";
  3. require_once $_SERVER["DOCUMENT_ROOT"] . '/servicios/geo/geo.php';
  4. // require_once $_SERVER["DOCUMENT_ROOT"] . '/vendor/colors_of_image/colorsofimage.class.php';
  5. // if (!ini_get("auto_detect_line_endings")) ini_set("auto_detect_line_endings", '1');
  6. //https://maps.google.com/maps/api/geocode/json?latlng=8.3650243,-62.6529962
  7. //https://maps.googleapis.com/maps/api/elevation/json?locations=8.3650243,-62.6529962
  8. use League\ColorExtractor\Color;
  9. use League\ColorExtractor\ColorExtractor;
  10. use League\ColorExtractor\Palette;
  11. class google {
  12. /**
  13. * accesoDef
  14. * valores por defecto de acceso a cada método.
  15. * @param string $metodo el nombre del método a validar
  16. * @return int nivel de acceso
  17. */
  18. public static function accesoDef($metodo){
  19. switch ($metodo) {
  20. case "getBD": return 1; break;
  21. case "total": return 1; break;
  22. case "analyze": return 1; break;
  23. case "accesoDef": return 1; break;
  24. case "buscar": return 1; break;
  25. case "test": return 1; break;
  26. case "oauth2callback":return 1; break;
  27. default: return 1;
  28. }
  29. }
  30. /**
  31. * oauth2callback
  32. * aqui llegan los que hhan dado alguna autorización
  33. * @return
  34. */
  35. public static function oauth2callback(){
  36. }
  37. /**
  38. * hexToName
  39. * retorna el color más parecido dado un rgb
  40. * @param string $rgb el color a comparar
  41. * @return string nombre del color
  42. */
  43. public static function hexToName($hexToName=null){
  44. $colors = colors();
  45. if(empty($hexToName)) $hexToName = traerValorDe("hexToName");
  46. $rgb = $hexToName;
  47. $distances = array();
  48. $val = html2rgb($rgb);
  49. foreach ($colors as $name => $c) $distances[$name] = distancel2($c, $val);
  50. $mincolor = "";
  51. $minval = pow(2, 30);
  52. foreach ($distances as $k => $v) {
  53. if ($v < $minval) {
  54. $minval = $v;
  55. $mincolor = $k;
  56. }
  57. }
  58. $data = $mincolor;
  59. if(strpos("$_SERVER[REQUEST_URI]", __CLASS__."/".__FUNCTION__) !== false)return entregar($data); else return $data;
  60. }
  61. /**
  62. * cx
  63. * valores por defecto de acceso a cada método.
  64. * @param string $metodo el nombre del método a validar
  65. * @return int nivel de acceso
  66. */
  67. public static function cx($interes){
  68. switch ($interes) {
  69. case "tsj": return "017656191504085686521:v98vgo2fl8a"; break;
  70. case "social": return "017656191504085686521:rbyoljxxfsu"; break;
  71. default: return false;
  72. }
  73. }
  74. /**
  75. * apykey
  76. * valores por defecto de acceso a cada método.
  77. * @param string $metodo el nombre del método a validar
  78. * @return int nivel de acceso
  79. */
  80. public static function apikey(){
  81. $apikey = "";
  82. $llaves = $_SERVER["DOCUMENT_ROOT"]."/privado/google";
  83. $apikey = file($llaves, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)[0];
  84. return $apikey;
  85. }
  86. /**
  87. * buscar
  88. * valores por defecto de acceso a cada método.
  89. * @param string $metodo el nombre del método a validar
  90. * @return int nivel de acceso
  91. */
  92. public static function buscar($data){
  93. $llaves = $_SERVER["DOCUMENT_ROOT"]."/privado/google";
  94. $apikey = file($llaves, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)[0];
  95. $url = "https://www.googleapis.com/customsearch/v1?key=$apikey&". implode("&", $data);
  96. return $url;
  97. }
  98. /**
  99. * img
  100. * Información tomada de una imagen estática de google maps en base a una coordenada
  101. */
  102. public static function img($img=null,$nocache=null,$zoom=null){
  103. $data = array();
  104. $apikey = self::apikey();
  105. if(empty($img)) $img = traerValorDe("img");
  106. if(empty($nocache)) $nocache = traerValorDe("nocache");
  107. if(empty($zoom)) $zoom = traerValorDe("zoom"); if(empty($zoom)) $zoom = 19;
  108. $coord = geo::geohash($img);
  109. $maptype = "hybrid"; // "terrain"; // "roadmap"; // "satellite"; //
  110. $agua = "style=feature:water|element:all|color:0x021019";
  111. $etiquetas = "style=feature:all|element:labels|visibility:off";
  112. $formato = "jpeg";
  113. $url3 = "https://maps.googleapis.com/maps/api/staticmap?center={$coord['coord']}&zoom=$zoom&scale=2&size=300x322&maptype=$maptype&format=$formato&$etiquetas&$agua&key=$apikey";
  114. $imgid = $coord['geohash'] . "_$zoom";
  115. $img = $_SERVER["DOCUMENT_ROOT"]."/image/google/$imgid.$formato";
  116. if($nocache){file_put_contents($img, file_get_contents($url3));}
  117. else{if(!file_exists($img)) file_put_contents($img, file_get_contents($url3));};
  118. $data['coord'] = $coord['coord'];
  119. $data['zoom'] = $zoom;
  120. $data['url'] = "http://".$_SERVER['HTTP_HOST']."/image/google/$imgid.$formato";
  121. $image = new Imagick($img);
  122. $image->cropImage(600,600,0,0);
  123. // $image->equalizeImage();
  124. // $blackThreshold =0.2;
  125. // $whiteThreshold = 0.4;
  126. // $pixels = $image->getImageWidth() * $image->getImageHeight();
  127. // $image->linearStretchImage($blackThreshold * $pixels, $whiteThreshold * $pixels);
  128. $image->normalizeImage();
  129. // $image->sigmoidalcontrastimage(true, 5, 0.5 * Imagick::getQuantum());
  130. $image->writeImage($img);
  131. $palette = Palette::fromFilename($img);
  132. $top = $palette->getMostUsedColors(30);
  133. $arTmp = array();
  134. foreach($top as $color => $count) $arTmp[] = self::hexToName(Color::fromIntToHex($color));
  135. $arTmp = array_unique($arTmp);
  136. foreach($arTmp as $index => $color) $data['colores'][] = $color;
  137. if(in_array($data['colores'][0], array("blanco","negro","#020202"))){
  138. $data['buena'] = false;
  139. }else{
  140. $data['buena'] = true;
  141. }
  142. if(!$data['buena'] && $zoom>5) return self::img($coord['coord'],$nocache,$zoom-1);
  143. if(strpos("$_SERVER[REQUEST_URI]", __CLASS__."/".__FUNCTION__) !== false)return entregar($data); else return $data;
  144. }
  145. /**
  146. * elev
  147. * Retorna información sobre la altura de un punto geográfico.
  148. * @param string $elev una representacion de lat y lon ejm: "8.3650243,-62.6529962"
  149. * @return array con datos sobre esa coordenada
  150. */
  151. public static function elev($elev=null){
  152. $data = array();
  153. $apikey = self::apikey();
  154. if(empty($elev)) $elev = traerValorDe("elev");
  155. $coord = $elev;
  156. $url = "https://maps.googleapis.com/maps/api/elevation/json?locations=$coord&key=$apikey";
  157. $elev = json_decode(file_get_contents($url), true);
  158. $data['alt'] = $elev['results'][0]['elevation'];
  159. $data['res'] = $elev['results'][0]['resolution'];
  160. if(strpos("$_SERVER[REQUEST_URI]", __CLASS__."/".__FUNCTION__) !== false)return entregar($data); else return $data;
  161. }
  162. /**
  163. * coord
  164. * Retorna información sobre una coordenada.
  165. * @param string $coord una representacion de lat y lon ejm: "8.3650243,-62.6529962"
  166. * @return array con datos sobre esa coordenada
  167. */
  168. public static function coord($coord=null){
  169. $data = array();
  170. $apikey = self::apikey();
  171. if(empty($coord)) $coord = traerValorDe("coord");
  172. $url1 = "https://maps.google.com/maps/api/geocode/json?latlng=$coord&key=$apikey";
  173. $geo = json_decode(file_get_contents($url1), true);
  174. $data['nombre'] = $geo['results'][0]['formatted_address'];
  175. foreach ($geo['results'][0]['address_components'] as $key => $value) {
  176. $data['geo'][] = array(
  177. 'nombre' => $value['short_name'],
  178. 'tipo' => $value['types']
  179. );
  180. }
  181. $elev = self::elev($coord);
  182. $data['alt'] = $elev['alt'];
  183. $data['res'] = $elev['res'];
  184. $data['img'] = self::img($coord);
  185. if(strpos("$_SERVER[REQUEST_URI]", __CLASS__."/".__FUNCTION__) !== false)return entregar($data); else return $data;
  186. }
  187. /**
  188. * persona
  189. * valores por defecto de acceso a cada método.
  190. * @param string $persona El arreglo de datos que representa a una persona
  191. * @return array con la lista de url's que apuntan a esa persona
  192. */
  193. public static function persona($persona=null,$cx="social"){
  194. $data = array();
  195. $pagina = 1;
  196. if(empty($persona)) $persona = traerValorDe("persona");
  197. $persona = str_replace(" ", "+", $persona);
  198. $data[] = "start=$pagina&num=10";
  199. $data[] = "fields=items(title,link,snippet,pagemap(person))";
  200. $data[] = "q=$persona";
  201. // $data[] = "exactTerms=$persona";
  202. $data[] = "lr=lang_es";
  203. $data[] = "cx=" . google::cx($cx);
  204. $url = google::buscar($data);
  205. $data = json_decode(file_get_contents($url), true);
  206. return $data;
  207. }
  208. /**
  209. * test
  210. */
  211. public static function test($persona=null){
  212. $data = array();
  213. $pagina = 1;
  214. if(empty($persona)) $persona = traerValorDe("persona");
  215. $persona = str_replace(" ", "+", $persona);
  216. $data[] = "start=$pagina";
  217. $data[] = "q=$persona";
  218. $data[] = "cx=" . google::cx('social');
  219. google::buscar($data);
  220. }
  221. // fin clase google
  222. }