Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google maps 从距离在多段线上创建标记_Google Maps_Google Maps Api 3_Distance_Marker_Jscript - Fatal编程技术网

Google maps 从距离在多段线上创建标记

Google maps 从距离在多段线上创建标记,google-maps,google-maps-api-3,distance,marker,jscript,Google Maps,Google Maps Api 3,Distance,Marker,Jscript,我有以下代码在13个GPS坐标之间绘制一条多段线。多段线绘制正确。我试图在距离多段线起点5公里的距离上放置一个标记。我试图从中使用GetPointAtDistance(),但当我引用它时,使用 flightPath.GetPointAtDistance(5000); 就在flightPath.setMap(map)之前;但多段线将消失,并且不会出现新标记。我正在为这不起作用的原因大发雷霆,任何帮助都将不胜感激 <head> <meta http-equiv="content

我有以下代码在13个GPS坐标之间绘制一条多段线。多段线绘制正确。我试图在距离多段线起点5公里的距离上放置一个标记。我试图从中使用GetPointAtDistance(),但当我引用它时,使用

 flightPath.GetPointAtDistance(5000);
就在flightPath.setMap(map)之前;但多段线将消失,并且不会出现新标记。我正在为这不起作用的原因大发雷霆,任何帮助都将不胜感激

<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>VM 2</title>
<script type="text/javascript" src="//maps.googleapis.com/maps/api/js?sensor=false&libraries=geometry"></script>
<script type="text/javascript" src="scripts/v3_epoly.js"></script>
</head>
<body style="font-family: Arial; font-size: 12px;">

<div style="width: 100%;" id="mapDiv">
    <div id="map" style="width: 70%; height: 600px; float: left;margin:0px;color:black;"></div>
    <div id="panel" style="width: 30%; float: left;margin:0px;"></div>
</div>

<script type="text/javascript">
    var locations = [
        {
            title: "Point 1",
            lat  : -0.004259,
            lng  : 36.96367099999998,
        },
        {
            title: "Point 2",
            lat  : 0.3606,
            lng  : 36.782,
        },
        {
            title: "Point 3",
            lat  : 0.3145033,
            lng  : 36.9755982,
        },
        {
            title: "Point 4",
            lat  : 0.2336305,
            lng  : 37.3166943,
        },
        {
            title: "Point 5",
            lat  : 0.2253856,
            lng  : 37.440852,
        },
        {
            title: "Point 6",
            lat  : 0.0880828,
            lng  : 38.1899782,
        },
        {
            title: "Point 7",
            lat  : -0.2356904,
            lng  : 36.8766403,
        },
        {
            title: "Point 8",
            lat  : -0.4169027,
            lng  : 36.6666989,
        },
        {
            title: "Point 9",
            lat  : -0.3666667,
            lng  : 36.0833333,
        },
        {
            title: "Point 10",
            lat  : -1.4065513,
            lng  : 34.906551,
        },
        {
            title: "Point 11",
            lat  : -1.3666667,
            lng  : 36.8333333,
        },
        {
            title: "Point 12",
            lat  : -2.55143,
            lng  : 37.79738,
        },
        {
            title: "Point 13",
            lat  : -3.3951791,
            lng  : 37.9572584,
        },
    ];

    function initialize() {

        var map = new google.maps.Map(document.getElementById('map'), {
            zoom     : 2,
            center   : new google.maps.LatLng(10, -10),
            mapTypeId: google.maps.MapTypeId.ROADMAP
        });


        var infowindow = new google.maps.InfoWindow();
        var marker, i;

        for (i = 0; i < locations.length; i++) {
            marker = new google.maps.Marker({
                position: new google.maps.LatLng(locations[i].lat, locations[i].lng),
                map     : map
            });
            google.maps.event.addListener(marker, 'click', (function (marker, i) {
                return function () {
                    infowindow.setContent(locations[i].title);
                    infowindow.open(map, marker);
                }
            })(marker, i));
        }

        var flightPath = new google.maps.Polyline({
            path         : locations,
            geodesic     : true,
            strokeColor  : '#5589ca',
            strokeOpacity: 1.0,
            strokeWeight : 2
        });

    var latlngex = new google.maps.LatLng(-4.0434771,39.6682065);
    var titleex = "Test Marker";  
    createMarker(map,latlngex,titleex);

    flightPath.setMap(map);

    }



    function createMarker(map, latlng, title){
           var marker = new google.maps.Marker({
                  position:latlng,
                  map:map,
                  title: title,
                  icon: 'http://maps.google.com/mapfiles/ms/icons/green-dot.png'
           });
    }

    google.maps.event.addDomListener(window, "load", initialize);


</script>
</body>

虚拟机2
变量位置=[
{
标题:“第1点”,
纬度:-0.004259,
液化天然气:36.963670999998,
},
{
标题:“第2点”,
纬度:0.3606,
液化天然气:36.782,
},
{
标题:“第3点”,
纬度:0.3145033,
液化天然气:36.9755982,
},
{
标题:“第4点”,
拉脱维亚:0.2336305,
液化天然气:37.3166943,
},
{
标题:“第5点”,
纬度:0.2253856,
液化天然气:37.440852,
},
{
标题:“第6点”,
纬度:0.0880828,
液化天然气:38.1899782,
},
{
标题:“第7点”,
纬度:-0.2356904,
液化天然气:36.8766403,
},
{
标题:“第8点”,
纬度:-0.4169027,
液化天然气:36.6666989,
},
{
标题:“第9点”,
纬度:-0.3666667,
液化天然气:36.0833333,
},
{
标题:“第10点”,
纬度:-1.4065513,
液化天然气:34.906551,
},
{
标题:“第11点”,
lat:-1.3666667,
液化天然气:36.8333333,
},
{
标题:“第12点”,
lat:-2.55143,
液化天然气:37.79738,
},
{
标题:“第13点”,
纬度:-3.3951791,
液化天然气:37.9572584,
},
];
函数初始化(){
var map=new google.maps.map(document.getElementById('map'){
缩放:2,
中心:新google.maps.LatLng(10,-10),
mapTypeId:google.maps.mapTypeId.ROADMAP
});
var infowindow=new google.maps.infowindow();
var标记,i;
对于(i=0;i
我没有运气让v3\u epoly连接到JSFIDLE

相反,我使用了中的方法并在本地添加了函数:

 GetPointAtDistance = function(metres) {
    // some awkward special cases
    if (metres == 0) return flightPath.getPath().getAt(0);
    if (metres < 0) return null;
    if (flightPath.getPath().getLength() < 2) return null;
    var dist = 0;
    var olddist = 0;
    for (var i = 1;
      (i < flightPath.getPath().getLength() && dist < metres); i++) {
      olddist = dist;
      dist += google.maps.geometry.spherical.computeDistanceBetween(
        flightPath.getPath().getAt(i),
        flightPath.getPath().getAt(i - 1)
      );
    }
    if (dist < metres) {
      return null;
    }
    var p1 = flightPath.getPath().getAt(i - 2);
    var p2 = flightPath.getPath().getAt(i - 1);
    var m = (metres - olddist) / (dist - olddist);
    return new google.maps.LatLng(p1.lat() + (p2.lat() - p1.lat()) * m, p1.lng() + (p2.lng() - p1.lng()) * m);
  }
此时将显示绿色标记

我还进行了一些轻微的争吵,这里是JSFIDLE:

createMarker(map, GetPointAtDistance(30000), titleex);