记一次百度地图的交互开发

1.需求:在开始介绍功能实现之前,先捋一下需求。

总体的场景是这样的,网页的上70%是控件百度地图,底部大约30%的表格,用于显示已经渲染在地图上的marker的直观信息。

需求一:在百度地图上生成一个当前鼠标点击的位置,生成一个marker并展示。

需求二:可以点击地图上生成的marker,生成弹窗展示该marker的基本信息,并提供可点击的功能操作按钮。

需求三:点击下方的表格,跳转到对应的百度地图上的marker,并直接弹出需求二的弹窗。

2.实现思路:

需求一:
先通过在百度地图上的点击事件;

map.addEventListener("click", showInfo);

在map上添加的点击事件,我们将业务代码写在showInfo函数中。通过点击事件,我们能拿到鼠标触发我们需要的经纬度。

function showInfo(e) {
	var pt = e.point;
	$(".BMapLib_sendToPhone").css("display", "none");
	geoc.getLocation(pt, function(rs) {
		//addressComponents对象可以获取到详细的地址信息
		var x = pt.lng;
		var y = pt.lat;
		var addComp = rs.addressComponents;
		var site = addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street;
		//			 + ", " + addComp.streetNumber 
		openInfoWindow3(x, y, site);
	});
}

在获取到经纬度后,调用openInfoWindow3,弹出弹窗填入我们需要的一些marker信息,x,y为传入的经纬度参数,site为街道位置,不需要的可直接忽略。

var searchInfoWindow3 = new BMapLib.SearchInfoWindow(map, content, {
			title: "添加设备", //标题
			width: 850, //宽度
			height: 650, //高度
			panel: "panel", //检索结果面板
			enableAutoPan: true, //自动平移
			searchTypes: []
		});
		searchInfoWindow3.open(new BMap.Point(x, y));
		console.log($('.BMapLib_bubble_content .submitBtn'));
		$('.BMapLib_bubble_content .submitBtn').click(function() {

        })

在openInfoWindow3函数中,我们可以对地图上的弹窗进行配置,基本配置内容如上(可以自行挖掘百度地图),content这个参数是你想要插入的代码文本。值得一提的是,在弹窗中直接放入一个点击事件是无效的,我的解决方案是从它的dom结构中找到它的父节点索引,从而才能找到我自定义的点击事件。

接下来就是在地图上生成marker了。

var pt = new BMap.Point(item.Longitude, item.Latitude);
				var myIcon = new BMap.Icon("./img/icon_lamp.png", new BMap.Size(150, 150));
				var marker2 = new BMap.Marker(pt, {
					icon: myIcon
				}); // 创建标注
				map.addOverlay(marker2);

配置好marker,调用map方法,addOverlay()生成配置好的marker。我这里批量生成放在$.each中。

 

 

需求二(可以点击地图上生成的marker,生成弹窗展示该marker的基本信息,并提供可点击的功能操作按钮。):

和之前需求一的地图点击弹窗事件一样,依然是同样的方法,不过换成了marker对象而已。

marker2.addEventListener('click', mapLayerClick);

将业务代码放在mapLayerClick中

function mapLayerClick(e) {
	var p = e.target.point;
	var lng = p.lng;
	var lat = p.lat;
	openInfoWindow3(lng, lat);
}

对,你没有看错。调用熟悉的函数,但只是名字相同而已。这里通过获取到经纬度,从而在调用的函数中获取到我们需要的信息。

弹窗调用过程同上,点击事件上面需求一也介绍过了。。

需求三(点击下方的表格,跳转到对应的百度地图上的marker,并直接弹出需求二的弹窗。):

$(document).on('click', '.table_tbody tr', function() {
	var para = $(this).attr("value");

	var lng = para.split(",")[0];
	var lat = para.split(",")[1];
	map.panTo(BMap.Point(lng, lat));
	openInfoWindow3(lng, lat);
})

在前面都走过了 需求三就比较方便了。

获得到选中列的经纬度,使用map.panTo()方法,移动我们的地图中心点。这里有点需要注意,此方法的参数百度地图官方的文档中是new 一个 BMap.Point()。在你的项目中去重复new 一个这玩意会出现一个酸爽到不可描述的bug,感兴趣的可以研究研究~

之后再调用之前的弹窗函数,出现的效果就是定位到地图上的marker点并且自动弹出弹窗。

附效果图:

如上图,点击最底部,直接出现在地图上marker的位置并弹出弹窗。

要在Java Swing应用程序中调用百度地图,可以使用百度地图JavaScript API,并将其嵌入到Swing应用程序的Web视图(例如使用JFXPanel)。以下是一些简单的步骤: 1. 在百度地图开发者中心创建一个应用程序,并获取您的API密钥。 2. 在Swing应用程序中创建一个Web视图组件,例如JFXPanel。 3. 使用JavaFX的WebView组件加载百度地图JavaScript API,并将其添加到Swing Web视图中。 4. 编写Java代码来与百度地图JavaScript API交互,例如添加标,获取地图中心点等。 下面是一个简单的示例代码片段,展示了如何在Swing应用程序中加载百度地图: ``` import javafx.embed.swing.JFXPanel; import javafx.scene.Scene; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javax.swing.*; import java.awt.*; public class MapPanel extends JPanel { private JFXPanel jfxPanel; public MapPanel() { setLayout(new BorderLayout()); jfxPanel = new JFXPanel(); add(jfxPanel, BorderLayout.CENTER); Platform.runLater(() -> { WebView webView = new WebView(); WebEngine webEngine = webView.getEngine(); webEngine.load("http://api.map.baidu.com/api?v=2.0&ak=YOUR_API_KEY"); // Replace YOUR_API_KEY with your actual API key Scene scene = new Scene(webView); jfxPanel.setScene(scene); }); } } ``` 在这个示例中,我们创建了一个MapPanel类来承载Web视图组件,使用JavaFX的WebView组件加载百度地图JavaScript API,并将其添加到Swing Web视图中。您需要将YOUR_API_KEY替换为实际的API密钥。 一旦加载了百度地图JavaScript API,您可以使用JavaScript调用Java代码来与Swing应用程序交互。例如,在JavaScript中添加一个标: ``` var marker = new BMap.Marker(new BMap.Point(116.404, 39.915)); // Create a marker at (116.404, 39.915) map.addOverlay(marker); // Add the marker to the map ``` 然后,您可以在Java中编写一个方法来添加标: ``` public void addMarker(double longitude, double latitude) { Platform.runLater(() -> { JSObject window = (JSObject) jfxPanel.getEngine().executeScript("window"); window.call("addMarker", longitude, latitude); // Call the addMarker method in JavaScript }); } ``` 这个方法使用Platform.runLater()来确保在JavaFX线程上执行JavaScript代码。然后,它检索Web视图的JavaScript对象,调用addMarker()方法,并传递经度和纬度参数。 这只是一个简单的示例,演示了如何在Swing应用程序中加载百度地图,并通过JavaScript与Java代码进行交互。要更深入地了解如何使用百度地图JavaScript API,请参阅百度地图开发者中心的文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值