Arcgis 有自己单独的API可以查询某一点附近的景点或餐饮。
该技术博文属于原创,转载请注明出处:http://www.pm-road.com/index.php/2015/01/21/349/
先说一下功能,就是在点击地图的时候,在该点标记出本身的位置,然后,在半径1000m之内,查询出附近的景点名称。
实现方法:1:对地图进行绑定单击事件;
2:得到单点事件的坐标点;
3:添加覆盖物;
4:进行后台查询;
5:将查询结果,在地图上进行点标记;
代码:
mapObj.on(“click”, addPoints);//mapObj为arcgis 的地图对象;addPoints为函数;
function addPoints(map) {
var mapPoint = map.mapPoint;
var x = mapPoint.x;// 102100系
var y = mapPoint.y;// 102100系
mapObj.graphics.clear();
var xqdR = $(“#xqdR”).val();//在页面上得到半径
addMarker_my(x, y);//添加点标记
require(
[ “esri/map”, “esri/layers/FeatureLayer”, “esri/tasks/query”,
“esri/geometry/Circle”, “esri/graphic”,
“esri/InfoTemplate”, “esri/symbols/SimpleMarkerSymbol”,
“esri/symbols/SimpleLineSymbol”,
“esri/symbols/SimpleFillSymbol”,
“esri/renderers/SimpleRenderer”, “esri/config”,
“esri/Color”, “dojo/dom”, “dojo/domReady!” ],
function(Map, FeatureLayer, Query, Circle, Graphic, InfoTemplate,
SimpleMarkerSymbol, SimpleLineSymbol, SimpleFillSymbol,
SimpleRenderer, esriConfig, Color, dom) {
try {
// esriConfig.defaults.io.proxyUrl = “/proxy/”;
esri.config.defaults.io.corsDetection = false;
var prourl = “”;
if (interestType == “餐饮”) {
prourl = arcgisserverurl
+ “ArcGIS/rest/services/HNBASE1129/MapServer/39″;
} else if (interestType == “酒店”) {
prourl = arcgisserverurl
+ “ArcGIS/rest/services/HNBASE1129/MapServer/130″;
} else {// (interestType == “景点”)
prourl = arcgisserverurl
+ “ArcGIS/rest/services/HNBASE1129/MapServer/116″;
}
featureLayer = new FeatureLayer(prourl,
{
infoTemplate : new InfoTemplate(
“Block: ${Name}”, “${*}”),
outFields : [ “Name”, “Name_PY”, “Address”,
“Telephone” ]
});
var symbol = new SimpleMarkerSymbol(
SimpleMarkerSymbol.STYLE_CIRCLE, 12,
new SimpleLineSymbol(SimpleLineSymbol.STYLE_NULL,
new Color([ 247, 34, 101, 0.9 ]), 1),
new Color([ 207, 34, 171, 0.5 ]));
featureLayer.setSelectionSymbol(symbol);
// make unselected features invisible
var nullSymbol = new SimpleMarkerSymbol().setSize(0);
featureLayer.setRenderer(new SimpleRenderer(nullSymbol));
mapObj.addLayer(featureLayer);
var circleSymb = new SimpleFillSymbol(
SimpleFillSymbol.STYLE_NULL, new SimpleLineSymbol(
SimpleLineSymbol.STYLE_SHORTDASHDOTDOT,
new Color([ 105, 105, 105 ]), 2),
new Color([ 255, 255, 0, 0.25 ]));
circle = new Circle({
center : mapPoint,
geodesic : true,
radius : xqdR
});
var graphic = new Graphic(circle, circleSymb);
mapObj.infoWindow.hide();
mapObj.graphics.add(graphic);
var query = new Query();
query.geometry = circle.getExtent();
featureLayer.queryFeatures(query, selectInBuffer);
} catch (e) {
alert(“代理查询失败,请重新尝试”);
}
});
}
function selectInBuffer(response) {
try{
var feature;
var features = response.features;
var inBuffer = [];
// filter out features that are not actually in buffer, since we got all
// points in the buffer’s bounding box
for ( var i = 0; i < features.length; i++) {
feature = features[i];
if (circle.contains(feature.geometry)) {
inBuffer.push(feature.attributes[featureLayer.objectIdField]);
}
}
var query = new esri.tasks.Query();
query.objectIds = inBuffer;
// use a fast objectIds selection query (should not need to go to the
// server)
featureLayer.selectFeatures(query, esri.layers.FeatureLayer.SELECTION_NEW,
function(results) {
// 展现结果
showResults(results);
});
}catch (e) {
alert(“代理查询失败,请重新尝试”);
}
}
function showResults(results) {
var resultCount = results.length;
if (resultCount == 0) {
$(“#xqdContent”).html(“查询异常”);
$(“#xqdContent”).show();
}else{
var resultStr = “<table>”;
for ( var i = 0; i < resultCount; i++) {
var feature = results[i];
var x = feature.geometry.x;
var y = feature.geometry.y;
addMarker(x, y);
var name = feature.attributes.Name;
var phone = feature.attributes.Telephone;
var address = feature.attributes.Address;
resultStr += “<tr><td><h3><font color=\”#00a6ac\”>名称: “
+ name + “</font></h3></td></tr>”;
resultStr += “<tr><td>” + phone + “<br/>” + address
+ “</td></tr>”;
}
resultStr +=”</table>”;
$(“#xqdContent”).html(resultStr);
$(“#xqdContent”).show();
}
}
// 添加点标记
function addMarker_my(lngLatX, lngLatY) {
if (mapObj) {
var symbol = new esri.symbol.PictureMarkerSymbol(appPath
+ “/images/locationmy.png”, 20, 28);
var pt = new esri.geometry.Point(lngLatX, lngLatY);
var graphic = new esri.Graphic(pt, symbol);
if (mapObj.graphics) {
mapObj.graphics.add(graphic);
}
}
}
相关推荐
本文主要介绍了基于 ArcGis Engine 的黑龙江省旅游景点查询系统的设计和实现。由于旅游信息的匮乏和大众获取信息方式的不畅,导致旅游消费者在进行旅游目的地选择时,会面对庞杂而无序的零散信息无从下手。为解决这...
针对不同的对象设计详细的属性字段,例如景点信息包括名称、级别、票价等,餐饮信息则包含名称、价格介绍、联系方式等。 ##### 3. 数据库建设 - **数据分类**:根据GIS数据库的一般要求,将数据分为点状、线状和面...
论文作者闫利爽在马大龙讲师的指导下,使用VC2005作为开发工具,结合ArcGisEngine组件库,设计了一个能够满足查询需求的旅游景点系统。 论文首先阐述了旅游行业的增长趋势,指出随着人们生活水平的提高,旅游已成为...
ArcGIS 10 创建逼真的 3D 视图教程 本文档旨在指导用户使用 ArcGIS 10 ...通过按照本教程的步骤,用户可以创建一个逼真的城市模型,并使用该模型来研究空间感、模拟城市要素、景观、地标或针对学生或游客的旅游景点。
### ArcGIS矢量化详解 #### 一、矢量化概述 ...综上所述,通过以上详细的步骤介绍,我们可以了解到在ArcGIS中如何有效地进行矢量化工作,并为其添加必要的属性信息。这对于GIS工作者来说是非常实用的技术之一。
下面将详细介绍这一数据集的特性以及如何在ArcGIS中应用。 1. **矢量图数据**: 矢量图数据是一种常见的地理信息数据类型,它由点、线、面等几何对象组成,每个对象都有其特定的属性信息。在这个案例中,“澄湖”的...
本文将重点介绍ArcGIS Engine的优势及其在GIS开发中的关键技术,并以VB6作为编程语言,结合具体案例探讨基于ArcGIS Engine进行GIS开发的系统设计与实现方法。 #### 2. ArcGIS Engine开发简介 ArcGIS Engine是ESRI...
标题中的“上海绿地数据shp格式arcgis各种绿地公园字段有名称2022年无偏移”揭示了这是一个地理信息系统(GIS)相关的数据集,主要用于描述2022年上海地区的绿地和公园分布。其中,“shp”是Esri公司开发的ArcGIS...
综合以上信息,这个压缩包提供了2021年12月北京市的旅游景点位置信息,包括名称、地址、电话和类型等详细属性,采用的是GIS领域广泛使用的Shapefile格式,并且与ArcGIS软件兼容。这样的数据可以用于城市规划、旅游...
总之,《完美版资料集ArcGIS10地图矢量化》这份文档详尽地介绍了使用ArcGIS10进行地图矢量化的基本操作,包括地图加载、矢量化处理和属性添加等关键步骤。通过学习和实践,用户可以掌握将栅格地图转换为矢量地图的...
### ARCGIS 9的学习材料知识点详解 #### 一、启动ArcMap与建立新地图 - **启动ArcMap**: ...这些知识点主要围绕如何使用ArcGIS 9进行地图操作、图层管理和属性资料处理等方面展开,非常适合初学者学习和参考。
1. **地图初始化**:使用ArcGIS SDK初始化地图视图,设置底图为高分辨率的卫星或地形图,以便用户清晰地查看乐园的地形和环境。 2. **数据加载**:将迪士尼乐园的景点数据(如坐标、名称、类型等)加载到地图中,这...
2. **景点查询**:游客可以根据关键词搜索感兴趣的景点,系统会返回相关的介绍和位置信息。 3. **最优路径提示**:基于地理信息,系统计算出从一个景点到另一个景点的最短路径,帮助游客规划游览顺序。 该系统的...
1:100 万公路数据得出的研究范围内等级公路数据(shapefile 格式,数据名称为“road”)、数字高程数据一份(数据名称为“dem”)以及一份研究范围栅格地图(其中包含居民点、景点、河流和植被类型数据,数据名称为...
信息检索则提供旅游相关的详细信息,如景点介绍、住宿推荐等。 通过学习和实践【重庆市旅游信息公众查询系统】,开发者不仅能够掌握C#编程和ArcGIS Engine的使用,还能了解如何将GIS技术应用于实际问题解决,为后续...
此外,棕色的旅游标志为游客提供旅游景点信息,而黄色的学校区域标志提醒驾驶员附近有学校,需谨慎驾驶。 四、服务标志 服务标志主要为驾驶员提供各种服务设施信息,如加油、住宿、餐饮等。这类标志通常为绿色背景...