Python代码没有返回数组

时间:2015-08-07 14:56:02

标签: python csv geocode

该计划旨在显示一个地图,其中的图钉显示了使用我们其中一个设施的机构的位置。该程序采用csv文件,读取邮政编码,对它们进行地理编码并将引脚放在地图上。引脚的大小与它们使用设施的次数有关。

但是,当上传csv文件时,程序会生成一张包含尼日利亚所有针脚的地图。查看程序的输出,它似乎正确地进行了地理编码,因此我不确定发生了什么。该程序使用脱机数据库进行地理编码,因为python的urllib与我办公室的代理设置不兼容。

该程序分为两个独立的模块,即地图生成模块和地理编码模块。 这是地图生成部分:

import folium
from bottle import route, run, template, static_file, request
import urllib.request
import urllib.parse
import json
import os
os.system('start geocoder.bat')
institutionList = []
map_osm = folium.Map(location=[55, -2], zoom_start=5)
@route('/spreadsheet.html')
def send_static():
    return static_file('spreadsheet.html',root='')
@route('/upload', method='POST')
def do_upload():
    category   = request.forms.get('category')
    upload     = request.files.get('upload')
    name, ext = os.path.splitext(upload.filename)
    if ext not in ('.csv'):
        return 'File extension not allowed.'
    upload.save('uploads/' + upload.filename)
    fileList = []
    with open('spreadsheetList','r') as f:
        while True:
            line = f.readline()
            if not line: break
            print(line.strip())
            print("line should have just printed")
            fileList.append(line.strip())
    f.close()
    lengthFileList = len(fileList)
    x = 0
    while x < lengthFileList:
        with open(('uploads/' + fileList[x]),'r') as spread:
            while True:
                line = spread.readline()
                if not line: break
                institutionDetails = line.split(',')
                institutionList.append(institutionDetails)
        spread.close()
        x = x + 1
    spreadsheetName = upload.filename
    f = open('spreadsheetList','a')
    f.write(spreadsheetName + '\n')
    f.close()
    with open('uploads/' + spreadsheetName, 'r') as f:
        while True:
            line = f.readline()
            if not line: break
            institutionDetails = line.split(',')
            institutionList.append(institutionDetails)
        print(institutionList)
    f.close()

    lengthOfList = len(institutionList)
    x = 0
    coords = []
    while x < lengthOfList:
        address = urllib.parse.quote_plus(institutionList[x][1])
        response = urllib.request.urlopen('http://localhost:80/geoCodeRequest/' + address).read().decode('utf-8')
        cleanResponse = str(response).replace('"','')
        coords = cleanResponse
        print(cleanResponse)
        institutionList[x].append(coords)
        x = x + 1
    print("http sources successfully accessed")    

    print(institutionList)
    x = 0
    while x < lengthOfList:
        try:
            map_osm.circle_marker(location=institutionList[x][3], radius=(int(institutionList[x][2]) * 10),popup=institutionList[x][0], line_color='#3186cc',fill_color='#3186cc', fill_opacity=0.2)
            print("marker added")
        except:
            print("marker could not be added")
        x = x + 1
    map_osm.create_map(path='osm.html')
    return '<meta http-equiv="refresh" content="0; url=osm.html">'
@route('/osm.html')
def send_static():
    return static_file('osm.html',root='')
run(host='localhost', port=8080)

批处理文件用于启动第二个模块:

@echo off
python geocodeProxyBypass.py

这是代码的第二个模块,即地理编码模块:

from bottle import route, run, template
import string
location = []
x = 0
@route('/geoCodeRequest/<name>')
def redir(name):
    x = 0
    print(name)
    print(name[:4])
    print(name[:3])
    with open('ukPostcode.csv','r') as f:
        while True:
            line = f.readline()
            print(line)
            if not line: break
            locationDetails = line.split(',')
            location.append(locationDetails)
            print(location[x][0])
            if location[x][0] == ('"' + name[:4] + '"'):
                coords = location[x][3] + ", " + location[x][4]
                return coords
            elif location[x][0] == ('"' + name[:3] + '"'):
                coords = location[x][3] + ", " + location[x][4]
                return ((coords.replace('"','')))
            else:
                print("no match found for " + name)
                x = x + 1
    f.close()   
run(host='localhost', port=80)                    

以下是程序生成的示例引脚应如下所示:

 var circle_1 = L.circle([51.74, -1.25
    ], 7460, {
     color: '#3186cc',
     fillColor: '#3186cc',
     fillOpacity: 0.2
     });
     circle_1.bindPopup("University of Oxford");
     circle_1._popup.options.maxWidth = 300;
     map.addLayer(circle_1)

这是实际输出的内容:

var circle_1 = L.circle([5, 1
    ], 7460, {
     color: '#3186cc',
     fillColor: '#3186cc',
     fillOpacity: 0.2
     });
     circle_1.bindPopup("University of Oxford");
     circle_1._popup.options.maxWidth = 300;
     map.addLayer(circle_1)

对这个很长的问题抱歉,请帮忙!

0 个答案:

没有答案