跳转到主要内容

为Flask应用程序添加GoogleMaps的简单方法

项目描述

Flask Google Maps 通用徽章

Flask Estension PyPI version fury.io PyPI download month PyPI license PyPI format PyPI status CI-Github Code style: black

在您的Flask应用程序中轻松使用Google Maps

需要

  • Jinja
  • Flask
  • 获取Google API密钥 在这里

贡献

要为项目做出贡献,请克隆它,创建一个virtualenv并安装所有开发所需内容,详见下文

git clone https://github.com/flask-extensions/Flask-GoogleMaps.git
cd Flask-GoogleMaps
poetry use env 3.8  # just to create virtualenv at the first time
poetry shell # activate virtualenv
poetry install  # to install all for dev

安装

要在项目中使用它,只需使用您的依赖关系管理器安装它,使用pip如下所示

pip install flask-googlemaps

工作原理

Flask-GoogleMaps 在您的Jinja环境中包含一些全局函数和模板过滤器,它还允许您在需要时在视图中使用地图。

注册

在您的应用程序中

from flask import Flask
from flask_googlemaps import GoogleMaps

app = Flask(__name__)

# you can set key as config
app.config['GOOGLEMAPS_KEY'] = "8JZ7i18MjFuM35dJHq70n3Hx4"

# Initialize the extension
GoogleMaps(app)

# you can also pass the key here if you prefer
GoogleMaps(app, key="8JZ7i18MjFuM35dJHq70n3Hx4")

在模板中

{{googlemap("my_awesome_map", lat=0.23234234, lng=-0.234234234, markers=[(0.12,
-0.45345), ...])}}

就这样!现在您可以使用一些模板过滤器和函数了,更多详细信息请参考下面的示例和截图。

用法

  • 您可以在视图中创建地图,然后将其发送到模板上下文
  • 您可以直接使用模板函数和过滤器

1. 视图

from flask import Flask, render_template
from flask_googlemaps import GoogleMaps
from flask_googlemaps import Map

app = Flask(__name__, template_folder=".")
GoogleMaps(app)

@app.route("/")
def mapview():
    # creating a map in the view
    mymap = Map(
        identifier="view-side",
        lat=37.4419,
        lng=-122.1419,
        markers=[(37.4419, -122.1419)]
    )
    sndmap = Map(
        identifier="sndmap",
        lat=37.4419,
        lng=-122.1419,
        markers=[
          {
             'icon': 'http://maps.google.com/mapfiles/ms/icons/green-dot.png',
             'lat': 37.4419,
             'lng': -122.1419,
             'infobox': "<b>Hello World</b>"
          },
          {
             'icon': 'http://maps.google.com/mapfiles/ms/icons/blue-dot.png',
             'lat': 37.4300,
             'lng': -122.1400,
             'infobox': "<b>Hello World from other place</b>"
          }
        ]
    )
    return render_template('example.html', mymap=mymap, sndmap=sndmap)

if __name__ == "__main__":
    app.run(debug=True)
Map() 参数
  • lat:地图中心的纬度坐标。
  • lng:地图中心的经度坐标。
  • zoom:缩放级别。默认为 13
  • maptype:地图类型 - ROADMAPSATELLITEHYBRIDTERRAIN。默认为 ROADMAP
  • markers:标记数组,为元组,包含 (latlng、infobox、icon、label)。默认为 None
  • markers:包含 latlng、infobox、icon、label 的字典列表。
  • markers:标记字典,键为图标URL,值为标记数组。
  • varname:实例变量名称。
  • style:包含CSS样式的字符串。默认为 "height:300px;width:300px;margin:0;"
  • identifier:CSS ID选择器名称。
  • cls:CSS类选择器名称。默认为 "map"
  • language:地图语言。默认为 "en"
  • region:地图区域。默认为 "US"

也控制 True 或 False

  • zoom_control
  • maptype_control
  • scale_control
  • scale_control
  • streetview_control
  • rotate_control
  • fullscreen_control
  • scroll_wheel
  • collapsible (通过点击 varname_collapse 按钮折叠地图)
  • mapdisplay (默认显示可折叠地图或否)
  • center_on_user_location (使用HTML5地理位置)

2. 模板

