Bing 地图与 ASP.NET MVC 4.5 集成
Bing Map Integration with ASP.NET MVC 4.5
我无法在我的地图上获取图钉。
我正在使用 Bing 地图,我想在上面显示一些坐标。我已经按照 youtube 上的教程进行操作,但仍然无法成功。
link在这里https://www.youtube.com/watch?v=uVeuib8_MWw&t=2s
这就是我得到的!
在我的 class 模型中,我得到了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Map.Models
{
public class Locations
{
public string latitude { get; set;}
public string longitude { get; set;}
public Locations(string latitude, string longitude)
{
this.latitude = latitude;
this.longitude = longitude;
}
}
}
在我的控制器中我有:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Map.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult GetLocations()
{
var locations = new List<Models.Locations>()
{
new Models.Locations("12.505353","55.335292"),
new Models.Locations("13.505353","55.485292"),
new Models.Locations("13.655353","55.665292")
};
return Json(locations, JsonRequestBehavior.AllowGet);
}
}
}
最后是风景。这里还有地图和图钉。
@{
ViewBag.Title = "Home Page";
}
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0"></script>
<script type="text/javascript">
$(document).ready(function () {
var map = null;
function LoadMap() {
map = new Microsoft.Maps.Map(
document.getElementById('myMap'),
{
credentials: "Bing map key"
});
}
LoadMap();
$('#btnShowLocations').click(function () {
var url = "/Home/GetLocations";
$.getJSON(url, null, function (data) {
$.each(data, function (index, LocationData) {
var pushpin = new Microsoft.Maps.pushpin(map.getCenter(), null);
pushpin.setLocation(new Microsoft.Maps.Location(
LocationData.latitude,
LocationData.longitude));
map.entities.push(pushpin);
map.setView({
zoom: 4, center: new Microsoft.Maps.Location(23.505353, 78.485292)
});
});
});
});
});
</script>
<h2>Bing Map integration in ASP.NET</h2>
<input type="button" id="btnShowLocations" value ="Show All Locations" />
<div id="myMap" style="position:relative; width:600px; height:600px;">
</div>
地图正在运行,我没有收到任何错误。我的问题是当我按下按钮时没有任何反应。我想要的是,当按下按钮时,给定坐标上应该有 3 个图钉。
非常感谢阅读!我希望我能让它工作!
几个问题和建议:
- 主要问题是您的纬度和经度值是字符串,永远不会被解析为 floats/numbers。因此,地图在需要数字时会获取位置的字符串值。
- 您的代码使用的是 Bing Maps V7,不久前被 V8 取代。 V7 的生命周期即将结束,将于 6 月底关闭。这是新映射脚本 URL 到 V8:http://www.bing.com/api/maps/mapcontrol
- document.ready 将在地图脚本加载异步加载之前很久触发。事实上,document.ready 有时会在整个页面加载之前触发,这意味着您的地图 div 可能不可用。我建议使用地图脚本UR的回调参数:例如:http://www.bing.com/api/maps/mapcontrol?callback=LoadMap
- 您正在循环设置地图的视图,这应该可行,但会导致大量额外的无意义刷新,这会降低加载性能。
- 一些建议:
- 将图钉添加到数组,然后将数组添加到地图。这将减少所需的刷新次数。
- 将您的脚本移至页面底部并最后调用地图脚本 URL,因为它是异步加载的。当地图脚本被缓存并按下 "refresh" 时,回调会立即被调用,并且通常在加载其余代码之前调用。将这行代码移到底部可以让您的页面以最快的速度加载。
以下是对您的代码的一些修改建议:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Map.Models
{
public class Locations
{
public double latitude { get; set;}
public double longitude { get; set;}
public Locations(double latitude, double longitude)
{
this.latitude = latitude;
this.longitude = longitude;
}
}
}
您的控制器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Map.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult GetLocations()
{
var locations = new List<Models.Locations>()
{
new Models.Locations(12.505353,55.335292),
new Models.Locations(13.505353,55.485292),
new Models.Locations(13.655353,55.665292)
};
return Json(locations, JsonRequestBehavior.AllowGet);
}
}
}
您的看法:
@{
ViewBag.Title = "Home Page";
}
<h2>Bing Map integration in ASP.NET</h2>
<input type="button" id="btnShowLocations" value ="Show All Locations" />
<div id="myMap" style="position:relative; width:600px; height:600px;"></div>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
var map = null;
function LoadMap() {
map = new Microsoft.Maps.Map('#myMap', {
credentials: "Bing map key"
});
}
$('#btnShowLocations').click(function () {
var url = "/Home/GetLocations";
$.getJSON(url, null, function (data) {
var pins = [];
$.each(data, function (index, LocationData) {
var pushpin = new Microsoft.Maps.Pushpin(new Microsoft.Maps.Location(
LocationData.latitude,
LocationData.longitude));
pins.push(pushpin);
});
map.entities.push(pins);
map.setView({
zoom: 4, center: new Microsoft.Maps.Location(23.505353, 78.485292)
});
});
});
</script>
<script type="text/javascript" src="https://www.bing.com/api/maps/mapcontrol?callback=LoadMap" async defer></script>
我无法在我的地图上获取图钉。 我正在使用 Bing 地图,我想在上面显示一些坐标。我已经按照 youtube 上的教程进行操作,但仍然无法成功。
link在这里https://www.youtube.com/watch?v=uVeuib8_MWw&t=2s
这就是我得到的! 在我的 class 模型中,我得到了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Map.Models
{
public class Locations
{
public string latitude { get; set;}
public string longitude { get; set;}
public Locations(string latitude, string longitude)
{
this.latitude = latitude;
this.longitude = longitude;
}
}
}
在我的控制器中我有:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Map.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult GetLocations()
{
var locations = new List<Models.Locations>()
{
new Models.Locations("12.505353","55.335292"),
new Models.Locations("13.505353","55.485292"),
new Models.Locations("13.655353","55.665292")
};
return Json(locations, JsonRequestBehavior.AllowGet);
}
}
}
最后是风景。这里还有地图和图钉。
@{
ViewBag.Title = "Home Page";
}
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0"></script>
<script type="text/javascript">
$(document).ready(function () {
var map = null;
function LoadMap() {
map = new Microsoft.Maps.Map(
document.getElementById('myMap'),
{
credentials: "Bing map key"
});
}
LoadMap();
$('#btnShowLocations').click(function () {
var url = "/Home/GetLocations";
$.getJSON(url, null, function (data) {
$.each(data, function (index, LocationData) {
var pushpin = new Microsoft.Maps.pushpin(map.getCenter(), null);
pushpin.setLocation(new Microsoft.Maps.Location(
LocationData.latitude,
LocationData.longitude));
map.entities.push(pushpin);
map.setView({
zoom: 4, center: new Microsoft.Maps.Location(23.505353, 78.485292)
});
});
});
});
});
</script>
<h2>Bing Map integration in ASP.NET</h2>
<input type="button" id="btnShowLocations" value ="Show All Locations" />
<div id="myMap" style="position:relative; width:600px; height:600px;">
</div>
地图正在运行,我没有收到任何错误。我的问题是当我按下按钮时没有任何反应。我想要的是,当按下按钮时,给定坐标上应该有 3 个图钉。
非常感谢阅读!我希望我能让它工作!
几个问题和建议:
- 主要问题是您的纬度和经度值是字符串,永远不会被解析为 floats/numbers。因此,地图在需要数字时会获取位置的字符串值。
- 您的代码使用的是 Bing Maps V7,不久前被 V8 取代。 V7 的生命周期即将结束,将于 6 月底关闭。这是新映射脚本 URL 到 V8:http://www.bing.com/api/maps/mapcontrol
- document.ready 将在地图脚本加载异步加载之前很久触发。事实上,document.ready 有时会在整个页面加载之前触发,这意味着您的地图 div 可能不可用。我建议使用地图脚本UR的回调参数:例如:http://www.bing.com/api/maps/mapcontrol?callback=LoadMap
- 您正在循环设置地图的视图,这应该可行,但会导致大量额外的无意义刷新,这会降低加载性能。
- 一些建议:
- 将图钉添加到数组,然后将数组添加到地图。这将减少所需的刷新次数。
- 将您的脚本移至页面底部并最后调用地图脚本 URL,因为它是异步加载的。当地图脚本被缓存并按下 "refresh" 时,回调会立即被调用,并且通常在加载其余代码之前调用。将这行代码移到底部可以让您的页面以最快的速度加载。
以下是对您的代码的一些修改建议:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Map.Models
{
public class Locations
{
public double latitude { get; set;}
public double longitude { get; set;}
public Locations(double latitude, double longitude)
{
this.latitude = latitude;
this.longitude = longitude;
}
}
}
您的控制器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Map.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult GetLocations()
{
var locations = new List<Models.Locations>()
{
new Models.Locations(12.505353,55.335292),
new Models.Locations(13.505353,55.485292),
new Models.Locations(13.655353,55.665292)
};
return Json(locations, JsonRequestBehavior.AllowGet);
}
}
}
您的看法:
@{
ViewBag.Title = "Home Page";
}
<h2>Bing Map integration in ASP.NET</h2>
<input type="button" id="btnShowLocations" value ="Show All Locations" />
<div id="myMap" style="position:relative; width:600px; height:600px;"></div>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
var map = null;
function LoadMap() {
map = new Microsoft.Maps.Map('#myMap', {
credentials: "Bing map key"
});
}
$('#btnShowLocations').click(function () {
var url = "/Home/GetLocations";
$.getJSON(url, null, function (data) {
var pins = [];
$.each(data, function (index, LocationData) {
var pushpin = new Microsoft.Maps.Pushpin(new Microsoft.Maps.Location(
LocationData.latitude,
LocationData.longitude));
pins.push(pushpin);
});
map.entities.push(pins);
map.setView({
zoom: 4, center: new Microsoft.Maps.Location(23.505353, 78.485292)
});
});
});
</script>
<script type="text/javascript" src="https://www.bing.com/api/maps/mapcontrol?callback=LoadMap" async defer></script>