使用C#调用百度地图并实现坐标点的设置以及读取示例
作者:尘世浮沉 发布时间:2023-01-06 02:32:57
标签:C#,百度地图,坐标点,读取
申请百度地图密钥以及查看百度API
网址:http://lbsyun.baidu.com/apiconsole/key#/home
网址:http://lbsyun.baidu.com/jsdemo.htm#c1_3
程序实现功能:
1、输入网址那可以调用本地的html文件,也可以访问其他网站
2、输入坐标、添加坐标按钮,可以将坐标值传入html文件中,显示在经纬度的文本框中
3、定位按钮可以将地图重新定位,定位中心是文本框内的经纬度
4、添加标注点是将文本框内的经纬度添加坐标到地图
5、删除标注按钮可以删除全部标注点
6、鼠标点击地图,可以在文本框内显示点击的坐标经纬度
7、点击开始实时显示按钮,鼠标在地图上移动,可以获得实时经纬度
最终图
利用webBrowser控件展示地图
VS创建工程,添加控件webBrowser,新建.html文件,.html文件参考百度API,将其写入文件
为了能与JS交互,首先引入using System.Security.Permissions;,然后在namespace下必须加入两行:
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
给窗体一个Load事件、、、这个是功能的主要点
然后窗体运行的代码:
private void Form1_Load(object sender, EventArgs e)
{
try
{
//string str_url = Application.StartupPath + "../HTMLPage1.html";// 添加自己添加的html文件名,注意使用相对路径的方法 HTMLPage1.html要复制到debug目录下
string str_url = "C:/Users/12606/Desktop/C#/map/map/HTMLPage1.html";// 添加自己添加的html文件名,注意使用相对路径的方法 HTMLPage1.html要复制到debug目录下
Uri url = new Uri(str_url);
webBrowser1.Url = url; // WebBrowser控件显示的网页路径
webBrowser1.ObjectForScripting = this; // 将当前类设置为可由脚本访问
textBox1.Text = str_url;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
.html文件
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
body, html{
width: 100%;
height: 100%;
overflow: hidden;
margin: 0;
font-family: "微软雅黑";
}
#allmap {
height: 97%;
width: 100%;
}
#r-result {
width: 100%;
font-size: 14px;
}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的密钥"></script>
<title>地图展示</title>
</head>
<body>
<div id="r-result">
<!--文字和文本框--->
经度: <input id="longitude" type="text" style="width:100px; margin-right:10px;" />
纬度: <input id="latitude" type="text" style="width:100px; margin-right:10px;" />
<!--按钮--->
<input type="button" value="定位" onclick="theLocation()" />
<input type="button" value="添加标注" onclick="addPoint()" />
<input type="button" value="删除标注" onclick="deletePoint()" />
</div>
<div id="allmap"></div>
<b id="mouselng">0</b>
<b id="mouselat">0</b>
</body>
</html>
<script type="text/javascript">
// 百度地图API功能
var map = new BMap.Map("allmap"); // 创建Map实例
var point = new BMap.Point(120.371, 30.327); // 创建点坐标
map.centerAndZoom(point, 17); // 初始化地图,设置中心点坐标和地图级别
//向地图添加标注
var marker = new BMap.Marker(point); // 创建标注
map.addOverlay(marker); // 将标注添加到地图中
// 添加带有定位的导航控件
var navigationControl = new BMap.NavigationControl({
// 靠左上角位置
anchor: BMAP_ANCHOR_TOP_LEFT,
// LARGE类型
type: BMAP_NAVIGATION_CONTROL_LARGE,
// 启用显示定位
enableGeolocation: true
});
map.addControl(navigationControl);
//添加地图单击显示GPS事件
function showInfo(e) {
//alert(e.point.lng + ", " + e.point.lat);//窗口显示点击位置的GPS
document.getElementById("longitude").innerText = e.point.lng;
document.getElementById("latitude").innerText = e.point.lat;
document.getElementById("mouselng").innerHTML = e.point.lng;
document.getElementById("mouselat").innerHTML = e.point.lat;
}
map.addEventListener("click", showInfo); //监听事件
//添加地图类型控件
map.addControl(new BMap.MapTypeControl({
mapTypes:[
BMAP_NORMAL_MAP,
BMAP_HYBRID_MAP
]
}));
var opts = { offset: new BMap.Size(100, 20) }
map.addControl(new BMap.ScaleControl(opts));//比例尺控件
//map.addControl(new BMap.ScaleControl()); //比例尺控件
map.setCurrentCity("杭州"); // 仅当设置城市信息时,MapTypeControl的切换功能才能可用
map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
// 用经纬度设置地图中心点
function theLocation() {
if (document.getElementById("longitude").value != "" && document.getElementById("latitude").value != "") {
map.clearOverlays();
var new_point = new BMap.Point(document.getElementById("longitude").value, document.getElementById("latitude").value);
var marker = new BMap.Marker(new_point); // 创建标注
map.addOverlay(marker); // 将标注添加到地图中
map.panTo(new_point); //用经纬度设置地图中心点
}
}
// 添加标注
function addPoint() {
if (document.getElementById("longitude").value != "" && document.getElementById("latitude").value != "") {
var new_point = new BMap.Point(document.getElementById("longitude").value, document.getElementById("latitude").value);
var marker = new BMap.Marker(new_point); // 创建标注
map.addOverlay(marker); // 将标注添加到地图中
}
}
// 删除所有标注
function deletePoint() {
//获取地图上所有的覆盖物,并删除
//map.clearOverlays();
//获取地图上所有的覆盖物,并删除
var allOverlay = map.getOverlays();
for (var i = 0; i < allOverlay.length; i++) {
if (allOverlay[i].toString() == "[object Marker]") {
map.removeOverlay(allOverlay[i]);
}
}
////删除指定经纬度的标注
//if (document.getElementById("longitude").value != "" && document.getElementById("latitude").value != "") {
// var new_point = new BMap.Point(document.getElementById("longitude").value, document.getElementById("latitude").value);
// var marker = new BMap.Marker(new_point); // 创建标注
// map.removeOverlay(marker);
//}
}
map.addEventListener("mousemove", GetlngAndlat);
function GetlngAndlat(e) {
if (e.point.lng != null) {
document.getElementById("mouselng").innerHTML = e.point.lng;
document.getElementById("mouselat").innerHTML = e.point.lat;
}
}
</script>
http://lbsyun.baidu.com/jsdemo.htm#c1_3
百度官方文档给了很多Demo,可根据需求来写
Form1.cs完整代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Security.Permissions;
using System.IO;
namespace map
{
// 而为了能与JS交互,首先引入using System.Security.Permissions;,然后在namespace下必须加入两行:
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]//调用JS代码必要
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
try
{
//string str_url = Application.StartupPath + "../HTMLPage1.html";// 添加自己添加的html文件名,注意使用相对路径的方法 HTMLPage1.html要复制到debug目录下
string str_url = "C:/Users/12606/Desktop/C#/map/map/HTMLPage1.html";// 添加自己添加的html文件名,注意使用相对路径的方法 HTMLPage1.html要复制到debug目录下
Uri url = new Uri(str_url);
webBrowser1.Url = url; // WebBrowser控件显示的网页路径
webBrowser1.ObjectForScripting = this; // 将当前类设置为可由脚本访问
textBox1.Text = str_url;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void button1_Click(object sender, EventArgs e)
{
//本地文件 MapWinForms\bin\Debug
//string url = Application.StartupPath + "\\HTMLPage1.html";
//string url = "C:/Users/12606/Desktop/C#/map/map/HTMLPage1.html";
//textBox1.Text = url;
string url = textBox1.Text.ToString();
//屏蔽js相关错误
webBrowser1.ScriptErrorsSuppressed = true;
//导航显示本地HTML文件
webBrowser1.Navigate(url);
}
private void timer1_Tick(object sender, EventArgs e)
{
try
{
string tag_lng = webBrowser1.Document.GetElementById("mouselng").InnerText;
string tag_lat = webBrowser1.Document.GetElementById("mouselat").InnerText;
double dou_lng, dou_lat;
if (double.TryParse(tag_lng, out dou_lng) && double.TryParse(tag_lat, out dou_lat))
{
label2.Text = "当前坐标:" + dou_lng.ToString("F6") + "," + dou_lat.ToString("F6");//保留小数点后6位
}
}
catch (Exception ee)
{ MessageBox.Show(ee.Message); }
}
private void btnGetLocation_Click(object sender, EventArgs e)
{
if (btnGetLocation.Text == "开启实时坐标")
{
timer1.Enabled = true;
btnGetLocation.Text = "关闭实时坐标";
}
else
{
btnGetLocation.Text = "开启实时坐标";
timer1.Enabled = false;
}
}
private void btnGPS_Click(object sender, EventArgs e)
{
webBrowser1.Document.GetElementById("longitude").InnerText = textBox_longitude.Text;
webBrowser1.Document.GetElementById("latitude").InnerText = textBox_latitude.Text;
}
}
}
源代码
来源:https://blog.csdn.net/qq_39261042/article/details/106419019


