2016Esri开发竞赛 ArcGIS for Server开发技术答疑 (8月2日)

1.同学:访问server同一URL的时候,报错为:The process cannot access the file 'C:\Program Files\ArcGIS\Server\bin\Log.txt' because it is being used by another process,怎么解决?
工程师:重启server系统服务后再进行测试。
 
2.同学:server发布的服务,怎么实现网络共享?
工程师:通过服务的url,同一网络内的其他客户端就可以访问服务。
 
3.同学:我们web和Android是分开做的,同一服务不同机器怎么访问?
工程师:在进行web开发或者移动端开发的时候,直接使用服务的url来访问服务,同一服务可以同时被多个客户端访问。

4.同学:runtime for Android没有网络分析的API,可以用什么方式或API在服务器端处理数据返回处理结果?
工程师:runtime for android里支持网络分析,参见:https://developers.arcgis.com/ ... .html,在线执行网络分析时是在服务器端执行的。也可以离线,这有一个例子https://developers.arcgis.com/ ... ting/。 
 
5.同学:利用API进行web开发,是不是不用装VS,只用一个小的编辑器也行啊,VS太大了?
工程师:是的呢,有很多编辑器可以选择。推荐WebStorm。
 
6.同学:用js做的图层要如何与数据库交互呢?如何实现连接数据库?  
工程师:数据必须要先存储在数据库中。可以将数据发布为要素服务,然后在客户端对图层进行编辑。
 
7.同学:使用Server发布的要素服务,空间数据都用ArcSDE存在数据库里,那么,这个要素服务是每次覆盖发布时更新的,还是随着数据库内的空间数据更新而实时更新的呢?
工程师:对要素服务进行编辑后数据库中的数据会实时更新,是同步的一个过程。
 
8.同学:如果使客户端要素改变 -> 数据库数据改变成立,
那反过来数据库数据改变->客户端要素改变也成立吗?如果两边都成立,那么是不是可以不通过arcgis api for js中修改要素的接口,而直接通过C#等后端语言,在不重新发布要素服务的情况下,更改空间数据表中的普通字段来使得客户端要素服务中的普通字段更新呢?
工程师:可以,直接更改数据库中源数据的属性信息,要素服务也会被同步更新。
 
9.同学:如果已知道gps的坐标,需要实时在地图上显示,该如何处理?
工程师:这个GPS的坐标是在实时更新的吗?
同学:是的,不用每次都从数据库中取数据然后做成图层发布吧?
工程师:不用,这种需求可以使用GeoEvent。GeoEvent可以连接任意类型的流数据,包括GPS设备,在创建数据流输出时,选择要素服务,在要素图层中就会自动实时更新要素数据。
 
10.同学:在arcgis_js_api测试中调用server上发布的地图,经常会遇到css被js改变,这是为什么?是哪一段JS改变的。而且即使使用!important改变css优先级也不可以,怎么办?
工程师:你想要更改哪个元素的样式?
同学:改变地图和承载地图的div的样式,主要是长,宽的设置。
工程师:root div不能改,js api就是构建在这个div之上,修改了会破坏API内部逻辑。
同学:那如果我要修改地图的样式不应该只是修改其DIV的样式么?比如map放在viewDiv中,我想改变viewDi的长宽。
工程师:直接更改div的高度和宽度,例如:

viewdiv.png

 
11.同学:用的是js 4.0 ,遇到这么个情况FeatureLayer有一个属性是fields,FeatureLayer可以通过一个fields来创建“-> ”FeatureLayer有一个属性是fields,FeatureLayer可以通过一个fields数组来创建。
但是对于通过URL来创建的FeatureLayer,是不是fields属性为空呢?我想获取一个由url创建的FeatureLayer的所有字段的名字,想通过fields这个属性来做,好像是不行的,也就是说我只能已知FeatureLayer中所有字段的名字,才能拿到对应的字段值,但在我不知道有哪些字段的情况下怎么办呢?
工程师:是说图层中的字段没有传输到客户端?如果是这样,创建FeaturLayer的时候,加上outFields属性,例如:
  var fl = new FeatureLayer({
url: "http://services.arcgis.com/P3e ... ot%3B,
outFields: ["*"]
});



同学:不是,简单的说就是:怎么拿到一个要素图层的所有字段名字,不是字段值,一般获取字段值是通过以字段名字作为索引拿到的,但是现在不知道字段名字怎么办?比如这段代码,我画的两个红圈分别是要素图层的两个字段名字,通过这种方式拿到它们的值,但如果我不知道这个要素图层有哪些字段名怎么办呢?

problem1.png

 
工程师:我们一般是通过访问要素服务的url,查看这个服务有哪些字段,然后在JS中使用。这是最常用也是我们推荐的做法。如果不通过这种方式,想在JS中查看服务的字段信息,可以通过AJAX来发送请求查询服务信息,参见代码:
 var xhr = new XMLHttpRequest()
xhr.open('GET','http://services.arcgis.com/P3ePLMYs2RVChkJx/ArcGIS/rest/services/World_Cities_analysis/FeatureServer/0?f=pjson');
xhr.send()
xhr.onload =function () {
var result = JSON.parse(xhr.responseText);
var fields = result.fields;
console.log(fields)
}

 
以上是此次答疑的主要内容,特别感谢河北师范大学张卓雅同学对此次沟通的整理!
 
 
 
 
 
 
 
 
 
 
已邀请:

要回复问题请先登录注册