从零开始:Vue项目中的高德地图搜索功能集成全攻略
发布时间: 2024-12-29 09:52:42 阅读量: 7 订阅数: 9
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
![从零开始:Vue项目中的高德地图搜索功能集成全攻略](https://opengraph.githubassets.com/cf8332f88fb290732c4b1bc3259a2fbbd158cff79032f0eb46f25e7459b2b590/amap-demo/amap_maps_flutter)
# 摘要
本文详细阐述了在Vue项目中集成高德地图搜索功能的全过程。从理论基础到实践应用,本文首先介绍了高德地图API的关键特点和搜索功能的核心原理,包括地理编码、关键字搜索机制以及智能提示等。随后,详细描述了集成高德地图Web服务SDK、嵌入地图组件以及实现搜索功能的具体步骤,重点讲解了代码编写和结果展示。在进阶实践部分,探讨了如何通过自定义界面和性能优化提升用户体验。此外,本文还涉及了测试与部署的策略,并对未来高德地图API的发展趋势进行了展望,探讨了在Vue项目中集成其他高德地图服务的可能性,以及社区贡献和开源实践的途径。
# 关键字
Vue项目;高德地图API;地理编码;搜索功能;性能优化;地图服务集成
参考资源链接:[Vue结合高德地图实现搜索与点击定位功能](https://wenku.csdn.net/doc/64534393fcc53913680430ba?spm=1055.2635.3001.10343)
# 1. Vue项目中的高德地图搜索功能概述
在现代的Web应用中,地理位置服务已经成为增强用户体验的关键因素之一。特别是在前端开发中,将地图功能集成到Vue.js项目中,可以让用户直观地获取地理位置信息和进行地理位置相关的搜索操作。高德地图作为中国领先的地图服务平台,提供了丰富的API接口,可以帮助开发者快速实现地图搜索功能。
为了在Vue项目中实现这一功能,开发者首先需要对高德地图搜索功能的理论基础有一个全面的了解。此外,集成和使用高德地图服务的过程需要遵循一定的工作流程,包括获取API Key、安装SDK和编写代码等步骤。本文将逐步引导读者理解这些概念,并提供详细的指导,最终帮助读者在Vue项目中成功集成高德地图搜索功能。
# 2. 高德地图搜索功能理论基础
### 2.1 高德地图API简介
#### 2.1.1 API的特点和应用场景
高德地图API为开发者提供了一系列地图服务的接口,这些接口可以根据用户的位置、周边信息、路径规划等需求,实现丰富的地图功能。API特点主要包括跨平台使用、灵活的数据处理、友好的开发者体验以及多样化的功能拓展。
在实际应用场景中,开发者可以利用高德地图API实现诸如位置搜索、路径规划、地图展示、交通信息查询等功能,这些功能不仅在传统的PC端网页可以使用,也可以很方便地集成到移动端的APP和各种智能设备中。
#### 2.1.2 关键功能及参数解读
以搜索功能为例,高德地图API提供了多种搜索服务,关键的功能接口如下:
- 地点搜索:根据输入的关键字,返回与关键字相关的位置信息。
- 路线搜索:提供多种路线规划方案,如驾车、公交、步行等。
- 逆地理编码:将经纬度坐标转换为具体的地址信息。
在使用这些API时,需要注意理解各个接口的参数含义和用途。例如,搜索接口中通常会包含`key`(API Key)、`query`(搜索关键词)等参数,而路线规划接口则可能需要`origin`(起点坐标)和`destination`(终点坐标)等参数。
### 2.2 搜索功能核心原理
#### 2.2.1 地理编码与反地理编码
地理编码(Geocoding)是指将地址(如“北京市朝阳区某某路12号”)转换为地理坐标(经纬度)的过程,而反地理编码(Reverse Geocoding)则是将地理坐标转换为可读地址的过程。
在高德地图API中,地理编码服务和反地理编码服务是通过特定的API接口提供的。这些服务对于实现搜索功能至关重要,它们让开发者能够根据用户输入的地址或者当前位置信息,将文本信息转换为地图上可标识的点。
#### 2.2.2 关键字搜索的机制
关键字搜索是地图搜索功能中最为核心的技术之一。它允许用户输入一个或多个关键字来搜索相关的地点、商家或者服务。在技术层面,关键字搜索通常涉及到对数据库的查询操作,以及对搜索结果进行排序和过滤的算法。
高德地图API利用其庞大的地理信息数据库,实现了高效、准确的关键字搜索。搜索算法会根据地点的热度、用户偏好、地理位置等因素进行智能排序,优先展示最有可能被用户需要的结果。
#### 2.2.3 多字段搜索和智能提示
多字段搜索扩展了关键字搜索的功能,允许用户通过指定的字段(例如地点类型、行政区划等)进行更为精确的搜索。高德地图API支持此类搜索方式,并提供智能提示服务,当用户开始输入关键字时,API会自动提供相关的搜索建议,帮助用户更快找到想要的搜索结果。
这种智能提示功能提高了用户体验,减轻了用户输入时的记忆负担,同时也增加了搜索的准确性和效率。
```javascript
// 示例代码展示如何使用高德地图API进行关键字搜索
const search = new AMap.Search({
key: '你的API Key',
type: '关键词搜索'
});
search.search('故宫', function(status, result) {
if (status === 'complete') {
console.log(result.info, result.regeocode.formattedAddress);
} else {
console.error('搜索出错', status);
}
});
```
在以上示例代码中,我们实例化了一个高德地图搜索对象,并设置了搜索类型为关键词搜索。随后调用`search`方法进行搜索,搜索结果会在回调函数中返回。代码逻辑解释了基本的搜索流程,包括初始化搜索对象、设置搜索参数、调用搜索方法和处理返回结果。
# 3. 集成高德地图搜索功能的步骤
## 3.1 高德地图Web服务接入流程
### 3.1.1 注册并获取API Key
高德地图提供了丰富的Web服务API,使用前需要先注册账户并申请一个API Key。注册过程简单,只需访问高德开放平台官网,完成注册并验证邮箱后,即可创建应用并获取到专属的API Key。这个API Key是调用高德地图API接口的唯一凭证,需要妥善保存并安全使用。
### 3.1.2 集成高德地图Web服务SDK
集成高德地图Web服务SDK到Vue项目中,首先要确保已经具备Node.js环境。然后,通过npm或yarn来安装高德地图的JavaScript库。打开项目的终端,执行以下命令:
```sh
npm install @amap/amap-jsapi-loader --save
# 或者
yarn add @amap/amap-jsapi-loader
```
安装完成后,在项目的入口文件(通常是`main.js`或`main.ts`)中引入并配置高德地图的SDK,如下所示:
```javascript
import AMapLoader from '@amap/amap-jsapi-loader';
Vue.prototype.$map = new AMapLoader({
key: '你的API Key',
version: '2.0', // 使用的高德地图API版本号
plugins: ['AMap.DistrictSearch'], // 需要使用的插件列表
}, (AMap) => {
// 成功加载JSAPI后的回调函数
console.log('高德地图API加载成功');
AMap.plugin('AMap.DistrictSearch', function () {
// 在地图加载成功后,可以使用DistrictSearch插件等
});
});
```
上述代码中,`@amap/amap-jsapi-loader`是高德地图提供的一个方便集成的Loader,可以用来加载和初始化地图API。通过回调函数可以进行后续的操作,如初始化地图实例等。
## 3.2 在Vue项目中嵌入地图组件
### 3.2.1 安装和配置地图组件
要在Vue项目中嵌入地图组件,可以通过使用`<amap-map>`标签来实现。首先,需要在项目根目录下安装相应的Vue组件库:
```sh
npm install @amap/amap-vue --save
# 或者
yarn add @amap/amap-vue
```
安装完成后,在需要使用地图组件的页面中引入并注册该组件:
```javascript
import AMapMap from '@amap/amap-vue';
export default {
components: {
AMapMap
}
};
```
### 3.2.2 实现地图基本功能
接下来,就可以在页面的模板中使用`<amap-map>`标签来展示地图,并通过属性来配置地图的基本属性,例如中心点、缩放级别等:
```html
<template>
<div id="app">
<amap-map :zoom="10" :center="[116.397428, 39.90923]" :options="mapOptions">
</amap-map>
</div>
</template>
<script>
export default {
data() {
return {
mapOptions: {
resizeEnable: true,
zooms: [3, 18], // 设置地图的缩放级别
plugins: ['AMap.DistrictSearch'], // 插件列表
},
};
}
};
</script>
```
在上述代码中,`<amap-map>`标签的`:center`属性定义了地图的中心点坐标,`:zoom`属性设置了地图的缩放级别,`options`则是用来传入更多可配置选项的对象。
## 3.3 实现搜索功能的代码编写
### 3.3.1 调用搜索API的示例代码
要实现搜索功能,首先需要调用高德地图的搜索API,例如使用`AMap.DistrictSearch`插件进行行政区划搜索。以下是一个简单的示例代码:
```javascript
// 假设已经初始化了AMap实例
let districtSearch = new AMap.DistrictSearch({
level: 'country', // 设置查询行政级别为国家
subdistrict: 0, // 不返回下级行政区
});
districtSearch.search('北京', (status, result) => {
if (status === 'complete') {
console.log(result.districtList[0]);
} else {
console.log('搜索失败,status:' + status);
}
});
```
在上述代码中,创建了一个`AMap.DistrictSearch`的实例,设置了查询行政级别为国家级别,调用`search`方法进行搜索,回调函数中可以根据返回的状态码判断搜索是否成功,并处理搜索结果。
### 3.3.2 结果展示和交互设计
搜索结果可以通过多种方式展示给用户,例如在地图上添加标记点,或者在页面上列出搜索列表。以下是添加标记点的示例代码:
```javascript
// 继续使用上述search回调
if (status === 'complete') {
// 清除之前的结果
map.clearMap();
// 在地图上添加搜索结果的标记点
new AMap.Marker({
map: map,
position: result.districtList[0].location
});
}
```
在交互设计方面,搜索组件通常需要包含一个搜索框,用户输入查询内容后点击搜索按钮,展示搜索结果。此时,需要为搜索按钮绑定事件处理函数,并在搜索结果中提供可选的地点列表,实现用户与搜索结果的交云交互。
在本章节中,我们介绍了如何在Vue项目中集成高德地图搜索功能,从注册获取API Key开始,到集成地图SDK和Web服务,最终实现一个基本的地图搜索功能。这些步骤是构建地图相关应用的基础,也是高德地图搜索功能实现的核心过程。在下一章中,我们将进一步探讨高德地图搜索功能的进阶实践和优化策略,以及如何在Vue项目中进行测试和部署。
# 4. 高德地图搜索功能的进阶实践
## 4.1 自定义搜索结果界面
### 结果列表的样式定制
在实际的应用开发中,开发者常常需要根据自身产品的UI风格来定制搜索结果的展示样式。以Vue项目为例,可以利用Vue的响应式数据绑定特性,结合高德地图提供的API,对搜索结果列表进行个性化定制。
首先,你需要熟悉高德地图提供的标记(Marker)和信息窗口(InfoWindow)等组件的自定义方法。然后,在Vue组件中利用生命周期钩子(如mounted)来初始化地图,并在地图上渲染搜索结果。使用高德地图Web服务SDK的`AMapSearch`类可以实现搜索功能,并获取搜索结果数据。
对于结果列表的样式定制,可以结合CSS进行美化。例如,利用Flexbox布局使结果列表响应式,并根据需要定制每个搜索结果项的样式,包括结果标题、地址描述、距离用户位置的距离等信息。
```css
.search-results {
display: flex;
flex-direction: column;
}
.result-item {
display: flex;
align-items: center;
padding: 10px;
border-bottom: 1px solid #eee;
}
```
你可以为每个搜索结果项添加相应的类,使用Vue的`v-for`指令来循环渲染结果列表。并根据业务需求,为每个搜索项添加点击事件,以弹出详细信息的InfoWindow。
### 高亮显示和信息提示
为了提升用户体验,高亮显示搜索结果的当前项和提供丰富的信息提示是必要的。这可以通过高德地图的`AMap马克`类来实现,例如通过设置标记的颜色、图标等属性来展示不同的状态。
```javascript
var marker = new AMap.Marker({
map: map,
position: result.position,
icon: {
image: '/images/marker.png',
size: new AMap.Size(20, 32),
imageOffset: new AMap.Pixel(-10, -32),
opacity: 1
}
});
```
在信息提示方面,可以使用高德地图的`InfoWindow`来展示更详细的信息。结合Vue的数据绑定,可以动态地显示每个搜索结果的详细地址、联系方式、评分等信息。
```javascript
var infoWindow = new AMap.InfoWindow({
content: '<div class="info-content">' +
'<h3>' + result.name + '</h3>' +
'<p>' + result.address + '</p>' +
'</div>'
});
```
对于信息提示的定制,可以在Vue组件中通过监听地图事件来控制InfoWindow的开启和关闭。例如,当用户点击某个搜索结果时,可以获取该结果项的位置信息,并将InfoWindow移动到该位置上。
## 4.2 搜索功能的性能优化
### 异步加载和缓存机制
在实际应用中,提高搜索功能的响应速度和性能是至关重要的。通过异步加载和缓存机制可以有效减少页面加载时间并提高搜索速度。
异步加载主要涉及到数据的请求方式。使用JavaScript的Promise或者async/await特性来异步获取搜索结果,可以保证页面不会因为数据请求而阻塞。异步加载有助于改善用户的交互体验,避免在数据加载时用户界面出现卡顿或者无响应。
```javascript
async function searchLocations(keyword) {
let searchResult = await AMapSearch.search(keyword);
return searchResult;
}
```
缓存机制则是将常用的搜索结果缓存到本地存储中,当用户再次搜索相同或相似的关键字时,可以直接从本地读取结果,而不是每次都向服务器发起请求。这可以有效减轻服务器压力并提高响应速度。
在Vue中实现缓存机制,可以使用`localStorage`或`sessionStorage`,或者引入专门的前端缓存库,如`cache-manager`等。
### 异常处理和用户体验改进
在搜索功能中,异常处理是不可忽视的环节。良好的异常处理机制可以避免因网络请求失败、服务端错误等原因导致的用户体验问题。此外,适当的异常提示和用户引导也是提升用户体验的重要手段。
首先,应该在调用高德地图搜索API时做好异常捕获,确保在出现错误时能给出清晰的错误信息。
```javascript
try {
let searchResult = await searchLocations(keyword);
} catch (error) {
console.error("搜索过程中发生错误:", error);
alert("搜索失败,请稍后重试。");
}
```
其次,可以在用户输入错误或搜索无结果时,提供相关提示,并给出修改建议或关联搜索词推荐。例如,当用户搜索"牛"时,可以提示是否搜索"牛肉面"或者"牛奶"。
```javascript
if (!searchResult || searchResult.length === 0) {
alert("没有找到相关的搜索结果,请尝试搜索其他词汇。");
}
```
## 4.3 实际案例分析与解决方案
### 常见问题的诊断与处理
在使用高德地图搜索功能时,开发者可能会遇到一些常见问题。例如,搜索结果不准确、搜索范围限制、调用限制次数超出等。对于这些问题的诊断与处理,需要结合高德地图的官方文档和社区反馈进行分析。
当搜索结果不准确时,可能是由于关键词不够具体或者搜索范围设置不合理所致。此时需要检查搜索关键词是否具有足够的描述性,并合理设置搜索半径。
对于搜索范围限制问题,应确保在初始化搜索时,正确设置了搜索区域的经纬度范围。对于调用限制次数超出的问题,则需要检查是否有合理使用API Key的限制,并关注高德地图官方关于API调用限制的最新规定。
### 功能扩展和二次开发
为了更好地满足特定业务需求,功能扩展和二次开发是不可或缺的环节。以Vue项目为例,结合高德地图提供的搜索功能,可以根据产品需求开发例如周边搜索、实时公交查询、骑行导航等特色功能。
进行功能扩展时,可以关注高德地图API的新功能发布,并及时进行试用和集成。通过调用高德地图的高级API,可以实现复杂的地图交互功能,例如室内外一体化定位、轨迹规划等。
在二次开发方面,开发者可以根据实际需求对搜索结果进行深度定制,如添加过滤器来筛选特定类型的结果(如餐饮、娱乐等)。此外,还可以结合Vue的组件化开发优势,将地图搜索功能封装成可复用的Vue组件,方便在多个Vue项目中重用。
# 5. 高德地图搜索功能在Vue项目中的测试与部署
## 5.1 测试方法和工具的选择
在将高德地图搜索功能集成到Vue项目后,进行周密的测试是非常关键的一步。测试不仅能够确保功能的正确性,还能发现潜在的问题,提前避免用户在使用过程中遇到困扰。本节将探讨如何选择测试方法和工具,以及如何进行有效的测试流程。
### 5.1.1 单元测试和集成测试
单元测试是测试软件中的最小可测试部分,旨在检查单个代码组件的正确性。在Vue项目中集成高德地图搜索功能时,单元测试可以用来检查地图组件的各个独立部分,例如搜索输入框、按钮或者搜索结果的显示等。
使用Vue CLI创建的项目通常会集成Vue Test Utils库,它提供了一套方便的工具,用于模拟和渲染Vue组件。以下是使用Vue Test Utils进行单元测试的一个简单示例:
```javascript
// 安装必要的依赖
npm install @vue/test-utils vue-jest babel-jest
// search-component.spec.js
import { shallowMount } from '@vue/test-utils';
import SearchComponent from '@/components/SearchComponent.vue';
describe('SearchComponent.vue', () => {
it('renders the search input field', () => {
const wrapper = shallowMount(SearchComponent);
expect(wrapper.find('input[type="search"]').exists()).toBe(true);
});
it('should emit an event when search is triggered', () => {
const wrapper = shallowMount(SearchComponent);
wrapper.find('button.search-btn').trigger('click');
expect(wrapper.emitted()['search']).toBeTruthy();
});
});
```
集成测试则是验证多个单元是否能够协调工作,主要检查的是组件间的交互和数据流是否正确。对于集成测试,可以使用Jest框架来完成:
```javascript
// search-integration.spec.js
describe('Search integration', () => {
it('should handle search input and display results', async () => {
const wrapper = shallowMount(SearchComponent);
const searchInput = wrapper.find('input[type="search"]');
await searchInput.setValue('咖啡馆');
const searchButton = wrapper.find('button.search-btn');
await searchButton.trigger('click');
await wrapper.vm.$nextTick();
expect(wrapper.vm.searchResults.length).toBeGreaterThan(0);
});
});
```
### 5.1.2 使用测试框架和自动化测试
为了确保高德地图搜索功能的稳定性和可靠性,自动化测试是不可或缺的一部分。测试框架如Jest或Mocha/Chai可以用于编写可重复的测试脚本,帮助开发人员自动化执行测试用例。下面是一个使用Jest来编写自动化测试脚本的例子:
```javascript
// test-automated.js
const { search } = require('../utils/searchUtil'); // 假设这是一个封装好的搜索工具函数
test('search function returns valid results', async () => {
const results = await search('咖啡馆');
expect(results).not.toBeNull();
expect(results).toHaveProperty('results');
expect(Array.isArray(results.results)).toBe(true);
});
```
集成自动化测试流程可以进一步提高开发效率,减少重复劳动。可以考虑使用CI/CD工具(如Jenkins、GitHub Actions等)来将测试流程集成到代码提交、构建和部署的各个阶段。
## 5.2 项目部署和上线注意事项
在测试无误之后,项目就可以进入部署阶段了。在部署Vue项目时,需要考虑的不仅仅是代码的上传,还需要考虑API的版本管理、兼容性问题、部署流程以及上线后的监控优化。
### 5.2.1 地图服务API的版本管理和兼容性
在部署过程中,应确保使用的是稳定和最新的高德地图服务API版本。如果API版本有更新,还需要测试新版本以确保功能的兼容性。可以使用版本控制工具来管理API密钥和版本信息,确保在开发、测试和生产环境中使用正确的配置。
### 5.2.2 部署流程和监控优化
部署Vue项目通常涉及以下步骤:
- **构建**: 使用Vue CLI的 `npm run build` 命令来构建生产环境的代码。
- **上传**: 将构建好的静态文件上传到Web服务器或者CDN服务上。
- **配置**: 根据服务器环境配置环境变量(如API Key、数据库信息等)。
- **启动**: 服务端使用合适的Web服务器(如Nginx、Apache)来启动项目。
在项目上线后,还需要进行性能监控和分析,确保应用的可用性和性能。可以使用像New Relic或Google Analytics这类工具来进行应用性能监控(APM),收集用户行为数据,以及进行实时监控和报警。
监控工具的部署可以帮助我们分析应用的性能瓶颈,并对可能出现的异常进行快速反应。对于高德地图服务的监控,除了监控前端应用的性能外,还需要关注地图服务的API调用频率、响应时间以及错误率等指标。
综上所述,高德地图搜索功能在Vue项目中的测试与部署是一个需要谨慎处理的过程。开发者需要选择合适的测试方法和工具,确保功能的正确性和稳定性。在项目部署时,则需要考虑API版本管理、兼容性以及性能监控,以此来优化用户体验和提升应用质量。
# 6. 未来展望与高德地图功能拓展
随着地理信息系统的迅速发展,高德地图API作为国内领先的地图服务提供商之一,其在技术和服务上的持续更新与优化,对开发者来说既是机遇也是挑战。在Vue项目中集成高德地图搜索功能,不仅可以提高用户体验,还能为应用增加强大的地理位置处理能力。本章节将讨论高德地图API的未来趋势,以及如何在Vue项目中进一步拓展使用其他高德地图服务,并探讨社区贡献和开源实践。
## 6.1 高德地图API的未来趋势
高德地图API不断推陈出新,提供了包括位置搜索、路径规划、交通信息和POI信息查询等多种服务。随着技术进步,未来的高德地图API将带来以下变化:
### 6.1.1 新功能介绍和应用前景
高德地图API未来将更多地集成人工智能技术,比如通过机器学习提升搜索的准确性,使用深度学习技术优化路径规划,以及利用自然语言处理技术改善用户体验。例如,高德地图API可能会推出更加智能化的语音搜索功能,使用户可以通过自然语言直接查询地点。
### 6.1.2 行业发展对API的潜在影响
随着自动驾驶、智慧城市和物联网等行业的兴起,对地图API的要求也更为复杂和精准。高德地图API将被设计得更加适应这些行业的需求,例如提供高精度地图数据,支持更复杂的查询和分析任务,以及满足实时数据处理的需求。
## 6.2 Vue项目中集成其他高德地图服务
Vue项目通过集成高德地图搜索功能,不仅能够实现地图展示和位置搜索,还能够进一步提供如导航和路径规划等服务。
### 6.2.1 导航和路径规划的集成
高德地图API提供了丰富的导航和路径规划服务,例如步行导航、驾车导航、公交导航等。在Vue项目中集成这些服务,需要了解相关API的使用方法,并结合Vue组件和生命周期进行适配。例如,可以使用`<agm-direction>`组件来集成高德地图的路径规划功能。
```html
<template>
<agm-map>
<agm-direction
:origin="origin"
:destination="destination"
:travelMode="'DRIVING'"
:waypoints="waypoints"
></agm-direction>
</agm-map>
</template>
<script>
import { AgmMap, AgmDirection } from '@agm/core';
export default {
components: {
AgmMap,
AgmDirection
},
data() {
return {
origin: '上海市浦东新区',
destination: '北京市朝阳区',
waypoints: ['南京市'],
}
}
}
</script>
```
### 6.2.2 多地图服务综合应用案例
在实际应用中,可以结合搜索、导航、路径规划等多种地图服务,为用户提供一体化的位置服务解决方案。例如,一个物流应用可能需要结合搜索功能来找到收发货地址,使用路径规划来优化配送路线,以及利用交通信息来规避拥堵路段。
## 6.3 社区贡献和开源实践
开源文化鼓励开发者分享和贡献代码,共同推动项目和社区的发展。高德地图API在Vue社区有着广泛的应用,积极参与其中,可以促进个人技能的提升和影响力的扩大。
### 6.3.1 分享集成经验到Vue社区
开发者在集成高德地图API到Vue项目后,可以撰写集成指南、教程或案例分析,并发布到博客、论坛或GitHub等平台,为其他开发者提供参考。
### 6.3.2 参与开源项目和贡献代码
对于有能力的开发者来说,参与开源项目并贡献代码是一种提升技术影响力的方式。可以通过为高德地图API或Vue社区相关项目提交issue、修复bug或开发新功能,来积极参与开源社区。
在本章中,我们展望了高德地图API的发展方向,并探讨了如何在Vue项目中进一步集成和拓展使用其他高德地图服务。此外,我们强调了社区贡献和开源实践的重要性,这些都是推动技术进步和社区发展的重要力量。随着这些功能和服务的不断进化,开发者将有更多的机会和平台来展示他们的才能,同时也能为其他用户带来更好的体验。
0
0