猜你喜欢
- 关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种:第一种:通过注解@PostConstruct 和 @
- 以前一直接触.net相关的web开发,现在猛然使用javaWeb还是很不习惯,就连搭个框架也是第一次。一、谈谈项目架构一开始接触.net相关
- 技术要点org.springframework.web.context.request.async.DeferredResult<T&
- 本文实例为大家分享了java动态导出excel压缩成zip下载的具体代码,供大家参考,具体内容如下package pack.java.io.
- 依赖注入介绍先回顾下依赖注入的概念:我们常提起的依赖注入(Dependency Injection)和控制反转(Inversion of C
- 前言在上一篇中,我们初步了解了Sentinel的基本概念,以及其有关限流方面的基础理论,本篇将通过简单的与框架进行整合,看看Sentinel
- 在Android中子线程是不能更新ui的。所以我们要通过其他方式来动态改变ui视图,1、runOnUiThreadactivity提供的一个
- 本文描述了TCP协议,首先简单介绍了TCP完成了一些什么功能;介绍了TCP报文格式,以及典型报文的数据格式;接着从链路控制和数据传输两个方面
- 前言我们都知道在java中进行日期格式化使用simpledateformat。通过格式 yyyy-MM-dd 等来进行格式化,但是你知道其中
- 题目描述Java创建线程的几种方式Java使用Thread类代表线程,所有线程对象都必须是Thread类或者其子类的实例。Java可以用以下
- 本文实例讲述了Android开发之绘制平面上的多边形功能。分享给大家供大家参考,具体如下:计算机里的3D图形其实是由很多个平面组合而成的。所
- ExpandableListView介绍 ExpandableListView的引入 ExpandableListVie
- 1. 文件上传a. 看看@FIEL注解的属性/** * 上传文件时使用该注解 设置文件相关参数 */@Retention(Retention
- 本文实例讲述了C#验证给定字符串形式日期是否合法的方法。分享给大家供大家参考。具体分析如下:这段C#代码用于验证日期的有效性,对于用户输入的
- springboot通过URL方式访问外部资源遇到这个问题时翻阅百度,无外乎就是两种方式第一种在springboot 2.1.8中该方法已过
- 1. RSA加密与解密 -- 使用公钥加密、私钥解密public class RSATool { &nb
- 一、对象的综述面向对象编程(OOP)具有多方面的吸引力。对管理人员,它实现了更快和更廉价的开发与维护过程。对分析与设计人员,建模处理变得更加
- 1、Android内存管理机制1.1 Java内存分配模型先上一张JVM将内存划分区域的图程序计数器:存储当前线程执行目标方法执行到第几行。
- 本文实例讲述了Java基于链表实现栈的方法。分享给大家供大家参考,具体如下:在上几小节中我们实现了基本的链表结构,并在上一节的底部给出了有关
- 目录Web服务器技术讲解PHP:JSP/ServletWeb服务器IISTomcatJAVA jdk中的内容TomcatTomcat根目录下