ChatGPT工作提效之使用百度地图在首都为六一儿童节献爱心(多边形覆盖物、文本标注、自动获取经纬度、爱心函数)

简介: ChatGPT工作提效之使用百度地图在首都为六一儿童节献爱心(多边形覆盖物、文本标注、自动获取经纬度、爱心函数)

前言

作为程序员,结合自己的专业技能和兴趣爱好,为小朋友们制作和提供各种有意义的教育和娱乐内容,帮助他们在有趣的游戏和应用中学习和成长,提高他们的学习兴趣和认知水平。今天做个尝试吧!


一、准备工作

(一).ChatGPT沟通环境准备

因不断地不断地和ChatGPT沟通交流,然后她很客气的告诉我:You exceeded your current quota, please check yourplan and billing details.

所以,我就转向的了“通义千问”:

好吧。既然如此,看来,献爱心肯定要破费的,还是继续和ChatGPT沟通吧

(二).百度地图运行环境准备

  • 引入百度地图jsAPI文件
  <script type="text/javascript" src="//api.map.baidu.com/api?v=3.0&ak=您的密钥"></script>


  • 新建百度地图容器和编辑按钮
  <div id="allmap"></div>
  <div id="control">
    <button onclick = "polyline.enableEditing();polygon.enableEditing();">开启线、面编辑功能</button>
    <button onclick = "polyline.disableEditing();polygon.disableEditing();">关闭线、面编辑功能</button>
  </div>


  • 新增多边形覆盖物
  // 百度地图API功能
  var map = new BMap.Map("allmap");
  map.centerAndZoom(new BMap.Point(116.404, 39.915), 15);
  map.enableScrollWheelZoom();
  var polygon = new BMap.Polygon([
    new BMap.Point(116.387112,39.920977),
    new BMap.Point(116.385243,39.913063),
    new BMap.Point(116.394226,39.917988),
    new BMap.Point(116.401772,39.921364),
    new BMap.Point(116.41248,39.927893)
  ], {strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});  //创建多边形
  map.addOverlay(polygon);   //增加多边形
  • 测试目标
    ChatGPT能在百度地图上自动生成polygon覆盖物的经纬度坐标节点,即可成功!
    如果成功,意味着可以随心所欲的在百度地图上加载各种多边形覆盖物,

二、开启沟通


为了便于展示,将沟通的问题,用引用的方式展示,生成的效果直接截图,具体如下:

(一)初试身手:生成一个圆形

能不能生成一组经纬度坐标,在百度地图上形成一个圆形的多边形覆盖物

当然可以,以下是一个在北京市中心地区(39.915, 116.404)的单位圆(半径为1)所对应的多边形边界点坐标数组:

var path = [];
var R = 0.01; // 圆的半径,这里取0.01经纬度单位
for (var i = 0; i < 360; i++) {
  // 计算每个角度对应的经纬度坐标
  var lat = 39.915 + R * Math.sin(i * Math.PI / 180);
  var lng = 116.404 + R * Math.cos(i * Math.PI / 180);
  path.push(new BMap.Point(lng, lat));
}


这个多边形的边界点坐标可以直接使用如下代码在百度地图上绘制多边形:

// 创建多边形对象
var polygon = new BMap.Polygon(path, {
  strokeColor: '#FF0000', // 描边颜色
  fillColor: '#FF0000', // 填充颜色
  strokeWeight: 2, // 线宽
  strokeOpacity: 0.8, // 线透明度
  fillOpacity: 0.5 // 填充透明度
});
// 将多边形覆盖物添加到地图上
map.addOverlay(polygon);


执行以上代码,即可在百度地图上看到一个以(39.915, 116.404)为圆心、半径为0.01的圆形覆盖物。

**评价:**一言难尽,我明明说的是圆形,怎么成了椭圆形呢?

(二)再接再厉:再生成一个圆形

上面生成的经纬度坐标,不是圆形,是椭圆形,重新生成下经纬度坐标

非常抱歉,之前的代码确实存在问题,生成的精度不够高导致边界点不在同一个圆上,实际上更接近于椭圆形状。以下是修正后的代码,生成 360 个点坐标组成的圆形边界点:上面生成的经纬度坐标,不是圆形,是椭圆形,重新生成下经纬度坐标

