Ответ 1
Простейший вариант, если вы специально относитесь к проекции, состоит в том, чтобы просто использовать проекцию, предоставленную шейп файлом (Lambert Conformal Conic). Используйте topojson s --width и --height флаги командной строки для масштабирования проецируемого шейп файла до разумного размера. Например, если вы хотите что-то шириной 960 пикселей, вы можете сказать:
topojson --width=960 --margin 20 --simplify=.1 -o mx.json -- municipalities.shp
(Это также удобно упрощает в экранных координатах.)
Полный пример с Makefile находится в bl.ocks.org/9265467:
Если, с другой стороны, вы хотите указать свою собственную проекцию, тогда разумно использовать ogr2ogr для отмены проекции, а затем определить проекцию в браузере. Но в этом случае вы хотите точно указать параметры проецирования. Например, чтобы воссоздать одну и ту же проекцию в браузере, вы можете сказать:
var projection = d3.geo.conicConformal()
.rotate([102, 0])
.center([0, 24])
.parallels([17.5, 29.5])
.scale(1850)
.translate([width / 2, height / 2]);
(Скрипт с центром и шкалой, как вам нравится, чтобы соответствовать вашему желаемому окну просмотра.) Этот альтернативный подход демонстрируется на bl.ocks.org/9265674:
Обычно я предпочитаю использовать проецируемые координаты (первый подход, выше), поскольку они быстрее визуализируются и упрощение является более эффективным. С другой стороны, если вы хотите динамически изменить проекцию - по общему признанию, маловероятно с таким сложным шейп файлом, то проецирование в браузере - путь. И проецирование в браузере приятно во время разработки, потому что его легче изменить параметры и перезагрузить.