2017-12-06 2 views
1

그래서이 튜토리얼 https://bl.ocks.org/mbostock/4060606을 따라 왔습니다. 직접 코드를 복사하여 붙여 넣기 만하면이 기능을 실제로 사용할 수 있습니다. 그러나 나는 똑같은 일을하고 싶지만 온 나라보다는 주 차원에서하고 싶다. 그래서 인구 조사국 웹 사이트에 가서 Missoui 카운티의 셰이프 파일을 다운로드했지만 Mike 's TopoJSON 파일을 재생하는 데 어려움이 있습니다. 실제로 TopoJSON을 사용하여 며칠간 작업을 해왔지만 사용 된 모든 예제는 더 이상 지원되지 않는 topojson 명령 줄 도구를 사용합니다. 그것이 더 이상 존재하지 않기 때문에, 나는 동일한 TopoJSON 형식으로 생성하는 방법을 스스로 찾아야했지만 행운은 없었습니다. 셰이프 파일을 Mike가이 튜토리얼에서 사용하는 것과 동일한 TopoJSON 형식으로 가져올 수는 없습니다.D3의 Choropleth 예제와 함께 사용하는 TopoJSON 생성에 문제가 발생했습니다.

여기 내가 어떻게 해왔 는가. 이 웹 사이트 https://www.census.gov/geo/maps-data/data/cbf/cbf_counties.html에서 Shapefile을 얻고 Census 2000 탭으로 이동합니다 (이 웹 사이트에서 미주리에만 카운티를 부여하는 방법을 모르기 때문에). 그런 다음 Missouri를 선택하고 다운로드합니다. 그런 다음 다운로드 한 파일의 압축을 푼 다음 .shp.dbf 파일을 별도의 폴더로 이동하십시오. 그리고 나는 GeoJSON 파일을 생성하기 위해이 명령을 실행 : 나는 마이크의 TopoJSON 파일로 내 TopoJSON 파일의 형식을 비교하면 TopoJSON 파일

geo2topo missouri_geo.json > missouri_topo.json 

를 만들기 위해 다음이 명령을

shp2json c029_d00 -o missouri_geo.json 

을, 그들은 친절 비슷한,하지만 내 TopoJSON 파일에 서식이없는 것 같습니다. 나는 파일이 Missouri의 Shapefile에서 만들어 졌기 때문에 이미 데이터가 누락되었음을 알았지 만, TopoJSON 파일에는 카운티의 FIPS 코드가 포함 된 'id'속성과 같은 속성이있을 것이라고 생각했지만 파일에는 없습니다. Shapefile을 자신의 예제에서 Mike의 코드와 함께 사용할 수있는 TopoJSON 파일로 변환하는 과정을 이해하고 싶습니다.하지만이를 이해하지 못하는 것 같습니다.

참고 내 javascript 및 html 코드는 그의 예에서 Mike와 정확히 동일합니다. 내 TopoJSON 파일에서 "objects":{ 이후의 행을 "counties"으로 변경하여 자바 스크립트 코드 us.objects.counties의 행과 일치시킵니다. 코드를 실행하고 검사 할 때 오류는 발생하지 않지만 아무 것도 표시되지 않습니다. 브라우저에서 아무 것도 볼 수 없습니다.

도움을 주시면 감사하겠습니다.

답변

1

단일 상태에 대해이지도를 복제 할 때 몇 가지 잠재적 인 문제가 있으며 그 중 일부를 실행 한 것으로 보입니다. 당신은 당신이 가지고있는 것보다 더 많은 것을 벗어나야합니다.


먼저 위도 경도 쌍으로 구성되어 다운로드되는 지역 데이터 - 예에서 사용하는 지리 데이터는 그는 960x600 직교 평면에 맞게 크기가된다 topojson 미리 투영이다. 데이터를 사전 계획하거나 (command line cartography part 1과 유사) geoPath 및 geoProjection을 사용하여 블록 내에서 데이터를 신속하게 투영해야합니다. Mike는 geoProjection을 geoPath의 기본 geoProjection 인 null geoProjection이라는 블록에서 사용합니다. null 투영은 단순히 json에서 좌표를 가져 와서 변환없이 svg 좌표로 사용합니다.

투영 문제는 기능이나 오류를 볼 수없는 가장 일반적인 원인 일 수 있습니다. 프로젝션을 지정하지 않았으므로이 기능은 화면에서 렌더링 될 가능성이 큽니다. 미국 대륙이 서반구에 위치하기 때문에 경도 값은 부정적입니다. 즉, 널 프로젝션을 사용하기 때문에 미국은 원산지의 왼쪽 즉 화면에서 벗어납니다.

내가 내 TopoJSON 파일은 'ID'와 같은 에 FIPS을 포함 속성 속성을 가질 것이라고 생각 :


당신을위한 두 번째 잠재적 인 문제는 데이터가 예를 들어 다른 특성을 가지고 있다는 것입니다

"properties":{"AREA":0.140669542963654, 
"PERIMETER":1.69104063251173, 
"CO29_D00_":2, 
"CO29_D00_I":1, 
"STATE":"29", 
"COUNTY":"045", 
"NAME":"Clark", 
"LSAD":"06", 
"LSAD_TRANS":"County"}} 
: 카운티