var path = [];
var R = 0.01; // 圆的半径,这里取0.01经纬度单位
var Cx = 116.404; // 中心经度
var Cy = 39.915; // 中心纬度
for (var i = 0; i < 360; i++) {
  // 计算当前角度对应的经纬度坐标
  var angle = i * Math.PI / 180;
  var x = Cx + R / Math.cos(Cy * Math.PI / 180) * Math.cos(angle);
  var y = Cy + R * Math.sin(angle);
  // 将当前点的经纬度坐标添加到数组中
  path.push(new BMap.Point(x, y));
}

这个修正后的代码可以生成一个圆形的覆盖物边界点坐标,可以直接将其应用于创建多边形对象:

// 创建多边形对象
var polygon = new BMap.Polygon(path, {
  strokeColor: '#FF0000', // 描边颜色
  fillColor: '#FF0000', // 填充颜色
  strokeWeight: 2, // 线宽
  strokeOpacity: 0.8, // 线透明度
  fillOpacity: 0.5 // 填充透明度
});
// 将多边形覆盖物添加到地图上
map.addOverlay(polygon);


执行以上代码,即可在百度地图上看到一个以(39.915, 116.404)为圆心、半径为0.01的圆形覆盖物。

**评价:**ChatGPT的自我批评和自我提升的能力真好,这次成功了。那么进入正题,开始给小朋友献爱心了!

(三)大展身手:生成一个爱心

以(39.915, 116.404)为中心,生成一个爱心的形状的经纬度坐标数据


要绘制一个爱心图案的多边形覆盖物,需要先生成一组爱心形状的经纬度坐标数据。以下是一个简单的爱心函数,它接受一个中心点的经纬度坐标和半径参数,返回一个由多个经纬度坐标组成的数组,这个数组表示一个以该中心点为中心的爱心形状:

function generateHeartPath(center, radius) {
  var Cx = center.lng; // 圆心经度
  var Cy = center.lat; // 圆心纬度
  var path = [];
  for (var i = 0; i < 360; i++) {
    var angle = i * Math.PI / 180;
    var x = Cx + radius * (16 * Math.pow(Math.sin(angle), 3));
    var y = Cy - radius * (13 * Math.cos(angle) - 5 * Math.cos(2 * angle) - 2 * Math.cos(3 * angle) - Math.cos(4 * angle));
    path.push(new BMap.Point(x, y)); // 将生成的点添加到路径数组中
  }
  return path;
}


这个函数接受两个参数:圆心的经纬度坐标 center 和心形半径 radius。圆心经纬度坐标可以是一个 BMap.Point 对象,心形半径可以根据需要自行设置。函数内部使用一些简单的数学公式,计算生成一系列点的坐标,并将其添加到路径数组中。函数返回一组经纬度坐标数据,可以直接应用于创建多边形对象。例如,以下代码可在百度地图上创建一个以(39.915, 116.404)为中心、半径为0.02的爱心图案的覆盖物:

// 爱心图案的圆心坐标
var center = new BMap.Point(116.404, 39.915);
// 爱心图案的半径
var radius = 0.02;
// 生成爱心的路径数据
var path = generateHeartPath(center, radius);
// 创建多边形对象
var polygon = new BMap.Polygon(path, {
  strokeColor: '#F33', // 描边颜色
  fillColor: '#F33', // 填充颜色
  strokeWeight: 2, // 线宽
  strokeOpacity: 0.8, // 线透明度
  fillOpacity: 0.5 // 填充透明度
});
//将多边形覆盖物添加到地图上
map.addOverlay(polygon);

执行以上代码,即可在百度地图上看到一个以(39.915, 116.404)为中心、半径为0.02的爱心图案的覆盖物。

**评价:**突然间爱了,就是心形方向不是自己想要的,换个方向吧?

(四)爱心萌动:心想事成

重新创建一个以(39.915, 116.404)为中心、半径为0.02的上下反向爱心图案

重新创建一个上下反向的爱心图案,只需要将 y 轴的值由负数改为正数即可。以下是代码实现:

// 爱心图案的圆心坐标
var center = new BMap.Point(116.404, 39.915);
// 爱心图案的半径
var radius = 0.02;
// 生成爱心的路径数据
var path = [];
for (var i = 0; i < 360; i++) {
  var angle = i * Math.PI / 180;
  var x = center.lng + radius * (16 * Math.pow(Math.sin(angle), 3));
  var y = center.lat + radius * (13 * Math.cos(angle) - 5 * Math.cos(2 * angle) - 2 * Math.cos(3 * angle) - Math.cos(4 * angle));
  path.push(new BMap.Point(x, y));
}
// 创建多边形对象
var polygon = new BMap.Polygon(path, {
  strokeColor: '#F33', // 描边颜色
  fillColor: '#F33', // 填充颜色
  strokeWeight: 2, // 线宽
  strokeOpacity: 0.8, // 线透明度
  fillOpacity: 0.5 // 填充透明度
});
//将多边形覆盖物添加到地图上
map.addOverlay(polygon);


