define([
'html!templates/tools/toolPlaceSearch',
'modDir/service/addressSearch',
'modDir/service/poiSearch',
'modDir/service/regionSearch',
'modDir/service/routeSearch',
'text!data/address_baike/db.json',
'css!styles/tools/toolPlaceSearch'
], function(tpcLayout, addressSearchF, poiSearchF, regionSearchF, routeSearchF, addressBaikeDb) {
/**
* 索引函数
*/
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(elt, from) {
var len = this.length;
var from = Number(arguments[1]) || 0;
from = (from < 0) ? Math.ceil(from) : Math.floor(from);
if (from < 0) {
from += len;
}
for (; from < len; from++) {
if (from in this && this[from] === elt) {
return from;
}
return -1;
}
}
}
/**
* 模块数据 用于数据存储和外部调用
* @type {Object}
* 数据存放
*/
var modValue = {
markers: {},
options: {
page: 1,
bounds: null,
pageSize: 10,
keyWord: '',
type: 'bounds', // bounds/dis
center: null, //中心点
dis: 0, //圆范围
themeId: null, //类型
pac: 0, //区域pac
init_query_key: '' //原始查询关键字
},
initialized: false, //是否初始化
placeDataResult: null, //查询数据集合
fitBounds: true, //最优显示
circleGroup: null, //圆容器
searchCircle: null,
searchPoup: null,
markerGroup: null, //标记容器
areaGroup: [], //区域容器
searchArea:null,//当前选择的区域信息
hotPoint: [{
"name": "热门",
"id": "0",
"sons": [
{ "name": "交通枢纽", "id": "11" },
{ "name": "加油站", "id": "14" },
{ "name": "停车场", "id": "16" },
{ "name": "桥梁", "id": "12" },
{ "name": "城镇居民点", "id": "51" },
{ "name": "机关团体", "id": "42" },
{ "name": "企事业单位", "id": "43" },
{ "name": "风景区", "id": "63" }
]
}, {
"name": "交通",
"id": "1",
"sons": [{
"name": "交通枢纽",
"id": "11",
"sons": [
{ "name": "山口、关隘", "id": "1341", "sons": "" },
{ "name": "锚地", "id": "2311", "sons": "" },
{ "name": "海港", "id": "2312", "sons": "" },
{ "name": "河港", "id": "2313", "sons": "" },
{ "name": "船闸、升船机战", "id": "2314", "sons": "" },
{ "name": "渡口", "id": "2315", "sons": "" },
{ "name": "长途汽车站", "id": "2322", "sons": "" },
{ "name": "火车站", "id": "1232", "sons": "" },
{ "name": "航空港", "id": "2341", "sons": "" }
]
}, {
"name": "桥梁",
"id": "12",
"sons": [
{ "name": "桥梁", "id": "2361", "sons": "" }
]
}, {
"name": "隧道",
"id": "13",
"sons": [
{ "name": "隧道", "id": "2362", "sons": "" }
]
}, {
"name": "加油站",
"id": "14",
"sons": [
{ "name": "加油站", "id": "2366", "sons": "" }
]
}, {
"name": "导航站",
"id": "15",
"sons": [
{ "name": "灯塔、导航站", "id": "2367", "sons": "" }
]
}, {
"name": "停车场",
"id": "16",
"sons": [
{ "name": "停车场", "id": "2354", "sons": "" }
]
}]
}, {
"name": "设施",
"id": "2",
"sons": [{
"name": "电力",
"id": "21",
"sons": [
{ "name": "电力设施", "id": "246", "sons": "" }
]
}, {
"name": "通信",
"id": "22",
"sons": [
{ "name": "通信设施", "id": "247", "sons": "" }
]
}, {
"name": "水利",
"id": "23",
"sons": [
{ "name": "井", "id": "241", "sons": "" },
{ "name": "蓄水区", "id": "242", "sons": "" },
{ "name": "排灌设施", "id": "243", "sons": "" },
{ "name": "堤堰", "id": "244", "sons": "" },
{ "name": "运河", "id": "245", "sons": "" }
]
}, {
"name": "其他",
"id": "29",
"sons": [
{ "name": "场", "id": "263", "sons": "" }
]
}]
}, {
"name": "水系",
"id": "3",
"sons": [{
"name": "海岛",
"id": "31",
"sons": [
{ "name": "海洋岛屿", "id": "115", "sons": "" }
]
}, {
"name": "河流",
"id": "32",
"sons": [
{ "name": "河流", "id": "121", "sons": "" }
]
}, {
"name": "池塘水库",
"id": "33",
"sons": [
{ "name": "湖泊", "id": "122", "sons": "" },
{ "name": "池塘", "id": "2421", "sons": "" },
{ "name": "水库", "id": "2423", "sons": "" }
]
}]
}, {
"name": "单位",
"id": "4",
"sons": [{
"name": "军事单位",
"id": "41",
"sons": [
{ "name": "军事区", "id": "2175", "sons": "" },
{ "name": "军事单位", "id": "275", "sons": "" }
]
}, {
"name": "机关团体",
"id": "42",
"sons": [
{ "name": "党政机关", "id": "271", "sons": "" },
{ "name": "民间组织", "id": "272", "sons": "" }
]
}, {
"name": "企事业单位",
"id": "43",
"sons": [
{ "name": "事业单位", "id": "273", "sons": "" },
{ "name": "企业", "id": "274", "sons": "" }
]
}, {
"name": "开发区",
"id": "44",
"sons": [
{ "name": "工业区、开发区", "id": "2173", "sons": "" }
]
}, {
"name": "边贸口岸",
"id": "45",
"sons": [
{ "name": "边贸区、口岸", "id": "2174", "sons": "" }
]
}]
}, {
"name": "居民点",
"id": "5",
"sons": [{
"name": "城镇",
"id": "51",
"sons": [
{ "name": "城镇居民点", "id": "221", "sons": "" }
]
}, {
"name": "农村",
"id": "52",
"sons": [
{ "name": "农村居民点", "id": "222", "sons": "" }
]
}, {
"name": "其他",
"id": "59",
"sons": [
{ "name": "工矿点", "id": "223", "sons": "" },
{ "name": "农、林、牧场等", "id": "224", "sons": "" },
{ "name": "其他", "id": "229", "sons": "" }
]
}]
}, {
"name": "旅游",
"id": "6",
"sons": [{
"name": "纪念地",
"id": "61",
"sons": [
{ "name": "纪念地", "id": "251", "sons": "" }
]
}, {
"name": "公园",
"id": "62",
"sons": [
{ "name": "公园", "id": "252", "sons": "" }
]
}, {
"name": "风景区",
"id": "63",
"sons": [
{ "name": "风景名胜区(点)", "id": "253", "sons": "" }
]
}, {
"name": "山地",
"id": "64",
"sons": [
{ "name": "山地", "id": "134", "sons": "" }
]
}]
}] //常用热点关键字
};
/**
* 初始化
* @type {Function}
* @param options {Object}
*/
function init() {
if (!modValue.initialized) {
setLayout();
bindEvent();
subscribe();
modValue.initialized = true;
modValue.markerGroup = map23DControl.group({
action: 'add'
});
addressBaikeDb = JSON.parse(addressBaikeDb);
}
if($(".tools-painting").hasClass('cur')){
// var r = confirm("是否离开标注并保存当前标注?");
// if(r){
// $(".tsAct li.save").click();
// $(".modal .modal-header .close,#userDrawAddModal .form .sure").bind("click",function(){
afac()
// })
// }
} else{
afac()
}
};
function afac(){
ONEMAP.C.publisher.publish({
modName: 'placeSearch',
}, 'tools:active');
ONEMAP.D.panelMore = false;
}
/**
* 数据合并
*/
function initData(options) {
if (typeof(options) != "undefined") {
modValue.options.bounds = options.bounds || map2DViewer.map.getBounds();
modValue.options.keyWord = options.keyWord || '';
modValue.options.type = options.type || 'bounds';
modValue.options.center = options.center || map23DData.view.center;
modValue.options.dis = options.dis || null;
modValue.options.pac = options.pac || 0;
modValue.options.themeId = options.themeId || null;
return modValue.options;
}
};
/**
* 监听事件
*/
function subscribe() {
//ONEMAP.C.publisher.subscribe(rePlaceSearch,'add3d');
ONEMAP.C.publisher.subscribe(clearMarker, 'cleanMap');
//ONEMAP.C.publisher.subscribe(remove, 'tools:active');
};
function unSubscribe() {
ONEMAP.C.publisher.unSubscribe(clearMarker, 'cleanMap');
//ONEMAP.C.publisher.unSubscribe(remove, 'tools:active');
};
function clearMarker() {
map23DControl.group({
action: 'cleanAll',
guid: modValue.markerGroup
})
removeShowArea();
map2DViewer.map.off('dragend zoomend', searchInViewFire);
$(".category-list-wrap").empty();
$(".place-list").empty();
$(".page-wrap").empty();
$("#searchInViewFrom").hide();
$("#searchresult").hide();
}
function remove(options) {
if (options.modName === 'placeSearch') {
// if (modValue.options.type === 'pac') {
// if ($(".tools-search").hasClass('cur')) {
// $(".tools-search").removeClass('cur');
// $("#searchInViewFrom").hide();
// $("#searchresult").hide();
// //clearMarker();
// } else {
// $(".tools-search").addClass('cur');
// $("#searchInViewKey").val('关键字');
// $("#searchInViewFrom").show();
// $("#searchInViewFrom").css({
// top:1,
// })
// $("#searchresult").css({
// top:39
// })
// //$("#searchresult").show();
// }
// $(".tools-serchView").removeClass('cur');
// } else if (modValue.options.type === 'bounds') {
// if ($(".tools-serchView").hasClass('cur')) {
// $(".tools-serchView").removeClass('cur');
// $("#searchInViewFrom").hide();
// $("#searchresult").hide();
// $("#searchInViewFrom").css({
// top:1,
// })
// $("#searchresult").css({
// top:39
// })
// //clearMarker();
// } else {
// $(".tools-serchView").addClass('cur');
// $("#searchInViewFrom").show();
// $("#searchInViewKey").val('关键字');
// $("#searchInViewFrom").css({
// top:95,
// })
// $("#searchresult").css({
// top:134
// })
// //$("#searchresult").show();
// }
// $(".tools-search").removeClass('cur');
// }
} else {
// $(".tools-search").removeClass('cur');
// $(".tools-serchView").removeClass('cur')
// $("#searchInViewFrom").hide();
// $("#searchresult").hide();
cleanMarkerGroup();
removeShowArea();
//clearMarker();
}
};
function setLayout() {
$("#searchresult .cover-content").empty().html(tpcLayout);
$("#placePanel .place-list-wrap").mCustomScrollbar({
scrollInertia: 1000
});
// 海量地图库搜索结果滚动条
// $("#placePanel .thematic-content").mCustomScrollbar({
// scrollInertia: 1000
// });
};
function changSearchType(type) {
clearMarker();
switch (type) {
case 'pac':
modValue.options.type = 'pac';
map2DViewer.map.off('dragend zoomend', searchInViewFire);
break;
case 'bounds':
modValue.options.type = 'bounds';
//map2DViewer.map.on('dragend zoomend', searchInViewFire);
}
};
function searchInViewFire() {
setTimeout(function() {
changeToBoundsSearch({
keyWord: modValue.options.keyWord
})
// var keyWord = $('#searchInViewKey').val();
// if (keyWord != '' && keyWord != '关键字') {
// ONEMAP.D.user.searchKeyWord = keyWord;
// changeToBoundsSearch({
// keyWord: keyWord
// });
// }
}, 600)
};
function globalSearchFire() {
var qkeyWord = $("#searchInViewKey").val();
$(".placeOther").show();
modValue.options.keyWord = qkeyWord;
modValue.options.type = 'pac';
if (qkeyWord != '' && qkeyWord != '请输入地名关键字') {
// 引入海量地图库搜索
require(['modDir/atlas/atlasSearch'], function(atlasSearch) {
atlasSearch.init();
});
// // 天气搜索结果
// meteo.c.http.httpFunction(meteo.c.http.station, qkeyWord, null, function(json) {
// showList(json);
// })
if (modValue.options.type === 'pac') {
ONEMAP.D.user.searchKeyWord = qkeyWord;
globalSearch({
keyWord: qkeyWord
});
map2DViewer.map.off('dragend zoomend', searchInViewFire);
} else {
ONEMAP.D.user.searchKeyWord = qkeyWord;
changeToBoundsSearch({ keyWord: qkeyWord });
map2DViewer.map.on('dragend zoomend', searchInViewFire);
}
var sUrl = onemapUrlConfig.gcmsServiceUrl + '/search/global?query=' + qkeyWord + '&page=1&size=100&order=desc&sort=gcms_id';
sUrl = encodeURI(sUrl);
$(".gcms-search").hide();
//gcms搜索
$.ajax({
url: sUrl,
type: 'GET',
dataType: 'json',
success: function(data) {
// console.log(data)
$(".gcms-search-result-list").html("");
if (data.total > 0) {
$(".gcms-search").show();
if ($("#gcms-search-result-list")) {
$("#gcms-search-result-list").remove();
}
var ul = $('
');
$(data.data).each(function(i, el) {
if (el.record) {
var li = $('' + el.record.gcms_title + ' ');
li.appendTo(ul);
if ($(".gcms-search-result-list li").length < 3) {
li.clone().appendTo($(".gcms-search-result-list"));
}
}
})
ul.appendTo($("#sideBarBody"))
} else {
$(".gcms-search").hide();
}
}
})
}
};
// function showList(json) {
// // console.log(json)
// $('.meteo-search-result-list').html('');
// for (var key in json) {
// var name = json[key].cname ? json[key].cname : json[key].ename;
// var html = "" + name + " ";
// $(".meteo-search-result-list").append(html);
// $('#meteo-station-' + json[key].station).click(function(e) {
// //if(map23DConfig.netType == 2){
// meteo.c.popup.showPopup("" + e.currentTarget.id.split("-")[2], e.currentTarget.innerHTML, 0);
// //}else if(map23DConfig.netType == 1){
// //meteo.c.popup.showPopup("" + e.currentTarget.id.split("-")[2], e.currentTarget.innerHTML, 0,'2017-12-25 20:00:00', '2017-12-25 08:00:00');
// //}
// });
// }
// $('.meteo-search-result-list').show();
// // meteo.c.popup.showPopup("station" , 'name', 0,'2017-12-25 20:00:00', '2017-12-25 08:00:00');
// }
function globalSearch(options) {
modValue.fitBounds = true;
//判断输入
if (options.keyWord == '') {
alert('查询关键字不能为空');
return false;
}
if (options.keyWord.length < 2) {
alert('查询关键字不允许输入单字');
$('#header .h-center .close').click();
return false;
}
if ((/[^\a-\z\A-\Z0-9\u4E00-\u9FA5\s\"]/g).test(options.keyWord)) {
alert('查询关键字只能包含英文、数字、中文');
return false;
}
modValue.options.init_query_key = options.keyWord;
getAreaInfo({ keywords: options.keyWord }, function(data) {
if (data.residue_addr_name.length > 0 && (data.address[0]['area_name'].length > 0 || data.address[0]['name'].length > 0)) {
//即包含匹配的区域列表又包含二次查询关键字
createNameListForSearchResultHtml(data);
initData({ type: 'pac', pac:'', keyWord: data.residue_addr_name });
getPageResult({ page: 1,wrap:$('#searchresult .place-list') });
} else if (data.residue_addr_name.length == 0 && (data.address[0]['area_name'].length > 0 || data.address[0]['name'].length > 0)) {
//只包含匹配的区域列表
createNameListResultHtml(data);
getPageResult({ page: 1,wrap:$('#searchresult .place-list') });
} else {
//只包含二次查询关键字(原始关键字查询)
initData({ type: 'pac', pac:'', keyWord: modValue.options.init_query_key });
getPageResult({ page: 1 });
}
//return false;
// if (data.residue_addr_name.length > 0) {
// if (initData({ type: 'pac', keyWord: data.residue_addr_name })) {
// //如果只返回一个参考地址
// if (data.address.length == 1) {
// //如果有pac 按pac查
// //if(data.address[0].area_pac>0){
// modValue.options.type = 'pac';
// modValue.options.pac = (data.address[0].area_pac.toString()).length > 2 ? (data.address[0].area_pac.toString().substr(2, data.address[0].area_pac.toString().length - 1)) : data.address[0].area_pac;
// if (modValue.options.pac.length > 7) {
// modValue.options.pac = modValue.options.pac.substr(0, 7);
// }
// if (data.address[0].area_lat != 0 && data.address[0].area_lon != 0) {
// addShowArea({
// lat: data.address[0].area_lat,
// lng: data.address[0].area_lon,
// demand: pac2Demand(pac)
// })
// if (map23DData.display.map2D) {
// map2DViewer.map.setView([data.address[0].area_lat, data.address[0].area_lon], getZoom({ 'pac': modValue.options.pac }));
// setTimeout(function() { ONEMAP.C.publisher.publish('placeSearch', 'mapChange'); }, 200);
// } else if (map23DData.display.map3D) {
// fly3DInView(data.address[0].area_lat, data.address[0].area_lon, getZoom({ 'pac': modValue.options.pac }));
// }
// }
// getPageResult({ page: 1 });
// //如果返回多个参考地址,列出参考地址
// } else {
// createNameListForSearchResultHtml(data);
// }
// }
// } else {
// if (data.address[0].pac > 0) {
// if (initData({ keyWord: data.name })) {
// if (map23DData.display.map2D) {
// map2DViewer.map.setView([data.address[0].lat, data.address[0].lon], getZoom({ 'pac': data.address[0].pac.toString().substr(2, data.address[0].pac.toString().length - 1) }));
// setTimeout(function() { ONEMAP.C.publisher.publish('placeSearch', 'mapChange'); }, 200);
// } else if (map23DData.display.map3D) {
// fly3DInView(data.address[0].lat, data.address[0].lon, getZoom({ 'pac': data.address[0].pac.toString().substr(2, data.address[0].pac.toString().length - 1) }))
// }
// //ONEMAP.M.toolsBar.setSystemNote({type:'success',message:'已切换至 '+data.address[0].name+' 区域'});
// modValue.placeDataResult = {
// list: [{
// cn: data.address[0].name,
// lon: data.address[0].lon,
// tc: 0,
// tid: 0,
// pac: 0,
// lat: data.address[0].lat,
// id: 0
// }],
// num_pages: 1,
// page: 1,
// per_page: 10,
// total: 10,
// type: 1
// };
// createResultHtml({ fitBounds: false });
// setPlaceResultHtml();
// setTimeout(function() {
// modValue.markers[0].openPopup();
// }, 300);
// }
// } else {
// modValue.fitBounds = true;
// if (initData({})) {
// createNameListResultHtml(data);
// }
// return false;
// }
// }
});
};
//区域尺度(scale)取值: 1: 全球、2: 大洲/大洋、3: 国家、4: 省、5: 市、6: 县
function pac2Demand(pac) {
switch (pac.toString().length) {
case 11:
return 6;
break;
case 9:
return 5;
break;
case 7:
return 4;
break;
case 5:
return 3;
break;
case 3:
return 2;
break;
case 0:
return 1;
break;
}
}
function removeShowArea() {
//移除之前的
if (modValue.areaGroup.length > 0) {
$.each(modValue.areaGroup, function(index, el) {
map23DControl.polygon({
action: 'remove',
guid: el
})
});
}
modValue.areaGroup = [];
}
function addShowArea(options) {
//移除之前的
if (modValue.areaGroup.length > 0) {
$.each(modValue.areaGroup, function(index, el) {
map23DControl.polygon({
action: 'remove',
guid: el
})
});
}
//添加新的
modValue.areaGroup = [];
getRegionBoundary({ lat: options.lat, lng: options.lng, demand: options.demand }, function(data) {
if (data) {
if (data['type'] == 'Polygon') {
//var altitude = [];
//for(var i=0;i 180) {
max_lng = 180;
}
var bounds = {
southWest: [modValue.options.bounds.getSouthWest().lat, min_lng],
northEast: [modValue.options.bounds.getNorthEast().lat, max_lng]
};
poiSearch.getPoiByOptions({ bounds: bounds, keywords: modValue.options.keyWord },
function(data) {
ONEMAP.V.loading.loaded();
if (data.hasOwnProperty('type')) {
if (data.type == 1) {
if (data.hasOwnProperty('data') && data['data'].length > 0) {
data.page = data.page * 1;
modValue.placeDataResult = data;
createResultHtml(options);
//setPlaceResultHtml();
} else {
if(modValue.options.type == "pac"){
setNotResultHtml('没有搜索到 ' + modValue.options.keyWord + ' 的信息,请修改搜索条件。');
}
if(modValue.options.type == 'bounds'){
setNotResultHtml('当前视野内没有搜索到 ' + modValue.options.keyWord + ' 的信息,请移动或缩放地图进行搜索。');
}
}
} else if (data.type == 2) {
data.page = data.page * 1;
modValue.placeDataResult = data;
createResultHtml(options);
//setPlaceResultHtml();
}
} else {
if(modValue.options.type == "pac"){
setNotResultHtml('没有搜索到 ' + modValue.options.keyWord + ' 的信息,请修改搜索条件。');
}
if(modValue.options.type == 'bounds'){
setNotResultHtml('当前视野内没有搜索到 ' + modValue.options.keyWord + ' 的信息,请移动或缩放地图进行搜索。');
}
}
});
} else if (modValue.options.type === 'theme') {
var themeOptions = {
rangeCenter: [modValue.options.center.lat, modValue.options.center.lng],
range: modValue.options.dis
};
if (modValue.options.themeId || modValue.options.keyWord) {
if (modValue.options.themeId) {
themeOptions.themeId = modValue.options.themeId;
}
if (modValue.options.keyWord) {
themeOptions.keywords = modValue.options.keyWord;
}
}
poiSearch.getPoiByOptions(themeOptions, function(data) {
ONEMAP.V.loading.loaded();
if (data.hasOwnProperty('data') && data['data'].length > 0) {
data.page = data.page * 1;
modValue.placeDataResult = data;
createResultHtml(options);
//setPlaceResultHtml();
} else {
setNotResultHtml('没有搜索到相关的信息,请修改搜索条件。');
}
});
} else if (modValue.options.type === 'pac') {
var _searchKeyWord = options.hasOwnProperty('wrap')?modValue.options.init_query_key:modValue.options.keyWord;
poiSearch.getPoiByOptions({ pac: modValue.options.pac, keywords: _searchKeyWord,center:map2DViewer.map.getCenter()}, function(data) {
ONEMAP.V.loading.loaded();
if (data.hasOwnProperty('type')) {
if (data.type == 1) {
if (data.hasOwnProperty('data') && data['data'].length > 0) {
data.page = data.page * 1;
modValue.placeDataResult = data;
createResultHtml(options);
//setPlaceResultHtml();
} else {
if(options.hasOwnProperty('wrap')){
return false;
}
if(modValue.options.type == "pac"){
setNotResultHtml('没有搜索到 ' + modValue.options.init_query_key + ' 的信息,请修改搜索条件。');
}
if(modValue.options.type == 'bounds'){
setNotResultHtml('当前视野内没有搜索到 ' + modValue.options.init_query_key + ' 的信息,请移动或缩放地图进行搜索。');
}
}
} else if (data.type == 2) {
if(options.hasOwnProperty('wrap')){
return false;
}
data.page = data.page * 1;
modValue.placeDataResult = data;
createResultHtml(options);
//setPlaceResultHtml();
}
} else {
if(options.hasOwnProperty('wrap')){
return false;
}
if(modValue.options.type == "pac"){
setNotResultHtml('没有搜索到 ' + modValue.options.init_query_key + ' 的信息,请修改搜索条件。');
}
if(modValue.options.type == 'bounds'){
setNotResultHtml('当前视野内没有搜索到 ' + modValue.options.init_query_key + ' 的信息,请移动或缩放地图进行搜索。');
}
}
});
}
};
/**
* 三维跳转
*/
function fly3DInView(lat, lng, zoom) {
map3DViewer.flyTo({
center: {
lat: lat,
lng: lng
},
zoom: zoom,
heading: 0, //摄像机平面角度 正北为0
tilt: 0, //摄像机倾斜角
});
};
/**
* 构建分页数据
* @type {Function}
* @returns {*}
* @private
*/
function createResultHtml(options) {
if(!options.hasOwnProperty('wrap')){
$(".category-list-wrap").empty();
}
$(".place-list").empty();
$(".page-wrap").empty();
if (modValue.placeDataResult.type == 2) {
$('查询到以下区域中包含 '+modValue.options.keyWord+' ').appendTo($(".category-list-wrap"));
//先判断数据到哪一个级别
//列出一级
var place_fi_length = 0;
for (var place_fi in modValue.placeDataResult['data']) {
if (ONEMAP.T.getObjNameAry(modValue.placeDataResult['data']).length > 1) {
place_fi_length++;
var _placeDl = $(' ');
var _placeDt = $('' + place_fi + '(' + modValue.placeDataResult['data'][place_fi]['count'] + ') ');
modValue.placeDataResult['data'][place_fi].area_name = place_fi;
_placeDl.bind('click', { d: modValue.placeDataResult['data'][place_fi] }, function(e) {
if (modValue.options.type == 'pac') {
if (map23DData.display.map2D) {
map2DViewer.map.setView([e.data.d.lat, e.data.d.lon], getZoom({ 'pac': e.data.d.pac }));
setTimeout(function() { ONEMAP.C.publisher.publish('placeSearch', 'mapChange'); }, 200);
} else if (map23DData.display.map3D) {
fly3DInView(e.data.d.lat, e.data.d.lon, getZoom({ 'pac': e.data.d.pac }));
}
addShowArea({
lat: e.data.d.lat,
lng: e.data.d.lon,
demand: pac2Demand('00'+e.data.d.pac)
})
modValue.options.pac = e.data.d.pac;
setTimeout(function() {
modValue.options.type = 'pac';
getPageResult({ page: 1 });
}, 300);
} else {
if (map23DData.display.map2D) {
map2DViewer.map.setView([e.data.d.lat, e.data.d.lon], map23DData.view.zoom + 2);
setTimeout(function() { ONEMAP.C.publisher.publish('placeSearch', 'mapChange'); }, 200);
} else if (map23DData.display.map2D) {
fly3DInView(e.data.d.lat, e.data.d.lon, map23DData.view.zoom + 2);
}
}
$(".category-list-wrap").empty();
});
_placeDt.appendTo(_placeDl);
_placeDl.appendTo($(".category-list-wrap"));
}else {
//列出二级
var place_se_length = 0;
for (var place_se in modValue.placeDataResult['data'][place_fi]['sub']) {
if (ONEMAP.T.getObjNameAry(modValue.placeDataResult['data'][place_fi]['sub']).length > 1) {
place_se_length++;
var _placeDl_se = $(' ');
var _placeDt_se = $(''+place_fi + place_se + '(' + modValue.placeDataResult['data'][place_fi]['sub'][place_se]['count'] + ') ');
modValue.placeDataResult['data'][place_fi]['sub'][place_se].area_name = place_se;
_placeDl_se.bind('click', { d: modValue.placeDataResult['data'][place_fi]['sub'][place_se] }, function(e) {
if (modValue.options.type == 'pac') {
if (map23DData.display.map2D) {
map2DViewer.map.setView([e.data.d.lat, e.data.d.lon], getZoom({ 'pac': e.data.d.pac }));
setTimeout(function() { ONEMAP.C.publisher.publish('placeSearch', 'mapChange'); }, 200);
} else if (map23DData.display.map2D) {
fly3DInView(e.data.d.lat, e.data.d.lon, getZoom({ 'pac': e.data.d.pac }));
}
addShowArea({
lat: e.data.d.lat,
lng: e.data.d.lon,
demand: pac2Demand('00'+e.data.d.pac)
})
modValue.options.pac = e.data.d.pac;
setTimeout(function() {
modValue.options.type = 'pac';
getPageResult({ page: 1 });
}, 300);
} else {
if (map23DData.display.map2D) {
map2DViewer.map.setView([e.data.d.lat, e.data.d.lon], map23DData.view.zoom + 2);
setTimeout(function() { ONEMAP.C.publisher.publish('placeSearch', 'mapChange'); }, 200);
} else if (map23DData.display.map3D) {
fly3DInView(e.data.d.lat, e.data.d.lon, map23DData.view.zoom + 2);
}
}
$(".category-list-wrap").empty();
});
_placeDt_se.appendTo(_placeDl_se);
_placeDl_se.appendTo($(".category-list-wrap"));
}else {
//如果二级只有一个,列出三级
if (ONEMAP.T.getObjNameAry(modValue.placeDataResult['data'][place_fi]['sub']).length == 1) {
if(ONEMAP.T.getObjNameAry(modValue.placeDataResult['data'][place_fi]['sub'][place_se]['sub']).length > 0){
for (var place_th in modValue.placeDataResult['data'][place_fi]['sub'][place_se]['sub']) {
var _placeDl_th = $(' ');
var _placeDt_th = $(''+place_fi+place_se + place_th + '(' + modValue.placeDataResult['data'][place_fi]['sub'][place_se]['sub'][place_th]['count'] + ') ');
modValue.placeDataResult['data'][place_fi]['sub'][place_se]['sub'][place_th].area_name = place_th;
_placeDl_th.bind('click', { d: modValue.placeDataResult['data'][place_fi]['sub'][place_se]['sub'][place_th] }, function(e) {
if (modValue.options.type == 'pac') {
if (map23DData.display.map2D) {
map2DViewer.map.setView([e.data.d.lat, e.data.d.lon], getZoom({ 'pac': e.data.d.pac }));
setTimeout(function() { ONEMAP.C.publisher.publish('placeSearch', 'mapChange'); }, 200);
} else if (map23DData.display.map3D) {
fly3DInView(e.data.d.lat, e.data.d.lon, getZoom({ 'pac': e.data.d.pac }));
}
addShowArea({
lat: e.data.d.lat,
lng: e.data.d.lon,
demand: pac2Demand('00'+e.data.d.pac)
})
modValue.options.pac = e.data.d.pac;
setTimeout(function() {
modValue.options.type = 'pac';
getPageResult({ page: 1 });
}, 300);
} else {
if (map23DData.display.map2D) {
map2DViewer.map.setView([e.data.d.lat, e.data.d.lon], map23DData.view.zoom + 2);
setTimeout(function() { ONEMAP.C.publisher.publish('placeSearch', 'mapChange'); }, 200);
} else if (map23DData.display.map3D) {
fly3DInView(e.data.d.lat, e.data.d.lon, map23DData.view.zoom + 2);
}
}
$(".category-list-wrap").empty();
//ONEMAP.M.toolsBar.setSystemNote({type:'success',message:'已切换至 '+e.data.d.area_name+' 区域'});
});
_placeDt_th.appendTo(_placeDl_th);
_placeDl_th.appendTo($(".category-list-wrap"));
}
}else {
if (ONEMAP.T.getObjNameAry(modValue.placeDataResult['data'][place_fi]['sub']).length == 1 &&
ONEMAP.T.getObjNameAry(modValue.placeDataResult['data'][place_fi]['sub'][place_se]['sub']).length == 0){
var goData = modValue.placeDataResult['data'][place_fi]['sub'][place_se];
if (modValue.options.type == 'pac') {
if (map23DData.display.map2D) {
map2DViewer.map.setView([goData.lat, goData.lon], getZoom({ 'pac': goData.pac }));
setTimeout(function() { ONEMAP.C.publisher.publish('placeSearch', 'mapChange'); }, 200);
} else if (map23DData.display.map2D) {
fly3DInView(goData.lat, goData.lon, getZoom({ 'pac': goData.pac }));
}
addShowArea({
lat: goData.lat,
lng: goData.lon,
demand: pac2Demand('00'+goData.pac)
})
if(modValue.options.pac.toString().length == goData.pac.toString().length){
modValue.options.pac = goData.pac*100;
}else {
modValue.options.pac = goData.pac;
}
setTimeout(function() {
modValue.options.type = 'pac';
getPageResult({ page: 1 });
}, 300);
} else {
if (map23DData.display.map2D) {
map2DViewer.map.setView([goData.lat, goData.lon], map23DData.view.zoom + 2);
setTimeout(function() { ONEMAP.C.publisher.publish('placeSearch', 'mapChange'); }, 200);
} else if (map23DData.display.map3D) {
fly3DInView(goData.lat, goData.lon, map23DData.view.zoom + 2);
}
}
$(".category-list-wrap").empty();
}else {
place_se_length++;
var _placeDl_se = $(' ');
var _placeDt_se = $(''+place_fi + place_se + '(' + modValue.placeDataResult['data'][place_fi]['sub'][place_se]['count'] + ') ');
modValue.placeDataResult['data'][place_fi]['sub'][place_se].area_name = place_se;
_placeDl_se.bind('click', { d: modValue.placeDataResult['data'][place_fi]['sub'][place_se] }, function(e) {
if (modValue.options.type == 'pac') {
if (map23DData.display.map2D) {
map2DViewer.map.setView([e.data.d.lat, e.data.d.lon], getZoom({ 'pac': e.data.d.pac }));
setTimeout(function() { ONEMAP.C.publisher.publish('placeSearch', 'mapChange'); }, 200);
} else if (map23DData.display.map2D) {
fly3DInView(e.data.d.lat, e.data.d.lon, getZoom({ 'pac': e.data.d.pac }));
}
addShowArea({
lat: e.data.d.lat,
lng: e.data.d.lon,
demand: pac2Demand('00'+e.data.d.pac)
})
if(modValue.options.pac.toString().length == e.data.d.pac.toString().length){
modValue.options.pac = e.data.d.pac*100;
}else {
modValue.options.pac = e.data.d.pac;
}
setTimeout(function() {
modValue.options.type = 'pac';
getPageResult({ page: 1 });
}, 300);
} else {
if (map23DData.display.map2D) {
map2DViewer.map.setView([e.data.d.lat, e.data.d.lon], map23DData.view.zoom + 2);
setTimeout(function() { ONEMAP.C.publisher.publish('placeSearch', 'mapChange'); }, 200);
} else if (map23DData.display.map3D) {
fly3DInView(e.data.d.lat, e.data.d.lon, map23DData.view.zoom + 2);
}
}
$(".category-list-wrap").empty();
});
_placeDt_se.appendTo(_placeDl_se);
_placeDl_se.appendTo($(".category-list-wrap"));
}
}
}
}
}
}
}
} else {
var _searchKeyWord = options.hasOwnProperty('wrap')?modValue.options.init_query_key:modValue.options.keyWord;
if(modValue.options.type == 'bounds'){
$('视野内查询到以下相关 '+_searchKeyWord+' 地名信息 ').appendTo($("#placePanel .place-list"));
//根据视野内范围过滤视野外的数据
for (var bi = 0, bl = modValue.placeDataResult.data.length; bi < bl; bi++) {
var placeb = modValue.placeDataResult.data[bi];
if(!modValue.options.bounds.contains(L.latLng(placeb.lat, placeb.lon))){
delete modValue.placeDataResult.data[bi];
}
}
}else if(modValue.options.type == 'pac'){
$('查询到以下相关 '+_searchKeyWord+' 地名信息 ').appendTo($("#placePanel .place-list"));
}
for (var i = 0, l = modValue.placeDataResult.data.length; i < l; i++) {
var place = modValue.placeDataResult.data[i];
place.pnum = i;
var nLatlng = L.Util.formatHMS([place.lat, place.lon]);
var _placeDl = $(' ');
var _placeDt = $('' + place.cn + ' ');
var _placeDd = $('
' +
'' + nLatlng.lng + ' , ' + nLatlng.lat + '
');
fixAreaRegByPac(place.pac, _placeDd);
_placeDl.bind('click', { d: place }, function(e) {
if (map23DData.display.map2D) {
modValue.markers[e.data.d.pnum].setZIndexOffset((new Date()).getTime());
modValue.markers[e.data.d.pnum].openPopup();
}
//var zoomTo = ((map23DData.view.zoom>14)?map23DData.view.zoom:14);
removeShowArea();
if (map23DData.display.map2D) {
map2DViewer.map.setView([e.data.d.lat, e.data.d.lon], e.data.d.l);
setTimeout(function() { ONEMAP.C.publisher.publish('placeSearch', 'mapChange'); }, 200);
} else if (map23DData.display.map3D) {
fly3DInView(e.data.d.lat, e.data.d.lon, e.data.d.l);
}
$("#placePanel .place-list .cur").removeClass("cur");
$(this).addClass("cur");
});
_placeDt.appendTo(_placeDl);
// if (place.pac) {
// if (addressBaikeDb[place.pac]) {
// var _bakeDd = $('地名百科 ');
// _bakeDd.bind('click', function() {
// var title = $(this).prev().html();
// var bid = $(this).attr("bid");
// require(['modDir/tools/toolAddressBaike'], function(toolAddressBaike) {
// toolAddressBaike.init({
// title: title,
// bid: bid
// });
// });
// })
// _bakeDd.appendTo(_placeDt);
// }
// }
_placeDd.appendTo(_placeDl);
_placeDl.appendTo($(".place-list"));
markerToMap(place);
}
if (modValue.fitBounds && modValue.placeDataResult.data.length > 1) {
if (map23DData.display.map2D) {
map2DViewer.map.fitBounds(map2DViewer.groups[modValue.markerGroup].getBounds(), { 'paddingTopLeft': [100, 100], 'paddingBottomRight': [100, 100],'maxZoom':15 });
} else if (map23DData.display.map3D) {
}
}
var countPages = modValue.placeDataResult.num_pages;
if (countPages == 0) {
countPages = 1;
}
modValue.pageJump = $('第 /' + countPages + '页
');
// modValue.pageJump.appendTo($(".page-wrap"));
//$("#searchresult .page-wrap").show();
modValue.pj = '/' + countPages + '
'
var pageHtmlBtnGroup = $('
').appendTo($(".page-wrap"));
if (modValue.placeDataResult.per_page < modValue.placeDataResult.total) {
if (modValue.placeDataResult.page == 1) {
var abtnNext = $(modValue.pj + '下一页 > ');
pageHtmlBtnGroup.append(abtnNext);
} else if (countPages == modValue.placeDataResult.page && modValue.placeDataResult.total > modValue.placeDataResult.per_page) {
var abtnPrev = $('< 上一页 ' + modValue.pj);
pageHtmlBtnGroup.append(abtnPrev);
} else {
var abtnPrev = $('< 上一页 ' + modValue.pj);
var abtnNext = $('下一页 > ');
pageHtmlBtnGroup.append(abtnPrev).append(abtnNext);
}
$("#searchresult .page-wrap").show();
} else {
$("#searchresult .page-wrap").hide();
}
$("#placePanel .page-wrap .btn").bind('click', function() {
if(options.hasOwnProperty('wrap')){
getPageResult({ page: $(this).attr("pid"),wrap:options.wrap });
}else {
getPageResult({ page: $(this).attr("pid") });
}
});
$("#placeSearchPageJump .page_num").bind('keydown', function(e) {
if (e.keyCode === 13) {
var pageJump = parseInt($("#placeSearchPageJump .page_num").val());
if (!pageJump || pageJump > countPages) {
return;
} else {
if(options.hasOwnProperty('wrap')){
getPageResult({ page: parseInt(pageJump),wrap:options.wrap });
}else {
getPageResult({ page: parseInt(pageJump) });
}
}
}
});
//结果数据大于20条 提示视野内搜索
if (modValue.placeDataResult.total > 20) {
if (!(modValue.options.type == 'bounds')) {
$(".boundsSearchLink").empty();
$("#placePanel .boundsSearchLink").show();
$('').appendTo($(".boundsSearchLink"));
$("#placePanel .boundsSearchLink a").bind('click', function() {
$("#placePanel .boundsSearchLink").hide();
fastBoundsSearch({
keyWord:_searchKeyWord
});
});
}
} else {
$("#placePanel .boundsSearchLink").hide();
}
}
$("#placePanel .place-list-wrap").mCustomScrollbar('update');
};
/**
* 无结果列表
* @type {Function}
* @param notText {String} 无结果说明文字
* @returns {*}
* @private
*/
function setNotResultHtml(notText) {
$(".category-list-wrap").empty();
$(".place-list").empty();
$(".page-wrap").empty();
$('' + notText + '
').appendTo($(".place-list"));
};
/**
* 快速当前区域查询
*/
function fastBoundsSearch(options) {
if(options.hasOwnProperty('keyWord')){
var keyWord = options.keyWord;
}else {
var keyWord = $('#searchInViewKey').val();
}
ONEMAP.D.user.searchKeyWord = keyWord;
changeToBoundsSearch({ keyWord: keyWord });
map2DViewer.map.on('dragend zoomend', searchInViewFire);
};
/**
* 快速搜索
* [fastSearch description]
* @return {[type]} [description]
*/
function fastSearch() {
var poiSearch = new poiSearchF({
page: modValue.options.page,
pageSize: modValue.options.pageSize
});
poiSearch.getPoiByOptions({ keywords: modValue.options.init_query_key },
function(data) {
ONEMAP.V.loading.loaded();
if (data.hasOwnProperty('type')) {
if (data.type == 1) {
if (data.hasOwnProperty('data') && data['data'].length > 0) {
data.page = data.page * 1;
modValue.placeDataResult = data;
createResultHtml({ page: 1 });
//setPlaceResultHtml();
} else {
if(modValue.options.type == "pac"){
setNotResultHtml('没有搜索到 ' + modValue.options.init_query_key + ' 的信息,请修改搜索条件。');
}
if(modValue.options.type == 'bounds'){
setNotResultHtml('当前视野内没有搜索到 ' + modValue.options.init_query_key + ' 的信息,请移动或缩放地图进行搜索。');
}
}
} else if (data.type == 2) {
data.page = data.page * 1;
modValue.placeDataResult = data;
createResultHtml({ page: 1 });
//setPlaceResultHtml();
}
} else {
if(modValue.options.type == "pac"){
setNotResultHtml('没有搜索到 ' + modValue.options.init_query_key + ' 的信息,请修改搜索条件。');
}
if(modValue.options.type == 'bounds'){
setNotResultHtml('当前视野内没有搜索到 ' + modValue.options.init_query_key + ' 的信息,请移动或缩放地图进行搜索。');
}
}
});
};
/**
* 创建getAreaName结果二次查询列表数据
* @param {[type]} options [description]
* @return {[type]} [description]
*/
function createNameListForSearchResultHtml(options) {
$(".category-list-wrap").empty();
$("#searchresult .page-wrap").hide();
$(".place-list").empty();
$(".page-wrap").empty();
$(".fastSearchLink").empty();
//$("#placePanel .fastSearchLink").show();
// $('').appendTo($(".fastSearchLink"));
// $("#placePanel .fastSearchLink a").bind('click', function() {
// $("#placePanel .fastSearchLink").hide();
// fastSearch();
// });
$('您可以选择以下区域进行查询: ').appendTo($(".category-list-wrap"));
for (var i = 0, l = options.address.length; i < l; i++) {
var place = options.address[i];
place.pnum = i;
var nLatlng = L.Util.formatHMS([place.area_lat, place.area_lon]);
var _placeDl = $(' ');
var _placeDt = $('' + place.area_name + ' ');
fixAreaRegByPac(place.area_pac, _placeDt)
_placeDl.bind('click', { d: place }, function(e) {
$("#placePanel .fastSearchLink").hide();
$("#placePanel .place-list .cur").removeClass("cur");
$(this).addClass("cur");
addShowArea({
lat: e.data.d.area_lat,
lng: e.data.d.area_lon,
demand: pac2Demand(e.data.d.area_pac)
})
modValue.options.type = 'pac';
modValue.options.pac = (e.data.d.area_pac.toString()).length > 2 ? (e.data.d.area_pac.toString().substr(2, e.data.d.area_pac.toString().length - 1)) : e.data.d.area_pac;
if (modValue.options.pac.length > 7) {
modValue.options.pac = modValue.options.pac.substr(0, 7);
}
if (map23DData.display.map2D) {
map2DViewer.map.setView([e.data.d.area_lat, e.data.d.area_lon], getZoom({ 'pac': modValue.options.pac }));
setTimeout(function() { ONEMAP.C.publisher.publish('placeSearch', 'mapChange'); }, 200);
} else if (map23DData.display.map3D) {
fly3DInView(e.data.d.area_lat, e.data.d.area_lon, getZoom({ 'pac': modValue.options.pac }));
}
getPageResult({ page: 1 });
});
_placeDt.appendTo(_placeDl);
_placeDl.appendTo($(".category-list-wrap"));
}
};
/**
* 填充侧栏html列表
* @type {Function}
* @returns {*}
* @private
*/
function setPlaceResultHtml(options) {
$("#placePanel .page-wrap .btn").bind('click', function() {
if(options.hasOwnProperty('wrap')){
getPageResult({ page: $(this).attr("pid"),wrap:options.wrap });
}else {
getPageResult({ page: $(this).attr("pid") });
}
});
};
function addPreZero(num) {
var t = (num + '').length,
s = '';
for (var i = 0; i < 11 - t; i++) {
s += '0';
}
return num + s;
}
/**
* 构建分页数据 区域列表最终结果显示
* @type {Function}
* @returns {*}
* @private
*/
function createNameListResultHtml(options) {
$(".category-list-wrap").empty();
// $(".place-list").empty();
// $(".page-wrap").empty();
$('查询到以下相关区域信息 ').appendTo($(".category-list-wrap"));
for (var i = 0, l = options.address.length; i < l; i++) {
var place = options.address[i];
place.pnum = i+100;
var nLatlng = L.Util.formatHMS([place.area_lat, place.area_lon]);
var _placeDl = $(' ');
var _placeDt = $('' + place.area_name + ' ');
var _placeDd = $('
' +
'' + nLatlng.lng + ' , ' + nLatlng.lat + '
');
fixAreaRegByPac(place.area_pac, _placeDd);
_placeDl.bind('click', { d: place }, function(e) {
addShowArea({
lat: e.data.d.area_lat,
lng: e.data.d.area_lon,
demand: pac2Demand(e.data.d.area_pac)
})
$.each(map23DData.markers, function(i, t) {
if (t.pnum === e.data.d.pnum) {
map23DControl.marker({
action: 'remove',
guid: i
})
delete modValue.markers[e.data.d.pnum];
}
})
markerToMap({
lat: e.data.d.area_lat,
lon: e.data.d.area_lon,
id: e.data.d.pnum,
cn: e.data.d.area_name,
pnum: e.data.d.pnum
});
if (map23DData.display.map2D) {
modValue.markers[e.data.d.pnum].setZIndexOffset((new Date()).getTime());
modValue.markers[e.data.d.pnum].openPopup();
}
var pac = (e.data.d.area_pac.toString()).length > 2 ? (e.data.d.area_pac.toString().substr(2, e.data.d.area_pac.toString().length - 1)) : e.data.d.area_pac;
// if (pac.length > 7) {
// pac = pac.substr(0, 7);
// }
var zoomTo = getZoom({ 'pac': pac });
if (map23DData.display.map2D) {
map2DViewer.map.setView([e.data.d.area_lat, e.data.d.area_lon], zoomTo);
setTimeout(function() { ONEMAP.C.publisher.publish('placeSearch', 'mapChange'); }, 200);
} else if (map23DData.display.map3D) {
fly3DInView(e.data.d.area_lat, e.data.d.area_lon, zoomTo);
}
$("#placePanel .category-list-wrap .cur").removeClass("cur");
$(this).addClass("cur");
});
_placeDt.appendTo(_placeDl);
_placeDd.appendTo(_placeDl);
var _area_pac = addPreZero(place.area_pac);
if (_area_pac) {
if (addressBaikeDb[_area_pac]) {
var _bakeDd = $('地名百科 ');
_bakeDd.bind('click', function() {
var title = $(this).prev().html();
var bid = $(this).attr("bid");
require(['modDir/tools/toolAddressBaike'], function(toolAddressBaike) {
toolAddressBaike.init({
title: title,
bid: bid
});
});
})
//_bakeDd.appendTo(_placeDt);
}
}
_placeDl.appendTo($(".category-list-wrap"));
markerToMap({
lat: place.area_lat,
lon: place.area_lon,
id: place.pnum,
cn: place.area_name,
pnum: place.pnum
});
}
if (modValue.fitBounds && options.address.length > 1) {
if (map23DData.display.map2D) {
map2DViewer.map.fitBounds(map2DViewer.groups[modValue.markerGroup].getBounds(), { 'paddingTopLeft': [100, 100], 'paddingBottomRight': [100, 100],'maxZoom':15 });
}
} else {
var pac = (options.address[0].area_pac.toString()).length > 2 ? (options.address[0].area_pac.toString().substr(2, options.address[0].area_pac.toString().length - 1)) : options.address[0].area_pac;
if (pac.length > 7) {
pac = pac.substr(0, 7);
}
var zoomTo = getZoom({ 'pac': pac });
if (map23DData.display.map2D) {
//map2DViewer.map.setView([options.address[0].area_lat, options.address[0].area_lon], zoomTo);
setTimeout(function() { ONEMAP.C.publisher.publish('placeSearch', 'mapChange'); }, 200);
} else if (map23DData.display.map3D) {
fly3DInView(options.address[0].area_lat, options.address[0].area_lon, zoomTo);
}
}
};
/**
* 添加标记到地图
* @type {Function}
* @param obj {Object} marker对象
* @private
*/
function markerToMap(obj) {
var markerObj = {
latlng: [obj.lat, obj.lon],
name: obj.cn,
pguid: obj.id,
pnum: obj.pnum
};
createMarker(markerObj);
};
/**
* 创建冒泡窗
*/
function creatPopupHtml(options) {
var popupHtml = ''
return popupHtml;
}
/**
* 创建地图标记
* @type {Function}
* @param obj {Object} marker
* @returns {*}
* @private
*/
function createMarker(obj) {
if (!modValue.initialized) {
init();
modValue.initialized = true;
// ONEMAP.C.publisher.publish({
// modName: 'userPoint',
// }, 'tools:active');
}
var markerPoup = '' +
'
设为:' +
'
起点 | ' +
'
途经点 | ' +
//'
规避点 | ' +
'
终点 ' +
'
';
var options_popup = {
name: obj.name,
content: markerPoup
}
markerPoup = creatPopupHtml(options_popup);
var markerId = map23DControl.marker({
action: 'add',
groupId: modValue.markerGroup,
pnum: obj.pnum,
objData: obj,
geojson: {
"properties": {
//iconUrl: map23DConfig.map23DAssetsUrl + '/images/layout/marker-icon.png', //+(obj.pnum+1)+'
iconUrl:map23DConfig.map23DAssetsUrl+'/images/layout/marker-icon'+(obj.pnum+1)+'.png',
iconSize: [25, 41],
iconAnchor: [13, 41],
popupAnchor: [0, -39]
},
"geometry": {
"type": "Point",
"coordinates": [obj.latlng[1], obj.latlng[0]]
}
}
});
modValue.markers[obj.pnum] = map2DViewer.markers[markerId];
map2DViewer.markers[markerId].bindPopup(markerPoup, {
closeButton: false,
maxWidth: 200,
minWidth: 200,
title: obj.name
});
map2DViewer.markers[markerId].on("mouseover", function() {
this.setZIndexOffset((new Date()).getTime());
this.openPopup();
$('#placePanel .place-list .cur').removeClass('cur');
$('#plm' + this.pguid).addClass('cur');
});
// map3DViewer.label({
// action: 'update',
// guid: markerId,
// featureType: 'marker',
// label: {
// text: obj.name, //标牌内容
// textColor: '#ffffff', //标牌文字颜色
// lineColor: '#ff0000', //标牌引线及边框颜色
// background: '#FF0000', //标牌背景颜色
// lineTop: 10, //标牌偏移值
// lineLeft: 100 //标牌偏移值
// }
// })
};
function setFav(num) {
//判断是否登录,没有登录进行提示
if (!ONEMAP.D.isLoad) {
ONEMAP.C.publisher.publish({
type: 'warning',
message: '请登录后使用!'
}, 'noteBar::add');
return false;
}
var marker = modValue.markers[num];
var markerData = map23DData.markers[marker.guid]
var objData = {
latlng: [marker.getLatLng().lng, marker.getLatLng().lat],
name: markerData.objData.name,
obj: markerData.objData
}
require(['modDir/user/userPoint'], function(userPoint) {
userPoint.addPoint(objData);
})
};
function setDirections(pguid, type) {
switch (type) {
case 'start':
var marker = modValue.markers[pguid];
setDirectionsPoint(marker.getLatLng().lat, marker.getLatLng().lng, 'start', marker.dirName);
break;
case 'across':
var marker = modValue.markers[pguid];
setDirectionsPoint(marker.getLatLng().lat, marker.getLatLng().lng, 'across', marker.dirName);
break;
case 'avoid':
var marker = modValue.markers[pguid];
setDirectionsPoint(marker.getLatLng().lat, marker.getLatLng().lng, 'avoid', marker.dirName);
break;
case 'stop':
var marker = modValue.markers[pguid];
setDirectionsPoint(marker.getLatLng().lat, marker.getLatLng().lng, 'stop', marker.dirName);
break;
}
};
/**
* 设置起始点
* @type {Function}
* @param _lat {String} 纬度
* @param _lng {String} 经度
* @param _type {String} 类型
* @private
*/
function setDirectionsPoint(_lat, _lng, _type, _name) {
switch (_type) {
case "start":
require(['modDir/tools/toolRouteSearch'], function(toolRouteSearch) {
toolRouteSearch.setStartPoint(new L.LatLng(_lat, _lng), _name);
});
break;
case "across":
require(['modDir/tools/toolRouteSearch'], function(toolRouteSearch) {
toolRouteSearch.setAcrossPoint(new L.LatLng(_lat, _lng), _name);
});
break;
case "avoid":
require(['modDir/tools/toolRouteSearch'], function(toolRouteSearch) {
toolRouteSearch.setAvoidPoint(new L.LatLng(_lat, _lng), _name);
});
break;
case "stop":
require(['modDir/tools/toolRouteSearch'], function(toolRouteSearch) {
toolRouteSearch.setStopPoint(new L.LatLng(_lat, _lng), _name);
});
break;
}
};
/**
* 清除搜索结果
* @return {[type]} [description]
*/
function clearSearch() {
cleanMarkerGroup();
try {
$(".category-list-wrap").empty();
$(".place-list").empty();
$(".page-wrap").empty();
} catch (e) {}
};
/**
* 根据pac的长度返回对应zoom 不包含大洋、大洲
* @param {[type]} options [description]
* @return {[type]} [description]
*/
function getZoom(options) {
var zhixiashi = [15611, 15612, 15631, 15650, 15681, 15682];
//直辖市判断
if (zhixiashi.indexOf(parseInt(options.pac)) != -1) {
return 8;
}
switch (options.pac.toString().length) {
case 3: //国家
return 4;
case 5: //省
return 6;
case 7: //市
return 8;
case 9: //县
return 10;
}
return 12;
};
/**
* 菜单 获取地名
* @type {Function}
* @param latlng {Object} 坐标
* @param abc {Object} 容器
* @param zoom {Int} 缩放等级
* @private
*/
function getPlaceName(latlng, abc, zoom) {
var addressSearch = new addressSearchF();
addressSearch.getAddressInfo({ zoom: (zoom ? zoom : 8), latLng: [latlng.lat, latlng.lng] }, function(data) {
ONEMAP.V.loading.loaded();
abc.find('.address').empty().append(data.data.region);
$("#placePanel .place-list-wrap").mCustomScrollbar('update');
});
};
/**
* 菜单 获取pac所属区域
* @type {Function}
* @private
*/
function fixAreaRegByPac(pac, wrap) {
getPacRegionInfo({ pac: pac }, function(data) {
ONEMAP.V.loading.loaded();
wrap.find('.area').empty().append(data.name_continent + data.name_country + data.name_province + data.name_prefecture + data.name_county);
})
};
function clearContextMenuMarker() {
$.each(map2DViewer.markers, function(i, t) {
map2DViewer.marker({
action: 'remove',
guid: i
})
});
};
/**
* 地图周边搜索
*/
function rightClickPopup(center) {
if (modValue.searchCircle) {
cleanCricle();
}
if (!modValue.initialized) {
setLayout();
}
cleanMarkerGroup();
// ONEMAP.C.publisher.publish({modName: 'clickPlaceSearch',
// }, 'tools:active');
ONEMAP.C.publisher.subscribe(clearContextMenuMarker, 'cleanMap');
modValue.fitBounds = false;
modValue.options.center = center;
if (typeof(modValue.searchPoup) != 'null' || typeof(modValue.searchCircle) != 'null') {
cleanRightClickPopup();
}
//dis是范围等级,对应的公里数:(dis*2+1)*5
var form = '';
var options_popup = {
name: '周边搜索',
content: form
}
form = creatPopupHtml(options_popup);
modValue.searchPoup = new L.Popup({ maxWidth: 300 });
modValue.searchPoup.setLatLng(center)
.setContent(form)
.openOn(map2DViewer.map);
drawCircle(center, 5000);
setMoreSurround();
modValue.options.themeId = null;
modValue.options.keyWord = '';
bingClickEvents();
map2DViewer.map.on('click', cleanRightClickPopup);
};
function bingClickEvents() {
$("#rightClickSearchForm-select").bind('change', function() {
var val = (parseInt($(this).val()) * 2 + 1) * 5000;
map2DViewer.circle({
action: 'update',
geojson: {
"properties": {
radius: val
}
},
guid: modValue.searchCircle
})
//searchCircle.setRadius(val);
map2DViewer.map.fitBounds(map2DViewer.circles[modValue.searchCircle].getBounds());
});
$("#rightClickSearchForm .s-form .btn").bind('click', function() {
var keyWord = $("#rightClickSearchForm .s-form .input").val();
var dis = $("#rightClickSearchForm .select").val();
if (keyWord.length == 0) {
return false;
}
cleanRightClickPopup();
if (initData({ 'keyWord': keyWord, 'dis': dis, 'type': "theme", center: modValue.options.center })) {
$(".category-list-wrap").empty();
$(".place-list").empty();
$(".page-wrap").empty();
/*$("#searchresult").css("top","0px")*/
$("#searchresult").show();
$("#userContent .userInfo").removeClass("active");
getPageResult({ 'page': 1 });
}
});
$('#rightClickSearchForm .s-form .input').on('keydown', function(e) {
if (e.keyCode === 13) {
var keyWord = $("#rightClickSearchForm .s-form .input").val();
var dis = $("#rightClickSearchForm .select").val();
if (keyWord.length == 0) {
return false;
}
cleanRightClickPopup();
if (initData({ 'keyWord': keyWord, 'dis': dis, 'type': "theme", center: modValue.options.center })) {
$(".category-list-wrap").empty();
$(".place-list").empty();
$(".page-wrap").empty();
/*$("#searchresult").css("top","0px")*/
$("#searchresult").show();
$("#userContent .userInfo").removeClass("active");
getPageResult({ 'page': 1 });
}
}
});
};
/**
* 设置分类
*/
function setMoreSurround() {
$('#rightClickSearchForm .s-hot-point-select')
.empty()
.append($('地名分类: ' +
'常用 ' +
'交通 ' +
'设施 ' +
'水系 ' +
'单位 ' +
'居民点 ' +
'旅游 ' +
' ' +
'
'));
$('#rightClickSearchForm .s-hot-point-select .first').bind('change', function() {
$('#placeSearchRoundThemeList').empty();
for (var i = 0, l = modValue.hotPoint.length; i < l; i++) {
if (modValue.hotPoint[i].id === $(this).val()) {
for (var ii = 0, ll = modValue.hotPoint[i].sons.length; ii < ll; ii++) {
var item = $('' + modValue.hotPoint[i].sons[ii].name + ' ');
item.appendTo($('#placeSearchRoundThemeList'));
}
}
}
});
};
/**
* 根据半径画圆
*/
function drawCircle(center, dis) {
modValue.searchCircle = map2DViewer.circle({
action: 'add',
geojson: {
"properties": {
color: '#ff6600',
weight: 1,
fillColor: '#ff6600',
opacity: 1,
fillOpacity: 0.5,
radius: dis //半径米
},
"geometry": {
"type": "Circle",
"coordinates": [center.lng, center.lat]
}
}
});
map2DViewer.map.fitBounds(map2DViewer.circles[modValue.searchCircle].getBounds());
map2DViewer.circles[modValue.searchCircle].on('click', function() {
cleanCricle();
})
};
function findSurround(hid) {
var keyWord = $("#rightClickSearchForm .s-form .input").val();
if (keyWord.length == 0) {
keyWord = 'temp';
}
$(".placeOther").hide();
if (initData({ 'keyWord': keyWord, 'themeId': hid, 'dis': $("#rightClickSearchForm .select").val(), 'type': "theme", 'center': modValue.options.center })) {
if (keyWord == 'temp') {
modValue.options.keyWord = '';
}
/*$("#searchresult").css("top","0px")*/
$("#searchresult").show();
$("#userContent .userInfo").removeClass("active");
getPageResult({ 'page': 1 });
cleanRightClickPopup();
}
};
/**
* 清除右键弹出popup和圆
* @type {Function}
* @private
*/
function cleanRightClickPopup() {
if (map2DViewer.map.hasLayer(modValue.searchPoup)) {
map2DViewer.map.removeLayer(modValue.searchPoup)
}
map2DViewer.map.on('click', cleanCricle);
map2DViewer.map.off('click', cleanRightClickPopup);
};
function cleanCricle() {
map2DViewer.circle({
action: 'remove',
guid: modValue.searchCircle
})
$("#searchresult").hide();
/*$("#searchresult").css("top","39px");*/
map2DViewer.map.off('click', cleanCricle);
};
/**
* 清除标记
* [cleanMarkerGroup description]
* @return {[type]} [description]
*/
function cleanMarkerGroup() {
if (map23DData.display.map3D) {
$.each(map3DViewer.markers, function(value, key) {
// map3DViewer.label({
// action: 'remove',
// guid: value,
// featureType: 'marker'
// })
})
}
map23DControl.group({
action: 'cleanAll',
guid: modValue.markerGroup
})
};
function getAreaInfo(options, callback_func) {
var poiSearch = new poiSearchF();
poiSearch.getAreaInfo({ keywords: options.keywords }, function(data) {
callback_func(data.data);
});
};
function getPacRegionInfo(options, callback_func) {
var regionSearch = new regionSearchF();
regionSearch.getPacRegionInfo({ pac: options.pac }, function(data) {
callback_func(data.data);
});
};
function getRegionBoundary(options, callback_func) {
var regionSearch = new regionSearchF();
regionSearch.getRegionBoundary({ latLng: [options.lat, options.lng], demand: options.demand }, function(data) {
callback_func(data.data);
});
};
function changeToBoundsSearch(options) {
modValue.fitBounds = false;
//changSearchType({'type':'bounds'});
modValue.options.init_query_key = options.keyWord;
if (initData({ type: 'bounds', keyWord: options.keyWord })) {
getPageResult({ page: 1 });
}
};
function bindEvent() {
// $('#searchInViewKey').bind('focusout', function() {
// if ($(this).val() == '') {
// $(this).val('关键字');
// };
// });
$('#btnSearchInView').bind('click', function() {
$("#placePanel .fastSearchLink").hide();
$("#placePanel .boundsSearchLink").hide();
ONEMAP.D.searchFirstResult = false;
// if($(".tools-search").hasClass('cur')){
modValue.options.type = 'pac'
// }else if($('.tools-serchView').hasClass('cur')){
// modValue.options.type = 'bounds'
// }
$("#searchresult").show();
$("#userContent .userInfo").removeClass("active");
map23DControl.group({
action: 'cleanAll',
guid: modValue.markerGroup
})
globalSearchFire();
if ($("#searchInViewKey").val() == "") {
$("#searchresult").hide();
}
});
$('#searchInViewKey').bind('keydown', function(e) {
$("#placePanel .fastSearchLink").hide();
$("#placePanel .boundsSearchLink").hide();
$('#header .h-center .close').show();
$(".userInfo").removeClass("active");
ONEMAP.D.searchFirstResult = false;
if ($("#searchInViewKey").val() != "") {
$('#header .h-center .close').show();
}
if (e.keyCode === 13) {
if ($("#searchInViewKey").val() != "") {
// if($(".tools-search").hasClass('cur')){
modValue.options.type = 'pac'
// }else if($('.tools-serchView').hasClass('cur')){
// modValue.options.type = 'bounds'
// }
$("#searchresult").show();
$("#userContent .userInfo").removeClass("active");
map23DControl.group({
action: 'cleanAll',
guid: modValue.markerGroup
})
globalSearchFire();
}
}
if ($("#searchInViewKey").val() == "") {
$("#searchresult").hide();
$('#header .h-center .close').hide();
clearMarker();
$("#placePanel .thematic-search-list").empty();
ONEMAP.D.user.searchKeyWord = "";
modValue.options.keyWord = "";
//$(".meteo-search-result-list").html("");
$("#placePanel .thematic-content").hide();
ONEMAP.D.panelMore = false;
// $(".abtn-mini-side-bar").removeClass("close");
ONEMAP.C.publisher.publish('handHide', 'layout::sideBar');
}
});
// $('#searchInViewKey').bind('focus', function() {
// $(this).val('');
// clearMarker();
// });
$('#header .h-center .close').unbind('click').bind('click', function() {
$("#gcms-search-result-list").remove(); //移除右侧栏搜索结果
$('#searchInViewKey').val('');
clearMarker();
$(this).hide();
$("#placePanel .thematic-search-list").empty();
ONEMAP.D.user.searchKeyWord = "";
modValue.options.keyWord = "";
//$(".meteo-search-result-list").html("");
$("#thematicSearchKey").val("");
$("#placePanel .thematic-content").hide();
ONEMAP.D.panelMore = false;
// $(".abtn-mini-side-bar").removeClass("close");
ONEMAP.C.publisher.publish('handHide', 'layout::sideBar');
});
//gcms搜索列表
$(".gcms-search .moreLi .fr").unbind('click').bind("click", function() {
//设置zIndex 为最高
var zIndex = ONEMAP.M.sideBar.getZIndex();
$('#gcms-search-result-list').css({ zIndex: zIndex });
$(".gcms-search-result-list").show();
ONEMAP.D.currentSideBarMod = 'gcms-search-result-list';
//开启侧栏
ONEMAP.C.publisher.publish('handShow', 'layout::sideBar');
})
};
return ONEMAP.M.placeSearch = {
init: init,
setFav: setFav,
changSearchType: changSearchType,
modValue: modValue,
rightClickPopup: rightClickPopup,
findSurround: findSurround,
getAreaInfo: getAreaInfo,
setDirections: setDirections,
createMarker: createMarker
}
})