四參數(shù)反算以及百度鷹眼綁定

近來(lái)有軌跡平滑的需求七兜,發(fā)現(xiàn)雖然軌跡平滑了丸凭,但是隨之而來(lái)的是平滑后的軌跡會(huì)壓蓋房子,這就讓人無(wú)法忍受了腕铸。遂放棄惜犀,發(fā)現(xiàn)我的數(shù)學(xué)功底不是一般的差,對(duì)于底層算法的實(shí)現(xiàn)有待提高恬惯,加油向拆。還有就是試著把GPS轉(zhuǎn)為平面坐標(biāo)的點(diǎn)轉(zhuǎn)為WGS84顯示到百度里面,使用其鷹眼功能實(shí)現(xiàn)去噪酪耳,綁路等功能。先這樣吧,到時(shí)候需要的時(shí)候再研究碗暗,那時(shí)候可能就會(huì)出現(xiàn)非吳下阿蒙的我了颈将。

using System;
using System.Collections.Generic;
using System.Linq;
using GeoAPI.CoordinateSystems;
using GeoAPI.CoordinateSystems.Transformations;
using LeadMap.Framework.DBProvider;
using LmDataHandler;
using LmDataHandler.Utility;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ProjNet.Converters.WellKnownText;
using ProjNet.CoordinateSystems;
using ProjNet.CoordinateSystems.Transformations;
using RestSharp;

namespace UnitTest
{
    [TestClass]
    public class UnitTest2
    {
        [TestMethod]
        public void TestMethod1()
        {
            //var wgs84Point = ConvertBj542Wgs84(91670.304, 73375.385);           
            //var dfp= transfer(bj54p[1], bj54p[0], 1, d, -3266736.9496, -439821.9753);

            DataBase.sysType = SysType.BS;
            var points = GetPatrolPoints("36798");
            points.ForEach(p =>
            {
                var cp = P2WGS84(p.Lat, p.Lon);
                p.Lat = cp[1];
                p.Lon = cp[0];
            });
            //循環(huán)通過(guò)restsharp取得坐標(biāo)點(diǎn)
            int pagesize = 90;
            double pagecount = Math.Ceiling(points.Count / pagesize.Getdouble());
            for (int i = 0; i < pagecount; i++)
            {
                var pp = points.Skip(i * pagesize).Take(pagesize).ToList();
                var client = new RestClient("http://yingyan.baidu.com/api/v3/track/addpoints");
                var request = new RestRequest(Method.POST);
                request.AddParameter("ak", "AiyoOjdlW2ahgt0uoG2olod2t1dPhx99");
                request.AddParameter("service_id", "155954");
                JsonArray jArray = new JsonArray();
                for (int j = 0; j < pp.Count(); j++)
                {
                    JsonObject jo = new JsonObject()
                    {
                        {"entity_name", "leadmap02"},
                        {"latitude", pp[j].Lat},
                        {"longitude", pp[j].Lon},
                        {"loc_time", pp[j].Time.DateTimeToUnixTimestamps()},
                        {"coord_type_input", "wgs84"},
                        {"speed", pp[j].Vel},
                    };
                    jArray.Add(jo);
                }
                request.AddParameter("point_list", jArray.ToString());
                IRestResponse response = client.Execute(request);
                var content = response.Content;
            }
        }

        private List<PatrolPoint> GetPatrolPoints(string id)
        {
            var strsql = string.Format(@" select * from TAB_LMPATROLGPSPOINT{1} where PatrolId='{0}' order by Time,No ",
                id, "201710");
            var pointdt = DataBase.ExecuteDataTable(strsql, DataBase.Gpsconn);
            if (pointdt != null && pointdt.Rows.Count > 0)
            {
                return DbParameterUtility.ConvertDataTable2ListsP<PatrolPoint>(pointdt).ToList();
            }
            return new List<PatrolPoint>();
        }

        private double[] P2WGS84(double x, double y)
        {
            double d = (4.0 / 60.0) + (35.048000 / 3600);
            var mapPoint = transferP(x, y, 1, d, -3266736.9496, -439821.9753);
            return ConvertBj542Wgs84(mapPoint.Y, mapPoint.X);
        }

