经纬度的实现

经纬度

//地图
//把地图单独做成一个页面,之后在调用
//有特殊要求的可以去天地图自行下载
<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="keywords" content="天地图" />
		<title>经纬度坐标拾取器</title>
		<link rel="stylesheet" href="/lib/layui-v2.5.6/css/layui.css" media="all">
		<script type="text/javascript" src="/lib/jquery-3.4.1/jquery-3.4.1.min.js"></script>
		<script src="/lib/layui-v2.5.6/layui.all.js" charset="utf-8"></script>
		<script type="text/javascript" src="http://api.tianditu.gov.cn/api?v=4.0&tk=a6db954459451c78628c3fc0bece9c1f"></script>
		<style type="text/css">
			body,
			html {
				width: 100%;
				height: 100%;
				margin: 0;
			}

			#mapDiv {
				width: 100%;
				height: 100%
			}

			input,
			b,
			p {
				margin-left: 5px;
				font-size: 14px
			}

			.mapbutton {
				position: absolute;
				top: 10px;
				right: 10px;
				z-index: 9999;
			}

			.tdt-iconLayers-layer {
				top: 45px
			}
		</style>
	</head>
	<body onLoad="onLoad()">
		<div id="mapDiv"></div>
		<div class="mapbutton">
			<input type="hidden" id="lng" />
			<input type="hidden" id="lat" />
			<button type="button" class="layui-btn layui-btn-normal" id="sureGpsBtn">确定</button>
			<button type="button" class="layui-btn layui-btn-normal" id="cancelGpsBtn">取消</button>
		</div>
		<script src="/js/smart-common.js"></script>
		<script>
			//地图中心点
			var mapCenter = {
				'wendeng': [122.011410, 37.072710]
			}
			//行政区边界
			var orgBounds = {
				'wendeng': []
			}
			//当前城市
			var curCity = "wendeng";
			//加载行政区边界数据
			function loadOrgBounds() {
				$.ajax({
					url: smart.getRootPath() + "/page/map/" + curCity + ".js",
					success: function(data) {
						if (!data) {
							return;
						}
						var orgBoundsData = eval('(' + data + ')');
						orgBounds[curCity] = [];
						for (i = 0; i < orgBoundsData.length; i++) {
							var polygonPoints = [];
							for (j = 0; j < orgBoundsData[i].length; j++) {
								polygonPoints.push(new T.LngLat(orgBoundsData[i][j].split(' ')[0], orgBoundsData[i][j].split(' ')[1]));
							}
							var polygon = new T.Polygon(polygonPoints, {
								color: "#3dfbd5",
								weight: 3,
								opacity: 1,
								fillColor: "#FFFFFF",
								fillOpacity: 0,
								lineStyle: "dashed"
							});
							orgBounds[curCity].push(polygon);
						}
						showOrgBounds();
					}
				});
			}
			
			//显示行政区边界
			function showOrgBounds() {
				var bounds = orgBounds[curCity];
				if (!bounds) {
					return;
				}
				for (var i = 0; i < bounds.length; i++) {
					map.addOverLay(bounds[i]);
				}
			}
			var map;
			var zoom = 12;

			function getQueryVariable(variable) {
				var query = window.location.search.substring(1);
				var vars = query.split("&");
				for (var i = 0; i < vars.length; i++) {
					var pair = vars[i].split("=");
					if (pair[0] == variable) {
						return pair[1];
					}
				}
				return false;
			}

			function onLoad() {
				map = new T.Map('mapDiv');
				map.setMapType(TMAP_HYBRID_MAP);
				map.addControl(new T.Control.MapType());
				var lng = getQueryVariable('lng'),
					lat = getQueryVariable('lat');
				if (lng && lat) {
					map.centerAndZoom(new T.LngLat(lng, lat), zoom);
					var marker = new T.Marker(new T.LngLat(lng, lat));
					//向地图上添加标注
					map.addOverLay(marker);
					$('#lng').val(lng);
					$('#lat').val(lat);
				} else {
					//map.centerAndZoom(new T.LngLat(mapCenter[curCity][0], mapCenter[curCity][1]), zoom);
				}
				var cp = new T.CoordinatePickup(map, {
					callback: getLngLat
				})
				cp.addEvent();
				map.centerAndZoom(new T.LngLat(mapCenter[curCity][0], mapCenter[curCity][1]), zoom); //设置地图中心点坐标和地图级别
				loadOrgBounds();

			}

			function getLngLat(lnglat) {
				map.clearOverLays();
				loadOrgBounds();
				//创建标注对象
				var marker = new T.Marker(new T.LngLat(lnglat.lng, lnglat.lat));
				//向地图上添加标注
				map.addOverLay(marker);
				$('#lng').val(lnglat.lng.toFixed(6));
				$('#lat').val(lnglat.lat.toFixed(6));
			}
			$('#sureGpsBtn').click(function() {
				if ($('#lng').val() && $('#lat').val()) {
					var lnglat = {
						'lng': $('#lng').val(),
						'lat': $('#lat').val()
					}
					console.info(parent)
					parent.saveGps(lnglat);
				} else {
					layer.msg("请点击鼠标左键选择位置");
				}
			});
			$('#cancelGpsBtn').click(function() {
				parent.closeGpsWin();
			});
		</script>
	</body>
</html>

//表单
    <div class="layui-form-item">
        <div class="layui-inline layui-col-xs5">
            <label id="lngLa" class="layui-form-label required ">经度</label>
            <div class="layui-input-block">
                <input type="text" name="lng" id="lng" readonly lay-verify="required" lay-reqtext="经度不能为空"
                       placeholder="请选择经度" class="layui-input layAll">
            </div>
        </div>
        <div class="layui-inline layui-col-xs5">
            <label id="latLa" class="layui-form-label  required">纬度</label>
            <div class="layui-input-block">
                <input type="text" name="lat" id="lat" readonly lay-verify="required" lay-reqtext="纬度不能为空"
                       placeholder="请选择纬度" class="layui-input layAll">
            </div>
        </div>
        <div class="" align="center">
            <button type="button" class="layui-btn " id="selectGpsBtn">选择</button>
        </div>
    </div>
    

   //调用方法
        var selectGpsWin;
        //选择经纬度按钮绑定事件  打开弹窗
        $('#selectGpsBtn').click(function () {
            var selectGpsUrl = "/page/map/selectLngLat.html";
            if ($('#lng').val() && $('#lat').val()) {
                selectGpsUrl += '?lng=' + $('#lng').val() + '&lat=' + $('#lat').val();
            }
            selectGpsWin = layer.open({
                title: '点击获取经纬度',
                type: 2,
                shade: 0.2,
                shadeClose: false,
                area: ['1000px', '800px'],
                content: selectGpsUrl
            });
        });

        //选择经纬度弹窗取消按钮 关闭选择经纬度弹窗
        window.closeGpsWin = function () {
            layer.close(selectGpsWin);
        }

        //选择经纬度弹窗确定按钮回调方法
        window.saveGps = function (data) {
            $('#lng').val(data.lng);
            $('#lat').val(data.lat);
            layer.close(selectGpsWin);
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值