繁体   English   中英

在Python中,尝试将经过地理编码的tsv文件转换为geojson格式

[英]In Python, trying to convert geocoded tsv file into geojson format

尝试将经过地理编码的TSV文件转换为JSON格式,但是我遇到了麻烦。 这是代码:

import geojson
import csv

def create_map(datafile):
    geo_map = {"type":"FeatureCollection"}
    item_list = []
    datablock = list(csv.reader(datafile))
    for i, line in enumerate(datablock):
        data = {}
        data['type'] = 'Feature'
        data['id'] = i
        data['properties']={'title': line['Movie Title'],
                           'description': line['Amenities'],
                           'date': line['Date']}
        data['name'] = {line['Location']}
        data['geometry'] = {'type':'Point',
                           'coordinates':(line['Lat'], line['Lng'])}
        item_list.append(data)
    for point in item_list:
        geo_map.setdefault('features', []).append(point)
    with open("thedamngeojson.geojson", 'w') as f:
        f.write(geojson.dumps(geo_map))

create_map('MovieParksGeocode2.tsv')

我收到TypeError:list indices must be integers, not str data['properties']行上的TypeError:list indices must be integers, not str ,但是我不明白,这不是我如何为geoJSON字段设置值吗?

我正在读取的文件具有以下键下的值:位置电影标题日期便利设施Lat Lng

该文件可在此处查看: https : //github.com/yongcho822/Movies-in-the-park/blob/master/MovieParksGeocodeTest.tsv

谢谢大家,一如既往的感谢。

您有一些正在进行中的事情需要解决。

1.您的TSV包含带双引号的换行符。 我认为这不是故意的,并且会引起一些问题。

Location    Movie Title Date    Amenities   Formatted_Address   Lat Lng
"
Edgebrook Park, Chicago "   A League of Their Own   7-Jun   "
Family friendly activities and games. Also: crying is allowed." Edgebrook Park, 6525 North Hiawatha Avenue, Chicago, IL 60646, USA  41.9998876  -87.7627672
"

2.您不需要geojson模块转储geojson这就是GeoJSON的全部内容。 只需import json

3,您正在尝试读取TSV,但没有包括所需的delimiter=\\t选项。

4,您正在尝试从行中读取键,但是您没有使用DictReader为您DictReader此操作,因此上面提到的索引会出现TypeError

请在下面查看我的修订代码块。.您仍然需要将TSV修复为有效的TSV。

import csv
import json

def create_map(datafile):
    geo_map = {"type":"FeatureCollection"}
    item_list = []
    with open(datafile,'r') as tsvfile:
        reader = csv.DictReader(tsvfile,delimiter='\t')
        for i, line in enumerate(reader):
            print line
            data = {}
            data['type'] = 'Feature'
            data['id'] = i
            data['properties']={'title': line['Movie Title'],
                               'description': line['Amenities'],
                               'date': line['Date']}
            data['name'] = {line['Location']}
            data['geometry'] = {'type':'Point',
                               'coordinates':(line['Lat'], line['Lng'])}
            item_list.append(data)
        for point in item_list:
            geo_map.setdefault('features', []).append(point)
        with open("thedamngeojson.geojson", 'w') as f:
            f.write(json.dumps(geo_map))

create_map('MovieParksGeocode2.tsv')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM