地图信息小程序代码_微信小程序地图导航代码

以下是一个基于微信小程序的地图信息发布系统的实现方案。由于微信小程序自带地图功能和位置接口,非常适合实现这个需求。


### 技术栈

- 前端:微信小程序 (WXML, WXSS, JavaScript)

- 后端:云开发 (CloudBase) 或 Node.js

- 数据库:云开发数据库 或 MongoDB


### 功能设计

1. **用户注册/登录**:获取用户位置信息

2. **信息发布**:用户发布各类信息(工作/清仓/求助)

3. **地图展示**:显示3公里范围内的信息点

4. **信息查看**:点击标记查看详细信息


### 代码实现


#### 1. 数据库设计 (db.message)

```json

{

"_id": "自动ID",

"userId": "用户ID",

"type": "信息类型", // job/sale/help

"title": "标题",

"content": "详细内容",

"location": { // 地理位置

"type": "Point",

"coordinates": [113.324520, 23.099994] // [经度, 纬度]

},

"createTime": "创建时间"

}

```


#### 2. 小程序前端代码


**map.wxml** - 地图页面

```xml

<map

id="map"

longitude="{{longitude}}"

latitude="{{latitude}}"

scale="16"

markers="{{markers}}"

bindmarkertap="onMarkerTap"

include-points="{{markers}}"

style="width: 100%; height: 100vh;">

</map>

```


**map.js** - 地图逻辑

```javascript

Page({

data: {

longitude: 0,

latitude: 0,

markers: []

},


onLoad() {

this.getUserLocation()

this.loadNearbyMessages()

},


// 获取用户位置

getUserLocation() {

wx.getLocation({

type: 'gcj02',

success: res => {

this.setData({

longitude: res.longitude,

latitude: res.latitude

})

}

})

},


// 加载附近3公里的信息

async loadNearbyMessages() {

const db = wx.cloud.database()

const _ = db.command

const { longitude, latitude } = this.data

const res = await db.collection('message')

.where({

location: _.geoNear({

geometry: db.Geo.Point(longitude, latitude),

maxDistance: 3000, // 3公里

minDistance: 0

})

})

.get()


const markers = res.data.map(item => ({

id: item._id,

longitude: item.location.coordinates[0],

latitude: item.location.coordinates[1],

iconPath: this.getIconByType(item.type),

width: 30,

height: 30,

callout: {

content: item.title,

color: '#ff0000',

fontSize: 14,

borderRadius: 10,

padding: 5

}

}))


this.setData({ markers })

},


// 根据类型获取图标

getIconByType(type) {

const icons = {

job: '/images/job.png',

sale: '/images/sale.png',

help: '/images/help.png'

}

return icons[type] || '/images/default.png'

},


// 点击标记事件

onMarkerTap(e) {

const markerId = e.markerId

wx.navigateTo({

url: `/pages/detail/detail?id=${markerId}`

})

}

})

```


#### 3. 发布页面 (publish.js)

```javascript

Page({

data: {

types: [

{ name: 'job', value: '找工作' },

{ name: 'sale', value: '清仓处理' },

{ name: 'help', value: '救援求助' }

],

form: {

type: 'job',

title: '',

content: ''

},

location: null

},


// 获取位置

getLocation() {

wx.getLocation({

type: 'gcj02',

success: res => {

this.setData({

location: {

longitude: res.longitude,

latitude: res.latitude

}

})

}

})

},


// 表单提交

async submitForm() {

const db = wx.cloud.database()

const { form, location } = this.data

await db.collection('message').add({

data: {

...form,

location: db.Geo.Point(location.longitude, location.latitude),

createTime: db.serverDate()

}

})

wx.showToast({ title: '发布成功' })

wx.navigateBack()

}

})

```


#### 4. 信息详情页 (detail.js)

```javascript

Page({

data: {

detail: null

},


onLoad(options) {

this.getMessageDetail(options.id)

},


async getMessageDetail(id) {

const db = wx.cloud.database()

const res = await db.collection('message').doc(id).get()

this.setData({ detail: res.data })

}

})

```


### 部署说明


1. **微信小程序配置**:

- 在 `app.json` 中添加权限声明:

```json

"permission": {

"scope.userLocation": {

"desc": "需要获取您的位置以便展示附近信息"

}

}

```

- 在 `project.config.json` 中开启云开发


2. **数据库配置**:

- 创建 `message` 集合

- 添加地理位置索引:

```js

db.collection('message').createIndex({

location: '2dsphere'

})

```


3. **安全规则**:

```json

{

"read": true,

"write": "auth != null"

}

```


### 注意事项


1. **位置权限**:首次使用需要用户授权位置权限

2. **距离计算**:使用MongoDB的地理空间查询($nearSphere)

3. **性能优化**:限制每次查询返回数量(建议20条内)

4. **用户认证**:发布信息时需要用户登录

5. **信息时效**:可添加过期时间自动清理旧数据


### 扩展功能建议


1. 信息分类过滤

2. 关键字搜索

3. 用户私信功能

4. 信息收藏功能

5. 实时位置更新(救援场景)


这个方案使用了微信小程序原生能力+云开发,无需额外服务器即可快速部署。实际开发中需要根据具体需求调整UI和业务逻辑。

原文链接:,转发请注明来源!