【调剂】北京石油化工学院2024年16个专业接受调剂
查看: 5380  |  回复: 5
【悬赏金币】回答本帖问题,作者zengraoli将赠送您 5 个金币

zengraoli

新虫 (正式写手)

[求助] 问一下经纬划分的问题,怎样把中国地图按照经纬度划分成每一个网格呢?

问一下经纬划分的问题,怎样把中国地图按照经纬度划分成每一个网格呢?

比如我要按照1公里或者10公里来划分中国地图,得到每一个网格的坐下经纬度和右上经纬度,要如何做?

下面是网上找到的图,但没有说原理。。

问一下经纬划分的问题,怎样把中国地图按照经纬度划分成每一个网格呢?

问一下经纬划分的问题,怎样把中国地图按照经纬度划分成每一个网格呢?-1

问一下经纬划分的问题,怎样把中国地图按照经纬度划分成每一个网格呢?-2
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

m89367

银虫 (小有名气)

去看地图学的地图分幅部分,应该有说明

发自小木虫Android客户端
生命不息,奋斗不止
2楼2018-03-21 16:56:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zengraoli

新虫 (正式写手)

引用回帖:
2楼: Originally posted by m89367 at 2018-03-21 16:56:35
去看地图学的地图分幅部分,应该有说明

觉得还行,但没必要去涉及这部分,我用四叉树的形式实现了。。

给记录一下


void SplitTable(int n, double x1, double y1, double x2, double y2)
{
        if (n == 1)
        {
                // 先求出右下角的点
                double rightBottomX = x2 * 2;
                double rightBottomY = y2 * 2;

                cout << "第一块:" << x1 << "," << y1 << " --- " << x2 << "," << y2 << endl;
                cout << "第二块:" << x2 << "," << y1 << " --- " << rightBottomX << "," << y2 << endl;
                cout << "第三块:" << x1 << "," << y2 << " --- " << x2 << "," << rightBottomY << endl;
                cout << "第四块:" << x2 << "," << y2 << " --- " << rightBottomX << "," << rightBottomY << endl;
                return;
        }
        else // 切分网格
        {
                double centerX = (x2 - x1) / 2;
                double centerY = (y2 - y1) / 2;
                // 求第一块的递归
                SplitTable(n - 1, x1, y1, centerX, centerY);
                cout << "===========" << endl;
                // 求第二块的递归
                SplitTable(n - 1, centerX, y1, x2, centerY);
                cout << "===========" << endl;
                //// 求第三块的递归
                SplitTable(n - 1, centerX, centerY, x2, y2);
                cout << "===========" << endl;
                //// 求第四块的递归
                SplitTable(n - 1, x1, centerY, centerX, y2);
        }
}

还有一个更简单的非递归的形式
// 非递归实现
void Test()
{
        double x1 = 0;
        double y1 = 0;
        double x2 = 100;
        double y2 = 100;

        int n = 4;
        // 求x轴的分块
        double splitMinX = (x2 - x1) / n;
        double splitMinY = (y2 - y1) / n;

        for (int i = 0; i < n; i++)
        {
                for (int j = 0; j < n; j++)
                {
                        cout << "左下:" << x1 + splitMinX * j << "," << y1 + splitMinY * i << endl;
                        cout << "右上:" << x1 + splitMinX * (j + 1) << "," << y1 + splitMinY * (i + 1) << endl;
                }
                cout << "=====================" << endl;
        }
}
3楼2018-03-22 09:58:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zengraoli

新虫 (正式写手)

引用回帖:
3楼: Originally posted by zengraoli at 2018-03-22 09:58:47
觉得还行,但没必要去涉及这部分,我用四叉树的形式实现了。。

给记录一下


