原作:南水之源

先看看tms和google服务器发布数据的数据排列:(goole地图与arcgis一样)

我现在手上有tms发布的数据,dom,dem等,现在要用arcgis server来发布这些数据

服务器发布卫片和高程数据都是分层级的,从第0级开始一直到23级,但是一般不一定能有那么精细层级,所以,更具当前有的层级进行发布。

但是arcgis不能直接发布tms格式的数据,所以需要写个小程序重新命名:

我们先看tms格式的数据命名规则以及层级关系

再看arcgis的命名规则以及层级关系

从现有tms格式转换成arcgis命名规则代码:

// Rename.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "iostream"
#include <windows.h>
#include <string>
#include <math.h>
#include <shlwapi.h>
#pragma comment(lib, "shlwapi.lib") void addArcGisLayer(std::string &_str, int _index)
{
char c2[20];
sprintf_s(c2, 20, "\\L%02x", _index);
_str += c2;
//std::cout << _str << std::endl;
} std::string addArcGisRow(std::string _str, int _index)
{
char c[20];
sprintf_s(c, 20, "\\R%08x", _index);
_str += c;
return _str;
} std::string addArcGisColumn(std::string _str, int _index)
{
char c[20];
sprintf_s(c, 20, "\\C%08x.png", _index);
_str += c;
return _str;
} void addTmsLayer(std::string &_str, int _index)
{
char c1[20];
sprintf_s(c1, 20, "\\%d", _index);
_str += c1;
} std::string addTmsColumn(std::string _str, int _index)
{
char c[20];
sprintf_s(c, 20, "\\%d", _index);
_str += c;
return _str;
} std::string addTmsRow(std::string _str, int _index)
{
char c[20];
sprintf_s(c, 20, "\\%d.png", _index);
_str += c;
return _str;
} bool createFilePath(std::string str)
{
LPCSTR filepath = str.c_str();
if (!PathIsDirectory(filepath))
{
std::string strbuf = str.substr(0, str.find_last_of('\\'));
if (createFilePath(strbuf))
return CreateDirectory(filepath, NULL);
else
return false;
}
return true;
} int main()
{
bool ret;
std::string str1("");
std::string str2(""); //层级
for (int i=0; i < 11; i++)
{
str1 = std::string("E:\\Map\\DOM");
str2 = std::string("F:\\Out\\Dom");
//layers
addTmsLayer(str1, i);
addArcGisLayer(str2, i); //LPCSTR filepath = str2.c_str();
//if (!PathIsDirectory(filepath))
//{
// CreateDirectory(filepath, NULL);
//} int jmax = pow(2,(i + 1));
int wmax = pow(2,i);
//str1_column
LPCSTR l1path = str1.c_str();
if (!PathFileExists(l1path))
continue;
for (int j=0; j<jmax;j++)
{
std::string str1_column = addTmsColumn(str1, j);
LPCSTR l1column = str1_column.c_str();
if (!PathFileExists(l1column))
{
//std::cout << str1_column << " is no one" << std::endl;
continue;
}
for (int w=0;w<wmax; w++)
{
std::string real1 = addTmsRow(str1_column, w);
LPCSTR l1 = real1.c_str(); if (!PathFileExists(l1))
{
//std::cout << real1 << " is no one" << std::endl;
continue;
}
std::string str2_row = addArcGisRow(str2,wmax - 1 - w);
createFilePath(str2_row);
std::string real2 = addArcGisColumn(str2_row, j); std::cout << real1<<" -----> "<< real2 << std::endl; LPCSTR l2 = real2.c_str();
ret = CopyFile(
l1, l2,
false);
}
}
}
return 0;
}

  

