<del id="jotyd"><pre id="jotyd"></pre></del>
<th id="jotyd"><em id="jotyd"><pre id="jotyd"></pre></em></th>
        • GPS Correction 0.01 Precision Tool / Algorithm Case

          2019-09-17 11:40:39 root 392

          Precision tool download: http://map.yanue.net/gps.html

           

          This correction applies to Google map China, Microsoft map china, MapABC, etc., because these maps are the same as the offset.dat file, which is 0.01 precision correction data. If you need it, please contact the website, non-free version.

           

          Algorithm demonstration:

           

           

          ?

          1

          2

          3

          4

          5

          6

          7

          8

          9

          10

          11

          12

          13

          14

          15

          16

          17

          18

          19

          20

          21

          22

          23

          24

          25

          26

          27

          28

          29

          30

          31

          32

          33

          34

          35

          36

          37

          38

          39

          40

          41

          42

          43

          44

          45

          46

          47

          48

          49

          50

          51

          52

          53

          54

          55

          56

          57

          58

          59

          60

          61

          62

          63

          64

          65

          66

          67

          68

          69

          70

          71

          72

          73

          74

          75

          76

          77

          <?php

          /*

             Code function: Correct the Chinese map latitude and longitude offset with the 0.01 precision correction library file.

          */

          header("Content-Type:text/html; charset=utf-8");

          define('__dat_db__' 'offset.dat' );// DAT the file of data

          define('datmax' , 9813675 );// Number of data - end record

           

          // # offset.php?lat=39.914914&lon=116.460633

          $lon=$_GET['lon'];

          $lat=$_GET['lat'];

          $tmplon=intval($lon * 100);

          $tmplat=intval($lat * 100);

          //Longitude to pixel X value

          function lngToPixel($lng,$zoom) {

          return ($lng+180)*(256<<$zoom)/360;

          }

          //Pixel X to longitude

          function pixelToLng($pixelX,$zoom){

          return $pixelX*360/(256<<$zoom)-180;

          }

          //Latitude to pixel Y

          function latToPixel($lat$zoom) {

          $siny = sin($lat * pi() / 180);

          $y=log((1+$siny)/(1-$siny));

          return (128<<$zoom)*(1-$y/(2*pi()));

          }

          //Pixel Y to latitudefunction pixelToLat($pixelY$zoom) {

          $y = 2*pi()*(1-$pixelY /(128 << $zoom));

          $z = pow(M_E, $y);

          $siny = ($z -1)/($z +1);

          return asin($siny) * 180/pi();

          }

           

          function xy_fk( $number ){

                  $fp fopen(__dat_db__,"rb"); //■1■.將 r 改為 rb

                  $myxy=$number;//#"112262582";

                  $left = 0;//Start recording        $right = datmax;//end the record

           

                  //Use dichotomy to find data

                  while($left <= $right){

                      $recordCount =(floor(($left+$right)/2))*8; //Take half

                      //echo "Operation:left=".$left." right=".$right." midde=".$recordCount."
          ";

                      @fseek $fp$recordCount , SEEK_SET ); //Set cursor

                      $c fread($fp,8); //Read 8 bytes

                      $lon = unpack('s',substr($c,0,2));

                      $lat = unpack('s',substr($c,2,2));

                      $x = unpack('s',substr($c,4,2));

                      $y = unpack('s',substr($c,6,2));

                      $jwd=$lon[1].$lat[1];

                      //echo "Latitude and longitude found:".$jwd;

                      if ($jwd==$myxy){

                         fclose($fp);

                         return $x[1]."|".$y[1];

                         break;

                      }else if($jwd<$myxy){

                         //echo " > ".$myxy."
          ";

                         $left=($recordCount/8) +1;

                      }else if($jwd>$myxy){

                         //echo " < ".$myxy."
          ";

                         $right=($recordCount/8) -1;

                      }

           

                  }

                  fclose($fp);

          }

           

          $offset =xy_fk($tmplon.$tmplat);

          $off=explode('|',$offset);

          $lngPixel=lngToPixel($lon,18)+$off[0];

          $latPixel=latToPixel($lat,18)+$off[1];

           

          echo pixelToLat($latPixel,18).",".pixelToLng($lngPixel,18);

           

          ?>

          c#algorithm

          ?

          1

          2

          3

          4

          5

          6

          7

          8

          9

          10

          11

          12

          13

          14

          15

          16

          17

          18

          19

          20

          21

          22

          23

          24

          25

          26

          27

          28

          29

          30

          31

          32

          33

          34

          35

          36

          37

          38

          39

          40

          41

          42

          43

          44

          45

          46

          47

          48

          49

          50

          51

          52

          53

          54

          55

          56

          57

          58

          59

          60

          61

          62

          63

          64

          65

          66

          67

          68

          69

          70

          71

          72

          73

          74

          75

          76

          77

          78

          79

          80

          81

          82

          83

          84

          85

          86

          87

          88

          89

          90

          91

          92

          93

          94

          95

          96

          97

          98

          99

          100

          101

          102

          103

          104

          105

          106

          107

          using System;

          using System.Collections.Generic;

          using System.Linq;

          using System.Text;   

           

          namespace MapDigit.GIS

          {

              public class GeoLatLng

              {   

           

                  public GeoLatLng(double latitude, double longitude)

                  {

                      this.latitude = latitude;

                      this.longitude = longitude;

                  }

                  public double latitude;

                  public double longitude;

              }   

           

              public class GeoPoint

              {

                  public GeoPoint(int x, int y)

                  {

                      this.x = x;

                      this.y = y;

                  }

                  public int x;

                  public int y;

              }   

           

              public class OffsetInChina

              {

                  //Used to convert from GPS coordinates to post-offset coordinates        public static GeoLatLng fromEarthToMars(GeoLatLng earth)

                  {

                      GeoPoint ptOffset = getOffset(earth.latitude, earth.longitude);

                      if (ptOffset.x != 0 || ptOffset.y != 0)

                      {

                          int pixelX, pixelY;

                          TileSystem.LatLongToPixelXY(earth.latitude, earth.longitude, 18, out pixelX, out pixelY);

                          GeoPoint pt = new GeoPoint(pixelX, pixelY);

                          pt.x += ptOffset.x;

                          pt.y += ptOffset.y;

                          double latitude, longitude;

                          TileSystem.PixelXYToLatLong(pt.x, pt.y, 18, out latitude, out longitude);

                          return new GeoLatLng(latitude, longitude);   

           

                      }

                      else

                      {

                          return new GeoLatLng(earth.latitude, earth.longitude);

                      }   

           

                  }   

           

                  //Used to convert the post-offset coordinates to true coordinates

                  public static GeoLatLng fromMarToEarth(GeoLatLng mars)

                  {

                      GeoPoint ptOffset = getOffset(mars.latitude, mars.longitude);

                      if (ptOffset.x != 0 || ptOffset.y != 0)

                      {

                          int pixelX, pixelY;

                          TileSystem.LatLongToPixelXY(mars.latitude, mars.longitude, 18, out pixelX, out pixelY);

                          GeoPoint pt = new GeoPoint(pixelX, pixelY);

                          pt.x -= ptOffset.x;

                          pt.y -= ptOffset.y;

                          double latitude, longitude;

                          TileSystem.PixelXYToLatLong(pt.x, pt.y, 18, out latitude, out longitude);

                          return new GeoLatLng(latitude, longitude);   

           

                      }

                      else

                      {

                          return new GeoLatLng(mars.latitude, mars.longitude);

                      }

                  }   

           

                  //This function is used to convert the latitude and longitude that needs to be queried into the nearest 0.01 division value, without interpolation.

                  //You can also implement interpolation by yourself.

                  private static GeoPoint getQueryLocation(double latitude, double longitude)

                  {

                      int lat = (int)(latitude * 100);

                      int lng = (int)(longitude * 100);

                      double lat1 = ((int)(latitude * 1000 + 0.499999)) / 10.0;

                      double lng1 = ((int)(longitude * 1000 + 0.499999)) / 10.0;

                      for (double x = longitude; x < longitude + 1; x += 0.5)

                      {

                          for (double y = latitude; x < latitude + 1; y += 0.5)

                          {

                              if (x <= lng1 && lng1 < (x + 0.5) && lat1 >= y && lat1 < (y + 0.5))

                              {

                                  return new GeoPoint((int)(x + 0.5), (int)(y + 0.5));

                              }

                          }

                      }

                      return new GeoPoint(lng, lat);

                  }   

           

                  private static GeoPoint getOffset(double longitude, double latitude)

                  {

                      //This function is used to return the result of the query, which is to return the level 18, x, y offset from the corrected data.

                      //Can be implemented by itself

                      return null;

                  }   

           

              }

          }

          无码孕妇一区二区三区,亚洲国产首页在线播放,伊人久久男人的天堂,最新国产精品 久
          <del id="jotyd"><pre id="jotyd"></pre></del>
          <th id="jotyd"><em id="jotyd"><pre id="jotyd"></pre></em></th>
              • 日本强奷中文字幕在线播放| 91视频亚洲精品| 亚洲人成无码我m在线| 日韩无码中文字幕色图| 黑人无码精品一区二区在线| 日本中文一二区高清在线| 国产无码一级成人精品| 午夜福利精品a在线观看| 亚洲aⅴ欧美综合一区二区三区| 天天操天天干一区二区| 中文字幕无码在线m| 熟妇人va精品中文字幕| 无码啪啪精品一区二区三区99| 天天AV色综合网| 国产一区二区三四| av无码国产在线看网站| 欧美日本亚欧在线观看| 超碰国产剧情AV| 99久久久久久黄色片麻豆|