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();
}

}
}
posted @ 2011-07-02 02:16  冯际成  阅读(314)  评论(3)    收藏  举报

返回顶部