最近遇到一个问题,要在地图加载完后获取地图视野的边界,在边界内加上范围内的点。因为刚开始只使用onload使用总是出现js脚本出错,即mapObj.getLngLatBounds().southWest为空或不是对象,分析原始是在地图还没有加载完成就已经执行到此,肯定不能获取到边界对象。因此要判断地图是否加载完成后再来取值。这样在地图没有加载完之前是不会执行获取边界和加点程序语句。
方法如下:在地图加载的方法mapInit中加上一个地图监听事件。
function mapInit() {
var mapoption = new MMapOptions();
mapoption.toolbar = MConstants.ROUND; //设置地图初始化工具条,ROUND:新版圆工具条
mapoption.toolbarPos=new MPoint(20,20); //设置工具条在地图上的显示位置
mapoption.overviewMap = MConstants.SHOW; //设置鹰眼地图的状态,SHOW:显示,HIDE:隐藏(默认)
mapoption.scale = MConstants.SHOW; //设置地图初始化比例尺状态,SHOW:显示(默认),HIDE:隐藏。
mapoption.zoom = 15;//要加载的地图的缩放级别
mapoption.center = new MLngLat(109.944134, 40.580715);//要加载的地图的中心点经纬度坐标
mapoption.language = MConstants.MAP_CN;//设置地图类型,MAP_CN:中文地图(默认),MAP_EN:英文地图
mapoption.fullScreenButton = MConstants.SHOW;//设置是否显示全屏按钮,SHOW:显示(默认),HIDE:隐藏
mapoption.mapComButton = MConstants.SHOW_NO;
mapoption.setZoomEnabled=false;
mapoption.centerCross = MConstants.SHOW;//设置是否在地图上显示中心十字,SHOW:显示(默认),HIDE:隐藏
mapoption.requestNum=100;//设置地图切片请求并发数。默认100。
mapObj = new MMap("map", mapoption); //地图初始化
//注册鼠标拖动地图事件
mapObj.addEventListener(mapObj,MConstants.DRAG_END,endDrag);
function endDrag(param){
MoveMap(param.eventX, param.eventY);
}
//注册地图准备完毕后触发事件
mapObj.addEventListener(mapObj,MConstants.MAP_READY,ready);
function ready(param){
LoadData();
}
}
function LoadData()
{
ajaxGetPoint();
chkinput=$("input:[type=checkbox]");
}
$(document).ready(function(){
mapInit();
});
function ajaxGetPoint()
{
url="/mapinfo/mapsearch/?s=/Index/getmapPoint";
var souest = mapObj.getLngLatBounds().southWest;
var norEast = mapObj.getLngLatBounds().northEast;
// alert(souest.lngX+"aaa");
$.get(url,{lngx1:souest.lngX,laty1:souest.latY,lngx2:norEast.lngX,laty2:norEast.latY},function(data){
if(data!="")
{
var listdata=eval("("+data+")");
$.each(listdata,function(i,n){
// alert(n.Code);
addMarker(n.SName,n.MeterCaliber,n.Address,n.PointLng,n.PointLat,n.Code,n.flag);
});
if (tempmarkArr.length>0)
{
mapObj.addOverlays(tempmarkArr,false);
}
tempmarkArr=new Array();
}
});
}