당신의 topojson의 특징 속성에 대한 코드

는 Shape 파일에서 파생됩니다 :

당신은 마이크가 아닌 다른 소스를 사용하고 있기 때문에

enter image description here

, 데이터의 속성은 다를 수 있습니다. 출처에는 FIPS ID가 없으므로이 예에서와 같이 지리적이지 않은 데이터와 지리적 기능을 조인 할 수 없습니다.

  • 데이터에서 FIPS 코드를 작성하면 NOAA에서

이 있습니까 (가장 간결한 정의는 내가 발견) :

그러나, 너무 어려운 솔루션이있다 처음 두 자리는 주를위한 것이며 마지막 세 자리는 카운티 또는 카운티 상당을 나타냅니다. 따라서 각 주에는 자체 2 자리 숫자가 있으며 주 내의 각 카운티에는 고유 한 3 자리 숫자가 있으며 5 자리 숫자로 결합되어 모든 미국 카운티를 고유하게 식별합니다. (source)

주 및 카운티를 나타내는 번호가 있습니다. 귀하의 FIPS 카운티 코드를 조합 할 때 이것이 안전한 방법 일 것입니다.

var features = topojson.feature(us, us.objects.counties).features; 
features.forEach(function(d) { 
    d.FIPS = "" + d.properties.STATE + d.properties.COUNTY; 
}) 

또는 기능을 채울 때 당신은 문자열과 군을 연결할 수 있습니다 : 당신은 단지 geojson 기능을 그리기 전에 새 속성을 만들 수, 지리적/topojson을 만드는 그들을 결합 할 수

.attr("fill", function(d) { return color(d.rate = unemployment.get(
""+d.properties.STATE+d.properties.COUNTY)); }) 

Here's 어떻게 생겼는지.

+0

철저히 대답 해 주셔서 감사합니다. 분명히, 나는 이것에 아주 새롭다, 그래서 나가 geoProjection 생성에 찾아낸 많은 정보가 이것을 처음으로 시도 할 때 나의 머리에 갔다. 하지만 마이크가 지오 프로 젝션을 사용하여 그가 원하는 방식으로 토포를 얻는 방법을보기 시작했습니다. – Michael

+0

이 질문을 게시 한 직후 실제로 [명령 줄 작성법 자습서] (https://medium.com/@mbostock/command-line-cartography-part-1-897aa8f8ca2c)를 발견했으며이 링크 [링크 ] (https://github.com/veltman/d3-stateplane/blob/master/README.md#nad83--illinois-east-epsg26971) 미주리 주에서 geoProjection을 생성하는 데 사용한 방법입니다. topoJSON 파일을 생성하고 캐릭터를 채우고 문자열과 카운티를 연결 한 후 이제 미주리의 실업 데이터를 볼 수 있습니다. 정말 고마워요. 정말 도움이 됐어요. – Michael

+0

도와 드릴 수있어서 기쁩니다. –

관련 문제