mapsevser

mapserver

#!/usr/bin/env python

import cgi

# Output HTTP protocol header
print( "Content-type: text/html" )
print("\n") 

def load_mapfile():
    pass 

def load_template():
    pass

def query():
    pass

if __name__ == "__main__":
    pass

    
# Get request parameters
scale = 1.0
req_msg = cgi.FieldStorage()
scale_str = req_msg.getvalue("scale")
if scale_str:
    scale = float(scale_str)

# Process and Output HTML and SVG contents
print( """<html>
<body>
<h1>Web World map!!!</h1>
<div>
    <form action="/cgi-bin/mapserver.py">
        缩放因子:<input type="text" name="scale" value="%f"/>
        <input type="submit" value="缩放"/>
    </form>
</div>
<div id="id_div_map">
<svg id="id_svg_map" width="800px" height="600px" viewBox="-182 -92 364 184" version="1.1" 
    xmlns="http://www.w3.org/2000/svg" 
    xmlns:xlink="http://www.w3.org/1999/xlink">
""" % scale )

print( """
<image x="%d" y="%d" width="%dpx" height="%dpx" xlink:href="../images/world.jpg"></image> 
""" % (int(-180 * scale), int(-90 * scale), int(360 * scale), int(180 * scale)) )

world_map = open("./cgi-bin/world.dat")
points = ""
for line in world_map:
    # skip comment line
    line = line.strip()
    if line.startswith("#"):
        continue
    
    point = line.split()
    if len( point ) == 2:
        longitude = float( point[0] )
        latitude = float( point[1] )
    x = longitude * scale
    y = -latitude * scale
    
    points = points + "%f, %f " % (x,y)
    
    if len( line ) == 0 and len( points ) != 0:     # output <polyline> in case of blank line
        print( '<polyline points="' + points + '" style="fill:none;stroke:red;stroke-width:1" />' )
        points = ""

print( """</svg>
</div>
</body>
</html>
""" )

world_map.close()

mapserver_shp

#!/usr/bin/env python

import sys
import cgi
import csv
from osgeo import ogr

# Output HTTP protocol header
print( "Content-type: text/html" )
print("\n") 

def load_mapfile():
    pass 

def load_template():
    pass

def query():
    pass

if __name__ == "__main__":
    pass

# Get request parameters
scale = 1.0
req_msg = cgi.FieldStorage()
scale_str = req_msg.getvalue("scale")
if scale_str:
    scale = float(scale_str)

# Process and Output HTML and SVG contents
print( """<html>
<body>
<div>
    <div style="font-size:32px; color: red">Web地图服务器(shp2svg)</div><hr/>
    <form action="/cgi-bin/mapserver_shp.py">
        <span>缩放因子</span>
        <input type="text" name="scale" value="%f"/>
        <input type="submit" value="缩放"/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <span>图层控制</span>
""" % scale )

# Open Csv Files
map_layers_fo = open("./cgi-bin/map_layers.csv", encoding="GBK")
map_layers = list(csv.reader(map_layers_fo))
map_layers_fo.close()
del map_layers[0]

for idx,map_layer in enumerate(map_layers):
    req_msg = cgi.FieldStorage()
    isLayerPaint = req_msg.getvalue(str(map_layer[0]))
    if isLayerPaint is None:
        isLayerPaint = "n"
    if isLayerPaint == "y":
        print( '''        <input type="checkbox" οnclick="checkbox(this)" name="%s"''' %map_layer[0],end="")
        print( ''' value="y" checked="checked"''',end="")
        print("""/>%s &nbsp;"""  %map_layer[0])
        map_layers[idx][3] = "y"
    elif isLayerPaint == "n":
        print( '''        <input type="checkbox" οnclick="checkbox(this)" name="%s"''' %map_layer[0],end="")
        print( ''' value="n"''',end="")
        print("""/>%s &nbsp;"""  %map_layer[0])
        map_layers[idx][3] = "n"

print( """
        <input type="submit" value="更新"/>
    </form>
</div>
<div id="id_div_map">
    <svg id="id_svg_map" viewBox="70 -55 70 50" version="1.1" style="height:800px"
        xmlns="http://www.w3.org/2000/svg" 
        xmlns:xlink="http://www.w3.org/1999/xlink">""")

