百度地图和solr展示资源和附近等功能的实现 三
这里讲怎么描述地图上面的8个点 页面用的
Thymeleaf Thymeleaf 官网:https://www.thymeleaf.org/
描绘点的时候有可能一个经纬度出现多个点,代码里面也有解决。这里直接给出代码。大部分的js和css都可以网上下载,描绘点的图片看提供给大家,这个图也是我们设计根据百度地图上的demo绘制的。
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<html>
<head>
<meta charset="UTF-8">
<title>仪器搜索</title>
<link href="/search/css/page/jquery-ui-1.11.4.css" rel="stylesheet">
<link href="/search/css/page/commonV3.css" rel="stylesheet"
type="text/css" />
<link href="/search/css/page/styleV3.css" rel="stylesheet"
type="text/css" />
<link rel="stylesheet" href="/search/css/plugins/myPagination.css">
<script src="/search/js/jquery-1.9.1.js"></script>
<script src="/search/js/jquery-1.9.1.min.js"></script>
<script src="/search/js/jquery-ui-1.11.4.js"></script>
<script type="text/javascript"
src="/search/js/plugins/jquery.dotdotdot.min.js"></script>
<!-- <script type="text/javascript"
src="https://webapi.amap.com/maps?v=1.4.13&key=你自己的ak"></script> -->
<script type="text/javascript"
src="http://api.map.baidu.com/api?v=2.0&ak=你自己的ak"></script>
<style>
.BMap_cpyCtrl {
display: none;
}
.line-limit-length {
width: 200px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
-webkit-text-overflow: ellipsis;
}
.line-limit-length1 {
width: 200px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
-webkit-text-overflow: ellipsis;
}
</style>
<style>
.shade{width:100%;height:100%;background:rgba(0,0,0,0.8);position:fixed;left:0;top:0;bottom:0;right:0;opacity:0.8;z-index:1001;display:none}
.video-box{width:865px;height:490px;background:#000;display:none;position:absolute;z-index:1002}
</style>
<style type="text/css">
#allmap {
width: 100%;
height: 100%;
overflow: hidden;
margin: 0;
font-family: "微软雅黑";
}
.line-limit-length,.line-limit-length1{
max-width: 150px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
#province li{
text-decoration: none;
list-style: none;//去掉li前面的圆点
display: inline;//让li横向排列
}
</style>
</head>
<body>
<nav th:include="frontdesk/search/searchHeader::nav" class="navbar navbar-default navbar-custom navbar-fixed-top"></nav>
<div class="shade"></div>
<div class="video-box"></div>
<div class="select-result">
<ul>
<li th:each="pro:${provinceInstr}" th:class="${area==pro.name}?'select-cur'" th:onclick="'javascript:changeProvince(\''+${pro.name}+'\')'">
<span th:text="${pro.name}"></span>(<span th:text="${pro.value}"></span>台)
</li>
<!-- <li th:each="pro:${provinceInstr}" th:onclick="changeProvince(+'${pro.name}'+)">
<span th:text="${pro.name}"></span>(<span th:text="${pro.value}"></span>台)
</li> -->
</ul>
</div>
<!-- End 筛选 -->
<div id="search-list">
<ul class="list-result">
<li>区域 <select name="myLocation" id="location">
<option th:value="全部" th:selected="${area==''}">全部</option>
<option th:value="上海市" th:selected="${area==''?false:area == '上海市'}">上海市</option>
<option th:value="江苏省" th:selected="${area==''?false:area == '江苏省'}">江苏省</option>
<option th:value="浙江省" th:selected="${area==''?false:area == '浙江省'}">浙江省</option>
<option th:value="安徽省" th:selected="${area==''?false:area == '安徽省'}">安徽省</option>
</select>
</li>
<li>共找到<span th:text="${totalSize }"></span>台仪器</li>
</ul>
<ul id="list-ul">
<!-- <c:forEach items="${resultList}" var="orgnInstr" varStatus="i"></c:forEach> -->
<li th:each="orgnInstr,status:${resultList}">
<div class="bubble-ng drift-left" th:text="${status.count}"></div>
<div class="search-infor drift-left">
<h3 class="line-limit-length" th:text="${orgnInstr.instrName}"></h3>
<h4 class="line-limit-length1" th:text="${orgnInstr.companyName}"></h4>
</div>
</li>
</ul>
<div id="page" class="pagination" align="center">
</div>
</div>
<!-- End 筛选 -->
<!-- 地图 -->
<div class="search-map">
<div id="map"></div>
<div id="allmap" style="display: none;"></div>
<ul class="select-type">
<li>
<!-- <a <c:if test="${empty instrSort || instrSort == '全部'}">class="type-current"</c:if> href="javascript:void(0)" onclick="instrSortChange('全部')">全部</a> -->
<a th:class="${instrSort=='全部'}?'type-current'" href="javascript:void(0)" onclick="instrSortChange('全部')">全部</a>
<a href="javascript:void(0)" onclick="getLocation()" >附近</a>
<iframe id="iframeId" src="../searchV3/toGaoDeMap" width="1px" height="1px"
frameborder="0"></iframe>
</li>
<!-- <c:forEach items="${codeFieldList}" var="codeField" varStatus="i">
<li onclick="instrSortChange('${codeField.name}')"><a <c:if test="${instrSort == codeField.name }">class="type-current"</c:if> href="javascript:void(0)">${codeField.name}(${codeField.count})</a></li>
</c:forEach> -->
<li th:each="codeField:${codeFieldList}" th:onclick="'javascript:instrSortChange(\''+${codeField.name}+'\')'">
<a href="javascript:void(0)" th:class="${instrSort==codeField.name}?'type-current'"><span th:text="${codeField.name}"></span>(<span th:text="${codeField.count}"></span>)</a>
</li>
</ul>
</div>
<input type="hidden" th:value="${resultListJson}" id="resultListJson"/>
<!-- End 地图 -->
<script src="/search/js/plugins/myPagination.js"></script>
<script src="/search/js/page/z-index-v3.js"></script>
<!-- 分页 -->
<script>
$("#location").change(function(){
var opt=$("#location").val();
$("#area").val(opt);
$("#pageInput").val(0);
indexQuery();
});
function instrSortChange(obj){
if('全部'==obj){
$("#Latitude_longitude").val("");
$("#area").val("");
}
$("#instrSort").val(obj);
$("#pageInput").val(0);
indexQuery();
};
$(function(){
new Page({
id: 'page',
pageTotal: [[${pageTotal}]], //必填,总页数pageTotal
pageAmount: 8, //每页多少条
dataTotal: [[${totalSize}]], //总共多少条数据
curPage:[[${page}]], //初始页码,不填默认为1
pageSize: 5, //分页个数,不填默认为5
//showPageTotalFlag:true, //是否显示数据统计,不填默认不显示
//showSkipInputFlag:true, //是否支持跳转,不填默认不显示
getPage: function (page) {
//获取当前页数
$("#pageInput").val(page);
indexQuery();
}
})
})
</script>
<!-- 地图 -->
<script>
var latlon="";
var resultListJson=$("#resultListJson").val();
var markerArr = JSON.parse(resultListJson);
//解决八个点中重复问题
var count = 0;
for (var i = 0; i < markerArr.length; i++) {
if(i<3){
for (var j = 0; j < i; j++) {
if(markerArr[i].longitude == markerArr[j].longitude){
markerArr[i].longitude = parseFloat(markerArr[i].longitude) + 1/10000 +"";
}
}
}else if(i>=3 && i<5){
for (var j = 0; j < i; j++) {
if(markerArr[i].latitude == markerArr[j].latitude){
markerArr[i].latitude = parseFloat(markerArr[i].latitude) + 1/10000 +"";
}
}
}else if(i>=5 && i<7){
for (var j = 4; j < 6; j++) {
if(markerArr[i].longitude == markerArr[j].longitude){
markerArr[i].longitude = parseFloat(markerArr[i].longitude) -1/10000 +"";
}
}
}else{
for (var j = 0; j < 1; j++) {
if(markerArr[i].latitude == markerArr[j].latitude){
markerArr[i].latitude = parseFloat(markerArr[i].latitude)- 1/10000 +"";
}
}
}
}
var map; //Map实例
function map_init() {
map = new BMap.Map("map");
//第1步:设置地图中心点,上海
latlon=$("#Latitude_longitude").val();
if(latlon.length==0){
var point = new BMap.Point(120.767413,31.3);
//第2步:初始化地图,设置中心点坐标和地图级别。
map.centerAndZoom(point, 9);
}else{
var arr=latlon.split(" ");
var point = new BMap.Point(arr[0],arr[1]);
//第2步:初始化地图,设置中心点坐标和地图级别。
map.centerAndZoom(point, 15);
}
//第3步:启用滚轮放大缩小
map.enableScrollWheelZoom(true);
//第4步:向地图中添加缩放控件
//第6步:向地图中添加比例尺控件
//向地图中添加比例尺控件
//map.addControl(ctrlSca);
//地图、卫星、混合模式切换
//map.addControl(new BMap.MapTypeControl({mapTypes: [BMAP_NORMAL_MAP, BMAP_SATELLITE_MAP, BMAP_HYBRID_MAP]}));
//map.addControl(ctrlNav);
//第5步:向地图中添加缩略图控件
// var ctrlOve = new window.BMap.OverviewMapControl({
// anchor: BMAP_ANCHOR_BOTTOM_RIGHT,
// isOpen: 1
// });
// map.addControl(ctrlOve);
// 定位
if(latlon.length!=0){
var arr=latlon.split(" ");
var maker = addMarker1(new window.BMap.Point(arr[0], arr[1]), 0);
}
//第7步:绘制点
for (var i = 0; i < markerArr.length; i++) {
var p0 = markerArr[i].longitude;
var p1 = markerArr[i].latitude;
var maker = addMarker(new window.BMap.Point(p0, p1), i);
addInfoWindow(maker, markerArr[i], i);
}
}
function getLocation(){
setTimeout(function(){
var lonlat=document.getElementById('iframeId').contentWindow.document.getElementById('lon').value;
var arr=lonlat.split(",");
//坐标转换完之后的回调函数
var ggPoint = new BMap.Point(arr[0],arr[1]);
translateCallback = function (data){
if(data.status === 0) {
showMap(data.points[0].lat,data.points[0].lng);
}
}
setTimeout(function(){
var convertor = new BMap.Convertor();
var pointArr = [];
pointArr.push(ggPoint);
convertor.translate(pointArr, 3, 5, translateCallback)
}, 500);
}, 1000);
}
function getLine(lon,lat) {
$("#endPoint").val(lon+","+lat);
var search_channel=$(".list-header-project").text();
if(search_channel=="search_channel_fwxm"||search_channel=="服务项目"){
$("#search_channel").val("search_channel_fwxm");
}else if(search_channel=="search_channel_instr"||search_channel=="大型仪器"){
$("#search_channel").val("search_channel_instr");
}else if(search_channel=="search_channel_orgn"||search_channel=="服务机构"){
$("#search_channel").val("search_channel_orgn");
}
var lonlat=document.getElementById('iframeId').contentWindow.document.getElementById('lon').value;
$("#startingPoint").val(lonlat);
$("#planRoute").submit();
}
function showMap(lat,lon) {//自定义了一个在浏览器上显示地理信息的函数
var str = "您当前位置的维度:"+lat+",经度:"+lon;
$("#Latitude_longitude").val(lon+" "+lat);
$("#area").val("");
indexQuery();
//调用后台查询附近仪器
}
// 添加标注
function addMarker1(point, index) {
var myIcon = new BMap.Icon("/search/images/marker1.png",
new BMap.Size(23, 25), {
offset: new BMap.Size(15, 25),
imageOffset: new BMap.Size(0, 0 - index * 25)
});
var marker = new BMap.Marker(point, { icon: myIcon });
map.addOverlay(marker);
return marker;
}
function addMarker(point, index) {
var myIcon = new BMap.Icon("/search/images/markers.png",
new BMap.Size(23, 25), {
offset: new BMap.Size(15, 25),
imageOffset: new BMap.Size(0, 0 - index * 25)
});
var marker = new BMap.Marker(point, { icon: myIcon });
map.addOverlay(marker);
return marker;
}
// 添加信息窗口
function addInfoWindow(marker, poi) {
//pop弹窗标题
var html = [];
html.push('<body>');
html.push('<div class="search-pop">');
html.push('<div class="s-pop-top">');
html.push('<div class="search-img drift-left">');
html.push('<img id="popImg" src="'+poi.image+'" onerror="nofind()" alt=""> ');
/* html.push('<img src="/search/images/img01.png" alt=""> th:if="${'+poi.image+'==null}"'); */
html.push('</div>');
html.push('<div class="s-infor drift-left">');
html.push('<h3>'+poi.instrName+'</h3>');
html.push('<ul>');
html.push('<li style="width: 200px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;">所属单位:<span>'+poi.companyName +'</span></li>');
html.push('<li>所属省份:<span>'+poi.province+'</span></li>');
html.push('<li>所属城市:<span>'+poi.city+'</span></li>');
html.push('<li>仪器类别:<span>'+poi.instrSort+'</span></li>');
html.push('<li>产地:<span>'+poi.placeProduce+'</span></li>');
html.push('<li>地址:<span>'+poi.address+'</span></li>');
html.push('</ul>');
html.push('</div>');
html.push('</div>');
html.push('<div class="s-pop-bottom">');
html.push('<ul>');
html.push('<input id="vieUrl" value="'+poi.videoUrl+'" type="hidden">');
html.push('<li><a href="/machine/machineDetail/'+poi.id+'" target="_blank"><img src="/search/images/icon01.png" alt="">查看详情</a></li>');
html.push('<li><a href="#"><img src="/search/images/icon02.png" alt="">我要预约</a></li>');
html.push('<li><a href="#" onclick="getLine('+poi.longitude+','+poi.latitude+')"><img src="/search/images/icon03.png" alt="">查看路线</a></li>');
html.push('<li><a href="https://meeting.tenchong.com/2585" target="_blank"><img src="/search/images/icon04.png" alt="" >视频连线</a></li>');
html.push('<li><a href="/pdf/web/viewer.html" target="_blank"><img src="/search/images/icon05.png" alt="">查看案例</a></li>');
html.push('<li class="video-btn"><a href="#" onclick="showVideos()"><img src="/search/images/icon06.png" alt="">视频详情</a></li>');
html.push('</ul>');
html.push('</div>');
html.push('</div>');
<!-- 视频 -->
html.push('</body>');
var opts = {
width : 340, // 信息窗口宽度
height: 280, // 信息窗口高度
}
var infoWindow = new BMap.InfoWindow(html.join(""),opts);
var openInfoWinFun = function () {
marker.openInfoWindow(infoWindow);
};
marker.addEventListener("mouseover", openInfoWinFun);
function func(){
alert(2);
}
return openInfoWinFun;
}
//异步调用百度js
function map_load() {
var load = document.createElement("script");
load.src = "http://api.map.baidu.com/api?v=1.4&callback=map_init";
document.body.appendChild(load);
}
window.onload = map_load;
</script>
<script>
autodivheight();
function autodivheight(){ //函数:获取尺寸
//获取浏览器窗口高度
var winHeight=0;
if (window.innerHeight)
winHeight = window.innerHeight;
else if ((document.body) && (document.body.clientHeight))
winHeight = document.body.clientHeight;
//通过深入Document内部对body进行检测,获取浏览器窗口高度
if (document.documentElement && document.documentElement.clientHeight)
winHeight = document.documentElement.clientHeight;
//DIV高度为浏览器窗口的高度
document.getElementById("map").style.height= winHeight +"px";
}
window.onresize=autodivheight; //浏览器窗口发生变化时同时变化DIV高度
</script>
<script type="text/javascript">
function nofind(){
$("#popImg").attr("src","/search/images/yqdefault.png");
}
function indexNavPoint(obj) {
window.location.href=obj;
};
$(document).ready(function() {
$(".csj-nav li a").hover(function(){
$(this).find('div').show()
},function(){
$(this).find('div').hide();
});
})
</script>
<script type="text/javascript">
$(".i-pop-top h4").dotdotdot();
function showVideos(url){
var vr=$("#vieUrl").val();
$(".video-box").append('<video id="vio" width="865" height="490" controls></video>');
sourceDom = $("<source src=\""+ vr +"\">");
$(".video-box video").append(sourceDom);
$(".video-box").show();
$(".shade").fadeIn();
popup($('.video-box').fadeIn());
}
$(".shade").click(function(){
$('.video-box,.shade').fadeOut();
var ht=$(".video-box").html();
$(".video-box").empty();
})
function popup(popupName){
var _scrollHeight = $(document).scrollTop(),//获取当前窗口距离页面顶部高度
_windowHeight = $(window).height(),//获取当前窗口高度
_windowWidth = $(window).width(),//获取当前窗口宽度
_popupHeight = popupName.height(),//获取弹出层高度
_popupWeight = popupName.width();//获取弹出层宽度
_posiTop = (_windowHeight - _popupHeight)/2 + _scrollHeight;
_posiLeft = (_windowWidth - _popupWeight)/2;
popupName.css({"left": _posiLeft + "px","top":_posiTop + "px","display":"block"});
$(window).on('resize scroll', function() {
popupName.css('left', ($(window).width() - popupName.outerWidth()) / 2);
popupName.css('top', ($(window).height() - popupName.outerHeight()) / 2 + $(window).scrollTop());
});
}
</script>
</body>
</html>

效果图如下:

这里点描绘出来,后台也讲了solr中取搜索附近,但附近需要获取定位,这个定位我也爬过很多坑。上图实现了附近功能,本人测试描绘出来的点也很准,哈哈哈,暴露了我的位置。下一章讲怎么获取定位。
前端写的不咋地,希望大家包涵

浙公网安备 33010602011771号