попытался загружать тайлы из open street map (wiki.openstreetmap.org/wiki/Slippy_map_tilenames),сделал небольшой тестовый пример
public partial class Form1 : Form
{
string[] mas;
public Form1()
{
InitializeComponent();
}
//загружаем тайл в папку и отображаем на картинке
private void button1_Click(object sender, EventArgs e)
{
WebClient WC = new WebClient();
string DownloadFile = Path.GetFileName(textBox1.Text);
mas = textBox1.Text.Split('/');
try
{
WC.DownloadFile(textBox1.Text, Application.StartupPath + "\\" + DownloadFile);
pictureBox1.ImageLocation = Application.StartupPath + "\\" + DownloadFile;
}
catch { textBox1.Text = "cant do it"; }
}
//это стандартная функция с сайта по ссылке выше
public PointF WorldToTilePos(double lon, double lat, int zoom)
{
PointF p = new Point();
p.X = (float)((lon + 180.0) / 360.0 * (1 << zoom));
p.Y = (float)((1.0 - Math.Log(Math.Tan(lat * Math.PI / 180.0) +
1.0 / Math.Cos(lat * Math.PI / 180.0)) / Math.PI) / 2.0 * (1 << zoom));
return p;
}
//это тоже стандартная функция с сайта по ссылке выше
public PointF TileToWorldPos(double tile_x, double tile_y, int zoom)
{
PointF p = new Point();
double n = Math.PI - ((2.0 * Math.PI * tile_y) / Math.Pow(2.0, zoom));
p.X = (float)((tile_x / Math.Pow(2.0, zoom) * 360.0) - 180.0);
p.Y = (float)(180.0 / Math.PI * Math.Atan(Math.Sinh(n)));
return p;
}
//формируем строку адреса тайла
private void button2_Click(object sender, EventArgs e)
{
PointF MyPos = WorldToTilePos(double.Parse(lon.Text), double.Parse(lat.Text), int.Parse(zoom.Text));
int x = (int)MyPos.X;
int y = (int)MyPos.Y;
textBox1.Text = "http://tile.openstreetmap.org/" + zoom.Text + "/" + x + "/" + y + ".png";
}
}
все вроде просто,написал чтобы проще было искать
public partial class Form1 : Form
{
string[] mas;
public Form1()
{
InitializeComponent();
}
//загружаем тайл в папку и отображаем на картинке
private void button1_Click(object sender, EventArgs e)
{
WebClient WC = new WebClient();
string DownloadFile = Path.GetFileName(textBox1.Text);
mas = textBox1.Text.Split('/');
try
{
WC.DownloadFile(textBox1.Text, Application.StartupPath + "\\" + DownloadFile);
pictureBox1.ImageLocation = Application.StartupPath + "\\" + DownloadFile;
}
catch { textBox1.Text = "cant do it"; }
}
//это стандартная функция с сайта по ссылке выше
public PointF WorldToTilePos(double lon, double lat, int zoom)
{
PointF p = new Point();
p.X = (float)((lon + 180.0) / 360.0 * (1 << zoom));
p.Y = (float)((1.0 - Math.Log(Math.Tan(lat * Math.PI / 180.0) +
1.0 / Math.Cos(lat * Math.PI / 180.0)) / Math.PI) / 2.0 * (1 << zoom));
return p;
}
//это тоже стандартная функция с сайта по ссылке выше
public PointF TileToWorldPos(double tile_x, double tile_y, int zoom)
{
PointF p = new Point();
double n = Math.PI - ((2.0 * Math.PI * tile_y) / Math.Pow(2.0, zoom));
p.X = (float)((tile_x / Math.Pow(2.0, zoom) * 360.0) - 180.0);
p.Y = (float)(180.0 / Math.PI * Math.Atan(Math.Sinh(n)));
return p;
}
//формируем строку адреса тайла
private void button2_Click(object sender, EventArgs e)
{
PointF MyPos = WorldToTilePos(double.Parse(lon.Text), double.Parse(lat.Text), int.Parse(zoom.Text));
int x = (int)MyPos.X;
int y = (int)MyPos.Y;
textBox1.Text = "http://tile.openstreetmap.org/" + zoom.Text + "/" + x + "/" + y + ".png";
}
}
все вроде просто,написал чтобы проще было искать
Этот комментарий был удален автором.
ОтветитьУдалить
ОтветитьУдалитьAily20 сентября 2016 г., 2:22
Что-то мне этот TileToWorldPos этот возвращает черте что :)
Канвертировал с питона, все заработало
public static void TileToWorldPos(double tile_x, double tile_y, int zoom, out double x, out double y)
{
var n = System.Math.Pow(2, zoom);
var lon_deg = tile_x / n * 360.0 - 180.0;
var lat_rad = System.Math.Atan(System.Math.Sinh(System.Math.PI * (1 - 2 * tile_y / n)));
var lat_deg = lat_rad * 180.0 / System.Math.PI;
x = lat_deg;
y = lon_deg;
}