2017-02-22 18 views
0

Я переделал этот подход, но до сих пор не работал. На этот раз у меня есть рабочий пример, который очень короток и иллюстрирует проблему прекрасно:Фильтр по точкам в многоугольнике и возвращении ID округа/Название

https://bl.ocks.org/diggetybo/raw/6d35e5ecd17992650d0a23896e649b25/

В приведенном выше блоке вы увидите карту графств. Кроме того, у меня есть пользовательские входы для широты и долготы, например:

var lat = d3.select('#lat_input').node(); 

var long = d3.select('#long_input').node(); 

Эти координаты могут быть в любом месте США. Я хочу создать функцию, которая запрашивает входные координаты пользователя и возвращает идентификатор FIPS в округе.

var containing_county = us.objects.counties.geometries.filter(function(polygon) { 
     return d3.polygonContains(polygon, [long.value, lat.value]); 
    }); 
    console.log(containing_county) 
}); 

Однако она не фильтрует так, как я бы ожидать, что это, он говорит, не может прочитать свойство 0 из неопределенными.

Что нужно делать по-другому здесь?

также попытался:

var containing_county = topojson.feature(us, us.objects.counties).features.filter(function(d) { 
return d3.polygonContains(d.geometry, [long.value, lat.value]); 
    }); 
+0

Не могли бы вы предоставить рабочий пример? – elias

+0

наконец-то добрался до рабочего примера. –

+0

вы все еще передаете параметр MultiPolygon вместо ожидаемого Polygon. – elias

ответ

1

Я проверил данные, которые вы связаны между собой.
Элемент 0 объектов.counties.geometries не относится к типу «Многоугольник», а «MultiPolygon».
Первый параметр d3.polygonContains ожидает многоугольник и не может обрабатывать мультиполигоны. Возможно, вы должны использовать разные методы для разных геометрий.

+0

Ты был единственным, кто застрял со мной на этом. Поэтому я думаю, что ты заработал это. Хотя ваш ответ имеет смысл сейчас, он отменил выполнение следующего запроса, чтобы вернуть объект, содержащий идентификатор FIPS: 'var contains_county = mapData.filter (function (polygon) { if (polygon.geometry! == null) { return d3 .polygonContains (polygon.geometry.coordinates [0], [long.value, lat.value]), поэтому мне пришлось добавить функцию координат, а затем разрезать ее на нуль. –

+0

@ArashHowaida, это решило вашу проблему? он работает сейчас? – elias

+0

Да, строка кода в комментарии выше сделала это для меня. Ключ был нарезкой в ​​0 и добавлением '.coordinates', ни один из которых я ранее не делал. –