        private double[] ConvertBj542Wgs84(double lat, double lon)
        {
            IProjectedCoordinateSystem fromCS = CoordinateSystemWktReader.Parse(
                    "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 120E\",GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4214\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",120],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"2437\"]]")
                as IProjectedCoordinateSystem;
            GeographicCoordinateSystem toCS = GeographicCoordinateSystem.WGS84;
            CoordinateTransformationFactory ctfac = new CoordinateTransformationFactory();
            ICoordinateTransformation trans = ctfac.CreateFromCoordinateSystems(fromCS, toCS);
            return trans.MathTransform.Transform(new double[] {lat, lon});
        }


        private double[] ConvertWgs84Bj54(double lat, double lon)
        {
            IProjectedCoordinateSystem fromCS = CoordinateSystemWktReader.Parse(
                    "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 120E\",GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4214\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",120],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"2437\"]]")
                as IProjectedCoordinateSystem;
            GeographicCoordinateSystem toCS = GeographicCoordinateSystem.WGS84;
            CoordinateTransformationFactory ctfac = new CoordinateTransformationFactory();
            ICoordinateTransformation trans = ctfac.CreateFromCoordinateSystems(toCS, fromCS);
            return trans.MathTransform.Transform(new double[] {lat, lon});
        }

        private Point movePoint(Point point)
        {
            return new Point(point.getX() - 13.8747376725019, point.getY() + 10);
        }


        private Point transfer(double x_put, double y_put, double k, double red, double dx, double dy)
        {
            Point point = new Point();
            double x_out;
            double y_out;

            y_out = x_put * k * Math.Cos(red / 180 * Math.PI) - y_put * k * Math.Sin(red / 180 * Math.PI) + dx;
            x_out = x_put * k * Math.Sin(red / 180 * Math.PI) + y_put * k * Math.Cos(red / 180 * Math.PI) + dy;

            point.setXY(x_out, y_out);
            point.X = point.X - 13.8747376725019;
            point.Y = point.Y + 10;

            return point;
        }

        private Point transferP(double x_out, double y_out, double k, double red, double dx, double dy)
        {
            Point point = new Point();
            double x_put;
            double y_put;

            x_out = x_out + 13.8747376725019;
            y_out = y_out - 10;
            x_put = (Math.Cos(red / 180 * Math.PI) * (y_out - dx) + Math.Sin(red / 180 * Math.PI) * (x_out - dy)) *
                    (1 / k);
            y_put = (Math.Cos(red / 180 * Math.PI) * (x_out - dy) - Math.Sin(red / 180 * Math.PI) * (y_out - dx)) *
                    (1 / k);

            point.setXY(x_put, y_put);
            return point;
        }
    }
}

public class Point
{
    public double X { get; set; }
    public double Y { get; set; }

    public Point()
    {
    }

    public Point(double x, double y)
    {
        this.X = x;
        this.Y = y;
    }

    public void setXY(double x, double y)
    {
        this.X = x;
        this.Y = y;
    }

    public double getX()
    {
        return this.X;
    }

    public double getY()
    {
        return this.Y;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市言疗,隨后出現(xiàn)的幾起案子晴圾,更是在濱河造成了極大的恐慌,老刑警劉巖噪奄,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件死姚,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡勤篮,警方通過(guò)查閱死者的電腦和手機(jī)都毒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)碰缔,“玉大人账劲,你說(shuō)我怎么就攤上這事〗鹇眨” “怎么了瀑焦?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)梗肝。 經(jīng)常有香客問(wèn)我榛瓮,道長(zhǎng),這世上最難降的妖魔是什么巫击? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任榆芦,我火速辦了婚禮,結(jié)果婚禮上喘鸟,老公的妹妹穿的比我還像新娘匆绣。我一直安慰自己,他們只是感情好什黑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布崎淳。 她就那樣靜靜地躺著,像睡著了一般愕把。 火紅的嫁衣襯著肌膚如雪拣凹。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天恨豁,我揣著相機(jī)與錄音嚣镜,去河邊找鬼。 笑死橘蜜,一個(gè)胖子當(dāng)著我的面吹牛菊匿,可吹牛的內(nèi)容都是我干的付呕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼跌捆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼徽职!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起佩厚,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤姆钉,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后抄瓦,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體威始,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惋啃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年中跌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赛糟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡摸恍,死狀恐怖悉罕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情立镶,我是刑警寧澤壁袄,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站媚媒,受9級(jí)特大地震影響嗜逻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缭召,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一栈顷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嵌巷,春花似錦萄凤、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至晓折,卻和暖如春惑朦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背漓概。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工漾月, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胃珍。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓梁肿,卻偏偏與公主長(zhǎng)得像蜓陌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子栈雳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容