void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println("Hello, ESP32!");
 // https://tile.openstreetmap.org/18/232798/103246.png
 int zoom = 18;
 double long_ = tilex2long(232798,zoom);
 Serial.println(long_,5);
 double lat_ = tiley2lat(103246,zoom);
 Serial.println(lat_,5);
 int yy = lat2tiley(lat_,zoom);
 int xx = long2tilex(long_,zoom);
 Serial.println(xx);
 Serial.println(yy);
 
}
void loop() {
}
int long2tilex(double lon, int z){
  return (int)(floor((lon + 180.0) / 360.0 * (1 << z)));
}
int lat2tiley(double lat, int z) {
  double latrad = lat * M_PI / 180.0;
  return (int)(floor((1.0 - asinh(tan(latrad)) / M_PI) / 2.0 * (1 << z)));
}
double tilex2long(int x, int z) {
  return x / (double)(1 << z) * 360.0 - 180;
}
double tiley2lat(int y, int z) {
  double n = M_PI - 2.0 * M_PI * y / (double)(1 << z);
  return 180.0 / M_PI * atan(0.5 * (exp(n) - exp(-n)));
}