这个实现方式与上面的实现方式基本一致,只有在计算 y 轴坐标时采用了正数符号。执行以上代码,即可在百度地图上看到一个以(39.915, 116.404)为中心、半径为0.02的上下反向爱心图案的覆盖物。

**评价:**嗯,生成的图形竟然有一种浓浓的“网红科技感”,偏瘦了!

(五)画龙点睛:祝福到家

写个祝福语吧?

上面心形底部的坐标是多少?

上面的代码生成的爱心图案底部的坐标是 (39.88557496508942, 116.40400000000001)。这是因为爱心图案是由 360 个点组成的多边形,这些点位于以圆心为中心的 360 度覆盖范围内,并由一系列复杂的三角函数计算公式生成。在这个具体的实现中,我们在每个角度上计算了一对经纬度坐标,并将其添加到路径数组中。最后,形成的不规则多边形就具有了类似爱心的轮廓。


由于这些点的位置是按照数学公式计算得出的,它们的精确坐标可能与实际情况略有差异,并且具体值可能因实现方式而异。

    var opts = {
        position: new BMap.Point(116.40400000000001,39.88557496508942),
        offset: new BMap.Size(0, 10)//设置文本偏移量
    }
    var label = new BMap.Label('祝全国的朋友们儿童节快乐!', opts); // 创建文本标注对象
    label.setStyle({
        color: "#fff",
        fontSize: "10px",
        height: "24px",
        lineHeight: "20px",
        padding: "2px 5px",
        border: "1px solid rgba(255, 255, 255, 0.9)",
        background: "rgba(255, 0, 0, 0.9)",
        fontWeight: "bold",
        transform: 'translateX(-50%)',
        fontFamily: "微软雅黑"
    });
    map.addOverlay(label);


总结

(一)爱心多边形覆盖物完整代码

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
  <style type="text/css">
    body, html{width: 100%;height: 100%;margin:0;font-family:"微软雅黑";}
    #allmap {height:500px; width: 100%;}
    #control{width:100%;}
  </style>
  <script type="text/javascript" src="//api.map.baidu.com/api?v=3.0&ak=您的密钥"></script>
  <title>六一儿童节献爱心</title>
</head>
<body>
  <div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
  // 百度地图API功能
  var map = new BMap.Map("allmap");
  map.centerAndZoom(new BMap.Point(116.404, 39.915), 10);
  map.enableScrollWheelZoom();
// 爱心图案的圆心坐标
var center = new BMap.Point(116.404, 39.915);
// 爱心图案的半径
var radius = 0.02;
// 生成爱心的路径数据
var path = [];
for (var i = 0; i < 360; i++) {
  var angle = i * Math.PI / 180;
  var x = center.lng + radius * (16 * Math.pow(Math.sin(angle), 3));
  var y = center.lat + radius * (13 * Math.cos(angle) - 5 * Math.cos(2 * angle) - 2 * Math.cos(3 * angle) - Math.cos(4 * angle));
  path.push(new BMap.Point(x, y));
}
// 创建多边形对象
var polygon = new BMap.Polygon(path, {
  strokeColor: '#F33', // 描边颜色
  fillColor: '#F33', // 填充颜色
  strokeWeight: 5, // 线宽
  strokeOpacity: 0.8, // 线透明度
  fillOpacity: 0.5 // 填充透明度
});
//将多边形覆盖物添加到地图上
map.addOverlay(polygon);
     var opts = {
        position: new BMap.Point(116.40400000000001,39.88557496508942),
        offset: new BMap.Size(0, 10)//设置文本偏移量
    }
    var label = new BMap.Label('祝全国的朋友们儿童节快乐!', opts); // 创建文本标注对象
    label.setStyle({
        color: "#fff",
        fontSize: "10px",
        height: "24px",
        lineHeight: "20px",
        padding: "2px 5px",
        border: "1px solid rgba(255, 255, 255, 0.9)",
        background: "rgba(255, 0, 0, 0.9)",
        fontWeight: "bold",
        transform: 'translateX(-50%)',
        fontFamily: "微软雅黑"
    });
    map.addOverlay(label);
