2016-03-21 7 views
0

Я пытаюсь создать несколько прямоугольников с информационными окнами на карте Google. Я следил за шаблоном, используемым для нескольких маркеров, найденных по адресу Generating Google Maps markers From Database . Сначала я использовал этот пример и использовал один из латов и один из длинного для отображения значков на карте. Это сработало. Затем я меняю код на прямоугольники и добавляет границы. Но на карте нет прямоугольников. Я попытался жестко закодировать один из прямоугольников на карте и появился один прямоугольник.несколько прямоугольников в Картах Google из базы данных SQL

Я также убедился, что в описании, которое будет использоваться в infowindow, не было ссылок. Я обнаружил, что это проблема, если я передавал ссылку в переменной данных. Но я мог бы получить ссылку на работу, если я добавлю переменную со ссылкой в ​​момент создания содержимого infowindow.

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript"> 
    var markers = [ 
    <asp:Repeater ID="rptMarkers" runat="server"> 
    <ItemTemplate> 
      {      
       "title": '<%# Eval("Quad_Name") %>', 
       "north": '<%# Eval("poly_north") %>', 
       "east": '<%# Eval("poly_east") %>', 
       "south": '<%# Eval("poly_south") %>', 
       "west": '<%# Eval("poly_west") %>', 
       "description": '<%# Eval("smqcomment") %>' 
      } 
</ItemTemplate> 
<SeparatorTemplate> 
    , 
</SeparatorTemplate> 
</asp:Repeater> 
    ]; 


    window.onload = function() { 
     var mapOptions = { 
      center: new google.maps.LatLng(41.78768535298007, -99.96481875), 
      zoom: 7, 
      mapTypeId: google.maps.MapTypeId.HYBRID 
     }; 

     var infoWindow = new google.maps.InfoWindow(); 
     var map = new google.maps.Map(document.getElementById("dvMap"), mapOptions); 



     for (i = 0; i < markers.length; i++) { 
      var data = markers[i] 

      var rectangle = new google.maps.Rectangle({ 
       strokeColor: '#FF0000', 
       strokeOpacity: 0.8, 
       strokeWeight: 2, 
       map: map, 
       bounds: { 
        north: data.north, 
        south: data.south, 
        east: data.east,      
        west: data.west 
       } 
      }); 

      (function (rectangle,data) { 
       google.maps.event.addListener(rectangle, "click", function (e) { 
        infoWindow.setContent(data.description); 
        infoWindow.open(map,rectangle); 
       }); 
      })(rectangle,data);    
     } 
    } 
</script> 
<script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
<script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script> 

<div id="dvMap" style="width: 960px; height: 532px"></div> 

Любая помощь будет большой благодарностью.

+0

В чем проблема/проблема? – geocodezip

ответ

1

Я получаю ошибку javasript на вашей активной странице: js:31 InvalidValueError: setBounds: not a LatLngBounds or LatLngBoundsLiteral: in property south: not a number. Вам необходимо перевести строки в JSON в числа, прежде чем использовать их для создания объектов google.maps.Rectangle.

Чтобы открыть окно на прямоугольнике, вам необходимо установить положение инфоиндуста. Синтаксис infoWindow.open(map, rectangle) не применяется к прямоугольникам, применимым только к маркерам (по крайней мере для объектов API), см. the documentation for more information.

  • позиция содержит LatLng, к которой привязано это информационное окно. Примечание: InfoWindow может быть прикреплен либо к объекту Marker (в этом случае его позиция основана на местоположении маркера), либо на самой карте с указанным LatLng. Открытие информационного окна на маркере автоматически обновит позицию.
(function(rectangle, data) { 
    google.maps.event.addListener(rectangle, "click", function(e) { 
    infoWindow.setContent(data.description); 
    infoWindow.setPosition(rectangle.getBounds().getCenter()); 
    infoWindow.open(map); 
    }); 
})(rectangle, data); 

фрагмент кода:

