Maison développement back-end Golang 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

Jun 17, 2023 am 11:49 AM
go语言 地图应用程序 vuejs

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"))
}
Copier après la connexion

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")
    }
}
Copier après la connexion

在这里,我们定义了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
});
Copier après la connexion

在这里,我们首先通过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>
Copier après la connexion

在上述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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quel est le problème avec le fil de file d'attente dans GO's Crawler Colly? Quel est le problème avec le fil de file d'attente dans GO's Crawler Colly? Apr 02, 2025 pm 02:09 PM

Problème de threading de file d'attente dans Go Crawler Colly explore le problème de l'utilisation de la bibliothèque Crawler Crawler dans le langage Go, les développeurs rencontrent souvent des problèmes avec les threads et les files d'attente de demande. � ...

Quelles bibliothèques sont utilisées pour les opérations du numéro de point flottantes en Go? Quelles bibliothèques sont utilisées pour les opérations du numéro de point flottantes en Go? Apr 02, 2025 pm 02:06 PM

La bibliothèque utilisée pour le fonctionnement du numéro de point flottante dans le langage go présente comment s'assurer que la précision est ...

Dans Go, pourquoi les chaînes d'impression avec println et string () ont-elles des effets différents? Dans Go, pourquoi les chaînes d'impression avec println et string () ont-elles des effets différents? Apr 02, 2025 pm 02:03 PM

La différence entre l'impression de chaîne dans le langage go: la différence dans l'effet de l'utilisation de fonctions println et string () est en Go ...

Comment résoudre le problème de conversion de type user_id lors de l'utilisation du flux redis pour implémenter les files d'attente de messages dans le langage Go? Comment résoudre le problème de conversion de type user_id lors de l'utilisation du flux redis pour implémenter les files d'attente de messages dans le langage Go? Apr 02, 2025 pm 04:54 PM

Le problème de l'utilisation de Redessstream pour implémenter les files d'attente de messages dans le langage GO consiste à utiliser le langage GO et redis ...

Quelle est la différence entre la structure de définition des mots clés `var` et« type »dans le langage Go? Quelle est la différence entre la structure de définition des mots clés `var` et« type »dans le langage Go? Apr 02, 2025 pm 12:57 PM

Deux façons de définir les structures dans le langage GO: la différence entre les mots clés VAR et le type. Lorsque vous définissez des structures, GO Language voit souvent deux façons d'écrire différentes: d'abord ...

Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Apr 02, 2025 pm 05:09 PM

Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Lorsque vous utilisez Goland pour le développement du langage GO, de nombreux développeurs rencontreront des balises de structure personnalisées ...

Quelles bibliothèques de GO sont développées par de grandes entreprises ou fournies par des projets open source bien connus? Quelles bibliothèques de GO sont développées par de grandes entreprises ou fournies par des projets open source bien connus? Apr 02, 2025 pm 04:12 PM

Quelles bibliothèques de GO sont développées par de grandes entreprises ou des projets open source bien connus? Lors de la programmation en Go, les développeurs rencontrent souvent des besoins communs, ...

Lorsque vous utilisez SQL.Open, pourquoi ne signale pas une erreur lorsque DSN passe vide? Lorsque vous utilisez SQL.Open, pourquoi ne signale pas une erreur lorsque DSN passe vide? Apr 02, 2025 pm 12:54 PM

Lorsque vous utilisez SQL.Open, pourquoi le DSN ne signale-t-il pas une erreur? En langue go, sql.open ...

See all articles