我在谷歌地图中收到此错误。
错误:InvalidValueError:setIcon:不是字符串;没有网址属性;并且没有路径属性
之前它工作正常,我从未更改过我的代码。
我看过一篇帖子 Google Maps Error: Uncaught InvalidValueError: setIcon: not a string; and no url property; and no path property ,但是应用了答案中提到的更改。早些时候它正在工作,现在它也停止了工作。
似乎谷歌在他们的API中改变了一些东西,但不确定究竟是什么。我发现其他一些用户也发现了同样的问题@ https://code.google.com/p/gmaps-api-issues/issues/detail?id=7423
我的网站链接 http://www.advantarealty.net/Search//Condo,Single-Family-Home,Townhome_PropertyType/True_ForMap/ 刚刚在firefox中打开并查看错误控制台。 我已经在地图中包含了以下js文件。
<script src="https://maps.googleapis.com/maps/api/js?v=3&sensor=true&libraries=drawing"></script>
<script type="text/javascript" src="http://google-maps-utility-library-v3.googlecode.com/svn/tags/markerwithlabel/1.1.9/src/markerwithlabel.js"></script>
<div id="map-canvas" class="map-view">hello</div>
以下是我使用的完整javascript代码。
<script>
var defaultLat = '@Html.Raw(Model != null && Model.Count() > 0 ? Convert.ToDouble(Model[0].Latitude) : 0)';
var defaultLong = '@Html.Raw(Model != null && Model.Count() > 0 ? Convert.ToDouble(Model[0].Longitude) : 0)';
if (defaultLat == 0)
defaultLat = $('#SearchLatitude').val();
if (defaultLong == 0)
defaultLong = $('#SearchLongitude').val();
// var json = JSON.parse('@str');
// Add this for testing only
var json = JSON.parse('[ { "DaysOnAdvanta": "400", "Name": null, "com_address": null, "MLS_ID": "miamimls", "MLS_STATE_ID": "FL", "MLS_LISTING_ID": "A1677437", "mls_office_id": null, "MLS_Office_Name": "EWM Realty International ", "MLS_AGENT_ID": null, "MLS_Agnet_Name": null, "SALE_PRICE": "400000", "Address": "5800 N BAY RD", "city": "Miami Beach", "zip_code": "33140", "remarks": "", "property_type_code": "Residential", "County": null, "Subdivision": "LA GORCE GOLF SUB PB 14-4", "status_code": "Active", "Year_Built": "1929", "acres": "0", "LOT_SQUARE_FOOTAGE": "52881", "BUILDING_SQUARE_FOOTAGE": "12153", "Bedroom_Count": "7", "Full_Baths": "8", "Half_Baths": null, "Fire_place_Number": null, "has_virtual_tour": null, "has_garage": null, "has_firepalce": null, "has_horses": null, "has_pool": null, "has_golf": null, "has_tennis": null, "is_gated": null, "is_waterfront": null, "has_photo": null, "photo_quantity": "25", "photo_url": null, "virtual_tour_url": "http://www.obeo.com/u.aspx?ID=630180", "last_updated": null, "listing_date": null, "garage": null, "last_image_transaction": null, "complex_building": null, "display_address": null, "advertise": null, "IMAGE": "/images/PhotoNotAvailable_Large.gif ", "visit": null, "inforequest": null, "FollwID": 0, "Latitude": "25.83835", "Longitude": "-80.13273", "Special": "", "price_change_direction": "", "location_id": "48153" } ]');
// console.log(json);
var contentString = "<div style='width: 200px; height: 250px;text-align: center;'>" +
"<img src='//image6.sellectrified.com/flex/RX-3/113/RX-3113755-1.jpeg' width='200' alt='No Image' style='max-height: 130px;' />" +
"<table style='width: 100%; border-collapse: collapse;'>" +
"<tr>" +
"<td style='text-align:left;height:20px;'>" +
"$155,000" +
"</td>" +
"<td style='text-align:right;height:20px;'>" +
"2754, Dora Ave" +
"</td>" +
"</tr>" +
"<tr>" +
"<td>" +
"</td>" +
"<td>" +
"<a href='javascript:void(0);'>" +
"<div class='btn btn-primary card-btn'>Details</div>" +
"</a>" +
"</td>" +
"</tr>" +
"</table>" +
"<table style='width: 100%; border-collapse: collapse;border-top:1px solid gray;'>" +
"<tr>" +
"<td style='text-align:center;font-size: 10px;'>" +
"2 BEDS" +
" " +
"1 BATH" +
" " +
"1,235 Sq.ft." +
" " +
"1.3 ACRE" +
"</td>" +
"</tr>" +
"</table>" +
"</div>";
var infowindow = new google.maps.InfoWindow({
content: contentString
});
var m = [];
function initialize() {
var bounds = new google.maps.LatLngBounds();
var infowindow = new google.maps.InfoWindow();
var myLatlng = new google.maps.LatLng(defaultLat, defaultLong);
var mapOptions = {
center: myLatlng,
zoom: 8
//mapTypeId: google.maps.MapTypeId.HYBRID
};
var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
if (json.length > 0) {
$(json).each(function (i) {
var latlng = new google.maps.LatLng(json[i].Latitude, json[i].Longitude);
var marker = new MarkerWithLabel({
position: latlng,
draggable: false,
raiseOnDrag: false,
map: map,
labelContent: "$" + (json[i].SALE_PRICE / 1000) + 'k',
labelAnchor: new google.maps.Point(22, 0),
labelClass: "marker", // the CSS class for the label
icon: {},
title: json[i].Address,
id: json[i].MLS_ID + '-' + json[i].MLS_LISTING_ID
});
m.push(marker);
google.maps.event.addListener(marker, 'mouseover', function () {
var contentString = "<div style='width: 200px; text-align: center;'>" +
"<img src='" + json[i].IMAGE + "' width='200' alt='' style='max-height: 130px;' />" +
"<table style='width: 100%;'>" +
"<tr>" +
"<td style='text-align:left;padding: 5px 0;'>" +
"$" + json[i].SALE_PRICE +
"</td>" +
"<td style='text-align:right;padding: 5px 0;'>" +
json[i].Address +
"</td>" +
"</tr>" +
"<tr>" +
"<td colspan='2' style='text-align:right;padding: 5px 0;'>" +
"<a class='orange-btn-small' href='/Home/PropertyDetail/" + json[i].location_id + "/" + json[i].MLS_ID + "/" + json[i].MLS_LISTING_ID + "/" + json[i].Address + "'>Details</a>" +
"</td>" +
"</tr>" +
"</table>" +
"<table style='width: 100%; border-top:1px solid gray;'>" +
"<tr>" +
"<td style='text-align:center;font-size: 10px;'>" +
json[i].Bedroom_Count + " BEDS" +
" " +
json[i].Full_Baths + " BATH" +
" " +
json[i].BUILDING_SQUARE_FOOTAGE + " Sq.ft." +
"</td>" +
"</tr>" +
"</table>" +
"</div>";
infowindow.setContent(contentString);
infowindow.open(map, marker);
//getFocusLeftList(sn);
});
//extend the bounds to include each marker's position
bounds.extend(marker.position);
});
//now fit the map to the newly inclusive bounds
map.fitBounds(bounds);
}
var drawingManager = new google.maps.drawing.DrawingManager({
drawingMode: null,
//drawingMode: google.maps.drawing.OverlayType.MARKER,
drawingControl: true,
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER,
drawingModes: [
google.maps.drawing.OverlayType.POLYGON
]
},
circleOptions: {
fillColor: '#ffff00',
fillOpacity: 1,
strokeWeight: 5,
clickable: false,
editable: true,
zIndex: 1
}
});
//To add event on circle complete.
google.maps.event.addListener(drawingManager, 'circlecomplete', function (circle) {
var radius = circle.getRadius();
//alert(radius);
});
//To add event on drawing complete.
google.maps.event.addListener(drawingManager, 'overlaycomplete', function (event) {
if (event.type == google.maps.drawing.OverlayType.CIRCLE) {
DrawCircleMarker(event.overlay);
var radius = event.overlay.getRadius();
//alert(radius);
}
else if (event.type == google.maps.drawing.OverlayType.RECTANGLE) {
var cordinates = event.overlay.getBounds();
// alert(cordinates);
}
else if (event.type == google.maps.drawing.OverlayType.POLYGON) {
var arrayPath = event.overlay.getPath().b;
GetMaxMinLatLng(event.overlay);
$('#Polygon').val(MasterPoly);
changeView($('#map-canvas'), 'map');
}
});
drawingManager.setMap(map);
}
google.maps.event.addDomListener(window, 'load', initialize);
var MaxLat = 0;
var MaxLng = 0;
var MinLat = 0;
var MinLng = 0;
var MasterPoly = '';
var Polygon;
function GetMaxMinLatLng(poly) {
var polyPoints = poly.getPath();
var oddNodes = false;
if (Polygon != null)
Polygon.setMap(null);
Polygon = poly;
for (var i = 0; i < polyPoints.getLength() ; i++) {
if (i == 0) {
MaxLat = polyPoints.getAt(i).lat();
MaxLng = polyPoints.getAt(i).lng();
MinLat = polyPoints.getAt(i).lat();
MinLng = polyPoints.getAt(i).lng();
var con = new Contour(polyPoints.j);
var c = con.centroid();
centerLat = c.y;
centerLong = c.x;
centerPoint = new google.maps.LatLng(centerLat, centerLong);
}
if (polyPoints.getAt(i).lat() > MaxLat) {
MaxLat = polyPoints.getAt(i).lat();
$('#SearchLatitude').val(MaxLat);
}
if (polyPoints.getAt(i).lat() < MinLat) {
MinLat = polyPoints.getAt(i).lat();
}
if (polyPoints.getAt(i).lng() > MaxLng) {
MaxLng = polyPoints.getAt(i).lng();
$('#SearchLongitude').val(MaxLng);
}
if (polyPoints.getAt(i).lng() < MinLng) {
MinLng = polyPoints.getAt(i).lng();
}
}
MasterPoly = MinLng + ' ' + MaxLat + ',' + MinLng + ' ' + MinLat + ',' + MaxLng + ' ' + MinLat + ',' + MaxLng + ' ' + MaxLat + ',' + MinLng + ' ' + MaxLat;
}
function Point(x, y) {
this.x = x;
this.y = y;
}
// Contour object
function Contour(points) {
this.pts = points || []; // an array of Point objects defining the contour
}
Contour.prototype.area = function () {
var area = 0;
var pts = this.pts;
var nPts = pts.length - 1;
var j = nPts - 1;
var p1; var p2;
for (var i = 0; i < nPts; j = i++) {
p1 = pts[i]; p2 = pts[j];
area += p1.A * p2.k;
area -= p1.k * p2.A;
}
area /= 2;
return area;
};
Contour.prototype.centroid = function () {
var pts = this.pts;
var nPts = pts.length - 1;
var x = 0; var y = 0;
var f;
var j = nPts - 1;
var p1; var p2;
for (var i = 0; i < nPts; j = i++) {
p1 = pts[i]; p2 = pts[j];
f = p1.A * p2.k - p2.A * p1.k;
x += (p1.A + p2.A) * f;
y += (p1.k + p2.k) * f;
}
f = this.area() * 6;
return new Point(x / f, y / f);
};
$(".SearchProp").hover(function () {
var lat = $(this).attr("lat");
var long = $(this).attr("long");
var sequence = $(this).attr("seq")
google.maps.event.trigger(m[sequence], "mouseover");
var laLatLng = new google.maps.LatLng(lat, long);
});
</script>
答案 0 :(得分:4)
最后我弄明白了这个问题。 早期的markerwithlabel javascript库,如果我们想要隐藏标记并且只想显示标签,我们只需将空括号传递给icon参数,如下所示
var marker = new MarkerWithLabel({
position: latlng,
draggable: false,
raiseOnDrag: false,
map: map,
labelContent: "$" + (json[i].SALE_PRICE / 1000) + 'k',
labelAnchor: new google.maps.Point(22, 0),
labelClass: "marker", // the CSS class for the label
icon: {},
title: json[i].Address,
id: json[i].MLS_ID + '-' + json[i].MLS_LISTING_ID
});
图标:{},
但是现在它不起作用,你必须为它提供一个图像图标。因此,当我向图标提供透明图像时,它现在可以正常工作。
icon: '/images/transparent-1x1.png',
此外,我现在正在使用最新的js库
http://google-maps-utility-library-v3.googlecode.com/svn/tags/markerwithlabel/1.1.10/src/markerwithlabel.js
答案 1 :(得分:1)
我碰巧遇到了同样的问题,下面的解决方案对我有帮助,我希望这对你也有帮助。
首先在JS文件中添加带有标签脚本的google标记 - (我的是MarkerWithLabel.js) https://code.google.com/p/google-maps-utility-library-v3/source/browse/trunk/markerwithlabel/src/markerwithlabel.js?r=131
然后在页面上添加下面提到的google地图JS库 -
https://maps.googleapis.com/maps/api/js?key=some_key_here&sensor=false
〜/脚本/ MarkerWithLabel.js
function showMap() {
var address = $('#corp-add').text();
var geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();
var mapOptions = {
center: new google.maps.LatLng(latitude, longitude),
zoom: 16
};
var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
var marker = new MarkerWithLabel({
position: new google.maps.LatLng(latitude, longitude),
draggable: true,
raiseOnDrag: true,
map: map,
labelContent: "$425K",
labelAnchor: new google.maps.Point(22, 0),
labelClass: "labels", // the CSS class for the label
labelStyle: { opacity: 0.75 }
});
var iw1 = new google.maps.InfoWindow({
content: "This is a test marker"
});
google.maps.event.addListener(marker, "click", function (e) { iw1.open(map, this); });
}
});
在上面的代码中,我使用Google GeoCoder将地址转换为纬度和经度。您可以根据自己的要求修改上述代码。
您也可以关注这些链接,他们可能会有所帮助 - http://google-maps-utility-library-v3.googlecode.com/svn/tags/markerwithlabel/1.1.8/docs/examples.html
如果您需要我提供更多详细信息,请与我们联系。
此致
马尼克