Maison  >  Article  >  développement back-end  >  Comment créer une application cartographique en utilisant le langage Go et Vue.js

Comment créer une application cartographique en utilisant le langage Go et Vue.js

PHPz
PHPzoriginal
2023-06-17 11:49:401648parcourir

Dans le monde hautement connecté d'aujourd'hui, les applications cartographiques sont devenues un élément important de divers scénarios d'application. Le langage Go et Vue.js représentent respectivement un langage back-end efficace et léger et un framework front-end moderne et complet, qui peuvent fournir un support technique puissant pour les applications cartographiques. Cet article explique comment créer une application cartographique simple à l'aide du langage Go et de Vue.js.

Étape 1 : Sélectionnez une API de carte

Tout d'abord, vous devez sélectionner une API de carte disponible. Google Maps, Baidu Maps, Amap, etc. sont des choix courants. Ici, nous avons choisi Mapbox, qui fournit de puissantes fonctions de rendu de carte et de dessin de superposition, et fournit une bonne documentation pour les développeurs et un SDK.

Étape 2 : Construction du backend

Utilisez le langage Go pour créer le backend. Ici, nous vous recommandons d'utiliser le framework Echo. Sa conception API est simple, facile à utiliser et a été largement utilisée dans les environnements de production. Voici le code pour introduire les packages requis et initialiser Echo :

import (
    "github.com/labstack/echo"
    "github.com/labstack/echo/middleware"
)

func main() {
    e := echo.New()

    // Middleware
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())

    // Routes
    e.GET("/", hello)

    // Start server
    e.Logger.Fatal(e.Start(":1323"))
}

Ici, nous avons référencé les deux packages Echo et middleware, et utilisé Echo pour initialiser le serveur HTTP. La méthode HTTP GET peut être définie via e.GET("/", hello), qui appellera la fonction hello sur l'URL racine. Utilisez e.Logger.Fatal(e.Start(":1323") pour démarrer facilement le serveur HTTP et écouter le port 1323. e.GET("/", hello)可以定义HTTP的GET方法,该方法将在根URL上调用hello函数。使用e.Logger.Fatal(e.Start(":1323"))可以轻松启动HTTP服务器,并监听1323端口。

接下来,我们需要请求Mapbox API,并将结果返回给Vue.js前端。这里我们将定义一个/api/location路由,并在其中使用echo.Context来异步请求Mapbox API。下面是API逻辑的示例代码:

type MapboxResponse struct {
    Features []struct {
        Text string `json:"text"`
        Geometry struct {
            Coordinates []float64 `json:"coordinates"`
        } `json:"geometry"`
    } `json:"features"`
}

func getLocation(c echo.Context) error {
    address := c.QueryParam("address")
    url := fmt.Sprintf("https://api.mapbox.com/geocoding/v5/mapbox.places/%s.json?access_token=%s", address, "<your_mapbox_api_key>")

    req, err := http.NewRequest("GET", url, nil)
    if err != nil {
        return c.String(http.StatusInternalServerError, "Failed to create request: "+err.Error())
    }

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return c.String(http.StatusInternalServerError, "Failed to get location from mapbox: "+err.Error())
    }
    defer resp.Body.Close()

    var mapboxResponse MapboxResponse
    if err := json.NewDecoder(resp.Body).Decode(&mapboxResponse); err != nil {
        return c.String(http.StatusInternalServerError, "Failed to decode mapbox response: "+err.Error())
    }

    if len(mapboxResponse.Features) > 0 {
        return c.JSON(http.StatusOK, mapboxResponse.Features[0])
    } else {
        return c.String(http.StatusNotFound, "Location not found")
    }
}

在这里,我们定义了MapboxResponse结构体,该结构体的属性与Mapbox API的响应字段一一对应。在getLocation函数中,我们首先获取查询参数address,然后构造Mapbox API的URL,通过http.NewRequest方法来发起异步请求。最后,我们将响应JSON解码为MapboxResponse结构体,并返回HTTP的JSON响应。

第三步:前端构建

使用Vue.js构建前端。使用Vue.js可以方便地处理数据绑定和组件化,从而使地图应用程序更加灵活。下面是创建Vue实例和初始化地图的代码:

import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

mapboxgl.accessToken = '<your_mapbox_access_token>';
var map = new mapboxgl.Map({
  container: 'map',
  style: 'mapbox://styles/mapbox/streets-v11',
  center: [-73.985753, 40.748817],
  zoom: 12
});

在这里,我们首先通过new Vue()来创建Vue实例并绑定到id为#app的DOM元素上。接着,我们使用mapboxgl.accessToken来设置Mapbox API的访问令牌,并使用new mapboxgl.Map()来初始化地图对象。在此处,我们定义了初始的地图样式、中心点坐标和缩放级别等属性。

接下来,我们需要在Vue中定义一个输入框和一个按钮,当用户点击按钮时,我们将查询地址发给后端,并将结果显示在地图上。下面是Vue组件的代码:

<template>
  <div>
    <div>
      <input type="text" v-model="address">
      <button @click="getLocation()">Search</button>
    </div>
    <div id="map"></div>
  </div>
