ESRI BBS也有提问,由于时间断断续续这些问题一直没有找到很好的办法,最近几天才解决,故在此总结一下。
1、关于部署时地图数据源问题的解决:
在web.config中添加一个地图数据源节,部署时只要修改web.congfig中的值就ok了,呵呵。就是请教一文中说的第2种方法,感觉很早就应该这么搞了,简直一劳永逸,所有用到地图资源的地方都可以共享。具体如下。在web.config文件中:
<appSettings>
<!--地图数据源-->
<add key="MapDataSource" value ="MyHost"/>
</appSettings>
在某个类假设是CommonUntility中加几个static方法,当然也可以把许多地图资源访问操作封装在这里了。
MapHelper
{
public MapHelper()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
static MapResourceManager m_MapResourceManager;
public static MapResourceItem resourceItem;//地图数据源
string QueryLayer;//图层名
//设置地图数据源
private static void setResourMng()
{
if (resourceItem != null)
{
return;
}
resourceItem = new MapResourceItem();
resourceItem.Name = "地图";
resourceItem.Definition = new GISResourceItemDefinition();
//获取地图数据源
string MapDataSource = ConfigurationManager.AppSettings["MapDataSource"];
resourceItem.Definition.DataSourceDefinition = MapDataSource;
resourceItem.Definition.DataSourceType = "ArcGIS Server Local";
resourceItem.Definition.ResourceDefinition = ConfigurationManager.AppSettings["ResourceDefinition"];
resourceItem.Definition.DataSourceShared = true;
resourceItem.DisplaySettings = new DisplaySettings();
resourceItem.DisplaySettings.DisplayInTableOfContents = true;
resourceItem.DisplaySettings.Visible = true;
m_MapResourceManager = new MapResourceManager();
m_MapResourceManager.ResourceItems.Insert(m_MapResourceManager.ResourceItems.Count, resourceItem);
m_MapResourceManager.CreateResource(resourceItem);
resourceItem.InitializeResource();
}
//获取ResourceItem
public static MapResourceItem GetResourceItem()
{
setResourMng();
return resourceItem;
}
}
Page.IsPostBack)
{
if (MapHelper.resourceItem == null)
MapResourceManager1.ResourceItems.Add(MapHelper.GetResourceItem());
//Map1控件的MapResourceManager检查
if (Map1.MapResourceManager == null || Map1.MapResourceManager.Length == 0)
{
MapResourceManager1.ResourceItems.Add(MapHelper.GetResourceItem());
}
//MapResourceManager1控件的ResourceItems检查
if (MapResourceManager1.ResourceItems.Count == 0 || MapResourceManager1.ResourceItems[0] == null)
{
MapResourceManager1.ResourceItems.Add(MapHelper.GetResourceItem());
}
}
1、关于部署时地图数据源问题的解决:
在web.config中添加一个地图数据源节,部署时只要修改web.congfig中的值就ok了,呵呵。就是请教一文中说的第2种方法,感觉很早就应该这么搞了,简直一劳永逸,所有用到地图资源的地方都可以共享。具体如下。在web.config文件中:
<appSettings>
<!--地图数据源-->
<add key="MapDataSource" value ="MyHost"/>
</appSettings>
在某个类假设是CommonUntility中加几个static方法,当然也可以把许多地图资源访问操作封装在这里了。
过去的几个月内对基于ArcGIS Server9.2的开发有所接触,这也是第一次真正自己动手作WebGIS的开发,期间遇到诸多问题。最突出的就是二次开发WebGIS的部署问题,以及字符集冲突的问题。问题描述分别见《请教ArcGIS server 9.2做的题目的部署问题》与《??Arcgis Server DotNet Web ADF 模板例子改变字符集后出现的问题》。同意的问题在ESRI BBS也有提问,由于时间断断续续这些问题一直没有找到很好的办法,最近几天才解决,故在此总结一下。
1、关于部署时地图数据源问题的解决:
在web.config中添加一个地图数据源节,部署时只要修改web.congfig中的值就ok了,呵呵。就是请教一文中说的第2种方法,感觉很早就应该这么搞了,简直一劳永逸,所有用到地图资源的地方都可以共享。具体如下。在web.config文件中:
<appSettings>
<!--地图数据源-->
<add key="MapDataSource" value ="MyHost"/>
</appSettings>
在某个类假设是CommonUntility中加几个static方法,当然也可以把许多地图资源访问操作封装在这里了。
1、关于部署时地图数据源问题的解决:
在web.config中添加一个地图数据源节,部署时只要修改web.congfig中的值就ok了,呵呵。就是请教一文中说的第2种方法,感觉很早就应该这么搞了,简直一劳永逸,所有用到地图资源的地方都可以共享。具体如下。在web.config文件中:
<appSettings>
<!--地图数据源-->
<add key="MapDataSource" value ="MyHost"/>
</appSettings>
在某个类假设是CommonUntility中加几个static方法,当然也可以把许多地图资源访问操作封装在这里了。
{
public MapHelper()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
static MapResourceManager m_MapResourceManager;
public static MapResourceItem resourceItem;//地图数据源
string QueryLayer;//图层名
//设置地图数据源
private static void setResourMng()
{
if (resourceItem != null)
{
return;
}
resourceItem = new MapResourceItem();
resourceItem.Name = "地图";
resourceItem.Definition = new GISResourceItemDefinition();
//获取地图数据源
string MapDataSource = ConfigurationManager.AppSettings["MapDataSource"];
resourceItem.Definition.DataSourceDefinition = MapDataSource;
resourceItem.Definition.DataSourceType = "ArcGIS Server Local";
resourceItem.Definition.ResourceDefinition = ConfigurationManager.AppSettings["ResourceDefinition"];
resourceItem.Definition.DataSourceShared = true;
resourceItem.DisplaySettings = new DisplaySettings();
resourceItem.DisplaySettings.DisplayInTableOfContents = true;
resourceItem.DisplaySettings.Visible = true;
m_MapResourceManager = new MapResourceManager();
m_MapResourceManager.ResourceItems.Insert(m_MapResourceManager.ResourceItems.Count, resourceItem);
m_MapResourceManager.CreateResource(resourceItem);
resourceItem.InitializeResource();
}
//获取ResourceItem
public static MapResourceItem GetResourceItem()
{
setResourMng();
return resourceItem;
}
}
使用方法:
{
if (MapHelper.resourceItem == null)
MapResourceManager1.ResourceItems.Add(MapHelper.GetResourceItem());
//Map1控件的MapResourceManager检查
if (Map1.MapResourceManager == null || Map1.MapResourceManager.Length == 0)
{
MapResourceManager1.ResourceItems.Add(MapHelper.GetResourceItem());
}
//MapResourceManager1控件的ResourceItems检查
if (MapResourceManager1.ResourceItems.Count == 0 || MapResourceManager1.ResourceItems[0] == null)
{
MapResourceManager1.ResourceItems.Add(MapHelper.GetResourceItem());
}
}
2、关于字符集问题的解决:
此问题最开始是因为html用的gb2312,而aspx用的utf-8,这样存在一个矛盾:
a、当webconfig用gb2312时从html到aspx的提交正常,数据库操作能够正确完成,但是Arcgis server自带的例子的编辑功能无法正常进行,操作中出现脚本错误。
b、当把webconfig改成utf-8时,编辑正常但是html到aspx的提交出现问题,aspx页面无法从html中获取参数。
此前的错误就是因为js,html,aspx的编码都不完全一致导致。试验发现:
1)、html不需要更改编码,只改写<meta http-equiv="Content-Type" c />中的charset即可。
2)、js的编码可以用UE或者vs.net编辑器更改,aspx似乎由webconfig的配置来决定。
3)、用ArcGIS Server时web.config最好用utf-8.
此问题最开始是因为html用的gb2312,而aspx用的utf-8,这样存在一个矛盾:
a、当webconfig用gb2312时从html到aspx的提交正常,数据库操作能够正确完成,但是Arcgis server自带的例子的编辑功能无法正常进行,操作中出现脚本错误。
b、当把webconfig改成utf-8时,编辑正常但是html到aspx的提交出现问题,aspx页面无法从html中获取参数。
此前的错误就是因为js,html,aspx的编码都不完全一致导致。试验发现:
1)、html不需要更改编码,只改写<meta http-equiv="Content-Type" c />中的charset即可。
2)、js的编码可以用UE或者vs.net编辑器更改,aspx似乎由webconfig的配置来决定。
3)、用ArcGIS Server时web.config最好用utf-8.