</script>


(二)实际过程的坎坷

期初在高德地图上测试,效果如下:

(三)深有感触

  • ChatGPT取代不了高精尖层次的人,但是只有基础技能的人,取代的可能性还是很大的;
  • ChatGPT是个工具,只有懂某个行业的基础逻辑,才能更好的使用,也才有可能有更好的创意实现。

@漏刻有时

相关文章
|
人工智能 自然语言处理 机器人
ChatGPT工作提效之初探路径独孤九剑遇强则强
ChatGPT工作提效之初探路径独孤九剑遇强则强
191 0
|
5月前
|
人工智能 自然语言处理 搜索推荐
微软开源基于ChatGPT的,超级文本代码智能体
【7月更文挑战第17天】微软的TaskWeaver是开源的LLM框架,聚焦领域特定数据分析与个性化需求。它以代码优先,将用户请求转为可执行代码,增强处理复杂任务的效率和准确性。通过用户定义插件实现定制,适应多种场景。然而,转化请求可能引入复杂性和错误,非技术用户使用插件有难度,且开源带来的安全与隐私问题需关注。[论文链接](https://arxiv.org/abs/2311.17541)**
73 4
|
2月前
|
自然语言处理
要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 25 章:文本生成提示
要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 25 章:文本生成提示
44 1
|
2月前
|
人工智能 iOS开发 MacOS
ChatGPT编程—实现小工具软件(批量替换文本、批量处理图像文件)
ChatGPT编程—实现小工具软件(批量替换文本、批量处理图像文件)
57 0
|
5月前
|
数据采集 编解码 人工智能
破解ChatGPT惊人耗电!DeepMind新算法训练提效13倍,能耗暴降10倍
【7月更文挑战第19天】DeepMind的JEST算法革新AI训练,提升效率13倍,节能10倍。通过联合数据批次选择,预训练指导及多分辨率训练,优化资源利用,降低能耗。实验显示性能提升,达到SOTA水平,但实施需大量资源,依赖优质参考模型。[论文链接](https://arxiv.org/pdf/2406.17711)
76 10
|
5月前
|
人工智能 边缘计算 算法
破解ChatGPT惊人耗电!DeepMind新算法训练提效13倍,能耗暴降10倍
【7月更文挑战第20天】DeepMind unveils Switch Transformer, revolutionizing AI energy consumption. This novel algorithm boosts training efficiency by 13x and slashes energy use by 10x compared to ChatGPT, marking a significant leap towards eco-friendly AI.
55 2
|
5月前
|
自然语言处理 前端开发 JavaScript
【动画进阶】类 ChatGpt 多行文本打字效果
好了,本文到此结束,希望本文对你有所帮助 😃 想 Get 到最有意思的 CSS 资讯,千万不要错过我的公众号 -- iCSS前端趣闻 😄 更多精彩 CSS 技术文章汇总在我的 Github -- iCSS ,持续更新,欢迎点个 star 订阅收藏。 如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。 想 Get 到最有意思的 CSS 资讯,千万不要错过我的 iCSS 公众号 😄 :
43 0
|
7月前
|
人工智能 自然语言处理 搜索推荐
只用文本,3分钟生成一个网站!首个ChatGPT版网站开发平台
【2月更文挑战第30天】Dora AI是一个创新的生成式AI网站开发平台,让用户通过文本输入快速创建各类网站,无需模板,支持动态生成和个性化定制。平台提供直观的拖拽编辑,降低使用门槛,3分钟内即可生成网页。用户输入提示词或选择“Surprise Me”可获得不同风格的页面。尽管部分高级功能需会员,但基本编辑功能对所有用户开放。Dora AI正研发更多高级功能,如文本生成动画和3D网站,以提升用户体验。
168 2
只用文本,3分钟生成一个网站!首个ChatGPT版网站开发平台
|
7月前
|
人工智能
AI批量写文章伪原创:基于ChatGPT长文本模型,实现批量改写文章、批量回答问题(长期更新)
AI批量写文章伪原创:基于ChatGPT长文本模型,实现批量改写文章、批量回答问题(长期更新)
240 1
|
7月前
|
机器学习/深度学习 数据采集 人工智能
chatgpt生成文本的底层工作原理是什么?
chatgpt生成文本的底层工作原理是什么?
177 0

热门文章

最新文章

下一篇
DataWorks