window.onload = function() { 
 
    var mapOptions = { 
 
    center: new google.maps.LatLng(41.492537, -99.901813), 
 
    zoom: 6, 
 
    mapTypeId: google.maps.MapTypeId.HYBRID 
 
    }; 
 

 
    var infoWindow = new google.maps.InfoWindow(); 
 
    var map = new google.maps.Map(document.getElementById("dvMap"), mapOptions); 
 

 

 
    var bounds = new google.maps.LatLngBounds(); 
 
    for (i = 0; i < markers.length; i++) { 
 
    var data = markers[i] 
 

 
    var rectangle = new google.maps.Rectangle({ 
 
     strokeColor: '#FF0000', 
 
     strokeOpacity: 0.8, 
 
     strokeWeight: 2, 
 
     map: map, 
 
     bounds: { 
 
     north: parseFloat(data.north), 
 
     south: parseFloat(data.south), 
 
     east: parseFloat(data.east), 
 
     west: parseFloat(data.west) 
 
     } 
 
    }); 
 

 
    (function(rectangle, data) { 
 
     google.maps.event.addListener(rectangle, "click", function(e) { 
 
     infoWindow.setContent(data.description); 
 
     infoWindow.setPosition(rectangle.getBounds().getCenter()); 
 
     infoWindow.open(map); 
 
     }); 
 
    })(rectangle, data); 
 
    } 
 
} 
 
var markers = [ 
 

 
    { 
 
    "title": 'Andrews', 
 
    "north": '42.75001', 
 
    "east": '-103.625', 
 
    "south": '42.62501', 
 
    "west": '-103.75', 
 
    "description": 'Andrews description', 
 
    } 
 

 
    , 
 

 
    { 
 
    "title": 'Arlington', 
 
    "north": '41.50001', 
 
    "east": '-96.25001', 
 
    "south": '41.37501', 
 
    "west": '-96.37501', 
 
    "description": '<img src="http://snr.unl.edu/csd-esic/download/geologysoils/digitalgeologicmapscleaned/Arlington/Arlington_Quad.jpg" height="400">', 
 
    } 
 

 
    , 
 

 
    { 
 
    "title": 'Ashland East', 
 
    "north": '41.12501', 
 
    "east": '-96.25001', 
 
    "south": '41.00001', 
 
    "west": '-96.37501', 
 
    "description": '<img src="http://snr.unl.edu/csd-esic/download/geologysoils/digitalgeologicmapscleaned/Ashland_East/Ashland_East_Quad.jpg" height="400"">', 
 
    } 
 

 
    , 
 

 
    { 
 
    "title": 'Beaver Wall', 
 
    "north": '43.00001', 
 
    "east": '-102.625', 
 
    "south": '42.87501', 
 
    "west": '-102.75', 
 
    "description": 'Beaver Wall description', 
 
    } 
 

 
];
html, 
 
body, 
 
#dvMap { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
}
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 
<div id="dvMap"></div>

+0

Проблема заключается в том, что прямоугольники вообще не появляются. Я сначала устал удалять раздел, где я определяю создателей из секции REPEATER, и пытался вставить ваши жесткие определения создателей. И это сработало хорошо. Появились прямоугольники.Я вернулся к своему примеру, с которого я начал использовать точные данные и где я вызываю данные из базы данных. Для моего лата и долго я использовал Север и Восток. Это сработало хорошо, и значки появились, и информация была правильной. Затем я переключил лат долго на Юг и Запад -> работал – user1968084

+0

Выше я имел в виду, что я пошел в свой пример, где я использовал одни и те же данные, чтобы отображать маркеры вместо прямоугольников. Так что кажется, что я определяю маркеры для прямоугольников, где моя проблема. Вот мой живой пример с прямоугольниками http://snr.unl.edu/data/geologysoils/STATEMAP/PolygonTest.aspx и вот один из тестов значков http://snr.unl.edu/data/geologysoils/STATEMAP /IconTest.aspx – user1968084

+0

В моем ответе отображаются прямоугольники для фрагментов кода? Если да, обновите свой вопрос, чтобы уточнить свою проблему и предоставить [Минимальный, завершенный, проверенный и читаемый пример] (http://stackoverflow.com/help/mcve) ваши данные (реальные или тестовые), которые не являются за работой. – geocodezip

0

Я вижу, что geocodezip обновил код в их первоначальном ответе на вопрос. Две вещи новы

Сначала определение границ применяло функцию parseFloat() к каждой из координат. Я не уверен, что это было необходимо, так как я смог получить иконки или полигоны для рисования с координатами без этой функции.

Я думаю, что на самом деле решается проблема добавления строки кода

var bounds = new google.maps.LatLngBounds(); 

я являюсь на самом деле не уверен, что это делает рядом с определением переменных «границы», но это, кажется, решить мою проблему.

Спасибо geocodezip!

Смежные вопросы