2015-05-22 52 views
0

試圖將地理編碼的TSV文件轉換爲JSON格式,但我遇到了問題。下面的代碼:在Python中,試圖將地理編碼的tsv文件轉換爲geojson格式

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的領域?

的文件,我從閱讀具有值這些項下:地點電影標題日期設施緯度LNG

的文件是可見的位置:https://github.com/yongcho822/Movies-in-the-park/blob/master/MovieParksGeocodeTest.tsv

謝謝你們,非常感謝一如既往。

+0

是什麼在你的數據文件嗎? – Ajay

+0

你必須在Python中做到這一點嗎?如果沒有,你可以使用ogr2​​ogr。 – tdihp

+0

這是我的數據文件@Ajay https://github.com/yongcho822/Movies-in-the-park/blob/master/MovieParksGeocode2.tsv – SpicyClubSauce

回答

1

這裏有幾件事情需要修復。

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.You不需要geojson模塊傾倒了JSON - 這是所有GeoJSON的是。只需要import json

3.You試圖讀取TSV,但不包括被需要的delimiter=\t選項。

4.您正試圖從行中讀取關鍵字,但您沒有使用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') 
+0

感謝轉換爲偉大的修訂格式之間的地理空間數據!雖然我很好奇,但我完全基於我之前做過的walk-thru模型來編寫我的json'字段'/鍵。無法找到一個正確的JSON格式'領域'指南..我正在做的與數據['屬性'],數據['名稱']等? – SpicyClubSauce

+0

不完全...我建議閱讀官方GeoJSON規範http://geojson.org/geojson-spec.html。 – snkashis

+0

傳遞格式正確的TSV文件後我與你的腳本得到的錯誤是 '類型錯誤:集([「Edgebrook公園,芝加哥」])是不是JSON serializable.'我放在'權之前打印item_list' 'geo_map.setdefault('features',[])。append(point)'和item_list打印出來都很好,所以我必須確定錯誤來自後一行。 – SpicyClubSauce