[英]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.