我可以在免费帐户中使用地理围栏,我在将地理围栏上载到服务器时遇到问题

问题描述 投票:0回答:1

我使用此处的技术创建了一个免费帐户,因为我需要在交通信号灯周围创建地理围栏,并检查我的任何设备是否都进入了地理围栏并触发操作。

        var platform = new H.service.Platform({
        'apikey': 'apikeyhere' // here i used the javascript maps api key
    });

    var maptypes = platform.createDefaultLayers();

    var lineString = new H.geo.LineString()
    lineString.pushPoint({ lat: 15.376727, lng: 73.925272 })
    lineString.pushPoint({ lat: 15.376747, lng: 73.925926 })
    lineString.pushPoint({ lat: 15.377875, lng: 73.926001 })
    lineString.pushPoint({ lat: 15.377916, lng: 73.925357 })
    lineString.pushPoint({ lat: 15.376727, lng: 73.925272 })

    var map = new H.Map(
        document.getElementById('map'),
        maptypes.vector.normal.map,
        {
            zoom: 15,
            center: { lng: 73.925658, lat: 15.376116 }
        });
    var mapEvents = new H.mapevents.MapEvents(map);
    var north = new H.map.Polygon(lineString)
    var northgeo = north.getGeometry()
    var northWKT = northgeo.toString()
    console.log(northWKT)
    map.addObject(north)
    var zip = new JSZip()
    zip.file("data.wkt", "NAME\tWKT\n" + "NorthFence\t" + northWKT)
    zip.generateAsync({ type: "blob" }).then(content => {
        saveAs(content, "hello.zip");
        var formdata = new FormData()
        formdata.append("zipfile", content)
        axios.post("https://fleet.ls.hereapi.com/2/layers/upload.json", formdata,
            {
                headers: {
                    "content-type": "multipart/form-data"
                },
                parms: {
                    "layer_id": "15537",
                    "apikey": "apikeyhere"//here i use the rest api key of my freemium account
                }
            }).then((result) => {
                console.log(result)
            }, (err) => {
                console.log("ERROR")
                console.log(err)
            })
    }, (err) => {
        console.log(err)
    })

    map.addEventListener('tap', function (evt) {
        console.log(evt.type, evt.currentPointer.type);
    })

但我遇到错误

Error: Request failed with status code 401
at e.exports (spread.js:25)
at e.exports (spread.js:25)
at XMLHttpRequest.l.onreadystatechange (spread.js:25)

这是我尝试使用免费帐户可以实现的目标,目前尚不清楚。我正在关注的视频教程已经过时了,因为已经切换为使用API​​密钥而不是APP ID和API代码。要通过发布请求上传WKT zip文件,我正在使用HERE Location Services REST APIs密钥并绘制地图,正在使用HERE Maps API for JavaScript密钥

here-api
1个回答
0
投票

是的,您可以使用免费增值帐户创建Geofence。这是JS 3.1的代码,您可以尝试-

Index.html

<html>
<head>
<meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  </head>
    <body style="margin: 0">
        <div id="map"></div>
        <script src="https://js.api.here.com/v3/3.1/mapsjs-core.js" type="text/javascript" charset="utf-8"></script>
        <script src="https://js.api.here.com/v3/3.1/mapsjs-core-legacy.js" type="text/javascript" charset="utf-8"></script>
        <script src="https://js.api.here.com/v3/3.1/mapsjs-service.js" type="text/javascript" charset="utf-8"></script>
        <script src="https://js.api.here.com/v3/3.1/mapsjs-service-legacy.js" type="text/javascript" charset="utf-8"></script>
        <script src="https://js.api.here.com/v3/3.1/mapsjs-mapevents.js" type="text/javascript" charset="utf-8"></script>
        <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
        <script src="https://stuk.github.io/jszip/dist/jszip.js" type="text/javascript" charset="utf-8"></script>
        <script src="heremap.js"></script>
        <script>

        const start = async () => {
    const map = new HereMap("Your JS API KEY", document.getElementById("map"));
    const lineString = new H.geo.LineString();
    lineString.pushPoint({ lat: 37, lng: -121 });
    lineString.pushPoint({ lat: 37.2, lng: -121.002 });
    lineString.pushPoint({ lat: 37.2, lng: -121.2 });
    lineString.pushPoint({ lat: 37, lng: -121 });
    const polygon = new H.map.Polygon(lineString);
    console.log(map.polygonToWKT(polygon));
    map.draw(polygon);
    const geofenceResponse = await map.uploadGeofence("1234", "Demo Layer", map.polygonToWKT(polygon));
};
start();
    </script>
</body>

Heremap.js

class HereMap {

constructor(apikey, mapElement) {
  //this.appId = appId;
      //this.appCode = appCode;
      this.apikey = apikey;
      this.platform = new H.service.Platform({
          'apikey': 'Your JS API Key'
      });
      this.map = new H.Map(
          mapElement,
          this.platform.createDefaultLayers().vector.normal.map,
          {
              zoom: 10,
              center: { lat: 37, lng: -121 }
          }
      );
      const mapEvent = new H.mapevents.MapEvents(this.map);
      const behavior = new H.mapevents.Behavior(mapEvent);
      this.geofencing = this.platform.getGeofencingService();
      this.currentPosition = new H.map.Marker({ lat: 37.21, lng: -121.21 });
      this.map.addObject(this.currentPosition);
      this.map.addEventListener("tap", (ev) => {
var target = ev.target;
this.map.removeObject(this.currentPosition);
this.currentPosition = new H.map.Marker(this.map.screenToGeo(ev.currentPointer.viewportX, ev.currentPointer.viewportY));
this.map.addObject(this.currentPosition);
this.fenceRequest(["1234"], this.currentPosition.getGeometry()).then(result => 
  {
    if(result.geometries.length > 0) {
        alert("You are in Geofence area")
    } else {
        console.log("you are out");
    }
});
  }, false);

}
draw(mapObject) {
 this.map.addObject(mapObject);
 }
polygonToWKT(polygon) {
  const geometry = polygon.getGeometry();
      return geometry.toString();
}
uploadGeofence(layerId, name, geometry) {

  const zip = new JSZip();
      zip.file("data.wkt", "NAME\tWKT\n" + name + "\t" + geometry);
      return zip.generateAsync({ type:"blob" }).then(content => {
          var formData = new FormData();
          formData.append("zipfile", content);
          return axios.post("https://fleet.ls.hereapi.com/2/layers/upload.json", formData, {
              headers: {
                  "content-type": "multipart/form-data"
              },
              params: {
                  "apikey": 'Your JS API Key',

                  "layer_id": layerId
              }
          });
      });
}
fenceRequest(layerIds, position) {
  return new Promise((resolve, reject) => {
          this.geofencing.request(
              H.service.extension.geofencing.Service.EntryPoint.SEARCH_PROXIMITY,
              {
                "apikey": 'Your JS API KEY',

                  'layer_ids': layerIds,
                  'proximity': position.lat + "," + position.lng,
                  'key_attributes': ['NAME']
              },
              result => {
                  resolve(result);
              }, error => {
                  reject(error);
              }
          );
      });
  }

}

希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.