楼主: ReneeBK
1159 9

[Case Study] Creating Map using Python [推广有奖]

  • 1关注
  • 62粉丝

VIP

已卖:4897份资源

学术权威

14%

还不是VIP/贵宾

-

TA的文库  其他...

R资源总汇

Panel Data Analysis

Experimental Design

威望
1
论坛币
49635 个
通用积分
55.6937
学术水平
370 点
热心指数
273 点
信用等级
335 点
经验
57805 点
帖子
4005
精华
21
在线时间
582 小时
注册时间
2005-5-8
最后登录
2023-11-26

楼主
ReneeBK 发表于 2016-5-12 08:29:18 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
1.jpg
  1. import mapnik

  2. LAYERS = [
  3.     {'shapefile'  : "TM_WORLD_BORDERS-0.3.shp",
  4.      'lineColor'  : "black",
  5.      'lineWidth'  : 0.4,
  6.      'fillColor'  : "#709070",
  7.      'labelField' : "NAME",
  8.      'labelSize'  : 12,
  9.      'labelColor' : "black"
  10.     }
  11. ]

  12. BACKGROUND_COLOR = "#a0c0ff"

  13. BOUNDS_MIN_LAT  = 35.26
  14. BOUNDS_MAX_LAT  = 71.39
  15. BOUNDS_MIN_LONG = -10.90
  16. BOUNDS_MAX_LONG = 41.13

  17. MAX_WIDTH  = 1600
  18. MAX_HEIGHT = 800
复制代码


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Case study Creating python eating creat import

本帖被以下文库推荐

沙发
ReneeBK 发表于 2016-5-12 08:30:59
Second Step:Calculate Height and Width
  1. extent = mapnik.Envelope(BOUNDS_MIN_LONG, BOUNDS_MIN_LAT,  BOUNDS_MAX_LONG, BOUNDS_MAX_LAT)
  2. aspectRatio = extent.width() / extent.height()

  3. mapWidth = MAX_WIDTH
  4. mapHeight = int(mapWidth / aspectRatio)
复制代码


藤椅
ReneeBK 发表于 2016-5-12 08:31:31

3rd Step: Test Whether The Calculated Height is Too Big

  1. if mapHeight > MAX_HEIGHT:
  2.     scaleFactor = float(MAX_HEIGHT) / float(mapHeight)
  3.     mapWidth = int(mapWidth * scaleFactor)
  4.     mapHeight = int(mapHeight * scaleFactor)
复制代码

板凳
ReneeBK 发表于 2016-5-12 08:33:27

4th Step:Create and Initialize mapnik.Map object:



  1. map = mapnik.Map(mapWidth, mapHeight)
  2. map.background = mapnik.Color(BACKGROUND_COLOR)
复制代码

报纸
ReneeBK 发表于 2016-5-12 08:34:49

5th Step: Define Map Style for Each Layer

  1. or i,src in enumerate(LAYERS):
  2.     style = mapnik.Style()
  3.     rule = mapnik.Rule()

  4.     if src['fillColor'] != None:
  5.         symbol = mapnik.PolygonSymbolizer(
  6.                     mapnik.Color(src['fillColor']))
  7.         rule.symbols.append(symbol)
  8.     if src['lineColor'] != None:
  9.         symbol = mapnik.LineSymbolizer(
  10.                     mapnik.Color(src['lineColor']),
  11.                     src['lineWidth'])
  12.         rule.symbols.append(symbol)
  13.     if src['labelField'] != None:
  14.         symbol = mapnik.TextSymbolizer(
  15.                      mapnik.Expression(
  16.                             "[" + src['labelField'] + "]"),
  17.                             "DejaVu Sans Bold",
  18.                             src['labelSize'],
  19.                             mapnik.Color(src['labelColor']))
  20.         symbol.allow_overlap = True
  21.         rule.symbols.append(symbol)

  22.     style.rules.append(rule)

  23.     map.append_style("style-"+str(i+1), style)
复制代码

地板
ReneeBK 发表于 2016-5-12 08:37:18

6th Step:Define Various Layers for Map



  1. for i,src in enumerate(LAYERS):
  2.     layer = mapnik.Layer("layer-"+str(i+1))
  3.     layer.datasource = mapnik.Shapefile(file=src['shapefile'])
  4.     layer.styles.append("style-"+str(i+1))
  5.     map.layers.append(layer)
复制代码

7
ReneeBK 发表于 2016-5-12 08:38:24

7th Step: Render the Map Image

  1. map.zoom_to_box(extent)
  2. mapnik.render_to_file(map, "map.png", "png")
复制代码
Reference

8
1111111111xx 发表于 2016-5-12 09:40:03

9
lzguo568 在职认证  发表于 2016-5-12 15:53:12

10
albertwishedu 发表于 2016-5-12 23:51:12

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-25 23:51