Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >函数返回带有瓷砖日期的数组。

函数返回带有瓷砖日期的数组。
EN

Stack Overflow用户
提问于 2017-12-01 14:12:06
回答 1查看 94关注 0票数 0

我有js代码,它返回存储在我的PC上的层的日期(使用OpenLayers和Momentjs)。

正如我们看到的那样,函数用60秒的步骤从文件夹(文件夹)返回两个日期之间的所有日期。但我只想返回的日期,我有文件(层)在我的电脑,因为我没有图层的所有日期。

因此,我需要的是一个函数返回一个日期数组,其中只有瓷砖,然后根据输入的日期从这个层添加到映射中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function loopLayer() {
  const FromDateTime = document.getElementById("fromdate").value;
  const dateFrom = moment(FromDateTime, "YYYY-MM-DD HH:mm:ss", true);
  if (!dateFrom.isValid()) {
    log("something");
    return;
  }

  const ToDateTime = document.getElementById("todate").value;
  const dateTo = moment(ToDateTime, "YYYY-MM-DD HH:mm:ss", true);
  if (!dateTo.isValid()) {
    log("something");
    return;
  }

  let loopDate = dateFrom;
  for(let i=0; dateFrom.isSameOrBefore(dateTo) && i < 100; i++) {
    // preventing from loading thousands of layers
    loopLayerByDate(loopDate);
    loopDate = loopDate.add(60, 'seconds');

  }
}

function loopLayerByDate(dateObject) {
  const folderDate = dateObject.format("YYYY-MM-DD_HHmmss");
  const source = new ol.source.XYZ({
    projection: 'EPSG:3854',
    // adapt url and source tile type to your setup
    url: "folder/" + folderDate + "/{z}/{x}/{-y}.png"

  });


  const layer = new ol.layer.Tile({
    source: source,
    title: "layer"
  });
  map.addLayer(layer)
}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-04 06:43:36

出于安全原因,网站通常无法从本地文件系统读取数据。否则,任何网站都可以监视您的硬盘。

正如您已经发现的,该规则有一个例外:当您打开本地HTML文件时,它可以从硬盘读取文件内容。但是您不能在文件夹中爬行,因此我们无法读取可用日期的列表。

你现在有两个选择:

  1. 添加一个<input type="file" multiple>,上传文件并使用FileAPI (这里是示例)。
  2. 您需要的是一个本地html文件,您可以从硬盘打开该文件。您可以使用一种尝试性的猜测方法。
  3. 找一种方法来构建一个日期列表,而不需要猜测它们,例如,命名文件夹的数量增加,而不是时间戳!
  4. 使用服务于一切的服务器软件。服务器可以访问文件系统并发送所需日期列表的“前端”。我不会提供一个如何-到这里,有大量的软件解决方案和方法-在堆叠溢出和搜索引擎。

选项2,本地html:

由于您大致知道文件名在什么范围内,所以可以使用蛮力方法,只需查询范围内的所有日期,并查看哪些日期实际响应。请注意,这种方法远非理想,而且可能相当缓慢。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function guessValidDates(arrayOfDates){
    const validDates = [];
    arrayOfDates.forEach((date) => {
        var xhttp = new XMLHttpRequest();
        xhttp.open("GET", "time/" + date + "/1.png", true);
        xhttp.send();
    console.log('request returned', xhttp);
        if (xhttp.response) {
            validDates.push(date;
        }
    });
    return validDates;
}

示例用法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// example from loopLayer function
let loopDate = dateFromObject;
const allDates = [];
for(let i=0; dateFromObject.isSameOrBefore(dateToObject) && i < 100; i++) {
  // the i counts as a failsafe, preventing us from loading billions of 
  // or whatever the pattern is for your file path
  allDates.push(loopDate.format("YYYY-MM-DD_HHmmss"));

  // step forward by X
  loopDate = loopDate.add(1, 'minutes');
}

const validDates = guessValidDates(allDates);
// now you know the valid dates and can use them. Example:
validDates.forEach(function(someDate){ 
  loopLayerByDate(someDate);
});

或者,如果您有一种模式,即一天内所有层的数量都在增加(如"time/" + yearMontDay + '_' + increasingNumber + "/{z}/{x}/{-y}.png" ),则只需继续添加层,直到得到无效的响应:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function isValidLayer(someDateString, someNumber) {
  var xhttp = new XMLHttpRequest();
  xhttp.open("GET", "time/" + someDateString + "_" + someNumber + "/1.png", true);
  xhttp.send();
  if (xhttp.response) {
      return true;
  }
  return false;
}

// you can now count up until you don't get a valid response anymore:

let someDateString = dateObject.format("YYYY-MM-DD_HHmmss");
let increasingNumber = 0;
while(increasingNumber < 1000) {
    // the condition is just a failsafe
    if(isValidLayer(someDateString, increasingNumber) {
      // add layer with that number to your map
      const source = new ol.source.XYZ({
        projection: 'EPSG:4326',
        wrapX: false,
        url: "time/" + folderDate + "_" + increasingNumber + "/{z}/{x}/{-y}.png"
      });
      // TODO add layer here and so on....
    } else {
      // no more layers, stop!
      console.log('stopped after' + increasingNumber + 'layers on date ' + someDateString);
      break;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47602204

复制
相关文章
JavaScript 函数中带有参数并返回值的函数
document.getElementById("demo").innerHTML=myFunction(4,3);
好派笔记
2021/09/18
5.7K0
Math对象、数组、日期函数
一、Math习题练习 Math是JavaScript的内置对象,提供一系列数学常数和数学方法。该对象不是构造函数,不能生成实例,所有的属性和方法都必须在Math对象上调用。 new Math() // TypeError: object is not a function 上面代码表示,Math不能当作构造函数用。 1、写一个函数,返回从min到max之间的 随机整数,包括min不包括max function Random(min,max) { var val= Math.floor(Math.ra
小胖
2018/06/27
1.9K0
VBA数组的排序_vba函数返回值 数组
我们平时用的表格排序,只相对来说是在在表格中的升序降序。今天就好奇如果数组中实现排序 他是怎么实现的呢。
全栈程序员站长
2022/11/15
3.4K0
VBA数组的排序_vba函数返回值 数组
数组比较返回差集封装的函数
前几天在群里看到友友再问多维数组比较差异,所以把之前总结的方法贴出来以供参考,希望可以帮助大家。
友儿
2022/09/11
1.3K0
如何通过函数返回数组首地址
int * scanffile(FILE *fp,int n){ int i; static
全栈程序员站长
2022/07/20
1.7K0
如何通过函数返回数组首地址
带有动态效果得返回顶部
之前做“返回顶部”,一直都是无动态效果的。瞬间就回到了顶部。这次写一个带有动态效果的。也就是利用animate方法来实现。下面是具体代码。
全栈程序员站长
2022/09/14
1.1K0
VFP的过程或函数如何接收数组参数或返回一数组结果?
这里要注意二个方面,1、过程或函数中,必须定义一个全局数据 public ,2、RETURN 必须加@,这个小老鼠。也是地址引用返回值。
加菲猫的VFP
2021/08/12
3.3K0
Java 指定日期和日期间隔,返回间隔 之前 | 之后 的日期
public class DateUtil { /** * 指定日期和日期间隔,返回间隔之前的日期 * @param specifiedDay * @param interval * @return */ public static String getSpecifiedDayAgo(String specifiedDay, int interval){ return getSpecifiedDay(specifiedDay
大数据工程师-公子
2019/03/14
2.6K0
[1182]clickhouse的日期函数
下面的函数都可以使用date或者datetime,即toDate() or toDateTime()
周小董
2023/10/10
1K0
C语言自定义函数如何返回数组(上)?
最近看到一些同学问题,有提到说:如何在一个函数中返回数组呢? 能否直接在自定义 函数中,写成char *类型返回值,直接返回呢?,代码如下: 直接返回str数组名(注意不需要加&,还有好多同学犯这个错
编程范 源代码公司
2018/04/18
3.4K0
C语言自定义函数如何返回数组(上)?
php json_encode()函数返回对象和数组问题
php json_encode() 函数格式化数据时会根据不同的数组类型格式化不同类型的json数据
码缘
2019/09/11
3.7K0
C语言自定义函数如何返回数组(下)?
通过上一篇的讲解,相信大家已经明白直接的return数组的问题以及原因了,今天我们将详细为大家讲解在函数中返回数组的常见办法。 此类问题,应用场景往往为了解决函数间相互通信,比如某个函数内处理的完的结果数据需要交接给另一个函数的情况,那么一般来说,总结有以下三种: 直接使用全局变量:这种方法最方便,但此方法打破了函数间的通信及封装的思想,所以不推荐使用,不在今天讨论范围之内。 通过堆区动态开辟内存解决:C语言中,我们通常用malloc来在堆区动态开辟内存,利用堆区“现用现开辟,用完手动收回”特点,实现灵活管
编程范 源代码公司
2018/04/18
2.7K0
C语言自定义函数如何返回数组(下)?
java数组返回元素位置_把返回值用数组形式返回java
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/09/30
2.1K0
我的数据访问函数库的源代码(三)——返回结构数组
/* 2008 4 25 更新 */ 我的数据访问函数库的源码。整个类有1400行,原先就是分开来写的,现在更新后还是分开来发一下吧。 第三部分:返回结构 数组,这个是专门针对网页来设计的。就是在网页上更方便的显示一组数据。 //新增加的部分,返回结构数组用于绑定控件                  #region 函数实现 — — RunSqlStructBaseTitle         /// <summary>         /// 运行SQl语句返回结构数组BaseTitle  
用户1174620
2018/02/07
1.4K0
Mysql日期函数
获取昨天日期yyyy-mm-dd select date_sub(curdate(), interval 1 day) 2016-12-20 获取昨日月份 select DATE_FORMAT(curdate(),'%Y-%m') 2016-12 日期条件:历史12个月 日期条件:历史12个月. ==以[当前日所在月1号为end截至时间], 以[当前月前推12个月的1号]为 start时间[start, end) select DATE_FORMAT(date_sub(curdate(), interva
IT架构圈
2018/06/01
15.5K9
mysql日期函数
这里主要介绍一下mysql里面一些常用的日期函数,掌握了这些函数可以更好地编写sql语句。
johnhuster的分享
2022/03/28
5.3K0
时间&日期函数
今天要跟大家简要介绍一下excel中经常会用到的日期与时间函数! 日期与时间类的函数虽然算所有函数中最难掌握的,但是因为格式众多,形式多样,而且作为其他高级函数的辅助嵌套元素,日期与时间格式的使用又特
数据小磨坊
2018/04/10
3.3K0
时间&日期函数
Oracle函数 – 日期函数详解
SYSDATE:取得当前的日期和时间,类型是DATE.它没有参数.但在分布式SQL语句中使用时,SYSDATE返回本地数据库的日期和时间.
星哥玩云
2022/08/17
7.3K0
Oracle函数 – 日期函数详解
mybatis查询返回一个对象中带有集合
常用的属性就不说了,特别要注意的是ofType这个要指向各自表的实体类,然后子表的column属性不要和主表重名,一旦重名就会出问题,不知道是不是我配置的问题,希望有大佬指教,反正不重名就可以 接下来就是查询语句了,很简单,只要别名和上面resultMap对的上就ok
星辰sea
2022/10/29
1.9K0
点击加载更多

相似问题

返回带有Google日期类型的JSON数组

23

返回带有postgres函数的JSON数组

10

带有drawRect的Android瓷砖

20

通过带有Javascript的嵌套函数返回数组

10

postgresql函数,该函数返回带有单引号的数组。

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文