<!DOCTYPE html>
<html>
  <head>
    {{"decoupled-map"|googlemap_js(37.4419, -122.1419, markers=[(37.4419,
    -122.1419)])}} {{mymap.js}} {{sndmap.js}}
  </head>
  <body>
    <h1>Flask Google Maps Example</h1>

    <h2>Template function centered, no marker</h2>
    {{googlemap("simple-map", 37.4419, -122.1419)}}

    <h2>Template filter decoupled with single marker</h2>
    {{"decoupled-map"|googlemap_html(37.4419, -122.1419)}}

    <h2>Template function with multiple markers</h2>
    {% with map=googlemap_obj("another-map", 37.4419, -122.1419,
    markers=[(37.4419, -122.1419), (37.4300, -122.1400)]) %} {{map.html}}
    {{map.js}} {% endwith %}

    <h2>First map generated in view</h2>
    {{mymap.html}}

    <h2>Second map generated in view</h2>
    <h3>Example for different icons in multiple markers with infoboxes</h3>
    {{sndmap.html}}
  </body>
</html>

信息框

以下是一个代码片段示例

    Map(
        identifier="catsmap",
        lat=37.4419,
        lng=-122.1419,
        markers=[
            {
                'icon': 'http://maps.google.com/mapfiles/ms/icons/green-dot.png',
                'lat':  37.4419,
                'lng':  -122.1419,
                'infobox': "<img src='cat1.jpg' />"
            },
            {
                'icon': 'http://maps.google.com/mapfiles/ms/icons/blue-dot.png',
                'lat': 37.4300,
                'lng': -122.1400,
                'infobox': "<img src='cat2.jpg' />"
            },
            {
                'icon': 'http://maps.google.com/mapfiles/ms/icons/yellow-dot.png',
                'lat': 37.4500,
                'lng': -122.1350,
                'infobox': "<img src='cat3.jpg' />"
            }
        ]
    )

结果如下所示地图:screen shot 2015-07-29 at 2 41 52 pm

标签

以下是一个代码片段示例

Map(
        identifier="labelsmap",
        lat=37.4419,
        lng=-122.1419,
        markers=[
            {
                'lat': 37.4500,
                'lng': -122.1350,
                'label': "X"
            },
            {
                'lat':  37.4419,
                'lng':  -122.1419,
                'label': "Y"
            },
            {
                'lat': 37.4300,
                'lng': -122.1400,
                'label': "Z"
            }
        ]
    )

结果如下所示地图

Map showing markers with labels

在范围内适应所有标记

允许用户在页面加载时轻松适应视图中的所有标记

无范围

@app.route('/map-unbounded/')
def map_unbounded():
"""Create map with markers out of bounds."""
    locations = []    # long list of coordinates
    map = Map(
        lat=locations[0].latitude,
        lng=locations[0].longitude,
        markers=[(loc.latitude, loc.longitude) for loc in locations]
    )
    return render_template('map.html', map=map)

image

有范围

@app.route('/map-bounded/')
def map_bounded():
"""Create map with all markers within bounds."""
    locations = []    # long list of coordinates
    map = Map(
        lat=locations[0].latitude,
        lng=locations[0].longitude,
        markers=[(loc.latitude, loc.longitude) for loc in locations],
        fit_markers_to_bounds = True
    )
    return render_template('map.html', map=map)

image

地理编码和反向地理编码

from flask_googlemaps import get_address, get_coordinates
API_KEY = 'YOUR API KEY'

#Reverse Geocoding: getting detailed address from coordinates of a location
print(get_address(API_KEY,22.4761596,88.4149326))
#output: {'zip': '700150', 'country': 'India', 'state': 'West Bengal', 'city': 'Kolkata', 'locality': 'Kolkata', 'road': 'Techno City', 'formatted_address': 'Sirin Rd, Mauza Ranabhutia, Techno City, Kolkata, West Bengal 700150, India'}


#Geocoding: getting coordinates from address text
print(get_coordinates(API_KEY,'Netaji Subhash Engineering College Kolkata'))
#output: {'lat': 22.4761596, 'lng': 88.4149326}

运行示例应用程序

$ git clone https://github.com/flask-extensions/Flask-GoogleMaps
$ cd Flask-GoogleMaps/

如果您有 Poetry

$ poetry install

没有 poetry

$ pip install --upgrade pip
$ pip install -e .
$ pip install -r requirements.txt

运行它。

$ FLASK_GOOGLEMAPS_KEY="YourKeyHERE" FLASK_APP=examples/example.py flask run
running on localhost:5000 .....

访问: http://localhost:5000/http://localhost:5000/fullmap

使用Google Maps API进行贡献

请参阅此页面 developers.google.com/maps/documentation/javascript/tutorial 并做出贡献!

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

flask_googlemaps-0.4.1.tar.gz (19.5 kB 查看散列值)

上传时间

构建分布

flask_googlemaps-0.4.1-py3-none-any.whl (16.0 kB 查看散列值)

上传时间 Python 3

支持者