[原]DOM、DEM、landcover,从tms服务发布格式转arcgis、google服务发布格式的更多相关文章

  1. [ArcGIS]ArcGIS Server环境搭建,发布服务,以及使用ArcGIS API for JavaScript

    环境搭建 安装Web服务器 IIS 控制面板-程序-程序和功能-启用或关闭Windows功能,勾选以下 安装VisualStudio,选择包括ASP.NET模块 安装ArcGIS服务器 ArcGIS ...

  2. Cesium调用Geoserver发布的 WMS、WFS服务

    1 GeoServer服务发布 1.1 WMS服务 下载GeoServer安装版安装,同时安装geopackage扩展,以备使用.使用XX地图下载器下载地图,导出成GeoPackage地图文件. (1 ...

  3. 深入浅说服务如何以Jar包的方式发布

    序言 笔者前段时间在使用自研框架NF( 传送门 )开发一个自动模板生成工具之后,想将他发布到Linux下,之前一直使用IDE直接run as运行,在遇到发布的时候考虑过发布为war或者jar,在一番抉 ...

  4. RDIFramework.NET框架SOA解决方案(集Windows服务、WinForm形式与IIS形式发布)-分布式应用

    RDIFramework.NET框架SOA解决方案(集Windows服务.WinForm形式与IIS形式发布)-分布式应用 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架 ...

  5. 【转】从 ArcGIS for Desktop 发布地图服务

    原文链接:http://resources.arcgis.com/zh-CN/help/tutorials/01z300000007000000.htm 本教程的目的是将地图服务直接从 ArcGIS ...

  6. Thrift 个人实战--RPC服务的发布订阅实现(基于Zookeeper服务)

    前言: Thrift作为Facebook开源的RPC框架, 通过IDL中间语言, 并借助代码生成引擎生成各种主流语言的rpc框架服务端/客户端代码. 不过Thrift的实现, 简单使用离实际生产环境还 ...

  7. ARCGIS 10.1 发布服务问题以及注意事项汇总

    本文会逐渐丰富,并在遇到问题后进行整理进来. 一.了解ArcGIS Server以及如何利用ArcServer发布服务 官方中文帮助文档:http://resources.arcgis.com/zh- ...

  8. 发布(高程数据)服务,Service Editor界面无LERC格式选项

    [问题描述]: ArcGIS Server 发布(高程数据)服务,无 LERC格式选项,而官方帮助中发布流程提示需要选择LERC格式. [解决办法]: 需求:发布高程数据,ArcGIS Server版 ...

  9. 发布完ArcGIS地图服务后,服务未启动成功

    今天下午更新地图服务后,服务未启动成功.出来的弹出框警告问题目前应该是ArcGIS Server出了问题,打开ArcCatalog目录,查看GIS服务器下localhost下的服务,只要是今天发布的服 ...

随机推荐

  1. unity 之协程返回值

    yield return null; // 下一帧再执行后续代码yield return 6;//(任意数字) 下一帧再执行后续代码yield break; //直接结束该协程的后续操作yield r ...

  2. formset的简单使用

    1.modelform class StudentStudyRecordModelForm(forms.ModelForm): class Meta: model = StudentStudyReco ...

  3. BZOJ2938 [Poi2000]病毒 和 BZOJ5261 Rhyme

    [Poi2000]病毒 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...

  4. 创建型模式(过渡模式) 简单工厂模式(Simple Factory)

    简单工厂模式(Simple Factory Pattern)属于类的创建型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern) 是通过专门定义一个类来负责创建其他类的 ...

  5. Java线程调度方式

    在Java多线程环境中,为保证所有线程的执行能按照一定的规则执行,JVM实现了一个线程调度器,它定义了线程调度的策略,对于CPU运算的分配都进行了规定,按照这些特定的机制为多个线程分配CPU的使用权. ...

  6. php 递归算法

    通过递归实现阶乘 function multi($n){ if($n == 0){ return 1 ;//终止递归 } $value = $n * multi($n-1); return $valu ...

  7. python - 登陆验证的滑块接口

    -----------------  滑块接口  ----------------- 0:大体思路:点击登陆按钮的时候会进行第一次验证(滑块验证),然后访问后台滑块接口,并返回验证结果,如果滑块接口通 ...

  8. commons-dbutils工具栏的编写

    db.properties driverClass=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test_db?useUnicode=t ...

  9. shiro授权+注解式开发

    shiro授权和注解式开发 1.shiro授权角色.权限 2.Shiro的注解式开发 ShiroUserMapper.xml <select id="getRolesByUserId& ...

  10. Excel、CSV文件处理

    1.Excel中以\t做为列分隔符,换行符作为行分隔符 使用c#导出excel的时候,当数字太长时,如身份证号,导出后的excel就会显示为科学计数法.如“511122154712121000”会显示 ...