Ejemplo n.º 1
0
        /// <summary>
        /// public:StandardMesh:1次メッシュコードの取得を行うメソッド。
        /// </summary>
        /// <param name="lat">緯度</param>
        /// <param name="lon">経度</param>
        /// <returns></returns>
        public static StandardMesh Get1stMesh(double lat, double lon)
        {
            int left_operator  = (int)(lat * 15 / 10);
            int right_operator = (int)(lon - 100);
            //左下(南西端)の緯度経度を計算
            double       dest_lat = left_operator / 15.0 * 10;
            double       dest_lon = right_operator + 100.0;
            StandardMesh sMesh    = new StandardMesh()
            {
                meshCode  = left_operator.ToString() + right_operator.ToString(),
                latitude  = dest_lat,
                longitude = dest_lon
            };

            return(sMesh);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// public:StandardMesh:3次メッシュコードの取得を行うメソッド。
        /// </summary>
        /// <param name="lat">緯度</param>
        /// <param name="lon">経度</param>
        /// <returns></returns>
        public static StandardMesh Get3rdMesh(double lat, double lon)
        {
            //所属する2次メッシュを取得
            StandardMesh baseMesh = Get2ndMesh(lat, lon);
            //緯度方向算出
            //3次メッシュは緯度方向 30秒(30/60/60=0.008333)区切りとなる。
            int left_operator = (int)((lat - baseMesh.latitude) * 1000000 / 8333);
            //経度方向算出
            //経度方向 45秒(45/60/60=0.0125)区切りとなる。
            int right_operator = (int)((lon - baseMesh.longitude) * 10000 / 125);
            //左下(南西端)の緯度経度を計算。
            double dest_lat = left_operator * 8333 / 1000000.0 + baseMesh.latitude;
            double dest_lon = right_operator * 125 / 10000.0 + baseMesh.longitude;

            StandardMesh sMesh = new StandardMesh()
            {
                meshCode  = baseMesh.meshCode + "-" + left_operator.ToString() + right_operator.ToString(),
                latitude  = dest_lat,
                longitude = dest_lon
            };

            return(sMesh);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// public:StandardMesh:2次メッシュコードの取得を行うメソッド。
        /// </summary>
        /// <param name="lat">緯度</param>
        /// <param name="lon">経度</param>
        /// <returns></returns>
        public static StandardMesh Get2ndMesh(double lat, double lon)
        {
            //所属する1次メッシュの西南端のlat,lonを取得。
            StandardMesh baseMesh = Get1stMesh(lat, lon);
            //緯度方向算出
            //2次メッシュは緯度方向5分(5/60=0.08333)区切りとなる。
            int left_operator = (int)((lat - baseMesh.latitude) * 100000 / 8333);
            //経度方向算出
            //経度方向7分30秒(7/60+30/60/60=0.11666+0.008333=0.1249))区切りとなる。
            int right_operator = (int)((lon - baseMesh.longitude) * 1000 / 125);
            //左下(南西端)の緯度経度を計算。
            double dest_lat = left_operator * 8333.0 / 100000 + baseMesh.latitude;
            double dest_lon = right_operator * 125.0 / 1000 + baseMesh.longitude;

            StandardMesh sMesh = new StandardMesh()
            {
                meshCode  = baseMesh.meshCode + "-" + left_operator.ToString() + right_operator.ToString(),
                latitude  = dest_lat,
                longitude = dest_lon
            };

            return(sMesh);
        }