</template>

<script>
export default {
  name: 'app',
  data () {
    return {
      address: '',
      map: null,
      marker: null
    }
  },
  methods: {
    getLocation () {
      fetch('/api/location?address=' + this.address)
        .then(res => res.json())
        .then(location => {
          if (this.marker) {
            this.marker.remove()
          }
          this.marker = new mapboxgl.Marker().setLngLat(location.geometry.coordinates).addTo(this.map)
          this.map.flyTo({
            center: location.geometry.coordinates,
            zoom: 15
          })
        })
        .catch(error => console.error(error))
    }
  },
  mounted () {
    this.map = new mapboxgl.Map({
      container: 'map',
      style: 'mapbox://styles/mapbox/streets-v11',
      center: [-73.985753, 40.748817],
      zoom: 12
    })
  }
}
</script>

<style>
#map {
  height: 500px;
}
</style>

在上述Vue组件中,我们定义了一个输入框和一个按钮,当用户点击按钮时,调用getLocation方法,并使用fetch来异步获取后端的Mapbox响应。如果响应成功,我们将通过地图API的MapMarker对象来在地图上显示结果,并执行flyTo方法来平滑地移动地图视图。

第四步:启动应用程序

最后,我们将后端和前端组装起来,并启动应用程序。可以使用以下步骤来执行该操作:

  1. 将上述Go代码保存到某个目录下,并执行go mod init来初始化项目。
  2. 将上述Vue代码保存到src/App.vue文件中,并将该文件与它的依赖项一起编译到dist目录中。
  3. 启动后端服务:go run .
  4. 在浏览器中打开dist/index.html
  5. Ensuite, nous devons demander l'API Mapbox et renvoyer les résultats à l'interface Vue.js. Ici, nous allons définir une route /api/location et utiliser echo.Context pour demander de manière asynchrone l'API Mapbox. Voici un exemple de code pour la logique de l'API :
rrreee

Ici, nous définissons la structure MapboxResponse, dont les propriétés correspondent aux champs de réponse de l'API Mapbox. Dans la fonction getLocation, nous obtenons d'abord le paramètre de requête address, puis construisons l'URL de l'API Mapbox et lançons une requête asynchrone via la méthode http.NewRequest. Enfin, nous décodons la réponse JSON dans une structure MapboxResponse et renvoyons la réponse HTTP JSON.

🎜Étape 3 : Construction du front-end🎜🎜Utilisez Vue.js pour créer le front-end. La liaison des données et la composition des composants peuvent être facilement gérées à l'aide de Vue.js, ce qui rend les applications cartographiques plus flexibles. Voici le code pour créer une instance Vue et initialiser la carte : 🎜rrreee🎜Ici, nous créons d'abord une instance Vue via new Vue() et la lions à l'identifiant comme #app sur l'élément DOM. Ensuite, nous utilisons mapboxgl.accessToken pour définir le jeton d'accès à l'API Mapbox et utilisons new mapboxgl.Map() pour initialiser l'objet cartographique. Ici, nous définissons des propriétés telles que le style de carte initial, les coordonnées du point central et le niveau de zoom. 🎜🎜Ensuite, nous devons définir une zone de saisie et un bouton dans Vue Lorsque l'utilisateur clique sur le bouton, nous envoyons l'adresse de la requête au backend et affichons les résultats sur la carte. Voici le code du composant Vue : 🎜rrreee🎜Dans le composant Vue ci-dessus, nous définissons une zone de saisie et un bouton Lorsque l'utilisateur clique sur le bouton, appelez la méthode getLocation et utilisez fetch pour obtenir de manière asynchrone la réponse Mapbox du backend. Si la réponse est réussie, nous afficherons les résultats sur la carte via les objets <code>Map et Marker de l'API de la carte, et exécuterons la méthode flyTo pour déplacez-vous en douceur. Vue Carte. 🎜🎜Étape 4 : Lancer l'application🎜🎜Enfin, nous assemblons le backend et le frontend et lançons l'application. Vous pouvez utiliser les étapes suivantes pour effectuer cette opération : 🎜
  1. Enregistrez le code Go ci-dessus dans un répertoire et exécutez go mod init pour initialiser le projet. 🎜
  2. Enregistrez le code Vue ci-dessus dans le fichier src/App.vue et compilez le fichier avec ses dépendances dans le répertoire dist. 🎜
  3. Démarrez le service backend : go run .🎜
  4. Ouvrez le fichier dist/index.html dans le navigateur pour exécuter l'application cartographique. 🎜🎜🎜Pour résumer, nous avons utilisé le langage Go et Vue.js pour créer une application cartographique de base. L'application implémente une logique back-end simple et efficace et des composants front-end modernes et flexibles en combinant des outils tels que l'API Mapbox, Echo Framework et Vue.js. En tirant parti de ces technologies, nous pouvons créer plus facilement des applications cartographiques plus complexes et offrir aux utilisateurs une meilleure expérience et de meilleures fonctionnalités. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn