Korzystam z ArcGIS 10.2 dla komputerów stacjonarnych i przeglądałem tę stronę i wydaje mi się, że nie mogę jeszcze znaleźć odpowiedzi. Nowość w VBA i Python, ale wiele lat w ArcGIS. Wiem, że mogę to zrobić powoli, korzystając z opcji Wybierz według atrybutów, ale jest to czasochłonne.
Próbuję połączyć przestrzennie przypadki choroby (warstwa punktów) i US Census Tracts (warstwa wielokąta). Wymaga to danych zliczających. Dla każdego punktu / sprawy mam pole o nazwie ROK z zakresami dat od 2001 do 2012 w zależności od roku, w którym sprawa się wydarzyła. Potrzebuję kolumny zliczającej na każdy rok. Na przykład pierwszy dzwonię do COUNT01. Jeśli datą sprawy w ROKU jest rok 2001, wówczas COUNT01 będzie miał 1. Jeśli to będzie jakikolwiek inny rok (2002-2012), wtedy będzie musiało być 0. Będę miał COUNT02, COUNT03 ... COUNT12 kolumn. Nie może mieć wartości „Null”.
Oto, co próbowałem do tej pory
A oto jak wyglądają dane w Arc.
vba
ivbscript
znaczniki zpython
tagiem. Mimo że VBScript nie został jeszcze usunięty, jest on przestarzały . Oczekuję, że będzie to łatwe w przypadku parsera Python, gdy podasz bardziej szczegółowy opis, który zawiera obraz / tabelę niektórych przykładowych wierszy pokazujących rzeczywiste dane wejściowe i oczekiwane dane wyjściowe. Czy ROK jest polem daty lub polem całkowitym zawierającym wartości odpowiadające latom?Odpowiedzi:
Myślę, że tego właśnie chcesz .... używając Pythona możesz wykonać następujące czynności (zakłada się, że pola YEAR i COUNT0X są liczbami całkowitymi)
Uwaga: Python używa wcięcia do parsowania kodu, więc upewnij się, że odstępy są prawidłowe.
źródło
if (int(year) == yearVal):
lub inne (patrz: informit.com/articles/article.aspx?p=459269&seqNum=7 ).Ta odpowiedź jest zasadniczo taka sama, jak wymieniona powyżej, jednak jest to sposób, aby nie musieć używać bloku kodu ... dla pola Count01 ustawiłbyś parser na Python, a następnie ustawiłeś swoje obliczenia na
Sposób ten brzmi: Ustaw pole na 1, jeśli pole ROK to 2001, jeśli nie jest 2001, a następnie ustaw je na 0 ...
Jeśli masz wiele warunków if, możesz zagnieździć drugi (i kolejne) warunki „if” w instrukcji else, takie jak ten ...
Sposób ten brzmi: Ustaw pole na 1, jeśli pole ROK to 2001, jeśli nie jest 2001, a następnie ustaw je na 2, jeśli to 2002, jeśli nie, a następnie ustaw na 0 ...
źródło
1 if !YEAR! == 2001 else (2 if !YEAR! == 2002 else (3 if !YEAR! == 2003 else 0))
Jeśli zamierzasz używać VBScript, to obliczenia pola były niepoprawne. Po pierwsze, nie użyłbym zmiennej, która jest nazwą pola, to jest mylące, użyj innej nazwy, aby było jasne, co ustawiłeś. Twój „endif” był niepoprawny, powinien to być „end if”, a twój kod powinien znajdować się w sekcji skryptu pre-logicznego. Prawidłowy sposób skonfigurowania tego pokazano poniżej. Ale, jak powiedzieli inni, staraj się nie używać VBScript, ponieważ ESRI są bardzo zainteresowani pozbyciem się go na rzecz Pythona.
źródło