在 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')
我在 data['properties']
行上得到一个 TypeError:list indices must be integers, not str
但我不明白,这不是我为 geoJSON 字段设置值的方式吗?
我正在阅读的文件在这些键下有值:位置电影标题日期便利设施经纬度
可在此处查看文件:https://github.com/yongcho822/Movies-in-the-park/blob/master/MovieParksGeocodeTest.tsv
谢谢大家,一如既往的感激。
您这里有几件事情需要解决。
1.Your 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.You 不需要 geojson
模块来转储 JSON - 这就是 GeoJSON 的全部。只是 import json
而不是。
3.You 正在尝试读取 TSV,但您没有包含为此所需的 delimiter=\t
选项。
4.You 正在尝试从行中读取键,但您没有使用 DictReader
这样做是为了 you.Hence 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')
正在尝试将经过地理编码的 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')
我在 data['properties']
行上得到一个 TypeError:list indices must be integers, not str
但我不明白,这不是我为 geoJSON 字段设置值的方式吗?
我正在阅读的文件在这些键下有值:位置电影标题日期便利设施经纬度
可在此处查看文件:https://github.com/yongcho822/Movies-in-the-park/blob/master/MovieParksGeocodeTest.tsv
谢谢大家,一如既往的感激。
您这里有几件事情需要解决。
1.Your 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.You 不需要 geojson
模块来转储 JSON - 这就是 GeoJSON 的全部。只是 import json
而不是。
3.You 正在尝试读取 TSV,但您没有包含为此所需的 delimiter=\t
选项。
4.You 正在尝试从行中读取键,但您没有使用 DictReader
这样做是为了 you.Hence 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')