google0.01度矫正数据读取算法!
参考了网上的例子,终于把google0.01度矫正数据保存到数据库中,nnd我运行了两天,把9813676条记录保存了。
View Code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private static int RECORDCOUNT = 9813676; //记录的总个数;
private BinaryReader brShapeIndex; //读取记录;
private FileStream fs;
private string filename;
SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=GISMAP;Persist Security Info=True;User ID=sa;Password=123456");
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
brShapeIndex.BaseStream.Seek(0, 0);
label1.Text = (brShapeIndex.ReadInt16() / 100.0).ToString();
label2.Text = (brShapeIndex.ReadInt16() / 100.0).ToString();
label3.Text = brShapeIndex.ReadInt16().ToString();
label4.Text = brShapeIndex.ReadInt16().ToString();
double x1 = double.Parse(label1.Text)/100;
double y1 = double.Parse(label2.Text)/100;
double x2 = lngToPixel(x1, 18) + double.Parse(label3.Text);
double y2 = latToPixel(y1, 18) + double.Parse(label4.Text);
x2 = pixelToLng(x2, 18)-x1;
y2 = pixelToLat(y2, 18)-y1;
label5.Text = x2.ToString();
label6.Text = y2.ToString();
}
private void openfile()
{
filename = "C:\\Users\\caoxiancc\\Desktop\\offset.dat";
fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
brShapeIndex = new BinaryReader(fs, Encoding.Unicode);
}
/// <summary>
/// 经度到像素x转化;
/// </summary>
/// <param name="lng">经度</param>
/// <param name="zoom">放大倍数</param>
/// <returns>像素x</returns>
public static double lngToPixel(double lng, int zoom)
{
return (lng + 180) * (256L << zoom) / 360;
}
/// <summary>
/// 像素到纬度转化;
/// </summary>
/// <param name="pixelX">像素x</param>
/// <param name="zoom">放大倍数</param>
/// <returns>经度x</returns>
public static double pixelToLng(double pixelX, int zoom)
{
return pixelX * 360 / (256L << zoom)-180;
}
/// <summary>
/// 纬度到像素y转化;
/// </summary>
/// <param name="lat">纬度值</param>
/// <param name="zoom">放大倍数</param>
/// <returns>像素y</returns>
public static double latToPixel(double lat, int zoom)
{
double siny = Math.Sin(lat * Math.PI / 180);
double y = Math.Log((1 + siny) / (1-siny));
return (128 << zoom) * (1-y / (2 * Math.PI));
}
/// <summary>
/// 像素y到纬度转化;
/// </summary>
/// <param name="pixelY">像素y</param>
/// <param name="zoom">放大倍数</param>
/// <returns>纬度y</returns>
public static double pixelToLat(double pixelY, int zoom)
{
double y = 2 * Math.PI * (1-pixelY / (128 << zoom));
double z = Math.Pow(Math.E, y);
double siny = (z-1) / (z + 1);
return Math.Asin(siny) * 180 / Math.PI;
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Start();
}
private static int sum =0;
private void timer1_Tick(object sender, EventArgs e)
{
long z=sum*8;
brShapeIndex.BaseStream.Seek(z, 0);
label1.Text = (brShapeIndex.ReadInt16()/100.0).ToString();
label2.Text = (brShapeIndex.ReadInt16()/100.0).ToString();
label3.Text = brShapeIndex.ReadInt16().ToString();
label4.Text = brShapeIndex.ReadInt16().ToString();
double x1 = double.Parse(label1.Text) / 100;
double y1 = double.Parse(label2.Text) / 100;
double x2 = lngToPixel(x1, 18) + double.Parse(label3.Text);
double y2 = latToPixel(y1, 18) + double.Parse(label4.Text);
x2 = pixelToLng(x2, 18) - x1;
y2 = pixelToLat(y2, 18) - y1;
label5.Text = x2.ToString();
label6.Text = y2.ToString();
string str1 = label1.Text;
string str2 = label2.Text;
if ((str1.Length-str1.IndexOf('.')) < 3)
{
str1 = str1 + "0";
}
label1.Text = str1;
if ((str2.Length-str2.IndexOf('.')) < 3)
{
str2 = str2 + "0";
}
label2.Text = str2;
SqlCommand comm = new SqlCommand("UP_GOOGLEMAP_ADD", conn);
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.Add("@LNG", label1.Text);
comm.Parameters.Add("@LAT", label2.Text);
comm.Parameters.Add("@OFFSET_X",int.Parse(label3.Text));
comm.Parameters.Add("@OFFSET_Y", int.Parse(label4.Text));
comm.Parameters.Add("@OFFSET_LNG",float.Parse(label5.Text));
comm.Parameters.Add("@OFFSET_LAT",float.Parse(label6.Text));
try
{
conn.Open();
comm.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show("操作失败!" + ex.ToString());
timer1.Stop();
return;
}
conn.Close();
sum++;
if (sum > RECORDCOUNT)
{
timer1.Stop();
}
}
private void Form1_Load(object sender, EventArgs e)
{
openfile();
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private static int RECORDCOUNT = 9813676; //记录的总个数;
private BinaryReader brShapeIndex; //读取记录;
private FileStream fs;
private string filename;
SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=GISMAP;Persist Security Info=True;User ID=sa;Password=123456");
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
brShapeIndex.BaseStream.Seek(0, 0);
label1.Text = (brShapeIndex.ReadInt16() / 100.0).ToString();
label2.Text = (brShapeIndex.ReadInt16() / 100.0).ToString();
label3.Text = brShapeIndex.ReadInt16().ToString();
label4.Text = brShapeIndex.ReadInt16().ToString();
double x1 = double.Parse(label1.Text)/100;
double y1 = double.Parse(label2.Text)/100;
double x2 = lngToPixel(x1, 18) + double.Parse(label3.Text);
double y2 = latToPixel(y1, 18) + double.Parse(label4.Text);
x2 = pixelToLng(x2, 18)-x1;
y2 = pixelToLat(y2, 18)-y1;
label5.Text = x2.ToString();
label6.Text = y2.ToString();
}
private void openfile()
{
filename = "C:\\Users\\caoxiancc\\Desktop\\offset.dat";
fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
brShapeIndex = new BinaryReader(fs, Encoding.Unicode);
}
/// <summary>
/// 经度到像素x转化;
/// </summary>
/// <param name="lng">经度</param>
/// <param name="zoom">放大倍数</param>
/// <returns>像素x</returns>
public static double lngToPixel(double lng, int zoom)
{
return (lng + 180) * (256L << zoom) / 360;
}
/// <summary>
/// 像素到纬度转化;
/// </summary>
/// <param name="pixelX">像素x</param>
/// <param name="zoom">放大倍数</param>
/// <returns>经度x</returns>
public static double pixelToLng(double pixelX, int zoom)
{
return pixelX * 360 / (256L << zoom)-180;
}
/// <summary>
/// 纬度到像素y转化;
/// </summary>
/// <param name="lat">纬度值</param>
/// <param name="zoom">放大倍数</param>
/// <returns>像素y</returns>
public static double latToPixel(double lat, int zoom)
{
double siny = Math.Sin(lat * Math.PI / 180);
double y = Math.Log((1 + siny) / (1-siny));
return (128 << zoom) * (1-y / (2 * Math.PI));
}
/// <summary>
/// 像素y到纬度转化;
/// </summary>
/// <param name="pixelY">像素y</param>
/// <param name="zoom">放大倍数</param>
/// <returns>纬度y</returns>
public static double pixelToLat(double pixelY, int zoom)
{
double y = 2 * Math.PI * (1-pixelY / (128 << zoom));
double z = Math.Pow(Math.E, y);
double siny = (z-1) / (z + 1);
return Math.Asin(siny) * 180 / Math.PI;
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Start();
}
private static int sum =0;
private void timer1_Tick(object sender, EventArgs e)
{
long z=sum*8;
brShapeIndex.BaseStream.Seek(z, 0);
label1.Text = (brShapeIndex.ReadInt16()/100.0).ToString();
label2.Text = (brShapeIndex.ReadInt16()/100.0).ToString();
label3.Text = brShapeIndex.ReadInt16().ToString();
label4.Text = brShapeIndex.ReadInt16().ToString();
double x1 = double.Parse(label1.Text) / 100;
double y1 = double.Parse(label2.Text) / 100;
double x2 = lngToPixel(x1, 18) + double.Parse(label3.Text);
double y2 = latToPixel(y1, 18) + double.Parse(label4.Text);
x2 = pixelToLng(x2, 18) - x1;
y2 = pixelToLat(y2, 18) - y1;
label5.Text = x2.ToString();
label6.Text = y2.ToString();
string str1 = label1.Text;
string str2 = label2.Text;
if ((str1.Length-str1.IndexOf('.')) < 3)
{
str1 = str1 + "0";
}
label1.Text = str1;
if ((str2.Length-str2.IndexOf('.')) < 3)
{
str2 = str2 + "0";
}
label2.Text = str2;
SqlCommand comm = new SqlCommand("UP_GOOGLEMAP_ADD", conn);
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.Add("@LNG", label1.Text);
comm.Parameters.Add("@LAT", label2.Text);
comm.Parameters.Add("@OFFSET_X",int.Parse(label3.Text));
comm.Parameters.Add("@OFFSET_Y", int.Parse(label4.Text));
comm.Parameters.Add("@OFFSET_LNG",float.Parse(label5.Text));
comm.Parameters.Add("@OFFSET_LAT",float.Parse(label6.Text));
try
{
conn.Open();
comm.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show("操作失败!" + ex.ToString());
timer1.Stop();
return;
}
conn.Close();
sum++;
if (sum > RECORDCOUNT)
{
timer1.Stop();
}
}
private void Form1_Load(object sender, EventArgs e)
{
openfile();
}
}
}
作者:冯际成
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.如有问题,请与作者联系:604756218@qq.com

浙公网安备 33010602011771号