我可以在Fremium帐户中使用地理围栏吗?我在将地理围栏上传到服务器时遇到了问题 [英] can I use geofencing in a fremium account, i'm having issues uploading a geofence to the server

查看:14
本文介绍了我可以在Fremium帐户中使用地理围栏吗?我在将地理围栏上传到服务器时遇到了问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

        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	WKT
" + "NorthFence	" + 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密钥而不是应用程序ID以及API代码。 要通过POST请求上传WKT压缩文件,我正在使用Here Location Services REST APIs密钥并绘制我正在使用Here Maps API for JavaScript密钥的地图

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	WKT
" + name + "	" + 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);
              }
          );
      });
  }

}

这篇关于我可以在Fremium帐户中使用地理围栏吗?我在将地理围栏上传到服务器时遇到了问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