3个回答
展开全部
1. 给出一个点的坐标和半径。要求以这个点为圆心,以半径绘出一个圆圈。并且对特定的2个图层进行查询,把落入这个圆圈的空间对象标记出来,并且可以点击产生infowindow
解决思路:
a. 先通过GeometryService (几何服务)绘制出一个buffer的圆。
b. 把这个buffer,也就是一个graphic 放入到 map的graphics中显示
c. 然后定义一个query ,并且对此 query的geometry 指定为这个 buffer. 这样所有的查询结果就会是:查询出的空间对象落入这个buffer中。
d.定义一个featureLayer,对这个featureLayer 和 这个query 进行 selectFeatures 方法调用。
e. 对查询后调用的函数中,进行每个graphic 设置 infowindow 和 加入 map的graphic 。
这样就完成了需求。
/* 以一个map上标记的点 为圆心,以指定的半径标记一个圆圈
do buffer
*/
sky.gis.Context.prototype.doBuffer = function (point,buffer_radius,lineColor,lineWidth,fillColor,infoWidth,infoHeight,url)
{
var infoTemplate = new esri.InfoTemplate();
infoTemplate.setTitle();
infoTemplate.setContent("<iframe src=${iframe_url} height="+infoHeight+" width="+infoWidth+">");
_map.infoWindow.resize(infoWidth, infoHeight);
//setup the buffer parameters
var bufferParams = new esri.tasks.BufferParameters();
bufferParams.geometries = [ point ];
bufferParams.distances = [ buffer_radius ];
bufferParams.outSpatialReference = self._map.spatialReference;
// bufferParams.unit = esri.tasks.GeometryService.esriDecimalDegrees;
bufferParams.unit = esri.tasks.GeometryService.esriMeters;
self.gsvc.buffer(bufferParams,function showBuffer(buffers)
{ //做buffer处理
dojo.forEach(buffers, function(b) {
var bufferGeometry = b;
//根据指定的颜色和线色进行填充。画出一个圆
var sfs = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID,
new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID,lineColor, lineWidth),
fillColor
);
var graphic = new esri.Graphic(bufferGeometry, sfs);
if (graphic.attributes == null)
{
graphic.attributes = new Object();
graphic.attributes.iframe_url = new Object();
console.debug(graphic.attributes.iframe_url);
}
graphic.attributes.iframe_url = url;
// graphic.setInfoTemplate(infoTemplate); //可以指定这个圆圈的infowindow
self._map.graphics.add(graphic); //把这个圆圈显示出来
//开始查询
var query = new esri.tasks.Query();
query.geometry = bufferGeometry; //指定查询出的空间对象一定要落在这个圆圈内
// 查询落入buffer层的门板信息点
self._bufferFeatureLayer = new esri.layers.FeatureLayer(infoLayerURL,
{
mode: esri.layers.FeatureLayer.MODE_SELECTION,
outFields: ["*"]
});
self._bufferFeatureLayer.selectFeatures(query, esri.layers.FeatureLayer.SELECTION_NEW, function(results){
dojo.forEach(results,function(result) { //对查询出的结果进行遍历。把graphic 放入map的graphics中
var graphic = result;
symbol = new esri.symbol.PictureMarkerSymbol('./imgs/infos.jpeg', 32, 32);
graphic.setInfoTemplate(infoTemplate);
graphic.setSymbol(symbol);
self._map.graphics.add(graphic);
});
});
// 查询落入buffer层的摄像头信息点
self._bufferFeatureLayer = new esri.layers.FeatureLayer(cameraLayerURL,
{
mode: esri.layers.FeatureLayer.MODE_SELECTION,
outFields: ["*"]
});
self._bufferFeatureLayer.selectFeatures(query, esri.layers.FeatureLayer.SELECTION_NEW, function(results){
for ( var i = 0; i < results.length; i++) {
var graphic = results[i];
symbol = new esri.symbol.PictureMarkerSymbol('./imgs/camera.gif', 32, 32);
graphic.setInfoTemplate(infoTemplate);
graphic.setSymbol(symbol);
self._map.graphics.add(graphic);
}
});
});
});
};
解决思路:
a. 先通过GeometryService (几何服务)绘制出一个buffer的圆。
b. 把这个buffer,也就是一个graphic 放入到 map的graphics中显示
c. 然后定义一个query ,并且对此 query的geometry 指定为这个 buffer. 这样所有的查询结果就会是:查询出的空间对象落入这个buffer中。
d.定义一个featureLayer,对这个featureLayer 和 这个query 进行 selectFeatures 方法调用。
e. 对查询后调用的函数中,进行每个graphic 设置 infowindow 和 加入 map的graphic 。
这样就完成了需求。
/* 以一个map上标记的点 为圆心,以指定的半径标记一个圆圈
do buffer
*/
sky.gis.Context.prototype.doBuffer = function (point,buffer_radius,lineColor,lineWidth,fillColor,infoWidth,infoHeight,url)
{
var infoTemplate = new esri.InfoTemplate();
infoTemplate.setTitle();
infoTemplate.setContent("<iframe src=${iframe_url} height="+infoHeight+" width="+infoWidth+">");
_map.infoWindow.resize(infoWidth, infoHeight);
//setup the buffer parameters
var bufferParams = new esri.tasks.BufferParameters();
bufferParams.geometries = [ point ];
bufferParams.distances = [ buffer_radius ];
bufferParams.outSpatialReference = self._map.spatialReference;
// bufferParams.unit = esri.tasks.GeometryService.esriDecimalDegrees;
bufferParams.unit = esri.tasks.GeometryService.esriMeters;
self.gsvc.buffer(bufferParams,function showBuffer(buffers)
{ //做buffer处理
dojo.forEach(buffers, function(b) {
var bufferGeometry = b;
//根据指定的颜色和线色进行填充。画出一个圆
var sfs = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID,
new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID,lineColor, lineWidth),
fillColor
);
var graphic = new esri.Graphic(bufferGeometry, sfs);
if (graphic.attributes == null)
{
graphic.attributes = new Object();
graphic.attributes.iframe_url = new Object();
console.debug(graphic.attributes.iframe_url);
}
graphic.attributes.iframe_url = url;
// graphic.setInfoTemplate(infoTemplate); //可以指定这个圆圈的infowindow
self._map.graphics.add(graphic); //把这个圆圈显示出来
//开始查询
var query = new esri.tasks.Query();
query.geometry = bufferGeometry; //指定查询出的空间对象一定要落在这个圆圈内
// 查询落入buffer层的门板信息点
self._bufferFeatureLayer = new esri.layers.FeatureLayer(infoLayerURL,
{
mode: esri.layers.FeatureLayer.MODE_SELECTION,
outFields: ["*"]
});
self._bufferFeatureLayer.selectFeatures(query, esri.layers.FeatureLayer.SELECTION_NEW, function(results){
dojo.forEach(results,function(result) { //对查询出的结果进行遍历。把graphic 放入map的graphics中
var graphic = result;
symbol = new esri.symbol.PictureMarkerSymbol('./imgs/infos.jpeg', 32, 32);
graphic.setInfoTemplate(infoTemplate);
graphic.setSymbol(symbol);
self._map.graphics.add(graphic);
});
});
// 查询落入buffer层的摄像头信息点
self._bufferFeatureLayer = new esri.layers.FeatureLayer(cameraLayerURL,
{
mode: esri.layers.FeatureLayer.MODE_SELECTION,
outFields: ["*"]
});
self._bufferFeatureLayer.selectFeatures(query, esri.layers.FeatureLayer.SELECTION_NEW, function(results){
for ( var i = 0; i < results.length; i++) {
var graphic = results[i];
symbol = new esri.symbol.PictureMarkerSymbol('./imgs/camera.gif', 32, 32);
graphic.setInfoTemplate(infoTemplate);
graphic.setSymbol(symbol);
self._map.graphics.add(graphic);
}
});
});
});
};
上海华然企业咨询
2024-10-21 广告
2024-10-21 广告
上海华然企业咨询有限公司专注于AI与数据合规咨询服务。我们的核心团队来自头部互联网企业、红圈律所和专业安全服务机构。凭借深刻的AI产品理解、上百个AI产品的合规咨询和算法备案经验,为客户提供专业的算法备案、AI安全评估、数据出境等合规服务,...
点击进入详情页
本回答由上海华然企业咨询提供
展开全部
这个是Graphics里面的,官网有例子,Create circles
https://developers.arcgis.com/javascript/jssamples/graphics_create_circles.html
https://developers.arcgis.com/javascript/jssamples/graphics_create_circles.html
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
var polyline = new esri.geometry.Polyline([[xxx,xxx],[xxx,xxx]]);
var symbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,255,0]), 2);
var graphic = new esri.Graphic(polyline, symbol);
map.graphics.add(graphic);
var symbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,255,0]), 2);
var graphic = new esri.Graphic(polyline, symbol);
map.graphics.add(graphic);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询