void SplitTable(int n, double x1, double y1, double x2, double y2)
{
        if (n == 1)
        {
                // 先求出右下角的点
                double ...

我验证了一下输出

图在附件

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:libolin3@tal.com
  • 附件 1 : 111.jpg
  • 2018-03-22 10:00:19, 290.16 K
  • 附件 2 : 222.png
  • 2018-03-22 10:00:19, 36.07 K
4楼2018-03-22 10:00:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zengraoli

新虫 (正式写手)

引用回帖:
4楼: Originally posted by zengraoli at 2018-03-22 10:00:33
我验证了一下输出

图在附件...

上面的递归程序有点问题,应该改成这样

void SplitTable(int n, double x1, double y1, double x2, double y2)
{
     if (n == 1)
     {
         // 先求出局部中心点
         double centerX = (x2 + x1) / 2;
         double centerY = (y2 + y1) / 2;
  
         cout << "第一块:" << x1 << "," << y1 << " --- " << centerX << "," << centerY << endl;
         cout << "第二块:" << centerX << "," << y1 << " --- " << x2 << "," << centerY << endl;
         cout << "第三块:" << centerX << "," << centerY << " --- " << x2 << "," << y2 << endl;
         cout << "第四块:" << x1 << "," << centerY << " --- " << centerX << "," << y2 << endl;
  
         return;
     }
     else // 切分网格
     {
         double centerX = (x2 - x1) / 2;
         double centerY = (y2 - y1) / 2;
         // 求第一块的递归
         SplitTable(n - 1, x1, y1, centerX, centerY);
         cout << "===========" << endl;
         // 求第二块的递归
         SplitTable(n - 1, centerX, y1, x2, centerY);
         cout << "===========" << endl;
         // 求第三块的递归
         SplitTable(n - 1, centerX, centerY, x2, y2);
         cout << "===========" << endl;
         // 求第四块的递归
         SplitTable(n - 1, x1, centerY, centerX, y2);
     }
}

这是递归程序的输出
问一下经纬划分的问题,怎样把中国地图按照经纬度划分成每一个网格呢?-3
5楼2018-03-22 11:04:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zengraoli

新虫 (正式写手)

引用回帖:
5楼: Originally posted by zengraoli at 2018-03-22 11:04:06
上面的递归程序有点问题,应该改成这样

void SplitTable(int n, double x1, double y1, double x2, double y2)
{
     if (n == 1)
     {
         // 先求出局部中心点
         double centerX =  ...

上面的迭代中,局部中心点应该是+号,否则在3次会有问题

用opencv试了一下,的确看到了问题:
问一下经纬划分的问题,怎样把中国地图按照经纬度划分成每一个网格呢?-4

所以再改一下

void SplitTable(int n, double x1, double y1, double x2, double y2)
{
        // 先求出局部中心点
        double centerX = (x2 + x1) / 2;
        double centerY = (y2 + y1) / 2;
        if (n == 1)
        {
                cout << "第一块:" << x1 << "," << y1 << " --- " << centerX << "," << centerY << endl;
                cout << "第二块:" << centerX << "," << y1 << " --- " << x2 << "," << centerY << endl;
                cout << "第三块:" << centerX << "," << centerY << " --- " << x2 << "," << y2 << endl;
                cout << "第四块:" << x1 << "," << centerY << " --- " << centerX << "," << y2 << endl;

                return;
        }
        else // 切分网格
        {
                // 求第一块的递归
                SplitTable(n - 1, x1, y1, centerX, centerY);
                cout << "===========" << endl;
                // 求第二块的递归
                SplitTable(n - 1, centerX, y1, x2, centerY);
                cout << "===========" << endl;
                // 求第三块的递归
                SplitTable(n - 1, centerX, centerY, x2, y2);
                cout << "===========" << endl;
                // 求第四块的递归
                SplitTable(n - 1, x1, centerY, centerX, y2);
        }
}

这回在用opencv查看了一下,貌似没问题了
问一下经纬划分的问题,怎样把中国地图按照经纬度划分成每一个网格呢?-5
6楼2018-03-22 11:29:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zengraoli 的主题更新
不应助 确定回帖应助 (注意:应助才可能被奖励,但不允许灌水,必须填写15个字符以上)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考博] 申博求助 +3 dskabdh 2024-04-24 8/400 2024-04-24 23:17 by dskabdh
[论文投稿] Nature一直在编辑手里,考虑好几天了,是悬了吗 +7 彩虹初见 2024-04-24 7/350 2024-04-24 22:31 by 陈晨2016
[基金申请] 国社科项目,你们学校都限额申报吗? +6 屡战屡败 2024-04-21 8/400 2024-04-24 22:04 by njuzmwu
[硕博家园] 聊天 +9 暮色恋伊人 2024-04-22 10/500 2024-04-24 19:34 by liubai000
[基金申请] 化学结清有情发出来了 +3 starboy7286 2024-04-20 3/150 2024-04-24 15:52 by 嘿,黑贝
[基金申请] 颜宁:基础研究应顶天立地,立地即从需求端作为问题的出发点,立项背景就是面向真实需求 +11 zju2000 2024-04-18 11/550 2024-04-24 14:55 by 1501311
[考研] 0854-0855调剂 +6 shangannum1 2024-04-21 9/450 2024-04-24 14:43 by z_longlong
[有机交流] 紧急求助,有谁用过三甲基硅醇钾TMSOK吗? 1000+3 genius2008 2024-04-19 10/500 2024-04-24 12:37 by genius2008
[教师之家] 大家访学都是怎么找的啊? +3 luokereng 2024-04-22 3/150 2024-04-24 11:40 by xuechenli
[论文投稿] 期刊推荐 20+4 木颜尘ip 2024-04-22 7/350 2024-04-24 10:06 by bobvan
[公派出国] 東京大学 应用化学专业柳田研究室 招收修士/博士生 +5 蝶梦123 2024-04-19 5/250 2024-04-23 22:40 by 90472jvvh
[论文投稿] 无under review,直接DIP,咋么办。 +10 lizhengke06 2024-04-19 16/800 2024-04-23 19:15 by 化学程序员
[硕博家园] +8 s150535912 2024-04-18 9/450 2024-04-23 15:48 by huixiong0627
[考研] 本科211 277分求调剂 +3 0854通信工程 2024-04-18 6/300 2024-04-23 15:39 by H.W.Y
[教师之家] 河海大学常州校区新进的讲师待遇如何?考核要求如何? +3 德国小球迷 2024-04-19 18/900 2024-04-22 19:23 by ZHONGWU_U
[考博] 25申博记录贴 +6 我属驴核动力驴 2024-04-18 12/600 2024-04-22 15:50 by 诩雾
[论文投稿] 催稿后秒拒 +9 lizhengke06 2024-04-19 11/550 2024-04-21 22:29 by ggjjyyy
[硕博家园] 材料工程,二本硕士,值得读吗 +3 简风23 2024-04-20 6/300 2024-04-21 12:19 by 简风23
[论文投稿] SCI 评审意见回复 模板 15+3 Kilig0317 2024-04-18 4/200 2024-04-19 08:46 by bobvan
[基金申请] 国自然青年基金只有一篇能第一标注,其他都是第二标注能结题吗? 10+4 lice_1987 2024-04-18 6/300 2024-04-19 08:29 by kudofaye
信息提示
请填处理意见