#print( """
#<image x="%d" y="%d" width="%dpx" height="%dpx" xlink:href="../images/world.jpg"></image> 
#""" % (int(-180 * scale), int(-90 * scale), int(360 * scale), int(180 * scale)) )

# return SVG
def printPoint(data, strStyle):
    s1 = data.split("POINT (")
    s2 = s1[1].split(")")
    for i in range(len(s2)):
        points = s2[i].split(",")
        strpoints = ""
        for j in range(len(points)):
            point = points[j].split(" ")
            if len( point ) == 2:
                longitude = float( point[0].replace(")","").replace("(","")  )
                latitude = float( point[1].replace(")","").replace("(","")  )
            x = longitude * scale
            y = -latitude * scale
            strpoints = 'cx="%f" cy="%f"' % (x,y)
        print( '    <circle ' + strpoints + ' ' + strStyle + ' />' )
        strpoints = ""
        
def printPolyline(data, strStyle):
    s1 = data.split("LINESTRING (")
    s2 = s1[1].split(")")
    for i in range(len(s2)):
        points = s2[i].split(",")
        strpoints = ""
        for j in range(len(points)):
            point = points[j].split(" ")
            if len( point ) == 2:
                longitude = float( point[0].replace(")","").replace("(","")  )
                latitude = float( point[1].replace(")","").replace("(","")  )
            x = longitude * scale
            y = -latitude * scale
            strpoints = strpoints + "%f,%f " % (x,y) 
        print( '    <polyline points="' + strpoints + '" ' + strStyle + ' />' )
        strpoints = ""
        
def printPolygon(data, strStyle):
    s1 = data.split("POLYGON ((")
    s2 = s1[1].split("))")
    for i in range(len(s2)):
        points = s2[i].split(",")
        strpoints = ""
        for j in range(len(points)):
            point = points[j].split(" ")
            if len( point ) == 2:
                longitude = float( point[0].replace(")","").replace("(","")  )
                latitude = float( point[1].replace(")","").replace("(","")  )
            x = longitude * scale
            y = -latitude * scale
            strpoints = strpoints + "%f,%f " % (x,y) 
        print( '    <polygon points="' + strpoints + '" ' + strStyle + ' />' )
        strpoints = ""

# Read shpfiles
for idx,map_layer in enumerate(map_layers):
    req_msg = cgi.FieldStorage()
    isLayerPaint = req_msg.getvalue(str(map_layer[0]))
    #if isLayerPaint is None:
    #    isLayerPaint = map_layer[3]
    if isLayerPaint == "y":
        map_layers[idx][3] = "y"
        file_name = map_layer[1]
        driver = ogr.GetDriverByName('ESRI Shapefile')
        dataSource = driver.Open(file_name, 0)

        if dataSource is None:
            sys.exit(1)

        layer = dataSource.GetLayer(0)
        feature = layer.GetNextFeature()
        while feature:
            geometry = feature.GetGeometryRef()
            geom_type=geometry.GetGeometryType()
            data = geometry.ExportToWkt()
            if geom_type == 1:
                printPoint(data, map_layer[2])
            if geom_type == 2:
                printPolyline(data, map_layer[2])
            if geom_type == 3:
                printPolygon(data, map_layer[2])
            feature.Destroy()
            feature = layer.GetNextFeature()
    else:
        map_layers[idx][3] = "n"

print( """</svg>
</div>""")

# Change Value if Checkbox Checked Changed
print('''
<script>	
function checkbox(obj) {
	if(obj.checked){
		obj.value = "y";
	}
	else obj.value = "n";
}
</script>
''')

print( """</body>
</html>
""" )

# Write CSV File
map_layers_fo = open("./cgi-bin/map_layers.csv", mode="w",encoding="GBK",newline='')
map_layers_writer = csv.writer(map_layers_fo)
headline = ["图层名","文件路径","格式","是否显示"]
map_layers_writer.writerow(headline)
for idx,map_layer in enumerate(map_layers):
    req_msg = cgi.FieldStorage()
    isLayerPaint = req_msg.getvalue(str(map_layer[0]))
    if isLayerPaint is None:
        isLayerPaint = 'n'
    map_layers[idx][3] = isLayerPaint
map_layers_writer.writerows(map_layers)

map_layers_fo.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值